Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Departamento de Matemticas Juan Mara Rodrguez Aguilera I.E.S. Lpez de Arenas Marchena - Sevilla
1 - Conceptos bsicos
Cada uno de estos pasos se pueden dividir en diversas etapas dependiendo de la complejidad del programa que se desee realizar. Aunque todos los pasos anteriormente indicados podramos decir que tienen igual importancia, como en todas las cosas en la vida, la complejidad depender del tiempo que una persona lleve programando, es decir, muchos programadores no necesitan hacer un esquema escrito del programa que van a desarrollar, pues la prctica los a entrenado lo suficiente para realizarlo mentalmente. Otros por el contrario, le dan ms importancia al esquema del programa que a la escritura del cdigo fuente. Todo esto depender del tipo de programa que se desee desarrollar. Los elementos necesarios para poder escribir un programa son los siguientes: 1 2 3 4 Necesitamos un problema a resolver, es decir, saber que es lo que el programa debe realizar. Lpiz y papel para escribir el esquema lgico del programa. Editor de textos para escribir el cdigo fuente. Compilador de cdigo fuente que hemos escrito.
Normalmente los elementos 3 y 4 vienen dados por el entorno de programacin que utilicemos, aunque normalmente se puede utilizar cualquier editor de textos. Conceptos Cdigo fuente: Compilador: rdenes y comandos que el programador escribe para realizar un programa, normalmente se tratan de uno o varios archivos de texto. Programa que hace que el cdigo fuente escrito por el programador sea comprendido por el ordenador, de manera que el resultado de compilar el cdigo fuente es un archivo ejecutable que no necesita del cdigo fuente ni del entorno de programacin para poder ser ejecutado. Compilador Archivo ejecutable No necesita el cdigo fuente ni el entorno de programacin
1 - Conceptos bsicos
Tipos de datos
Aunque los distintos tipos de datos dependen del lenguaje de programacin que utilicemos, prcticamente todos los lenguajes coinciden en los siguientes tipos: Datos de tipo texto: En los que podemos introducir cualquier secuencia de letras y smbolos, aunque tambin se pueden introducir nmeros que sern considerados como letras. Datos de tipo numrico: Enteros: Datos en los que podemos introducir nmeros enteros (3, 17, -765, 3209,...). Estos a su vez suelen dividirse en dos clases, una para nmeros enteros pequeos y otras para nmeros enteros grandes. Decimales: Datos en los que podemos introducir nmeros con cifras decimales (5.788, 0.41,...). Estos a su vez suelen dividirse en dos clases, una para nmeros con pocas cifras decimales y otra para nmeros con muchas cifras decimales.
Datos de fecha: Son datos en los que podemos introducir generalmente valores de tipo fecha y hora. Datos lgicos: Son datos en los que podemos introducir slo dos valores, verdadero o falso. En algunos lenguajes el falso equivale al cero y el verdadero a otro valor (-1 1 normalmente).
Variables
Los ordenadores manejan los datos introducindolos en la memoria y haciendo operaciones con ellos. En los lenguajes de programacin para poder acceder a los distintos datos tenemos darles nombre de manera que posteriormente podamos recurrir a dicho nombre para poder acceder al valor, a los nombres que almacenan valores de distintos datos, se les llama variables. Ejemplo: Supongamos que deseamos hacer un programa que sume dos nmeros introducidos por la persona que est manejando el programa. Paso 1: El programa debera pedir los dos nmeros que el usuario desee sumar. El primer nmero lo almacenaremos en la variable numero1 y el segundo nmero lo almacenaremos en la variable numero2. Paso 2: El programa debera mostrar el resultado de la suma que es numero1+ numero2. En este ejemplo estaramos utilizando dos variables: numero1 y numero2 que es donde almacenamos los valores introducidos por el usuario del programa.
1 - Conceptos bsicos
Ejemplo 1: Dim num1 As Integer, num2 As Integer (Declaracin de variables) En la orden anterior se han declarado dos variables llamadas num1 y num2, tambin se le ha indicado al ordenador que dichas variables sern utilizadas para almacenar valores de nmeros enteros1. En la mayora de los lenguajes de programacin es necesario decirle al ordenador el nombre de las variables y el tipo de datos que guardarn antes de se puedan utilizar, a este paso se le llama declaracin de variables. Una vez que hemos declarado las variables podemos comenzar a darle valores y realizar operaciones con ellas. num1=3 (Inicializacin o asignacin de la variable num1) En el paso anterior estamos utilizando el operador = (operador de asignacin) para indicarle al ordenador que la variable num1 debe tomar el valor 3. num2=2*num1+3 (Asignacin de la variable num2) En este caso hemos utilizado tres operadores =, * y +. Mediante la lnea anterior le estamos indicando que el valor de la variable num2 deber ser el doble del valor de la variable num1 ms tres unidades, es decir, la variable num2 tomara el valor 9 (2*3+3=9). Ejemplo 2: Dim Nombre As String, Apellidos As String, Persona As String En la lnea anterior se han declarado 3 variables de tipo texto o tambin llamado tipo cadena (String). Este tipo de variables sirve para almacenar datos compuestos por letras, nmeros y cualquier tipo de caracteres. Nombre=Miguelito Apellidos=Lpez Bernldez En las dos lneas anteriores se han inicializado las variables Nombre y Apellidos con los valores Miguelito y Lpez Bernldez respectivamente. Igualmente se pueden utilizar operadores para manipular las variables de cadena. En la siguiente lnea utilizaremos el operador de concatenacin2 para unir las cadenas. Persona=Nombre & & Apellidos (o tambin, Persona=Nombre + + Apellidos) Observar que entre las comillas se ha introducido un espacio con la intencin de separar el nombre de los apellidos, de lo contrario la variable Persona contendra el valor MiguelitoLpez Bernldez de la forma que se ha realizado la unin de las cadenas de texto, es decir, entre el nombre y los apellidos se ha introducido una cadena de texto que slo contiene un espacio3, obtenemos el resultado deseado.
Los enteros tienen una limitacin entre 32.768 y 32.767. Para utilizar valores mayores es necesario utilizar otro tipo de dato. 2 Existen dos operadores en Visual Basic que sirven para concatenar (unir) varias cadenas de texto, estos operadores son & y +. 3 Si queremos introducir cadenas de caracteres fijos, debemos hacerlo entre comillas. Si deseamos una cadena vaca podemos escribir , un espacio , una coma ,, etc.
1
1 - Conceptos bsicos
Operadores
En todos los lenguajes de programacin existen operadores para poder realizar clculos y operaciones con las variables. Los operadores no son los mismos en todos los lenguajes, aunque s hay muchos que coinciden. Ejemplos: numero1 + numero2 numero1 * numero2 numero1 = 3 * numero2 numero1 = 2 * numero2 5 Operador: + Operador: * Operadores: = y * Operadores: = , * y
Palabras reservadas
Es una de las partes en las que hay mayor diferencia entre los distintos lenguajes de programacin, aunque de un lenguaje a otro normalmente existen palabras equivalentes que realizan la misma funcin aunque tengan nombres distintos. Estas palabras reservadas junto con las variable y la sintaxis correcta es el fundamento para la realizacin de programas en cualquier lenguaje de programacin. Aunque existe gran diferencia entre los distintos lenguajes de programacin, los lenguajes ms usados coinciden en dos grandes bloques de palabras reservadas: sentencias y funciones. Sentencias: son palabras reservadas que sirven para realizar alguna tarea en concreto, pero no devuelven ningn valor. Funciones: son palabras reservadas que sirven para realizar alguna tarea en concreto devolviendo un valor. Ejemplos: Sentencia Dim, sirve para indicar al ordenador que se va a utilizar una variable. Dim NumeroUno As Integer (En casi todas las versiones del lenguaje BASIC) La lnea de cdigo anterior sirve para indicar al ordenador que vamos a utilizar una variable llamada NumeroUno y que en ella guardaremos un dato de tipo numrico y adems entero (Integer). Funcin Sqr, sirve para calcular la raz cuadrada de un nmero. a = Sqr(b) (En casi todas las versiones del lenguaje BASIC) La lnea de cdigo anterior calcula la raz cuadrada de la variable b y asigna el valor de dicha raz a la variable a. Como podemos observar en los dos ejemplos anteriores, es necesario conocer las palabras reservadas del lenguaje en el que vamos a programar, as como la tarea que cada una realiza.
1 - Conceptos bsicos
Estructuras de control
Prcticamente todos los lenguajes de programacin tienen unas palabras reservadas destinadas a controlar el desarrollo lgico de un programa. Las ms utilizadas se agrupan en dos bloques: condicionales y de repeticin. Condicionales Las estructuras condicionales primero evalan una expresin y en funcin del valor que tome la expresin evaluada, realizan una u otra tarea. If a>0 Then ........... ........... ........... Else ........... ........... ........... End If De repeticin Las estructuras de repeticin repiten una misma tarea un determinado nmero de veces, o bien, evalan una expresin y repiten una tarea mientras se cumpla dicha condicin. A las estructuras de repeticin se les llaman bucles. For i=1 to 10 ........... ........... ........... Next i (Realiza las instrucciones que hay entre la lnea del For y la lnea de Next i) (Si a es mayor que cero entonces realiza las instrucciones siguientes) (Realiza esta tarea cuando la condicin es cierta) (En caso contrario, que a no sea mayor de cero realiza las siguientes instrucciones) (Realiza esta tarea cuando la condicin es falsa) (Fin de la estructura condicional)
Do While i<=20 (Realiza las instrucciones que hay entre la lnea del Do y la del Loop mientras sea cierta la condicin, es decir, se cumpla que i es menor o igual que 20) .......... .......... .......... Loop While i > 15 .......... .......... .......... Wend Estas estructuras de control y otras que tambin existen, ya las veremos con mayor profundidad en el captulo 3 dedicado exclusivamente al control del flujo de un programa. (Realiza las instrucciones que hay entre la lnea del While y la del Wend mientras sea cierta la condicin, es decir, se cumpla que i es mayor que 15)
1 - Conceptos bsicos
Algunos ejemplos: Primer programa En casi todos los lenguajes de programacin existe un clsico que consiste en mostrar un mensaje, este mensaje es Hola mundo. Vamos a realizarlo en Visual Basic, aunque las instrucciones que vamos a escribir serviran prcticamente para cualquier variante del original Basic. Dim Mensaje As String Mensaje = Hola mundo. Print Mensaje En este primer programa hemos utilizado la funcin Print que sirve para escribir un mensaje o texto en cualquier dispositivo de salida (monitor, impresora, etc.). Este primer programa se puede realizar en una sola lnea. Print Hola mundo. La idea de hacerlo en varias lneas es por utilizar las instrucciones vistas y ver una estructura coherente en el lenguaje. Segundo programa Vamos a ver un pequeo programa en el que podemos escribir una tabla de multiplicar. Al igual que el ejemplo anterior, este tambin se puede escribir con menos lneas de cdigo, pero la intencin es que sea claro y est bien estructurado. Se podra escribir este programa repitiendo 10 veces la misma estructura: Print 1 * 7 = ; 1*7 Print 2 * 7 = ; 2*7 Print 3 * 7 = ; 3*7 ... Pero creo que parece bastante evidente que esta no es la mejor forma, no porque tengamos que repetir 10 veces prcticamente el mismo cdigo, ms bien, porque si hubiese que repetirlo 1.000 o 10.000 veces el trabajo sera interminable. La forma correcta de hacerlo es utilizando estructura de control: Dim Num As Integer, Indice As Integer Num = 7 For Indice = 1 To 10 Print Indice; * ; Num; = ; Indice*Num Next Indice Esta forma es mucho ms corta de programar y ms fcil de modificar. Si deseramos hacer una tabla de 100 resultados, sera suficiente con cambiar el 10 por un 100. Igualmente si deseamos escribir la tabla del 9 en lugar de la tabla del 7, bastara con cambiar en la lnea Num = 7, el nmero 7 por un 9.
Double (#)
Nmeros reales
Valores monetarios Cadena de texto Fecha y hora Valores lgicos Objeto Cualquier dato
Estos son los tipos de datos utilizados en Visual Basic, tambin el usuario puede definir tipos de datos propios segn sus necesidades. Dentro de las variables Variant, existen valores que determinan situaciones concretas que son bastante comunes. El valor Empty, es el valor que contiene una variable Variant cuando an no se le ha asignado ningn valor. El valor Null, es un valor desconocido o que falta el valor. Este valor es til en aplicaciones de bases de datos. El valor Error, es un valor que indica que se ha producido algn error en la aplicacin.
Ejemplo: Dim dni As Long, letra As String, nif As String dni = 45213234 letra = E nif = CStr(dni) & - & letra Ejemplo: Dim num As Integer, cad as String cad = 123 num = CInt(cad)
OPERADORES
En cualquier lenguaje de programacin son muchas las operaciones que se necesitan realizar las variables y expresiones, por ejemplo: sumar, restar, dividir nmeros o variables, unir cadenas de texto, convertir una expresin booleana en la contraria, comparar variables, etc. Operadores matemticos Operador = + / * \ ^ Mod Operacin Asignacin Suma Resta Divisin Multiplicacin Divisin entera Potenciacin Mdulo Ejemplo Num=3 3+4 7-5 8/3 4*7 11\4 4^3 17 Mod 5
Operadores lgicos Operador And Or Not Xor Eqv Operacin Conjuncin lgica Disyuncin lgica Negacin lgica Exclusin lgica Equivalencia lgica Ejemplo True And True False Or True Not True True Xor True False Eqv False
Operadores de concatenacin Operador & + Operacin Concatenacin de cadenas Concatenacin de cadenas Ejemplo Visual & Basic Visual & Basic
Operadores de comparacin Operador = < <= > >= <> Operacin Igual a Menor que Menor o igual que Mayor que Mayor o igual que Distinto de Ejemplo x=4 7<5 5<=8 3>6 12>=5 x<>3
Existen algunos operadores ms que por el momento omitiremos ya que estos son los ms usados y habituales.
Ejemplos de utilizacin de operadores Ejemplo 1: Dim num As Integer, div As Integer num = 234 div = 7 If (num Mod div)=0 Then Print El nmero ; num; es divisible por ; div Else Print El resto de dividir ;num; entre ; div; es ; num Mod div End If En el ejemplo anterior se han utilizado distintos operadores: El operador = se ha utilizado como operador de asignacin (lneas num=234 y div=7) y como operador de comparacin (lnea If (num Mod div)=0 Then). El operador Mod se ha utilizado dos veces para calcular el resto de dividir el valor de num entre el valor de div. Ejemplo 2: Dim i As Integer, Numeros As String Numeros = For i=0 To 9 Numeros = Numeros & CStr(i) Next i Print Numeros En este ejemplo se ha utilizado nuevamente el operador = realizando la asignacin a la variable Numeros. Hay que destacar la lnea Numeros = Numeros & CStr(i), pues puede no parecer lgica si se mira desde un punto de vista estrictamente matemtico, pero hay que tener en cuenta que el operador = no est describiendo una igualdad, la lnea debera entenderse como: asigna a la variable Numeros el contenido que tiene la variable Numeros y aade el valor de la variable i convertida a cadena de texto, esta ltima operacin se lleva a cabo mediante el operador concatenacin de cadenas de texto (&). Ejemplo 3: Dim A As Single, B As Single, C As Single Dim X1 As Double, X2 As Double A = 3: B = 7: C = 4 X1 = (-B+Sqr(B^2-4*A*C))/(2*A) X2 = (-B-Sqr(B^2-4*A*C))/(2*A) Print Solucin 1 = ; X1, Solucin 2 = ; X2 En este tercer ejemplo se puede comprobar la utilizacin de varios operadores matemticos y la funcin Sqr para calcular las soluciones de una ecuacin de 2 grado. En la lnea 3 podemos comprobar como se pueden asignar mltiples variables en una misma lnea separndolas con dos puntos.
En Visual Basic existen dos modos: diseo y ejecucin. El modo diseo es cuando estamos realizando el programa y el de ejecucin es cuando estamos probando el programa para ver si funciona correctamente. Botn para Ejecutar. Botn para Terminar la ejecucin. Botn para Interrumpir la ejecucin.
En la imagen de la izquierda se ha introducido un objeto botn (Command) al cual se le han modificado las propiedades Caption y Font. La modificacin de estas propiedades se realiza directamente sobre las paleta de propiedades y se visualiza inmediatamente en el formulario. En un formulario se pueden introducir tantos objetos como se consideren necesarios.
Selector de objetos Label Frame CheckBox ComboBox HScrollBar Timer DirListBox Shape Image OLE
PictureBox TextBox CommandButton OptionButton ListBox VScrollBar DriveListBox FileListBox Line Data
En las imgenes anteriores poedmos ver los objetos ms generales de Visual Basic as como la paleta de propiedades. Debemos recordar que la paleta de propiedades mostrar las propiedades del objeto seleccionado en el formulario. En este caso est mostrando las del Command1 (objeto CommandButton), seleccionado en el Form1 (objeto Formulario).
A continuacin empezaremos a explicar la utilidad de los objetos ms bsicos y ms adelante iremos viendo los dems. Objeto o control Label (Etiqueta) TextBox (Caja de texto) CommandButton (Botn de comando) Frame (Marco) CheckBox (Caja de chequeo) OptionButton (Botn de opcin) ListBox (Lista de seleccin) ComboBox (Caja desplegable) Line (Lnea) Shape (Figura) Image (Imagen) PictureBox (Caja de dibujo) Utilizacin principal Mostrar un texto en cualquier ubicacin. Principales propiedades Caption, BackColor, BackStyle, Font, ForeColor. Introducir al programa textos o nmeros. Text, MaxLength, MultiLine, ScrollBars, PasswordChar. Ejecutar una accin al recibir la pulsacin del Caption, Default, Style. usuario. Sirve para agrupar a otros objetos. Es un Caption. contenedor de controles. Se utiliza para indicar si alguna opcin est Caption, Value. seleccionada. No es excluyente. Se utiliza para indicar una eleccin entre Caption, Value. varias posibilidades. Si es excluyente. Muestra varias opciones que se pueden List, MultiSelect, Sorted, Style, seleccionar. ListIndex, ListCount, Text. Tiene dos posibles usos: Como cuadro de List, MultiSelect, Sorted, Style, texto y cono lista de seleccin. ListIndex, ListCount, Text. Con este control se puede dibujar lneas. BorderColor, BorderStyle, BorderWidth. Sirve para dibujar cuadrados, rectngulos, Shape, FillStyle, FillColor, crculos y elipses. BackColor, BackStyle. Mostrar un archivo grfico gif, jpg, bmp, Picture, Strech. wmf, ico, cur, etc. Mostrar un archivo grfico. Es ms potente Picture, AutoSize. que el control Image pero consume ms recursos del ordenador.
El resto de controles bsicos de Visual Basic los dejaremos para ms adelante cuando estos nos resulten ms familiares y tengamos un poco de ms prctica con ellos. Ejercicio: Crear un formulario que contenga 2 Etiquetas, 2 cuadros de texto, 1 Caja desplegable, 1 Frame con 3 Botones de opcin, 1 Frame con 3 Cajas de chequeo, 2 Botones de comando y 1 Control Image.
Tambin se puede pasar de la ventana de objetos a la ventana de cdigo mediante estos dos botones.
En esta segunda lista desplegable se puede seleccionar el evento asociado al objeto, el cual programaremos mediante cdigo para que realice la tarea deseada.
No es un lenguaje orientado a objetos si no basamos en la definicin formal de Programacin Orientada a Objetos (POO), pero estos conceptos se salen de los objetivos de nuestro curso. VB prcticamente cumple todos los requisitos de la POO.
1
Debe comenzar por una letra y no puede contener espacios ni caracteres especiales como: &, /, #, @, \, +, {, etc. No pueden ser el nombre de palabras reservadas como: If, Then, While, For, Next, Dim, etc. El nombre no puede tener ms de 256 caracteres. Se pueden mezclar letras y nmeros.
ESTRUCTURAS DE REPETICIN
En este apartado veremos las siguientes estructuras para realizar una misma operacin un determinado nmero de veces: For ... Next, Do ... Loop, While ... Wend. Existen algunas ms que por el momento no tendremos en cuenta pues su utilizacin es ms avanzada. For ... Next Un bucle For ... Next tiene la siguiente sintaxis: For Indice=Inicio To Fin Step Paso ... ... (Bloque de instrucciones que se repetirn) ... Next Indice El bucle For ... Next es una estructura en la que un bloque de instrucciones se repite para los distintos valores del la variable Indice. La primera vez que se ejecuta el bucle, la variable Indice toma el valor indicado como Inicio, la segunda vez la variable Indice toma el valor anterior (Inicio) ms el valor indicado en Paso (Inicio + Paso), y as sucesivamente. En cada ejecucin del bucle la variable Indice se incrementa el valor indicado en Paso, hasta que llegue el momento en el cual Indice sea mayor que Fin, en cuyo caso finalizar el bucle. Ejemplo: For i=0 To 100 Step 5 Print i Next i Con este ejemplo obtenemos todos los mltiplos de 5 comprendidos entre 0 y 100, ambos inclusive. Do ... Loop Un bucle Do ... Loop sirve para realizar repetidas veces un bloque de instrucciones mientras se cumpla una determinada condicin. En muchas ocasiones tendremos que realizar bucles que a priori no sabemos el nmero de veces que tendrn que ejecutarse, en estos casos utilizaremos este tipo de bucles. La condicin que indica la ejecucin del bucle se puede situar al comienzo o al final del bucle y siempre precedida de While (Mientras) o Until (Hasta que). La sintaxis es: Do While condicion (o Until condicion) ... ... Loop Do ... ... Loop While condicion (o Until condicion)
Ejemplo: Para probar este tipo de bucles vamos a realizar un pequeo programa que se estar ejecutando hasta que tecleemos la palabra salir, y en caso contrario nos contar el nmero de letras que tiene la palabra introducida. Dim Mensaje As String, Palabra As String Mensaje = Introduce una palabra y te contar & Chr(13) & _ el nmero de letras que tiene la palabra escrita. & Chr(13) & Chr(13) & _ (Si quieres terminar escribe salir) Do While Palabra <> salir Palabra = InputBox(Mensaje) MsgBox La palabra introducida tiene & CStr(Len(Palabra)) & letras. Loop El bucle Do ... Loop se estar ejecutando mientras que la palabra introducida sea distinta de salir, igualmente en lugar de Do While Palabra <> salir podamos haber escrito Do Until Palabra = salir. Vamos a aclarar algunas de cosas nuevas que han aparecido en este cdigo: 1. Si estamos escribiendo una lnea de cdigo que es demasiado larga, podemos dividirla en dos poniendo al final el carcter de subrayado ( _ ). 2. La funcin InputBox sirve para introducir una cadena de texto y que sea recogida en una variable. Esta funcin admite varios parmetros como en este caso la variable Mensaje que har que se visualice un texto. 3. La funcin Chr sirve para escribir caracteres (caracteres ASCII), en este caso se ha utilizado para escribir el carcter 13 que es el equivalente a un salto de lnea. 4. La funcin Len se utiliza para calcular la longitud de una cadena de caracteres, en este caso se ha utilizado para ver la longitud del texto escrito en la variable palabra. While ... Wend Este tipo de bucles est ya en desuso debido a que es menos flexible que el anterior (Do ... Loop) y no aporta nada nuevo. Es equivalente a usar Do While ... Loop. Su sintaxis sera: While condicion ... ... Wend Este bucle se repetir siempre que la condicin sea cierta.
Select Case Existen situaciones en las que el programa necesita realizar distintas opciones en funcin de los valores que tomen determinadas variables y adems el nmero de tareas distintas a realizar es numeroso. Con la estructura If ... Then slo hay posibilidad de crear dos posibles acciones una si la condicin es cierta y otra si la condicin es falsa. Con la estructura Select Case podemos hacer una respuesta mltiple acorde a diferentes situaciones. La sintaxis es: Select Case expresin Case valor1 ... (Grupo de instrucciones 1) Case valor2 ... (Grupo de instrucciones 2) Case valor3 ... (Grupo de instrucciones 3) Case Else ... (Grupo de instrucciones alternativo) End Select La estructura Select Case funciona ejecutando slo uno de los siguientes grupos de instrucciones dependiendo del valor de la expresin evaluada. nicamente se realizarn las instrucciones del bloque en el que expresin sea igual a valorn. En el caso de que expresin no coincida con ninguno de los valores listados, se ejecutara el grupo de instrucciones incluido despus de Case Else. La estructura Select Case permite que en cada una de las opciones Case se introduzca una lista de valores, en lugar de un nico resultado. Estos distintos valores deben estar separados por comas. Ejemplo: Dim a As Integer, Valor As String Randomize a = Int(Rnd*10) Select Case a Case 0, 1, 2, 3, 4, 5 Valor = 1 Case 5, 7, 8 Valor = X Case 9 Valor = 2 End Select En este cdigo podemos ver como se genera un nmero entero aleatorio que va desde 0 hasta 9, y en funcin del valor obtenido, a la variable de cadena Valor de le asigna 1, X o 2. Nota: La lnea Randomize sirve para inicializar la generacin de nmeros aleatorios, de lo contrario siempre saldra la misma secuencia de nmeros aleatorios. La funcin Rnd genera un nmero aleatorio entre 0 y 1, que al multiplicarlo por 10, el nmero oscilara entre 0 y 9.999999. Con la funcin Int hacemos que el resultado final sea un nmero aleatorio entero entre 0 y 9.
Funciones IIf, Choose y Switch Aparte de las estructuras que hemos visto, tambin existen funciones que nos devuelven un valor determinado en respuesta a alguno de los parmetros indicados a la funcin en particular. IIf(Condicin, ParteSiCierta, ParteSiFalsa) La funcin IIf evala una condicin lgica (de resultado True o False) y en el caso de que la condicin resulte verdadera devuelve el siguiente parmetro, en el caso de que la condicin resulte falsa, devuelve el ltimo parmetro. Ejemplo: Vamos a utilizar esta funcin para seleccionar el mximo de dos valores cualesquiera: Dim Valor1 As Long, Valor2 As Long, Maximo As Long Dim Cadena As String Valor1 = Int(Rnd*100) Valor2 = Int(Rnd*100) Maximo = IIF(Valor1>Valor2, Valor1, Valor2) Cadena = Los nmeros obtenidos aleatoriamente han sido: & Chr(13) Cadena = Cadena & CStr(Valor1) & y & CStr(Valor2) & Chr(13) Cadena = Cadena & El mximo es: & CStr(Maximo) MsgBox Cadena Switch(Condicin1, Valor1, Condicin2, Valor2, ...) Esta funcin recibe pares de parmetros formados por una condicin y un valor a devolver en el caso de que la condicin asociada sea verdadera. Esta funcin evala todas las condiciones y devuelve el valor asociado a la primera condicin cierta, con esto hay que resaltar que si en alguna condicin se realiza una operacin no permitida (divisin por cero, raz de un nmero negativo, etc.) la funcin generar un error en tiempo de ejecucin. Ejemplo: Dim Valor As Integer, Cadena As String Randomize Valor = Int(Rnd*100) Cadena = Switch( (Valor Mod 2)=0, Nmero Par, (Valor Mod 2)=1, Nmero Impar) Cadena = El nmero generado ha sido & CStr(Valor) & Cadena MsgBox Cadena, vbInformation, Ejemplo Choose(Indice, Opcin1, Opcin2, Opcin3, ...) La funcin Choose devuelve uno de los parmetros indicados como opcin, en funcin del valor recibido como ndice, es decir, si Indice=1 devuelve Opcin1, si Indice=2 devuelve Opcin2 y as sucesivamente. Ejemplo: Dim Asignatura As String, Numero as Integer Randomize Numero = Int(Rnd*3) + 1 Asignatura = Choose(Numero, Informtica, Francs, Dibujo) MsgBox Asignatura: & Asignatura
5 Funciones y subrutinas
5 Funciones y subrutinas
Para hacer una llamada a una funcin, es necesario que esta tenga sentido debido a que la funcin devuelve un valor, la llamada hay que hacerla en un lugar donde el programa est esperando el valor devuelto por la funcin. Normalmente son variables las que recogen el valor devuelto por la funcin, aunque tambin se pueden utilizar en cualquier instruccin en la que se espere un valor coherente. ... num = Maximo ( num1, num2) ... ... If Maximo( num1, num2)>10 Then ...
Las funciones y subrutinas al igual que las variables tienen un mbito en el cual pueden ser utilizadas, de esta forma es posible que slo se puedan utilizar dentro del formulario que las contiene, en cualquier formulario del proyecto que estemos construyendo, incluso pueden ser utilizadas por otros programas ajenos al que estamos desarrollando. Las palabras claves que se utilizan para estos cometidos son: Public, Private, Friend y Static, estas palabras se anteponen a la palabra Sub o Function en la definicin de la funcin o subrutina. Slo destacaremos que cuando queremos que una funcin o subrutina sea utilizada en cualquier formulario del programa que estamos realizando debemos declararla como Public, si por el contrario queremos que slo se pueda utilizar dentro del formulario donde se ha escrito debemos utilizar la palabra Private. Por el momento no entraremos en ms profundidad al respecto. Otra caracterstica importante dentro de las funciones es el paso de los parmetros puesto que existen dos formas de pasarlos a una funcin o subrutina: por valor o por referencia. Cuando se pasa un parmetro por referencia, se est pasando la direccin de memoria donde est almacena la variable. Esto significa que si la funcin o subrutina modifica el valor de este parmetro, se modificar a partir del lugar del programa donde se realiz la llamada. Cuando se pasa un parmetro por valor, se est pasando slo el contenido de la variable y si el programa o subrutina modifica el parmetro, esto no influye en el programa principal que hizo la llamada a la funcin. Visual Basic de forma predeterminada realiza el paso de parmetros por referencia, es decir, si no indicamos nada en la declaracin de la funcin o subrutina, el paso de parmetros ser por referencia. Para indicar por referencia se utiliza (ByRef esta palabra no es necesaria) y para indicar por valor (ByVal), esto hay que indicarlo en la lnea en la que comenzamos la funcin antes del nombre del parmetro. Ejemplo: Paso de parmetros por valor. Function Maximo( ByVal valor1 As Double, ByVal valor2 As Double) Paso de parmetros por referencia. Function Maximo( valor1 As Double, valor2 As Double)
6 Acceso a ficheros
Pasos intermedios: Realizar las operaciones de lectura y escritura, mediante las rdenes oportunas segn la forma en la que hemos accedido. ltimo paso: Cerrar el archivo.
Abrir y cerrar el fichero Para escribir o leer en un archivo el primer paso es abrirlo y para ello se utiliza la instruccin Open que tiene la siguiente sintaxis: Open RutaNombre For Modo Access Acceso As #NumeroFichero Len=LongitudRegistro Veamos cada una de estas partes: RutaNombre es el nombre del archivo incluida la ruta (Path). Debe ser una cadena de texto. Modo indica la forma en la que se acceder al archivo. Palabra clave con uno de estos valores: Append, Binary, Input, Output, Acceso, indica las operaciones permitidas en el archivo. Palabra clave con uno de estos valores: Read, Write y Read Write. NumeroFichero debe ser un nmero entero entre 1 y 511. Indica el canal de escritura o lectura que utilizar el ordenador para manejar la informacin. LongitudRegistro es la longitud del registro en caso de que el acceso al archivo sea aleatorio, si el acceso es secuencial se ignorar. Ejemplo: Open C:\CursoVB\Cap6\Datos.dat For Output As #1
6 Acceso a ficheros
La orden anterior abre un archivo llamado Datos.dat para escribir (salida Output) en l, en caso de no existir creara uno nuevo. Tambin podemos observar como se le asigna el canal de escritura 1. Nota: 1) Hay muchas ocasiones en las que el programador no sabe el directorio concreto en el que se encuentra la aplicacin y se desea escribir en un archivo de dicha carpeta. En estos casos se utiliza el objeto App (Aplicacin), que tiene una propiedad llamada Path en la que se encuentra la ruta del programa que se est ejecutando. Ej.: Open App.Path & \Datos.dat For Output As #1 2) No es recomendable asignar el nmero de canal directamente, es mejor utilizar una variable entera y buscar el canal libre con la funcin FreeFile. Dim NumFich As Integer, Nombre As String NumFich = FreeFile Nombre = App.Path & \Datos.dat Open Nombre For Output As #NumFich Igual que la instruccin Open sirve para abrir un archivo y luego poder escribir o leer en l, la instruccin Close se utiliza para cerrar el archivo una vez ha sido utilizado. La sintaxis de la orden Close es mucho ms sencilla que la sintaxis de la orden Open, es suficiente con indicar el nmeros del archivo Close #numerodearchivo Escritura y lectura en un fichero Existen varias formas de escribir en un archivo, vamos a comenzar viendo las formas ms sencillas y despus cada uno puede profundizar segn sus necesidades. Comenzaremos escribiendo en un archivo de forma secuencial y ms tarde veremos como escribir de forma aleatoria. Forma secuencial Los archivos secuenciales se escriben y leen de forma ordenada, es decir, si despus de abrir un archivo realizamos la operacin de lectura, estamos leyendo el primer dato que se escribi. Al escribir los datos se van almacenando unos detrs de otros en el orden en el que lo hayamos programado. Una vez abierto el archivo, vamos a comenzar escribiendo en l. Para ello vamos a utilizar la instruccin Write, cuya sintaxis es: Write #numerodearchivo, lista de variables Ejemplo: Dim Num As Integer, Cad as String, NumFich As Integer Num = 456 Cad = Hola NumFich = FreeFile Open App.Path & \Datos.dat For Output As #NumFich (Abre el archivo) Write #NumFich, Num, Cad (Esta es la instruccin que escribe en el archivo) Close #NumFich (Cierra el archivo)
6 Acceso a ficheros
Como se puede comprobar en el ejemplo, despus de escribir los datos en el archivo hay que cerrar el archivo, en el caso de que no lo vayamos a utilizar. Para leer el archivo que hemos escrito debemos utilizar la orden Input que tiene la siguiente sintaxis: Input #numerodearchivo, lista de variables En la utilizacin de Write y de Input hay que tener cuidado en el orden en el cual se especifica la lista de variables, pues debe ser el mismo. El archivo escrito en el ejemplo anterior lo podemos leer as: Ejemplo: Dim Num As Integer, Cad as String, NumFich As Integer NumFich = FreeFile Open App.Path & \Datos.dat For Output As #NumFich (Abre el archivo) Input #NumFich, Num, Cad (Esta es la instruccin que lee del archivo) Close #NumFich (Cierra el archivo) Podemos comprobar en el ejemplo anterior como se sigue la misma estructura explicada anteriormente, es decir, buscamos un canal libre para el archivo que vamos a leer, seguidamente abrimos el archivo en modo Input (obtener datos de l), leemos la informacin y cerramos el archivo. Ejercicio: Crea un formulario con un TextBox y un botn Command de manera que al pulsar el botn se guarde en un archivo llamado prueba.dat el contenido del TextBox. A continuacin crea un segundo formulario con un botn Command y un control Label de forma que al pulsar sobre el botn se lea el contenido del archivo prueba.dat y lo muestre en el control Label. Forma aleatoria Un archivo aleatorio tiene la posibilidad de leer o escribir un dato en cualquier momento, sin necesidad de leer o escribir los intermedios. A esta ventaja de los archivos aleatorios, hay que aadir algunos inconvenientes (ms bien un poco de organizacin). Los archivos aleatorios se utilizan cuando se desea almacenar informacin que tiene una estructura y longitud determinada (registros de una base de datos). Se debe conocer la longitud de los registros antes de abrir el archivo, para este cometido se suele utilizar la funcin Len(variable). Para comenzar a ver los archivos de acceso aleatorio vamos a comenzar viendo cmo podemos crear un tipo de registro para guardar un tipo determinado de informacin. Se utiliza la estructura Type ... End Type. Ejemplo: Public Type Registro Campo1 As String Campo2 As Integer Campo3 As Single End Type Este cdigo debemos escribirlo en el apartado General (Declaraciones), es decir, fuera de cualquier evento.
6 Acceso a ficheros
Con este cdigo conseguimos crear un nuevo tipo de dato que ya podemos utilizar, por ejemplo podemos declarar una variable llamada Reg del tipo Registro, es decir, el siguiente cdigo es vlido: Dim Reg As Registro Reg.Campo1 = Miguel Reg.Campo2 = 20 Reg.Campo3 = 6.75 Si necesitamos saber qu longitud tiene un registro, podemos obtenerla mediante la funcin Len, es decir, Len(Reg) no devolvera la cantidad de memoria necesaria para almacenar la variable Reg. Vista la forma de crear un tipo de registro, podemos abrir un archivo de acceso aleatorio con el siguiente cdigo: Dim Reg As Registro, Nombre As String, NumFich As Integer NumFich = FreeFile Nombre = App.Path & \Datos.dat Open Nombre For Random As #NumFich Len = Len(Reg) Para escribir en un archivo de acceso aleatorio se utiliza la instruccin Put que tiene la siguiente sintaxis: Put #numerodearchivo, numeroderegistro, registro Siguiendo con el ejemplo anterior podramos escribir: Put #NumFich, 1, Reg De esta forma escribiramos el primer registro. Para leer un registro se utiliza la instruccin Get que tiene la siguiente sintaxis: Get #numerodearchivo, numeroderegistro, registro En el ejemplo anterior escribiramos: Get #NumFich, 1, Reg Una vez realizadas las operaciones de lectura o escritura, al igual que en el caso de acceso secuencial, deberamos continuar con el cierre del archivo que estamos utilizando: Close #NumFich
6 Acceso a ficheros
Ejemplo (Completo): Vamos a crear un programa que realizar tareas de escritura y de lectura. Escritura: Vamos a escribir tantos registros como el usuario indique en la primera caja de texto. Para cada registro escribir un String de tamao mximo 10 formado por N + nmero de registro, es decir, N & CStr(i), donde i es el nmero de registro. Escribiremos un nmero entero aleatorio comprendido entre 0 y 999, es decir, Cint(Rnd * 1000) y como tercer campo escribiremos un nmero Single aleatorio comprendido entre 0 y 10, es decir, Rnd * 10. Lectura: Cuando se pulse el botn Leer, slo se leer un registro el registro que el usuario haya indicado en la segunda caja de texto. El contenido de este registro se mostrar en 3 etiquetas (en este caso las etiquetas se han llamado Campo1, Campo2 y Campo3 (No son las que muestran Campo1, Campo2 y Campo3, son las que estn debajo).
6 Acceso a ficheros
Private Type Registro Campo1 As String * 10 Campo2 As Integer Campo3 As Single End Type Private Sub BtEscribir_Click() Dim Reg As Registro Dim NumFich As Integer, i As Integer, Nombre As String Nombre = App.Path & "\Datos.dat" NumFich = FreeFile Open Nombre For Random As #NumFich Len = Len(Reg) Randomize For i = 1 To CInt(Text1.Text) Reg.Campo1 = "N " & CStr(i) Reg.Campo2 = CInt(Rnd * 1000) Reg.Campo3 = Rnd * 10 Put #NumFich, i, Reg Next i Close #NumFich End Sub Private Sub BtLeer_Click() Dim Reg As Registro Dim NumFich As Integer, i As Integer, Nombre As String Nombre = App.Path & "\Datos.dat" NumFich = FreeFile Open Nombre For Random As #NumFich Len = Len(Reg) i = CInt(Text2.Text) Get #NumFich, i, Reg Campo1.Caption = Reg.Campo1 Campo2.Caption = Reg.Campo2 Campo3.Caption = Reg.Campo3 Close #NumFich End Sub Private Sub Command3_Click() End End Sub