Está en la página 1de 10

VISUAL BASIC 6

GUIA 3

Ing. Raymond Marquina

MATRICES Una matriz es un conjunto de elementos contiguos, todos del mismo tipo, que comparten un nombre comn, a los que se puede acceder por la posicin (ndice) que ocupa cada uno de ellos dentro de la matriz. Esta disposicin permitir escribir cdigo ms pequeo y ms simple, ya que se pueden establecer bucles mediante el nmero del ndice. Cada elemento es una variable que puede contener un dato numrico o una cadena de caracteres, dependiendo esto del tipo de la matriz.

Declaracin de una matriz La declaracin de una matriz especifica el nombre de la matriz, el nmero de elementos en la misma y el tipo de estos. En funcin del nmero de dimensiones, distinguimos entre matrices unidimensionales y multidimensionales.

Sentencia Dim La sentencia Dim, adems de para declarar variables, se puede utilizar tambin para declarar matrices. Su sintaxis es: Dim variable (dims) As tipo, variable (dims) As tipo variable: es un identificador que nombra la matriz. dims: es una lista de expresiones numricas, separadas por comas y que definen las dimensiones de la matriz As tipo: define el tipo de la variable Ejemplos: La siguiente lnea define una matriz unidimensional llamada Temp. Con subndices definidos en el rango de 0 a 59, esto es los elementos de la matriz son: temp(0), temp(1).......temp(59). El lmite inferior predeterminado es 0. Dim Temp (59) As Integer Para especificar el lmite inferior explcitamente utilice la palabra clave To. El ejemplo siguiente define una matriz de 60 elementos; los ndices van de 1 a 60. Cada elemento es una cadena de caracteres de longitud fija (40 caracteres) Dim temp(1 To 60) As String * 40 La sentencia siguiente declara una matriz bidimensional de 10 por 10 elementos de tipo Double: Dim ma(9, 9) as Double Se puede declarar una o ambas dimensiones con limites inferiores explcitos: Dim mb(1 To 10, 1 To 10) As Currency

Ing. Raymond Marquina

MATRICES ESTATICAS Para declarar una matriz esttica (matriz con un numero fijo de elementos), Visual Basic hace tres consideraciones importantes: Para declarar una matriz global, hgalo en la seccion de declaraciones de un modulo utilizando la sentencia Public. Public temp(59) As Integer Para declarar una matriz a nivel de formulario, hgalo en la seccion de declaraciones del formulario utilizando la sentencia Private o Dim Private temp(59) As Integer Para declarar una matriz local a un procedimiento, utilice la sentencia Dim o Static dentro del propio procedimiento Dim temp(59) As Integer

MATRICES DINAMICAS Cuando las dimensiones de una matriz no son siempre las mismas, la mejor forma de especificarlas es mediante variables. Una matriz declarada de esta forma es una matriz dinmica. El espacio necesario para una matriz esttica se asigna al iniciarse la aplicacin y permanecer fijo. En cambio, el espacio para una matriz dinmica ser asignado durante la ejecucin de la aplicacin. Una matriz dinmica puede ser redimensionada en cualquier momento durante la ejecucin. Para crear una matriz dinmica: Declare la matriz en la seccion de declaraciones de un modulo con una sentencia Public si la quiere global o con Private o Dim si la quiere a nivel del formulario, o en un procedimiento con Static o Dim si la quiere local. Para especificar que la matriz va a ser dinmica deje la lista de dimensiones vacia. Por ejemplo: Dim Matriz_A( ) Asigne el numero actual de elementos con la sentencia ReDim. Se supone que N esta definida previamente ReDim Matriz_A(N+1) La sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el numero de elementos de la matriz, no el numero de dimensiones. Sin embargo, no puede declarar una matriz de un tipo de datos y luego usar ReDim para cambiar la matriz a otro tipo de datos. Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en la matriz se pierde.

EJERCICIOS RESUELTOS Realizar una aplicacin que lea las notas correspondientes a los alumnos de un determinado curso, las almacene en una matriz y de cmo resultado las nota media del curso. Preste atencin al procedimiento que se debe desarrollar: 1. Iniciamos una nueva aplicacin Exe. Estandar 2. Abrimos el procedimiento Form Load y declaramos las variables a nivel de formulario 3. Se le debe preguntar al usuario por el numero de alumnos, que debe coincidir con el numero de elementos que necesitamos contenga la matriz, y en base a ese dato definimos las dimensiones de la misma 3. Almacenamos en la matriz las notas introducidas desde el teclado 4. Sumamos todas las notas, utilizando para esto una variable de tipo acumulador. Es importante observar que su valor inicial debe ser cero. 5. Calculamos la media y la visualizamos en un nuevo formulario defina las siguientes propiedades: Nombre Matriz BackColor Blanco

Ing. Raymond Marquina

Caption Ejemplo Uso de Matrices Font Arial, 12, Negrita AutoRedraw True El procedimiento completo se muestra a continuacin: En la seccin de declaraciones del formulario ingrese el siguiente cdigo: Private Notas() As Single El procedimiento Load del Form, escriba lo siguiente: Private Sub Form_Load() ' Nota media del curso Dim Nalumnos As Integer ' Numero de Alumnos Dim i As Integer Dim SUMA As Single Nalumnos = InputBox("Introduzca el Numero de alumnos:", "Ingreso de Datos") ReDim Notas(1 To Nalumnos) 'Entrada de Datos For i = 1 To Nalumnos Notas(i) = InputBox("Alumno: " & i & ", Nota Final: ") Next i 'Sumar las notas For i = 1 To Nalumnos SUMA = SUMA + Notas(i) Next i 'Escribir los resultados Print "La nota media del curso es: "; Format(SUMA / Nalumnos, "#0.00") End Sub Aadir el cdigo necesario a la aplicacin anterior para obtener la nota mxima y mnima y escribirlas. La solucin del problema planteado puede ser as. Suponemos inicialmente que el primer valor almacenado en la matriz notas es el mximo y el mnimo (como si todos los valores fueran iguales). Despus comparamos cada uno de estos valores con los restantes de la lista. El valor de la lista comparado pasara a ser el nuevo mayor si es mas grande que el mayor actual y pasara a ser el nuevo menor si es mas pequeo que el menor actual. A continuacin se detalla el cdigo, que se debera agregar al procedimiento descrito anteriormente: 'Nota Mxima y Nota Mnima Dim Max As Single, Min As Single Max = Notas(1): Min = Notas(1) For i = 2 To Nalumnos If Notas(i) > Max Then Max = Notas(i) If Notas(i) < Min Then Min = Notas(i) Next i Print "La Nota Maxima del Curso es: "; Format(Max, "#0.00") Print "La Nota Minima del Curso es: "; Format(Min, "#0.00") Escriba esta aplicacin utilizando controles como cajas de texto, botones de pulsacin, etiquetas, etc. Tanto para la entrada como para la salida de los datos.

Ing. Raymond Marquina

Ordenamiento de los elementos de una lista Uno de los procedimientos mas comunes y tiles en el procesamiento de datos es la ordenacin de los mismos, la ordenacin tanto numrica como alfanumrica, sigue las mismas reglas que empleamos nosotros en la vida normal. Hay muchas formas de ordenar datos, y de estas, la ordenacin por el " mtodo de la burbuja " es uno de los mas populares. Veamos a continuacin el algoritmo correspondiente para ordenar una lista de n elementos de menor a mayor: 1. Comparamos el primer elemento con el segundo, el segundo con el tercero, el tercero con el cuarto, etc. Cuando el resultado de una comparacin sea mayor que, se intercambian los valores de los elementos comparados. Con esto conseguimos llevar el valor mayor a la posicin n. 2. Repetimos el punto 1, ahora para los n-1 primeros elementos de la lista. Con esto conseguimos llevar el valor mayor de estos a la posicin n-1. 3. Repetimos el punto 1, ahora para los n-2 primeros elementos de la lista, y as sucesivamente. 4. La ordenacin termina despus de repetir el proceso descrito, n-1 veces, o cuando al finalizar la ejecucin de iesimo proceso no haya habido ningn cambio. El siguiente ejemplo presenta la programacin de este algoritmo para el caso concreto de ordenar alfabticamente la matriz de estructuras del tipo Ficha por el campo nombre. Recuerde, fijar las siguientes propiedades en el formulario: Nombre ValOrdena ForeColor Negro Caption Metodo Burbuja BackColor Blanco AutoRedraw True Font Arial, 12, Negrita Escriba el siguiente cdigo en la seccin de declaraciones: Private Type Ficha Nombre As String * 40 Nota As Single End Type Private Alumno() As Ficha Escriba el siguiente cdigo en el procedimiento Load del Form Private Sub Form_Load() Dim n As Integer, i As Integer Dim s As Integer, k As Integer Dim Aux As Ficha n = InputBox("Numero de Alumnos de la lista", "Ingreso de Datos") ReDim Alumno(1 To n) As Ficha ' Entrada de Datos For i = 1 To n With Alumno(i) .Nombre = InputBox("Nombre del Alumno:", "Ingreso de Datos") .Nota = InputBox("Nota del Alumno:", "Ingreso de Datos") End With Next i 'ORDENAMIENTO DE LOS ELEMENTOS DE LA LISTA s=1

Ing. Raymond Marquina

k=n While (s = 1) And (k > 1) s=0 'suponemos la lista ordenada For i = 2 To k If Alumno(i - 1).Nombre > Alumno(i).Nombre Then Aux = Alumno(i - 1) Alumno(i - 1) = Alumno(i) Alumno(i) = Aux s=1 End If Next i k=k-1 Wend 'Escribir la lista For i = 1 To n Print Alumno(i).Nombre; Tab(40); Alumno(i).Nota Next i End Sub Intente mejorar la aplicacin utilizando controles grficos, como botones, cajas de texto, etiquetas, cuadros de mensajes, etc.

EJERCICIOS PROPUESTOS: Realizar un programa que almacene la temperatura mxima de cada uno de los das del mes de Agosto de un determinado ao y a continuacin imprima la temperatura media, mnima y mxima de ese mes. Realizar un programa para que dada, una cantidad de dinero en Bolvares, de cmo resultado el nmero de billetes y monedas en que se descompone el monto segn el sistema monetario Venezolano.

ACCESO A ARCHIVOS Muchos programas necesitan leer y escribir datos en archivos de disco. Hay tres formas para accesar los archivos en Visual Basic: Acceso Aleatorio Acceso Secuencial Acceso Binario Archivos de Acceso Aleatorio Un archivo de acceso aleatorio es similar a una base de datos. Esta compuesto por una serie de registros de tamao idntico. Cada registro esta compuesto de campos que guardan datos Registro 1 JANE 27 Campo1 Campo2 Registro 2 JHON 32 Campo1 Campo2

Etc.

Ing. Raymond Marquina

El Programa Phone El programa Pone ilustra la manera de crear y manejar archivos de acceso aleatorio. El programa le permite mantener un archivo de datos llamado PHONE.DAT que guarda registros de personas y sus nmeros telefnicos. Objeto Form Propiedad Name Caption MaxButton Name Text MaxLenght Name Text MaxLength Name Text MaxLength Multiline ScrollBars Name Caption Name Caption Name Caption Valor FrmPhone PHONE False TxtName vacio 40 TxtPhone Vacio 40 TxtComments Vacio 100 True Vertical LblComments Comentarios LblPhone Telefono LblName Nombre Objeto CommandButton Propiedad Name Caption Name Caption Name Caption Name Caption Valor CmdNew Nuevo CmdNext Siguiente CmdPrevious Previo CmdExit Salir

TextBox

CommandButton

TexBox

CommandButton

TextBox

CommandButton

Label Label Label

Ing. Raymond Marquina

Codificacin del Programa Phone Option Explicit Private Type PersonInfo Name As String * 40 Phone As String * 40 Comment As String * 100 End Type 'declara variables que deben ser visibles en todo el formulario Private gPerson As PersonInfo Private gFileNum As Integer Private gRecordLen As Long Private gCurrentRecord As Long Private gLastRecord As Long Agregar nuevo procedimiento en el form seleccionado agregar procedimiento en el men herramientas y nmbrelo SaveCurrentRecord Public Sub SaveCurrentRecord() 'Llena a gPerson con los datos desplegados gPerson.Name = TxtName.Text gPerson.Phone = TxtPhone.Text gPerson.Comment = TxtComments.Text 'Guarda gPerson en el registro actual Put #gFileNum, gCurrentRecord, gPerson End Sub Agregar otro nuevo procedimiento en el form seleccionado agregar procedimiento en el menu herramientas y nmbrelo ShowCurrentRecord Public Sub ShowCurrentRecord() 'Llena a gPerson con los datos del registro actual Get #gFileNum, gCurrentRecord, gPerson 'Despliega a gPerson TxtName.Text = Trim(gPerson.Name) TxtPhone.Text = Trim(gPerson.Phone) TxtComments.Text = Trim(gPerson.Comment) 'Despliega el numero del registro actual en el titulo del form FrmPhone.Caption = "Registro " & Str(gCurrentRecord) & " / " & Str(gLastRecord) End Sub Coloque el siguiente cdigo en el botn Salir del Formulario Private Sub CmdExit_Click() 'Guarda el registro actual SaveCurrentRecord 'Cierra el programa Close #gFileNum 'termina el programa End End Sub

Ing. Raymond Marquina

Coloque el siguiente cdigo en el botn Nuevo del Formulario Private Sub CmdNew_Click() 'Guarda el registro actual SaveCurrentRecord 'Aade un nuevo registro en blanco gLastRecord = gLastRecord + 1 gPerson.Name = "" gPerson.Phone = "" gPerson.Comment = "" Put #gFileNum, gLastRecord, gPerson 'Actualiza a gCurrentRecord gCurrentRecord = gLastRecord 'Despliega el registro que acaba de crear ShowCurrentRecord TxtName.SetFocus End Sub Coloque el siguiente cdigo en el botn Siguiente del Formulario Private Sub CmdNext_Click() If gCurrentRecord = gLastRecord Then Beep MsgBox "Final del Archivo de datos!", vbExclamation Else SaveCurrentRecord gCurrentRecord = gCurrentRecord + 1 ShowCurrentRecord End If TxtName.SetFocus End Sub Coloque el siguiente cdigo en el botn Previo Private Sub CmdPrevious_Click() 'Si el registro actual es el primer registro emite un sonido y despliega un mensaje de error 'en caso contrario, guarda el registro actual 'y vuelve al registro anterior If gCurrentRecord = 1 Then Beep MsgBox "Comienzo del Archivo de datos!", vbExclamation Else SaveCurrentRecord gCurrentRecord = gCurrentRecord - 1 ShowCurrentRecord End If TxtName.SetFocus End Sub Coloque el siguiente cdigo el procedimiento Load del Formulario Private Sub Form_Load() 'Calcula la longitud de un registro gRecordLen = Len(gPerson) 'Obtiene el el siguiente numero de archivos disponible gFileNum = FreeFile

Ing. Raymond Marquina

'Abre el archivo para acceso aleatorio, si el archivo no existe lo crea Open "PHONE.DAT" For Random As gFileNum Len = gRecordLen 'Actualiza gcurrentrecord gCurrentRecord = 1 'Encuentra cual es el ultimo numero de registro del archivo gLastRecord = LOF(gFileNum) / gRecordLen 'Si el archiv acaba de ser creado If gLastRecord = 0 Then gLastRecord = 1 End If 'Despliega el registro actual ShowCurrentRecord End Sub

Ing. Raymond Marquina

10

También podría gustarte