Está en la página 1de 10

VISUAL BASIC 6

GUIA 3

Ing. Raymond Marquina 1


MATRICES
Una matriz es un conjunto de elementos contiguos, todos del mismo tipo,
que comparten un nombre común, a los que se puede acceder por la posición
(índice) que ocupa cada uno de ellos dentro de la matriz. Esta disposición permitirá
escribir código más pequeño y más simple, ya que se pueden establecer bucles
mediante el número del índice. Cada elemento es una variable que puede contener
un dato numérico o una cadena de caracteres, dependiendo esto del tipo de la
matriz.

Declaración de una matriz


La declaración de una matriz especifica el nombre de la matriz, el número de
elementos en la misma y el tipo de estos. En función del número de dimensiones,
distinguimos entre matrices unidimensionales y multidimensionales.

Sentencia Dim
La sentencia Dim, además de para declarar variables, se puede utilizar
también 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 numéricas, separadas por comas y que definen
las dimensiones de la matriz
As tipo: define el tipo de la variable
Ejemplos: La siguiente línea define una matriz unidimensional llamada
Temp. Con subíndices definidos en el rango de 0 a 59, esto es los elementos de la
matriz son: temp(0), temp(1).......temp(59). El límite inferior predeterminado es 0.

Dim Temp (59) As Integer

Para especificar el límite inferior explícitamente 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 explícitos:

Dim mb(1 To 10, 1 To 10) As Currency

Ing. Raymond Marquina 2


MATRICES ESTATICAS

Para declarar una matriz estática (matriz con un numero fijo de elementos),
Visual Basic hace tres consideraciones importantes:
• Para declarar una matriz global, hágalo 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, hágalo 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 dinámica. El espacio necesario para una matriz estática se asigna al
iniciarse la aplicación y permanecerá fijo. En cambio, el espacio para una matriz
dinámica será asignado durante la ejecución de la aplicación. Una matriz dinámica
puede ser redimensionada en cualquier momento durante la ejecución. Para crear
una matriz dinámica:
• 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 dinámica 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 aplicación que lea las notas correspondientes a los alumnos de
un determinado curso, las almacene en una matriz y de cómo resultado las nota
media del curso. Preste atención al procedimiento que se debe desarrollar:
1. Iniciamos una nueva aplicación 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 3


Caption Ejemplo Uso de Matrices
Font Arial, 12, Negrita
AutoRedraw True

El procedimiento completo se muestra a continuación: En la sección de


declaraciones del formulario ingrese el siguiente código:

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

Añadir el código necesario a la aplicación anterior para obtener la nota máxima y


mínima y escribirlas. La solución del problema planteado puede ser así. Suponemos
inicialmente que el primer valor almacenado en la matriz notas es el máximo y el
mínimo (como si todos los valores fueran iguales). Después 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 pequeño que el menor actual.

A continuación se detalla el código, que se debería agregar al procedimiento


descrito anteriormente:

'Nota Máxima y Nota Mínima


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 aplicación utilizando controles como cajas de texto, botones de


pulsación, etiquetas, etc. Tanto para la entrada como para la salida de los datos.

Ing. Raymond Marquina 4


Ordenamiento de los elementos de una lista

Uno de los procedimientos mas comunes y útiles en el procesamiento de datos es la


ordenación de los mismos, la ordenación tanto numérica como alfanumérica, sigue
las mismas reglas que empleamos nosotros en la vida normal. Hay muchas formas
de ordenar datos, y de estas, la ordenación por el " método de la burbuja " es uno
de los mas populares. Veamos a continuación 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 comparación sea
mayor que, se intercambian los valores de los elementos comparados. Con
esto conseguimos llevar el valor mayor a la posición 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 posición n-1.
3. Repetimos el punto 1, ahora para los n-2 primeros elementos de la lista, y
así sucesivamente.
4. La ordenación termina después de repetir el proceso descrito, n-1 veces, o
cuando al finalizar la ejecución de iesimo proceso no haya habido ningún
cambio.

El siguiente ejemplo presenta la programación de este algoritmo para el caso


concreto de ordenar alfabéticamente 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 código en la sección de declaraciones:

Private Type Ficha


Nombre As String * 40
Nota As Single
End Type
Private Alumno() As Ficha

Escriba el siguiente código 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 5


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 aplicación utilizando controles gráficos, como botones, cajas de


texto, etiquetas, cuadros de mensajes, etc.

EJERCICIOS PROPUESTOS:

 Realizar un programa que almacene la temperatura máxima de cada uno de


los días del mes de Agosto de un determinado año y a continuación imprima
la temperatura media, mínima y máxima de ese mes.
 Realizar un programa para que dada, una cantidad de dinero en Bolívares,
de cómo resultado el número de billetes y monedas en que se descompone
el monto según 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 tamaño idéntico. Cada
registro esta compuesto de campos que guardan datos

Registro 1 Registro 2
JANE JHON
27 32 Etc.
Campo1 Campo1
Campo2 Campo2
… …

Ing. Raymond Marquina 6


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 números telefónicos.

Objeto Propiedad Valor Objeto Propiedad Valor


Form Name FrmPhone CommandButton Name CmdNew
Caption PHONE Caption Nuevo
MaxButton False
TextBox Name TxtName CommandButton Name CmdNext
Text vacio Caption Siguiente
MaxLenght 40
TexBox Name TxtPhone CommandButton Name CmdPrevious
Text Vacio Caption Previo
MaxLength 40
TextBox Name TxtComments CommandButton Name CmdExit
Text Vacio Caption Salir
MaxLength 100
Multiline True
ScrollBars Vertical
Label Name LblComments
Caption Comentarios
Label Name LblPhone
Caption Telefono
Label Name LblName
Caption Nombre

Ing. Raymond Marquina 7


Codificación 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 nómbrelo 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 nómbrelo 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 código en el botón 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 8


Coloque el siguiente código en el botón Nuevo del Formulario

Private Sub CmdNew_Click()


'Guarda el registro actual
SaveCurrentRecord
'Añade 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 código en el botón 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 código en el botón 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 código 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 9


'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