Beruflich Dokumente
Kultur Dokumente
BASIC
APUNTES
Text2.text = variable
A continuación se muestra una tabla con los tipos de datos más utilizados en programación, su gasto
en bytes de memoria y los valores que puede almacenar.
Una variable es un valor que puede cambiar a lo largo de una aplicación; una constante es, sin
embargo, un valor que se mantiene fijo a lo largo de la aplicación. Para definir una constante se
emplea la siguiente sintaxis:
Const nombre = valor
Donde nombre es el “nombre” que queremos dar a la constante y valor es el “valor” que ha de tomar.
Const diasdelasemana = 7
DECLARACIÓN CON STATIC
Existe otra forma de declarar variables de forma que su valor “recuerde” el valor anterior entre dos
declaraciones de esa variable. Veamos un ejemplo:
Sub Main ()
Dim V As Byte
V = 24
Calcular (V)
Calcular (V)
End Sub
Cuando se llama por primera vez a “Calcular” V vale 24 y K vale 0 + 24 + 2 = 26. La segunda vez
que se llama al Sub, K recuerda su anterior valor y vale 26 + 24 + 2 = 52. Si K no fuese Static (Dim)
el valor de K la segunda vez sería 0 + 24 + 2 = 26, es decir, valdría lo mismo las dos veces
Dim a As Byte
Sub Main()
a = 10
End Sub
Cuando se declara la variable en la parte de arriba, antes del Main, entonces esa variable se puede
emplear en cualquier parte del módulo, dentro del sub Main o cualquier sub o function.
Veamos en qué lugares podría definir las variables y qué alcance tendrían:
1) Si defino una variable antes del Sub Main, puedo emplearla en todo el módulo del Sub Main.
2) Una variable definida dentro del Sub Main sólo se puede emplear dentro del Sub Main.
3) Cualquier variable definida dentro de un Sub o Function sólo afecta a ese Sub o Function.
No se pueden definir variables en los espacios que quedan entre los Subs Y Functions y el siguiente
Sub / Function.
Las variables pueden tener el mismo nombre y tipo siempre que no tengan el mismo alcance.
OPERADORES.
OPERADOR DESCRIPCIÓN
+ La suma de numeros o texto
- Resta valores
* Multiplicación
/ División
\ División de Enteros
Mod Resto de la división entera
^ Exponenciación
& Concatenación de caracteres
= Igual a...
< Menor que
> Mayor que
<> Distinto que
>= Mayor o igual
<= Menor o igual
AND Evalua varias condiciones si todas se cumplen
OR Evalua las condiciones si alguna se cumple
XOR Evalua condiciones a verdad si 1 y solo 1 es verdad
NOT Cambia algo verdadero a Falso
Los procedimientos son las unidades de código en el que podemos dividir nuestra aplicación. Se
reconocen 4 Tipos fundamentales que son Sub, Function, Property y Event.
En este curso sólo veremos las dos primeras.
Procedimientos SUB
Un procedimiento Sub es lo que se conoce generalmente como “Subrutina” es decir, una parte de un
código más grande.
Las palabras Public y Private, hacen referencia al ámbito del Sub, es decir si es de tipo general (lo
podemos “llamar” desde cualquier parte del código) o de tipo privado (sólo funcionará en la
Formulario en el que está escrito). Si no podemos Public o Private el ordenador entenderá que es
private.
“nombredelsub” es un nombre que creamos para nuestro Sub, es aconsejable que el nombre del sub
nos indique algo de lo que el Sub hace.
Los parámetros son datos que el Sub necesita para hacer sus cálculos, y esos datos, como tales
tiene un tipo de datos específico (como las poseían las variables).
Ahora si tuviéramos un botón de comando en el que, al hacer click quisiéramos llamar al Sub
creado, sólo tendríamos que indicar el nombre del Sub con el parámetro correspondiente.
Procedimientos Function.
Un procedimiento Function, es una función que nos devuelve un valor asociado a su nombre
La sintaxis de un function es la que sigue:
Public Function nombrefunction (parám1 as Tipo, parám2 as Tipo,...) As Tipo del Function.
Nombrefunction = valor
Instrucciones
End Function
Por similitud con los Sub podríamos pensar que son iguales, no obstante existen diferencias que
deben de ser apreciadas:
Aunque ambas tengan un ámbito de actuación (recordemos de Tipo Public o Private) las function
suelen ser generalmente de tipo Public.
Entre paréntesis definimos los tipos de parámetros que enviamos a la función así como su tipo de
datos. La difenrecia más notable que se aprecia es que, fuera del paréntesis, aparece otro AS Tipo
del Function.
Esto quiere decir que el Function, en sí mismo, debe de devolvernos un tipo de datos específico (una
fecha, un número, un texto...) esto se indica de esa forma.
Vamos a convertir el ejemplo de calcular la edad del Sub en un Function con la misma finalidad:
Notar ahora que es “calcularedad”, el nombre del funciton, el que toma el valor de los cálculos, por
eso se dice que un function siempre devuelve un valor asociado a su nombre.
A la hora de emplear (llamar) a un function escribiremos su nombre y los parámetros a pasarle
dentro de un paréntesis:
MsgBox calcularedad (text1.text) Donde text1 es una caja de texto. Esto crearía una MsgBox con el
valor del cálculo de la función calcularedad.
Como hemos visto en el tema de procedimientos (Sub, Function) estos pueden requerir o no requerir
del paso de parámetros para que funcionen según nos interese a nosotros al hacer el programa.
Existen dos formas de pasar esos parámetros: por valor o por referencia. Imaginemos que tenemos
una variable V la cual empleamos para pasar su valor a una function. Si esa función cambiar el valor
del parámetro que recibe y no indicamos nada, el valor original de V se verá alterado, es decir, la
porción de memoria física a la cual acceden la variable y la función es la misma y cualquier cambio
en la segunda afectará a la primera. Veamos un ejemplo:
Sub Main()
Dim V As Integer
Dim Y As Integer
V = 25
Y = 100
Calcular (V, Y)
MSGBOX V
MSGBOX Y
End Sub
En el caso del parámetro X, definido como ByVal, el Sub recibe una “copia” del valor original y, a
pesar de que X modifica su valor en el Sub, el original permanecerá invariable, por tanto en el primer
MSGBOX aparecerá un 25. El parámetro Z si variará su valor puesto que es ByRef. El Msgbox
segundo pondrá 102.
Un programa puede necesitar mostrar un dato resultado de una operación o pedir al usuario que
introduzca algún otro necesario para realizar los cálculos; es ahí donde cobran importancia los
MSGBOX e INPUTBOX. Ambos son cuadros de diálogo predefinidos (es decir, se incluyen en todos
los programas bajo Windows) y la principal diferencia entre ellos es que el MSGBOX se emplea para
mostrar un resultado o para pedir al usuario respuestas del tipo “SI / NO / CANCELAR”.
El INPUTBOX se emplea para solicitar del usuario cualquier otro tipo de dato como un número o un
nombre.
En las siguientes figuras se muestran dos ejemplos de MSGBOX e INPUT BOX:
Sintaxis del MSGBOX:
El texto del mensaje se puede sustituir por una variable que queramos mostrar.
b). Si el MSGBOX actúa esperando una respuesta se hará necesario almacenar el tipo de respuesta
en una variable para su posterior manejo. La variable suele ser tipo BYTE.
Para aplicaciones de consola se emplea el objeto "Console" que permite mostrar mensajes mediante
WriteLine y leer datos mediante ReadLine.
Dim a As String
Console.WriteLine ("Escribe tu nombre")
a = Console.ReadLine()
Console.WriteLine (a)
ESTRUCTURAS DE DECISIÓN
Una estructura de decisión es aquella parte del código en la que el programa decide entre varias
opciones dependiendo de si se cumple o no cierta o ciertas condiciones.
Veremos dos tipos de estructuras de decisión: IF y SELECT.
• La instrucción IF
Su sintaxis es la siguiente:
IF condición1 Then
Instrucción1
Instrucción2
Instrucción...
End IF
c) Si queremos indicar qué ocurre cuando se cumple la condición y cuando no, entonces
emplearemos la siguiente forma con ELSE.
IF condición1 Then
Instrucción1
Instrucción2
Instrucción...
ELSE
Instrucción1
Instrucción2
Instrucción...
End IF
BUCLES.
Cuando queremos repetir un proceso un número de veces o hasta que ocurra algo (por ejemplo,
hacer click con el ratón) aparecen las estructuras de repetición, de las que veremos dos tipos:
DO/LOOP y FOR/NEXT.
La sintaxis de la primera es:
• DO/LOOP
Do [UNTIL/WHILE] condición1
Instrucciones
Loop
Es decir, realiza las instrucciones hasta (until) o mientras (While) se cumpla la condición
especificada.
Otra forma de escribir esto mismo es:
Do
Instrucciones
Loop [UNTIL/WHILE] condición1
• FOR/NEXT
Esta estructura nos permite repetir las instrucciones un número determinado de veces.
For i = 1 To 20
Instrucciones
Next i
Esta sintaxis ejecutaría las instrucciones 20 veces, es decir desde que i vale 1 hasta que i valga 20.
Tanto las sintaxis Do como la FOR poseen una instrucción para salir de ellas si nos interesase
hacerlo; esa sintaxis es Exit DO y Exit For, respectivamente. Por ejemplo si no queremos que un
bucle repita más de 100 veces un proceso (proceso1) lo que hacemos es insertar un IF que,
ayudado por una variable contador se asegure de esa circunstancia:
Do
Proceso1 ( )
contar = contar + 1
If contar >= 100 Then Exit Do
Loop
FUNCIONES PREDEFINIDAS EN VISUAL BASIC
Las funciones se definen, en general, como grupos de instrucciones que nos van a devolver un valor
asociado a ellas. Existen 2 tipos de funciones: las definidas por el usuario y las predefinidas por el
propio visual Basic.
Vamos a centrarnos ahora sobre el segundo tipo las funciones definidas por el VB.
Los parámetros son valores que nosotros damos a la función para que esta los procese y nos
devuelva el valor que nos interesa. Puede haber tantos parámetros como sea necesario y también
puede ser que no exista ninguno.
A continuación veremos una tabla con los tipos más importantes de funciones y las más
características de ellas.
FUNCIONES DE TEXTO
Sirven para convertir unos tipos de datos en otros (Ej: Integer => Long; Texto => Número)
El nombre de la función determina el tipo devuelto, como se muestra a continuación:
La diferencia entre Fix e Int es que, al trabajar con valores negativos, fix, trunca el valor mientras
que Int devuelve el mayor número entero que es menor o igual que el argumento, es decir, redondea
hacia abajo.
Si empleais la versioes más modernas de Visual Basic entonces estas funciones se integran en el
espacio de nombres "Math".
Un type (structure en las versiones nuevas de Visual Basic) no es más que un tipo de datos (como
String o Byte) pero que están definidos de acuerdo a unas especificaciones que nosotros damos. De
esta forma podríamos definir tipos de datos para muchas aplicaciones de forma que se adaptasen a
nuestras necesidades. El uso más común de los TYPES / STRUCTURE es cuando deseamos hacer
una especie de “ficha” para un determinado valor. Imaginemos una agenda...
Type ficha
Nombre As String
Telefono As String
Casado As Boolean
End Type
Structure Ficha
Dim Nombre As String
Dim Telefono As String
Dim Casado As Boolean
End Structure.
Con Structure hay que emplear el Dim dentro al declarar las variables.
Este sería el tipo de datos que queremos definir, cada Dato perteneciente a este tipo “ficha” tendrá
tres partes, dos de ellas serán un texto y la otra de tipo boolean.
Pero esto sólo es un tipo de datos, no es una variable... aún. Para poder trabajar con esto
necesitamos definir una variable que sea de este tipo de datos que hemos creado llamado “ficha”...
Bien ahora ya tenemos nuestra variable del tipo de datos ficha. Para agregar datos sería:
Podríamos combinar matrices y types para obtener matrices con el tipo de datos del Type:
Esto nos generaría una matriz de 100 elementos y una dimensión, de tipo ficha, y para referirnos a
ellos emplearíamos un número igual que con las matrices, por ejemplo para el elemento 12 de la
matriz definida podríamos escribir:
El concepto de matriz en VB es exacto al concepto matemático de matriz por lo que nos resultará
más fácil su estudio; no obstante, las matrices en VB también tienen una particularidad que radica en
que VB no distingue entre matrices fila o columna, este es un concepto que debe ser interpretado
por el programador a la hora de definir el comportamiento de la matriz dentro del programa y saber si
lo que estoy manejando es una columna o una fila.
En VB podemos definir matriz como un conjunto de objetos o datos de un determinado tipo que
podemos identificar mediante un índice; es decir, es un conjunto de cosas ordenadas. Este índice es
único y no pueden existir en la misma matriz dos elementos con el mismo índice.
El tipo de objetos o datos que guarda una matriz lo fijamos nosotros cuando “declaramos” esa
matriz. La forma para declarar matrices varía según el tipo de matriz que queramos obtener, así:
Dim matriz (5) As Byte, indicará que queremos definir una matriz, en la que, por defecto, su primer
índice será el 0 mientras que el último será el 5, es decir, la matriz tendrá 6 elementos.
Matriz1 => Es el nombre que yo doy a la matriz. Puede ser cualquiera mientras que no contenga
caracteres prohibidos como / “ • ...
(1 to 100) => Número de elementos que va a contener esta matriz. El primero será el que contenga
el índice 1 y el último el 100.
As String => Tipo de datos string. Indica que, cada uno de los elementos de la matriz contendrá en
su interior datos de tipo texto.
Este ejemplo define una matriz de un determinado número de elementos, en este caso 100, pero
también podemos definir matrices sin prefijar el número de elementos que va a tener, de esta forma:
De esta forma redimensionamos la matriz para diez elementos. Al redimensionar las matrices se
pierden todos los datos que contengan. A no ser que empleemos Redim Preserve que mantiene los
datos. En unas ocasiones nos interesará mantenerlos o no.
Veamos ahora cómo sería el acceso a los datos que contiene una matriz. Imaginemos una matriz de
2 elementos, y quiero establecer un valor de texto en cada una de las cadenas.
También podría decir que fuesen iguales a una variable de tipo String.
Dim var As String
Var = “Carlos”
Matriz (1) = var
Las matrices pueden tener más de una dimensión, para ello se deben de definir de la siguiente
forma:
Dim matriz2D (1 To 10, 1 To 10) As String
Esta matriz que, por ejemplo, serviría para representar puntos en un plano, tiene 10 x 10 = 100
elementos. Si el orden de la matriz fuese 3 (es decir de 1000 elementos) entonces:
Dim matriz3D (1 To 10, 1 To 10, 1 To 10) As String
Dim x As integer
Dim y As integer
Dim z As Byte
Dim habitacion (1 to 1000,1 to 500, 1 to 250) AS Double
For x = 1 to 1000
For y = 1 to 500
For z = 1 to 250
Habitacion (x,y,z) = x ^ 2 + y – z
Next z
Next y
Next x
Los bucles constarán siempre de tantas variables como dimensiones tiene la matriz y los bucles for
serán siempre anidados de forma que en la parte más interna de ellos sea en donde asignamos los
valores de la función.
Si ahora quisiéramos conocer el valor de Temperaturas en el punto 1, 3, 4 diríamos...
Un fichero es una porción de memoria del disco duro a la que damos un nombre y una extensión. La
ventaja de los ficheros es que, al estar en el disco duro, la información que contengan se puede
recuperar aunque el equipo se apague, al contrario que la memoria RAM.
ACCESO SECUENCIAL
Estos ficheros son los llamados comúnmente ficheros de texto (TXT) o ficheros planos. en ellos la
información se guarda en líneas de texto. Para leer una línea concreta es necesario pasar por todas
las anteriores.
Para abrir un fichero de texto necesitamos conocer su ruta (en qué carpeta se guarda) para lo que
se puede emplear una variable string.
Para abrir el fichero tendremos que emplear la sentencia OPEN, y dar un modo de apertura que
puede ser Append, Input o OutPut.
No se puede abrir un fichero secuencial para leer y escribir al mismo tiempo, habría que cerrarlo y
volver a abrirlo.
EL CANAL.
El canal de apertura es un valor necesario para poder abrir el fichero y su valor es el que devuelve la
función FREEFILE.
Ejemplo.
Una vez que hacemos el open, con el modo que necesitemos, podemos escribir o leer datos. Para
escribir empleamos las instrucciones PRINT y WRITE.
Close canal
Print escribe un solo texto en la línea tal cual y Write puede escribir varios valores que se separan
por comas también en el fichero.
Close canal
LEER SECUENCIALES.
Para leer empleamos la instrucción Line Input o Input. La primera solo permite leer una línea del
fichero, guardarla en una variable y pasar a la siguiente.
Con Input puedo leer múltiples valores separados por comas en varias variables.
Para leer todo el fichero será necesario emplear la función EOF en un bucle.
While NOT EOF(canal)
Line Input canal, variable
End While
ACCESO ALEATORIO
Los ficheros de acceso aleatorio permiten simultanear lectura y escritura con un solo OPEN. Están
directamente asociados a los STRUCTURES. Tienen un único modo de apertura que es RANDOM y,
después del canal, es necesario especificar la longitud de la variable dependiente del STRUCTURE
mediante la función LEN.
Structure Ficha
Dim nombre As String
Dim apellido As String
Dim dirección As String
Dim edad As Integer
End Structure
Close canal
Esto provoca que el fichero se abra "compartimentado" en porciones en las que cada una de ellas
tiene la longitud del structure.
cliente.nombre = "Carlos"
cliente.apellido = "Martinez"
cliente.dirección = "Avenida 9 de julio n° 2054"
cliente.edad = 45
Close canal
Posición es la posición del fichero sobre la que queremos escribir y es una valor numérico.
Para calcular el número total de posiciones de un fichero se divide la longitud del mismo entre lo que
ocupa cada dato.
La forma de acceso a ficheros con FILEOPEN sigue las mismas normas que con open, simplemente
cambia un poco la forma de escribir las instrucciones.
Dim id as Integer
FileOpen (id, “C:\fichero.txt”, OpenMode.Append)
Dim V As TipoDelStructure.
Dim id as Integer
Dim tamaño As Integer
tamaño = Len (V)