Está en la página 1de 47

El Lenguaje Visual Basic

Operaciones y funciones
Programación I
Ing. Luis Reyes
Objetivos

• Veremos en las siguientes diapositivas algunos


conceptos sobre operaciones básica y funciones
predefinas.
• Los controles para el manejo de datos.
• Tendremos una visión general del lenguaje y su
utilización
• Se mostrarán algunos ejemplos utilizando la
sintaxis básica de visual basic.
• Y un panorama general del acceso a una base de
datos.

Todo esto será visto poco a poco durante el


transcurso del resto del ciclo.
Conceptos básicos.

• Reglas de codificación:
– División de una instrucción en varias líneas. ( _ )
– Combinar varias instrucciones en una línea. ( : )
– Agregar comentarios al código. ( „ )

• Sistemas de numeración:
– Decimal.
– Hexadecimal. ( &H )
– Octal. ( &O )
Convenios de nomenclatura para variables.

• Comenzar por una letra


• Longitud menor de 256 caracteres
• Nombres descriptivos
• Comenzar con mayúscula
• No utilizar nombres claves como nombre de
variables
• Comenzar con abreviatura del tipo de la variable,
cuando se trata de objetos
Tipos de Datos predefinidos
Booleana (2) Admite los valores 0 y 1, o True y False
Byte (1) Números enteros, en el rango de 0 a 255
Integer (2) % Enteros en el rango de -32768 a 32767
Long (4) & Enteros de -2147483648 a 2147483647
Single (4) ! Punto flotante, simple precisión
Double (8) # Punto flotante, doble precisión.
Currency (8) @ Entero punto decimal fijo (Típico de monedas)
String (*) $ Cadenas alfanuméricas
Date (8) Fechas
Object (4) Referencia a objetos
Variant (**) Otros tipos de datos
Declaraciones de variables y constantes

Tipos de declaraciones de variables


Dim:
Private:
Public:
Global:
Static:

• Constantes:
– Const
• Error en la declaración de variables:
– Dim var1, var2, ... ,varN As Integer
Funciones de conversión de tipos de datos:
Cbool  Boolean
Cbyte  Byte
Ccur  Currency
Cdate  Date
CDbl  Double
Cint  Integer
CLng  Long
CSng  Single
CStr  String
Cvar  Variant
CVErr  Error
!! Cuidado al tratar de convertir contenidos de cajas de texto a
números y éstas están vacías ¡¡
Operadores aritméticos:

+ Suma
- Resta
* Multiplicación
/ División decimal
\ Cociente de una división entera
Mod Resto de una división entera
^ Potencia
Operadores Lógicos
And Función AND A=True y B=True Cualquier otro caso
Or Función OR A=True o B=True A=False y B=False
Xor Función XOR A=True y B=False A=True y B=True
A=False y B=True A=False y B=False
Eqv F. Equivalente A=True y B=True A=True y B=False
A=False y B=False A=False y B=True
Imp Implicación A=True y B=True A=True y B=False
A=False y B=True
A=False y B=False
Not Negación A=False A=True
Like Igualdad A=True A=False
Funciones matemáticas.
Cint Devuelve la parte entera de un número con decimales
Abs Devuelve el valor absoluto de un número
Sgn Devuelve el signo de un número
Sqr Devuelve la raíz cuadrada de un número
Exp Devuelve el número elevado al exponente indicado
Log Devuelve el logaritmo natural de ese número
Timer Devuelve el tiempo (sg) que ha pasado desde las 12 de la noche
Sin Devuelve el valor del seno de un ángulo
Cos Devuelve el coseno de un ángulo
Tan Devuelve la tangente de un ángulo
Atn Devuelve un arco cuya tangente sea el número

!! Cuidado las funciones trigonométricas operan con radianes ¡¡


Funciones trigonométricas derivadas
Secante Sec(X) = 1 / Cos(X)
Cosecante Cosec(X) = 1 / Sin(X)
Cotangente Cotan(X) = 1 / Tan(X)
Seno -1 Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Coseno -1 Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Secante -1 Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Cosecante -1 Arccosec(X) = Atn(X / Sqr(X * X – 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Cotangente -1 Arccotan(X) = Atn(X) + 2 * Atn(1)

!! No existe una constante que represente el número pi, pero se calcula fácilmente
como 4 * Atn(1) ¡¡
Funciones trigonométricas hiperbólicas
Seno hiperbólico HSin(X) = (Exp(X) – Exp(–X)) / 2
Coseno hiperbólico HCos(X) = (Exp(X) + Exp(–X)) / 2
Tangente hiperbólica HTan(X) = (Exp(X) – Exp(–X)) / (Exp(X) + Exp(–X))
Secante hiperbólica HSec(X) = 2 / (Exp(X) + Exp(–X))
Cosecante hiperbólica HCosec(X) = 2 / (Exp(X) – Exp(–X))
Cotangente hiperbólica HCotan(X) = (Exp(X) + Exp(–X)) / (Exp(X) – Exp(–X))
Seno hiperbólico -1 HArcsin(X) = Log(X + Sqr(X * X + 1))
Coseno hiperbólico -1 HArccos(X) = Log(X + Sqr(X * X – 1))
Tangente hiperbólica -1 HArctan(X) = Log((1 + X) / (1 – X)) / 2
Secante hiperbólica -1 HArcsec(X) = Log((Sqr(–X * X + 1) + 1) / X)
Cosecante hiperbólica -1 HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Cotangente hiperbólica -1 HArccotan(X) = Log((X + 1) / (X – 1)) / 2

!! Recuerda la regla de los logaritmos ¡¡


Logaritmo en base N LogN(X) = Log(X) / Log(N)
Operaciones con fechas
Date Devuelve la fecha de hoy. Esta fecha la toma del reloj del ordenador
Time Devuelve la hora actual
Now Devuelve la fecha y hora actual.
WeekDay Devuelve el día de la semana (En número, 1=Domingo, 2=Lunes,...)
Day Obtiene el día, a partir de una fecha
Month Obtiene el mes a partir de una fecha
Year Obtiene el año a partir de una fecha
Hour Obtiene la hora a partir de una hora
Minute Obtiene el minuto a partir de una hora
Second Obtiene el segundo a partir de una hora
DateAdd Añade un intervalo de tiempo a una fecha
DateDiff Obtiene el intervalo de tiempo entre dos fechas
DatePart Devuelve una parte de una fecha (semana, trimestre, etc.)
DateSerial Compone una fecha a partir de parámetros relativos
TimeSerial Compone una hora a partir de parámetros relativos
DateValue Devuelve una fecha a partir de un dato que se le parezca y
que VB pueda obtener de él una fecha válida
Funciones de manejo de cadenas de caracteres.
Str() Val()
Left(s,l) Rigth(s,l)
Mid(s, i[, l]) Lcase()
Ucase() Len()
LenB() String(nº,carácter_repetir)
Space(l) Ltrim()
Rtrim() InStr([i, ]s1, s2[, c])
InStrRev(s1, s2[, i[, c]]) StrComp(s1, s2[, c])
Split(s[, delimitador[, contar[, comparar]]])

S: Cadena de texto
C: modo comparación texto
L: longitud
Sentencias de control

Condicionales:
If <condición> Then If <condición> Then Select Case var
.... .... Case 1
End If Elseif <condición> Then ...
Case Is ( operador) xx
.... ....
If <condición> Then Elseif <condición> Then Case 2
.... .... ...
Else Else Case xx To xx
.... .... ....
Case N
End If End If ....
Case Else
....
End Select
Ejemplo de utilización de las sentencias if else

• Determinar si un punto definido por sus


coordenadas en el plano (x,y) pertenece a un
círculo definido por su centro (xc,yc) y su radio

Dim x As Double, y As Double


Dim xc As Double, yc As Double, radio As Double
Dim DisCentro As Double
DisCentro = sqrt ( (x – xc)^2 + (y –yc)^2)
If DisCentro <= radio Then
msgbox “El punto pertenece al círculo”
Else
msgbox “El punto no pertenece al círculo”
End If
Ejemplo de utilización condicionales simples
• Se trata de calcular el área de un triángulo
conocidos sus tres lados. ( fórmula de Heron)
Sup = sqr( sp * (sp – a) * (sp – b) * (sp – c))
donde sp = Semiperímetro = (a + b + c)/2
Posible problema: El triángulo no esté definido
Se dará si sp < a ó sp < b ó sp < c
Dim a As Double, b As Double, c As Double, sp As Double, sup As Double
sp = ( a + b + c ) /2
If sp > a And sp > b And sp > c Then
sup = sqr( sp * (sp – a) * (sp – b) * (sp – c))
msgbox “ La superficie del triángulo es “ & sup
Else
msgbox “ El triángulo no existe”
End If
Ej. de utilización de if else con múltiples condiciones

• Se pretende determinar si un punto en el plano


pertenece a una región rectangular paralela a los
ejes cartesianos. Se conoce las coordenadas del
punto y las coordenadas mínimas y máximas de la
región en los dos ejes

Dim x As Double, y As Double


Dim xmax As Double, xmin As Double, ymin As Double, ymax As Double

If x >= xmin And x <= xmax And y >= ymin And y <= ymax Then
msgbox “El punto pertenece a la región”
Else
msgbox “El punto no pertenece a la región”
End If
Ejemplo de utilización de If Else anidados
• Se trata de mostrar un mensaje indicando a banda
del espectro electromagnético pertenece una
determinada longitud de onda l expresado en mm

Dim l as Single
If l < 0.3 Then
msgbox “Pertenece al Ultravioleta”
ElseIf l < 0.4 Then
msgbox “Pertenece al Azul”
ElseIf l < 0.5 Then
msgbox “Pertenece al Verde”
ElseIf l < 0.6 Then
msgbox “Pertenece al Rojo”
Else
msgbox “Pertenece al InfraRojo”
End If
Ejemplo de utilización de Select Case

• Se trata de diferenciar una operación matemática


en función del contenido de una variable de tipo
cadena de caracteres, para simular una calculadora
con las funciones + - * /
Dim Operando1 As Double, Operando2 As Double, Resultado As Double
Dim Operación As String
Select case (Operación)
Case “+” : Resultado = Operando1 + Operando2 : break;
Case “-” : Resultado = Operando1 - Operando2 : break;
Case “*” : Resultado = Operando1 * Operando2 : break;
Case “/” : Resultado = Operando1 / Operando2 : break;
Case Else : msgbox “La operación no está definida”
End Select
Sentencias de Control

Repeticiones:

Do While <condición > Do While <condición>


.... .... ....
Loop Loop While <condición > Wend

Exit Do

Do Until <condición > Do


.... ....
Loop Loop Until <condición >

For Each elemento In grupo For <cond inicial > To <cond final > Step ...
..... .....
Next elemento Next ...

Exit For
Ejemplos con las sentencias repetitivas

• Algoritmo que genere los número impares entre el


1 y el 15, mostrándolo mediante una ventana de
mensajes

Dim i As Integer
Valores de i
1
For i = 1 To 15 Step 2
3
Msgbox i
5
Next i
7
9
11
13
15
Ejemplos de sentencias repetitivas.
• Calcular la suma de los • Calcular el producto de los
números 3 al 15 números 2 al 15

Dim i As Integer Dim i As Integer


Dim Sum As Long Dim Prod As Long
„ Se inicializa la variable a 0 „ Se inicializa la variable a 1
Sum = 0 Prod = 1
For i = 3 To 15 For i = 2 To 15
Sum = Sum + i Prod = Prod * i
Next i Next i
Ejemplo de utilización de sentencias repetitivas
• Se pretende determinar si un número es primo o no
• Consideraciones prácticas: Un número será primo si no es divisible
por los números inferiores a él. Hay que probar si es divisible por 2,
3, ... Hasta llegar a el propio valor o por el contrario si se puede
dividir por uno de estos números inferiores no es primo (es
divisible). Se utiliza la operación resto de división entera para saber
si es divisible o no
Dim Num As Integer, i As Integer
For i = 2 To Num
If (Num Mod i) = 0 Then Exit For
Next i
If i = Num Then
msgbox “El número “ & Num & “ es primo”
Else
msgbox “El número “ & Num & “ no es primo es divisible por “ & i
End If
Medidas repetidas. Valor más probable y Tolerancias.

• Se trata de construir el programa que determine


la medida más probable de modo que se eliminen
las medidas que superen el umbral de tolerancias
de 2,5 veces el error cuadrático medio. El proceso
se repetirá hasta que todas las medidas estén
dentro de este rango
Matrices
• Creación:
– Dim matriz( N , M, ...., L ) As tipo
• Establecer límites inferior y superior.
– Dim matriz( x To y, z to w) As tipo
• Conocer límites:
– Lbound() , Ubound()
• Redimensionar matrices.
– Redim matriz( , ..., )...
• Redimensionar preservando valores.
– Redim preserve matriz ( ,.., )...
• Definir primer índice de una matriz
– Option base {0 | 1 }
Ejemplo de utilización de matrices numéricas
• Se trata de construir un algoritmo que cree una matriz de números
reales, pida los valores mediante la llamada a la función inputbox, y
calcule la media de los valores almacenados, y también su varianza.
Estos dos datos deben ser mostrados en pantalla

Dim Num(10) As Double,Media As Double, Varianza As Double


Dim i As Integer
Media = 0 : Varianza = 0
For i=0 To 10
Num(i) = CDbl(inputbox(“Introduzca el valor “ & i ))
Media = Media + Num(i)
Next i
Media = Media / 10
For i = 0 To 10
Varianza = Varianza + (Media – Num(i))^2)
Next i
Varianza = Varianza / 10
msgbox “La media = “ & Media & “ y la Varianza = “ & Varianza
Ejemplo de utilización de matrices bidimensionales
con bucles anidados
• Se trata de rellenar una matriz bidimensional de 3
filas * 3 columnas con datos procedentes de
teclado

Option Base 1
Dim Mat(3,3) As Double
Dim i As Integer, j As Integer
For i = 1 To 3
For j = 1 To 3
Mat(i,j) = CDbl(inputbox “Dato(“ & i & “,” & j & “)
Next j
Next i
Ejemplo Bucle For (Area de un polígono conocidas las
coordenadas de los vértices)
• Si se dispone de las coordenadas ordenadas de los
vértices de un polígono se puede calcular la
superficie del mismo con la fórmula de Simpson
• Sean Xi e Yi las coordenadas cartesianas del
vértice i-ésimo

Sup = 0.5 * Si ( X i+1 – Xi) * (Y i+1 + Yi)

• Nota: Téngase en cuenta que el último punto debe


cerrar con el primero
Función InputBox

• La sintaxis de la función es:


InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context])

Retorna el valor textual que el usuario ha suministrador por la caja


de texto de la ventana
Se puede convertir al formato adecuado para almacenarlo en la
variable correspondiente

Ejemplo:

N = Cint(InputBox("¿Cuantas distancias?", "Nº observaciones"))


Matrices de controles
• Las matrices de controles permiten agrupar los nombres de
los elementos de la interfaz gráfica de usuario en forma de
matriz para poder gestionarlos más cómodamente en el
código. Tiene sentido utilizar las matrices de controles
cuando lo que se debe ejecutar como consecuencia de un
evento sobre el mismo es similar o se puede adaptar en
función del número asociado a la fila del control.
• Ejemplo: los números de una calculadora.
Se puede crear una matriz de controles
de tipo command Boton llamada Num()
de forma que el índice sea el valor numérico
del botón gráfico.
Cuando se produzca el evento click, al ser una matriz
de controles se dispondrá de dicho índice y se podrá
añadir al display el dígito seleccionado
Carga/descarga dinámica de controles (en matrices).
• Una ventaja adicional a la hora de utilizar matrices
de controles es que se puede tener un número
variable de ellos cargados y/o visibles.
• Cuando se desea cargar un nuevo elemento de la
matriz de controles se utiliza la instrucción Load, y
para descargarlo la instrucción Unload.
• Ejemplo de carga de 10 controles de tipo TextBox
cuyo primer elemento ya está definido.
Dim i As Integer
For i = 1 To 10
Load MatTextBox(i)
Next i

Inconveniente: Se crea con las mismas propiedades que el primero


existente.
Matrices de controles. Otro ejemplo.
• Se trata de construir una calculadora matricial básica con las
operaciones + - * y Traspuesta. Se desea que pueda manejar
matrices de números compatibles para dichas operaciones,
pero que pueda ser variable en cuanto al número de
elementos de cada dimensión.
Definición de nuevos tipos de datos
• Objetivo: Agrupar bajo un tipo de dato un conjunto
de información que no es homogénea.
• Se define el prototipo de registro que contendrá
los nombres de los campos y los tipos de los
mismos.
Type <nombre_tipo >
<campo > As <tipo_campo >
<campo > As <tipo_campo >
End Type
Declaración de variable
Dim Director As Empleado
Uso de un campo de la variable
Director.Nombre = “Juan Luis”
Ejemplo de Tipos de datos definidos por usuario con
matrices.
• Se pretende mantener en memoria una
agenda con las notas de los alumnos de
primer curso de Topografía. Se tiene
que almacenar el Nombre y los
Apellidos del alumno, su Dni y las
calificaciones de las 7 asignaturas de
primer curso, junto con la calificación
media de las mismas.
• Se podrá redimensionar la matriz que
contiene los datos manteniendo la
información de la misma, y según se
desplace por la matriz se mostrarán los
datos actuales almacenándose los que
se estaban mostrando anteriormente.
Convenios para los menús

• Títulos cortos.
• Asignar tecla de método abreviado.
• Si se trata de interruptor mostrar marca de
verificación.
• Mostrar (....) si hace falta intervención.
• Utilizar prefijo mnu e Item.
Funciones y Procedimientos
• Objetivo: Modularidad.
• Función: Puede retornar resultados.
• Procedimiento: No retorna se usa con Call
• Función:
[Static][Private] Function nombre ([parámetros])[As tipo]
[sentencias]
[nombre = expresión]
[Exit Function] ..
End Function
• Procedimiento:
[Static][Private] Sub nombre ([parámetros])
[sentencias]
[Exit Sub] ..
End Sub
• Parámetros por valor ByVal , por referencia (defecto)
Controles ComboBox y ListBox

• Propiedades y métodos importantes:


– Text : Información mostrada como seleccionada.
– List(n) : Lista de elementos textuales.
– ListCount : Nº total de elementos de la lista.
– ListIndex: Posición seleccionada.
– AddItem: Permite añadir en tiempo de ejecución
elementos.
– RemoveItem: Permite eliminar en tiempo de ejecución
elementos.
– ItemData: Permite establecer un nº a cada fila de la lista.
– Evento Click. El más usado.
– Ejemplo uso: objeto.List(objeto.ListIndex)
Control CommondDialog
• Permite:
– Seleccionar nombres de archivos para Abrir y Guardar
información, Seleccionar colores y fuentes de textos así como
opciones de impresión y ayuda.
• Métodos:
– ShowOpen, ShowSave, ShowColor, ShowFont, ShowPrinter,
ShowHelp.
• Propiedades Ficheros:
– Filter, FilterIndex, FileName y DefaultExt.
• Propiedades Color:
– Flags y Color.
• Propiedades Texto:
– Color, FontName, FontItalic, FontUnderLine, FontSize...
• Impresoras:
– Copies, FromPage, ToPage, Orientation
Control Data

• Permite:
– Realizar una conexión con una base de datos.
– Recorrer una tabla seleccionada por medio de RecordSet.
Propiedades:
Caption.
Connect. Tipo de BD.
DatabaseName. Nombre de la BD.
ReadOnly. Determina los permisos sobre los datos.
RecordsetType. Selecciona entre Tabla, dynaset..
RecordSource: Establece la tabla de la BD.
RecordSet

• Consultar datos.
– BOF (principio), EOF (fin), RecordCount y NoMatch.

• Modificar registros.
– AddNew, Edit, Update, Delete.
• Moverse por la base de datos.
– MoveFirst, MoveNext, MovePrevious, MoveLast.
• Encontrar datos.
– FindFirst, FindLast, FindNext, FindPrevious.
Estructura de trabajo en Bases de datos:

DBEngine
WorSpaces() (prop .count, met .Append, .Delete, .Refresh)
WorkSpace.
Connections()
Groups()
Users()
DataBases().(propiedad .Count, método .Refresh)
Database
RecordSets(). -> Recordset. -> Fields
Tabledefs(). .Count-> TableDef. ->Fields, Indexes
Relations(). -> Relation. -> Fields
Querydefs(). ->QueryDef. -> Parameters, Fields
Containers(). -> Container. -> Document
WorkSpace

• Métodos:
– Close
– CreateDatabase
– CreateGroup
– CreateUser
– CreateConnection
– OpenDatabase
– Rollback
DataBase

• Métodos:
– Close
– CreateTableDef
– Execute
– NewPassword
– OpenRecordSet
RecordSet
• Propiedades: • Métodos:
– EOF – AddNew
– Filter – Clone
– Index – Close
– Name – Delete
– NoMatch – Edit
– RecordCount – FindFirst
– RecordStatus – Move
– Sort – GetRows
– Type – MoveFirst
– NextRecordSet
– OpenRecordSet
– Seel
– Update
Creación de una nueva base de datos.

• Conectar con un espacio de trabajo


– Set Ws =DBEngine.Workspaces(0)
• Crear base de datos.
– Set NewDB = Ws.CreateDatabase( nombre,lenguaje,,,)
• Crear Tabla (objeto TableDef, método CreateTableDef)
• Crear Campos tabla. (Objetos Field, método CreateField)
• Asignar campos a tabla. (método Append)
• Asignar tabla sobre base de datos. (método Append)
• ....
• Cerrar base de datos. (método Close)
Ejemplo
Dim NewDb As Database
Dim Ws As Workspace
Set Ws = DBEngine.Workspaces(0)
Set NewDb = Ws.CreateDatabase(CommonDialog1.FileName, dbLangGeneral)
Dim NewTb As TableDef
Set NewTb = NewDb.CreateTableDef("observaciones")
ReDim campo(1 To 7) As Field
Set campo(1) = NewTb.CreateField("Número estación", dbLong)
Set campo(2) = NewTb.CreateField("Número visado", dbLong)
...
Dim i As Byte
For i = 1 To 7
NewTb.Fields.Append campo(i)
Next i
NewDb.TableDefs.Append NewTb
NewDb.Close

También podría gustarte