Está en la página 1de 0

UNIVERSIDAD MAYOR DE SAN ANDRES

FACULTAD TECNICA

28
CAPITULO 5

MATRICES

5.1- Introduccin

Una matriz es una coleccin de variables similares, donde cada una posee el mismo nombre y todas son del
mismo tipo.

5.2.- Declaracin de matrices

Al iniciar el programa es necesario dimensionar la o las matrices como una variable cualquiera, es decir con la
sentencia DIM, por ejemplo:

DIM A(6) as Integer: Indica que la matriz unidimensional A, llamado tambin vector, tendr un
mximo de 7 elementos a ser: A(0), A(1), A(2), A(3), A(4), A(5) y A(6), todos del tipo entero.
Recuerde que el ndice del primer elemento de una matriz es siempre cero.

DIM A(1 To 6) as Single: Indica que el vector A, tendr como mximo 6 elementos a ser: A(1), A(2),
A(3), A(4), A(5) y A(6). En este caso se forz que el ndice del primer elemento sea 1.

DIM A(6, 6) as Single: Indica que la matriz A que contiene filas y columnas, tendr como mximo de
49 elementos de 7 filas y 7 columnas de tipo real, es una matriz de 7 x 7.

DIM A(1 To 6, 1 To 6) as Single: Indica que la matriz A, tendr como mximo de 36 elementos de 6
filas y 6 columnas de tipo real, es una matriz de 6 x 6.

DIM A(1 To 6, 1 To 6, 1 To 6) as Single: Indica que la matriz A, tendr como mximo de 216
elementos de 6 filas, 6 columnas y 6 planos de tipo real, es una matriz de 6 x 6 x 6. Se puede definir
matrices de ms de dos dimensiones, por ejemplo A(1,1,1). Visual Basic permite un mximo de 60
dimensiones.

Si previamente no se conoce el tamao de la matriz, se la denomina matriz dinmica y para dimensionarla se
procede de la siguiente manera:

DIM A( ) as String: Indica que el vector A, tendr un nmero no determinado de elementos de tipo caracter.
Sin embargo, posteriormente se debe utilizar la sentencia ReDim para definir el nmero de elementos.

DIM A(n ,n ) as Integer: Indica que la matriz A, tendr un nmero n de elementos de tipo entero.

Ejercicio 5.1: Elaborar un programa que imprime en un caja de texto los elementos de una matriz
unidimensional de 20 elementos de nmeros impares. El formulario debe verse como la figura que se muestra a
continuacin.

Duberty Silva
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

Duberty Silva
29
Nota:
Los elementos de la matriz deben ser llenadas con nmeros impares, antes de mostrarlos en la caja de
texto.

Ejemplo 5.1: Elaborar un programa que sume dos matrices A y B. El formulario debe verse como la figura.
La planilla se generar de acuerdo al orden que se requiera. Tanto el orden de la matriz como los datos
funcionan con la tecla enter".

El objeto donde se ve la matriz se denomina MSFlexGrid, para obtenerlo debemos adicionarlo en la barra de
herramientas. Inicialmente seleccionamos del men de VB, la opcin Proyecto, luego componentes y de la
ventana seleccionamos Microsoft FlexGrid Control 6.0 y aceptamos. En la barra de herramientas aparecer el
control MSFlexGrid y podemos preceder a trabaja con ella como cualquier otro control.

A este nuevo control lo denominaremos GridMatriz y sus propiedades Cols y Rows sern iguales a cero.
La codificacin del programa se ve a continuacin:

declarar en general
Dim orden As Integer, veces As Integer For j =1 To orden
Dim mat As String GridMatriz.Col =j - 1
Dim bandera As Integer GridMatriz.Row =i - 1
Dim a(10, 10) As Single GridMatriz.Text =c(i, j)
Dim b(10, 10) As Single Next j
Next i
Private Sub cmdMatA_Click() lblMat.Caption ="C"
ver a(), A cmdNuevo.SetFocus
End Sub End Sub

Private Sub cmdMatB_Click() Private Sub txtDatos_KeyPress(KeyAscii As Integer)
ver b(), B Static co As Integer
End Sub Static fi As Integer
If KeyAscii =13 Then
Private Sub cmdNuevo_Click() If veces =1 And co =0 And fi =0 Then
borrar borrar
txtOrden.Text ="" lblMat.Caption ="B"
txtOrden.SetFocus End If
txtDatos.Enabled =True GridMatriz.Col =co
veces =0 GridMatriz.Row =fi
End Sub GridMatriz.Text =CSng(txtDatos.Text)
txtDatos.Text =""
Private Sub cmdsalir_Click() co =co +1
End End If
End Sub If co =GridMatriz.Cols Then
co =0
Private Sub cmdSuma_Click() fi =fi +1
ReDim c(orden, orden) As Single End If
For i =1 To orden If fi =GridMatriz.Rows Then
For j =1 To orden veces =veces +1
c(i, j) =a(i, j) +b(i, j) If bandera =0 Then
Next j almacenar a()
Next i bandera =1
For i =1 To orden Else
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

30
almacenar b()
bandera =0
txtDatos.Enabled =False
End If
co =0
fi =0
Exit Sub
End If
End Sub

Private Sub txtOrden_KeyPress(KeyAscii As Integer)
If KeyAscii =13 Then
orden =CInt(txtOrden.Text)
GridMatriz.Visible =True
GridMatriz.Cols =orden
GridMatriz.Rows =orden
lblMat ="A"
txtDatos.SetFocus
End If
End Sub

Public Sub almacenar(a() As Single)
For i =1 To orden
For j =1 To orden
GridMatriz.Col =j - 1
GridMatriz.Row =i - 1
a(i, j) =CSng(GridMatriz.Text)
Next j
Next i
End Sub

Public Sub borrar()
For i =1 To orden
For j =1 To orden
GridMatriz.Col =j - 1
GridMatriz.Row =i - 1
GridMatriz.Text =""
Next j
Next i
End Sub

Public Sub ver(aux() As Single, lab As String)
For i =1 To orden
For j =1 To orden
GridMatriz.Col =j - 1
GridMatriz.Row =i - 1
GridMatriz.Text =aux(i, j)
Next j
Next i
lblMat.Caption =lab
End Sub


La sentencia Static en VB indica que esta variales no se reinicirn cada vez que se entre al procedimiento.
Gridmatriz.Cols (columnas) y Gridmatriz.Rows (filas) nos indica los valores mximos de la matriz.
Gridmatriz.Col (columnas) y Gridmatriz.Row (filas) nos indica la posicin actual del cursor en la matriz.

Ejercicio 5.2: Modificar el anterior programa de tal manera que permita el producto de dos matrices.

5.3- Cuadros de lista (ListBox) y cuadros combinados (ComboBox)

De todos los controles estndar, el ListBox y ComboBox son los que mejor sirven para categorizar y enumerar
informacin, desde la que los usuarios pueden elegir y seleccionar informacin. Estos controles se relacionan
muy estrechamente entre s y la diferencia radica en que el ComboBox combina un control ListBox con un
control TextBox, permitiendo que los usuarios seleccionen de una lista o escriban un nuevo valor.

En VB se denomina lista, a una matriz de cadenas de caracteres a las que se hace referencia por medio de la
propiedad list, puede agregar cadenas a esta propiedad de un ListBox o ComboBox en tiempo de diseo o
ejecucin.

Para agregar cadenas en tiempo de diseo, se selecciona la propiedad list y escriba las cadenas en el cuadro
desplegable.

Para agregar cadenas en tiempo de ejecucin, se emplea el mtodo AddItem, que tiene la siguiente sintaxis:

Objeto.AddItem Cadena a agregar
Donde:
Objeto: es el nombre del control ListBox o ComboBox.
Cadena a agregar: Es la cadena que se desea agregar a la lista del control.
Ejemplo: lstUniversidad.AddItem UMSA

Ejercicio 5.3: Realizar el ejercicio 5.1, utilizando un control ListBox en lugar de la caja de texto.

5.3.1.- Seleccin de elementos de una lista

Una lista es una matriz de cadenas de caracteres que tiene asignado un ndice. Para un ListBox o ComboBox, el
elemento seleccionado de una lista est contenido en la propiedad ListIndex. Cuando se selecciona una cadena
de un ListBox, VB asigna el nmero de posicin de esa cadena a la propiedad ListIndex del control.
Duberty Silva
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

31
Ejemplo 5.2: Calcular el costo de una computadora aplicando , checkBox, ListBox y ComboBox. El formulario
tendr la siguiente apariencia.

Control Propiedad Valor Control Propiedad Valor
FrmListas Name frmListas cmdSalir Name cmdSalir
Caption ListBox y ComboBox Caption SALIR
CmdCosto Name cmdCosto chkImpresora Name chkImpresora
Caption COSTO Caption Impresora
chkScanner Name
Caption
chkScanner
Scanner
txtCosto Name
Caption
txtCosto

ListBox Name lstDisco ComboBox Name cboMicros
List 60 GB, 80 GB,
100 GB, 120 GB,
160 GB
List Pentium 1, pentium 2,
pentium 3, Pentium 4,
Celeron
El cdigo del botn Costo es el siguiente:

Private Sub cmdCosto_Click()
Dim val_disco as integer, val_micro as integer
Dim c_disco as integer, c_micro as integer, acce As
Integer
val_disco =lstDisco.ListIndex
Select Case val_disco
Case 0
c_disco =70
Case 1
c_disco =80
Case 2
c_disco =100
Case 3
c_disco =120
Case 4
c_disco =150
Case Else
MsgBox "DISCO NO SELECCIONADO", vbCritical,
"ADVERTENCIA"
End Select
val_micro =cboMicros.ListIndex
Select Case val_micro
Case 0
c_micro =70
Case 1
c_micro =90
Case 2
c_micro =110
Case 3
c_micro =140
Case 4
c_micro =70
Case Else
MsgBox "MICROPROCESADOR NO
SELECCIONADO", vbCritical, "ADVERTENCIA"
End Select
acce =0
If chkImpresora Then
acce =50
End If
If chkScanner Then
acce =acce +70
End If
txtCosto.Text =CStr(c_disco +c_micro +acce)
End Sub

Private Sub cmdSalir_Click()
End
End Sub

Duberty Silva
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

32
5.4.- Matriz de controles

Una matriz de controles es un conjunto de objetos que comparten el mismo nombre y tipo, por lo cul tambin
comparten los mismos procedimientos.

Ejemplo 5.3: Calcular el tanto por ciento de una cantidad determinada y el total (cantidad inicial ms la cantidad
del porcentaje), usando una matriz de controles. El formulario tendr los siguientes objetos:

Control Propiedad Valor Control Propiedad Valor
FrmPorcientos Name FrmPorciento CmdSalir Name CmdSalir
Caption Porcentajes Caption SALIR
CmdPorciento Name CmdPorciento CmdPorciento Name CmdPorciento
Caption +6% Caption +13%
CmdPorciento Name CmdPorciento TxtCantidad Name Txtcantidad
Caption +33% Text
TxtPorciento Name TxtPorciento TxtTotal Name TxtTotal
Text Text
LblPorciento Name LblPorciento LblCantidad Name LblCantidad
Caption Caption CANTIDAD
LblTotal Name LblTotal
Caption TOTAL

El procedimiento para los tres botones de porcentaje es:

Private Sub cmdPorciento_Click(Index As Integer)
Dim cantidad as single, porciento as single, total1 As Single
porciento =Val(cmdPorciento(Index).Caption)
cantidad =CSng(txtCantidad.Text)
total1 =(porciento / 100) * cantidad
lblporciento.Caption =CStr(porciento) & "%"
txtPorciento.Text =CStr(total1)
txtTotal.Text =CStr(total1 +cantidad)
End Sub

Las matrices de controles se pueden determinar mediante su ndice. Recuerde que VB siempre inicia sus
matrices en 0.

5.4.1.- Creando controles en tiempo de ejecucin

5.4.1.1.- Control en tiempo de ejecucin a partir de una matriz de controles

Para aadir un nuevo control a una matriz de controles en tiempo de ejecucin, se utiliza la sentencia load y
para eliminarlo la sentencia unload, seguido del nombre del control y su ndice respectivo.
Cuando se aade un nuevo elemento a una matriz de controles, todas las propiedades, excepto Visible,
Index y Tabindex son copiadas del elemento ms bajo de la matriz. Por otra parte, ninguno de los controles
creados sern visibles, ya que se crean con esta propiedad en false.
Duberty Silva
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

Duberty Silva
33

Ejercicio 5.4: Adicionar, al ejemplo 5.2, un cuarto botn de comando de porcentaje en tiempo de ejecucin.
Este nuevo botn aparecer cuando el valor de cantidad supere el valor de 500.

5.4.1.2.- Control en tiempo de ejecucin sin necesidad de una matriz de controles

Ejemplo 5.4: En el siguiente ejemplo, se crea un botn de control a partir de un formulario en blanco.

En General y declaraciones
Dim WithEvents cmdObj1 As CommandButton

Codificacin para el Nuevo botn cmd
Private Sub cmdObj1_Click()
MsgBox "Esto es un control dinmico"
End Sub

Private Sub Form_Load()
Set cmdObj1 =Form1.Controls.Add("VB.CommandButton", "cmdBoton1")
cmdObj1.Caption ="Plsame"
cmdObj1.Left =1500
cmdObj1.Top =1000
cmdObj1.Visible =True
End Sub

Private Sub Form_Unload(Cancel As Integer)
Form1.Controls.Remove "cmdBoton1"
End Sub

Ejemplo 5.5: Realizar un programa que se asemeje a la calculadora de windows, utilizando matrices de
controles. La apariencia del formulario deber ser la siguiente:

Control Propiedad Valor Control Propiedad Valor
frmCalculadora Name frmCalculadora cmdPunto Name cmdPunto
Caption CALCULADORA Caption .
MinButton True cmdOperacion Name cmdOperacion
MaxButton False Caption +, -, *, /, =(matriz)
CmdDigitos Name cmdDigitos LblPantalla Name lblPantalla
Caption del 0 al 9 (matriz) caption 0.
CmdPorciento Name cmdPorciento cmdBorrarUlt Name cmdBorrarUlt
Caption % Caption CE
cmdBorrarTodo Name cmdBorrarTodo cmdMasMenos Name cmdMasMenos
Caption C Caption +/-
Secuencia a seguir:

5.4.2.1.- Escritura de nmeros:
1. Cuando se haga clic sobre un nmero, este tendr que aparecer en la pantalla de la calculadora. Pruebe
ejecutando el programa.
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

34

2. Cuado se haga clic en un segundo nmero, este debe aparecer juntamente con el primer nmero en la
pantalla. Pruebe ejecutando el programa.

3. Los ceros iniciales no son significativos, por lo tanto no debe ser tomados en cuenta. La estructura para
lograr tal condicin es: si la pantalla contiene el texto 0. y la primer entrada es 0 entonces se debe
salir del procedimiento. La salida del procedimiento se consigue con la sentencia exit sub. Pruebe
ejecutando el programa.

4. Notar que al ejecutar el programa, todos los nmeros, en la pantalla, empiezan con 0.. Esto indica
que la pantalla debe ser inicializada cada vez que el usuario vaya a introducir un nuevo nmero. La
forma de conseguirlo, es utilizando una variable de tipo texto a manera de bandera, marca o sea. Esta
variable la denominaremos UltimaEntrada y la declararemos en general y declaraciones. (Probar
declarando en el objeto cmdDigitos).
La condicin es: si bandera es diferente de DIGITO, es seal de que es el primer nmero y debemos
borrar la pantalla de la calculadora caso contrario, es decir, si bandera tiene el texto DIGITO, es seal
de que ya se ha introducido un nmero anteriormente.
Al final del cdigo en el objeto cmdDigitos, debemos escribir UltimaEntrada = DIGITO, para
asegurarnos que el usuario siga introduciendo nmeros si as lo decide. Pruebe ejecutando el programa.

5.4.2.2.- Escritura del punto decimal:

Se debe analizar con tres posibilidades:
1. El usuario introduce un nmero que no tiene parte entera y empieza la entrada pulsando la tecla punto.
Preguntar si es el primer nmero, utilice la bandera del prrafo anterior (variable UltimaEntrada) y
mostrar en la pantalla 0. Pruebe ejecutando el programa.

2. El nmero tiene parte entera y no debe aceptar un segundo punto decimal. Declarar una variable de tipo
boolean, a manera de segunda bandera, que sea false si no existe un punto decimal y true si ya
existe un punto decimal. Pruebe ejecutando el programa. funciona para nmeros de la forma 0.0...?

Nmeros de la forma 0.0...

Para solucionar este problema, es necesario corregir el procedimiento cmdDigitos, aadiendo la condicin de
Punto decimal =false en el punto 3. Pruebe ejecutando el programa.

5.4.2.3.- Escritura del operando:

Una vez que el usuario ha tecleado un nmero, lo lgico es que pulse a continuacin la tecla correspondiente a la
operacin a realizar. Esto es, haciendo un clic sobre una de las teclas +, -, x, / o =, agrupadas en la matriz
Operacin

Este proceso lo podemos resumir en los siguientes puntos:

1. Primero un usuario introduce el primer operando. (ya realizado)

2. La calculadora recuerda el primer operando. Declaramos la variable Operando1 como double en
general y declaraciones, luego en el proceso de operacin almacenamos en esta variable, lo que se
encuentra actualmente en la pantalla. (pruebe ejecutando el programa).

3. A continuacin introduce un operador. Declaramos la variable Operador como string en general y
declaraciones, luego en el proceso de operacin almacenamos en esta variable, la operacin que ha
sido seleccionada. (pruebe ejecutando el programa).

4. El usuario introduce el segundo operador. Declaramos la variable Operando2 como double en general
y declaraciones. Para que el programa permita introducir un segundo nmero, debemos igualar la
variable UltimaEntradaa OPERADOR. (pruebe ejecutando el programa).

Duberty Silva
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

35
5. La calculadora recibe un segundo operador. Declaramos otra variable NumOperandos como entero en
general y declaraciones. Esta variable nos servir para determinar que operador est siendo
almacenado. Al declarar una variable tipo entero, est se inicializa con cero. Al introducir el primer
operando, la variable NumOperandos debe tener almacenado un 1 y 2 si es el segundo operando. La
pregunta es: si la variable UltimaEntrada es igual a DIGITO ha sido introducido un nmero, entonces
incrementamos el valor de NumOperandos en 1. (pruebe ejecutando el programa).

6. La calculadora recuerda el segundo operando. Para determinar que operando vamos a almacenar,
debemos preguntar si NumOperandos es 1 o 2, y dependiendo de la respuesta lo almacenaremos en las
variables Operando1 y Operando2. Note que se modifica un poco el paso nmero dos. (pruebe
ejecutando el programa).

7. La calculadora realiza la operacin entre los operandos y visualizar el resultado. El usuario terminar
de introducir el segundo operador cuando presione cualquier tecla de la matriz de controles
Operacin incluyendo =. Para realizar la operacin deseada se utilizar la sentencia Select Case y
se visualizar el resultado con una sola sentencia fuera de Select Case. (pruebe ejecutando el
programa).

8. Recuerda el resultado, como si hubiera introducido un operando y el ltimo operador. Para recordar el
resultado y que sea al mismo tiempo el primer operando, el resultado de cada operacin ser
almacenado en la variable primer operando. Cuando la tecla presionada sea = el Operando2 se
almacenar en el Operando1. Despus de mostrar el resultado en la pantalla, es necesario igualar la
variable NumOperandos a 1. (pruebe ejecutando el programa).

5.4.2.3.- Botn porcentaje:

1. Determinar la forma de trabajar del botn porcentaje. Trabajar de la siguiente forma:
Operando1 Operador Operando2 %
Ejemplo: Si teclea 1000 +5 %, se visualiza 50 y para ver 1050 presionaremos la tecla =.

2. Determinar si la ltima entrada fue un nmero. Esto se consigue preguntando si la variable
UltimaEntrada es igual a DIGITO, si es verdad procedemos a calcular el porcentaje, caso contrario
abandonamos el procedimiento.

3. Clculo del porcentaje. Declaramos una variable tipo double denominada Resultado.
Realizamos el clculo como se indica en el punto 1.
Mostramos el resultado en la pantalla, para el ejemplo mostrar 50. (pruebe ejecutando el programa).

El procedimiento de la tecla = ya lo tenemos hecho.

5.4.2.4.- Botn C:

Cuando se presione la tecla C, es porque se quiere inicializar la calculadora, esto es, como si la hubiramos
acabado de encender.
1. Es necesario inicializar todas las variables, esto se consigue invocando al procedimiento del formulario
de la siguiente forma: Form_Load. Y escribiendo en ella lo siguiente:
NumOperandos =0
Operando1 =0
Operando2 =0
UltimaEntrada =NINGUNA
Operador =
PuntoDecimal =false

2. En la pantalla debe aparecer 0.

3. Invocar al procedimiento del formulario de la siguiente forma: Form_Load. (pruebe ejecutando el
programa).
5.4.2.5.- Botn CE:
Duberty Silva
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD TECNICA

Duberty Silva
36

Cuando se pulse la tecla CE, lo que se quiere hacer es borrar el ltimo dato tecleado (dato actual de la pantalla),
porque nos hemos equivocado y tenemos que repetirlo. En este caso, lo que hay que hacer es:
1. Inicializar la pantalla a cero, es decir 0.

2. Poner las variables afectadas al valor correspondiente en ese instante, es decir:
PuntoDecimal =false
UltimaEntrada =CE
(pruebe ejecutando el programa).

5.4.2.6.- Botn +/-:

Para realizar operaciones con valores negativos, seguir los siguientes pasos:
1. Declarar una variable de tipo doble, que nos servir para almacenar el valor de la pantalla, de forma
temporal.

2. Si la pantalla actual es diferente de 0. y la variable UltimaEntrada es igual a DIGITO o es igual a
OPERADOR, el valor actual de la pantalla debemos multiplicarla por 1 y mostrarla nuevamente en
la pantalla. (pruebe ejecutando el programa).

Ejercicio 5.5: Aadir a la calculadora, las teclas de memoria M+, M- y MR.

Ejercicio 5.6: Permitir utilizar, adems del ratn, el teclado numrico para introducir datos.

Ejercicio 5.7: Aadir a la calculadora las funciones matemticas mas usuales.

También podría gustarte