Upload
vunhan
View
224
Download
0
Embed Size (px)
Citation preview
1
Algoritmos y ProgramaciónAlgoritmos y ProgramaciónClase 8Clase 8
Ordenamiento y Búsqueda
Anexo: Uso de Procedimientos Sub y Procedimientos Function
Clase 82
EXAMENEXAMEN
1.1. Lunes 16 de abril 4 Lunes 16 de abril 4 pmpm..
2.2. Tema: Lo visto hasta la clase de hoy.Tema: Lo visto hasta la clase de hoy.
Clase 83
ContenidoContenidoOrdenamiento y Búsqueda1.1 Ejemplos.
1.2 Métodos de Ordenamiento:
Intercambio o Burbuja
Selección
Inserción (Anexo, para estudiar)
1.3 Métodos de búsqueda:
Secuencial
Binaria
Clase 84
1.1 Ejemplos1.1 Ejemplos
Ordenamiento y búsquedaOrdenamiento y búsqueda::
En el directorio telefónico.En el directorio telefónico.En el diccionario.En el diccionario.Inventarios.Inventarios.Lista de carnés.Lista de carnés.Billetes (con repetición)Billetes (con repetición)Facturación, proveedores.Facturación, proveedores.BibliotecaBiblioteca, etc., etc.
Clase 85
OrdenamientoOrdenamiento
El ordenamiento de una serie de datos puede ser ascendente o descendente:
Orden ascendente: X1 ≤ X2 ≤... ≤ Xi-1 ≤Xi ≤ Xi+1 ≤... ≤ XnOrden descendente: X1 ≥ X2 ≥... ≥ Xi-1 ≥Xi ≥ Xi+1 ≥ ... ≥ Xn
Clase 86
Métodos de ordenamientoMétodos de ordenamiento
Cinco métodos básicos de ordenamiento de vectores:
Intercambio (“Burbuja”)Intercambio (“Burbuja”)SelecciónSelecciónInserciónInserción**ShellShell**QuickSortQuickSort
EjemploEjemplo: Un mazo de cartas, de una sola pinta.: Un mazo de cartas, de una sola pinta.
TareaTarea
7
1.2.1 Método de OrdenamientoIntercambio (Burbuja)
Clase 88
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Para abreviar la explicación del algoritmo se toma Para abreviar la explicación del algoritmo se toma
un subconjunto del mazo de cartas, por ejemplo elun subconjunto del mazo de cartas, por ejemplo el
conformado por las cartas que se muestran.conformado por las cartas que se muestran.
1. Desplegar las cartas sobre una Desplegar las cartas sobre una mesa,en línea, figuras hacia arribamesa,en línea, figuras hacia arriba
Clase 89
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
2. Intercambiar las cartas que están desordenadas: (se compara la primera con todas las demás)1 2 3 4 5 6 7
2.1 La carta de la primera posición es mayor que la carta ubicada en la segunda posición. Hay que efectuar intercambiointercambio. La carta 5 se lleva a la posición 1, y la carta 9 a la posición 2.
Clase 810
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
2.1 La carta en la primeraposición se lleva a unaubicación temporal.
Esta carta se ubicará
en la segunda posición
2. 2. IntercambiarIntercambiar las cartas que están las cartas que están desordenadas: (se compara la primera con desordenadas: (se compara la primera con todas las demás)todas las demás)
Clase 811
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
La carta en la ubicación temporal se lleva a la segunda posición. Así se ha efectuado un proceso deintercambiointercambio (transposición, permutación).
Clase 812
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
RESULTADO PARCIAL DEL ORDENAMIENTORESULTADO PARCIAL DEL ORDENAMIENTO
Clase 813
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Ahora, la carta 5 es la primera, y es menor que la carta 9. Es decir, NO se realiza intercambio. Luego la carta 5 se compara con la siguiente (4).La carta 5 es mayor que la 4.Entonces SíSí se efectúa el intercambiointercambio.
Clase 814
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
La carta 4, en la posición 3, se lleva a una ubicacióntemporal; la carta 5, en la posición 1, se lleva a laposición 3; y la carta 4 se lleva de la posición temporala la posición 1.
RESULTADO PARCIAL DEL ORDENAMIENTORESULTADO PARCIAL DEL ORDENAMIENTO
Clase 815
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
La carta 4, en la posición 1, se compara con lasdemás; el intercambio se hace con la carta 2, que estáen la posición 5.
Clase 816
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
2.2 La carta 2, ahora en la posición 1, es la de menorvalor.
2. 2. IntercambiarIntercambiar las cartas que están las cartas que están desordenadas: (se compara la primera desordenadas: (se compara la primera con todas las demás)con todas las demás)1 2 3 4 5 6 71 2 3 4 5 6 7
Clase 817
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
El proceso de intercambio se repite hasta que las cartasestén ordenadas ascendentemente.
2. 2. IntercambiarIntercambiar las cartas que están las cartas que están desordenadas: (se compara la segunda desordenadas: (se compara la segunda con todas las demás)con todas las demás)1 2 3 4 5 6 71 2 3 4 5 6 7
Clase 818
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Este método implica dos iteraciones: una que toma cadacarta; y otra que compara la carta tomada con todas lasdemás; en dicha comparación se decide efectuar, o no,el intercambiointercambio.
3. 3. FinalizarFinalizar cuando todas las cartas cuando todas las cartas están ordenadas:están ordenadas:
1 2 3 4 5 6 71 2 3 4 5 6 7
Clase 819
Intercambio (Burbuja)Intercambio (Burbuja)Ordenar ascendentemente:
1. Desplegar las cartas sobre una mesa, en línea, figuras hacia arriba.
2. Intercambiar las cartas que están desordenadas:2.1 Llevar la carta con número inferior a la posición de la carta con la cual se va a intercambiar.
2.2 Llevar la carta con número superior a la posición de la carta descrita en 2.1.
3. Repetir el paso 2, hasta que no se encuentren cartas desordenadas.
Clase 820
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
El algoritmo en Visual Basic:El algoritmo en Visual Basic:ForFor i = 1 i = 1 ToTo NN--11
ForFor j= i+1 j= i+1 ToTo NNIf(X(jIf(X(j) > X(i))) > X(i))ThenThen
temptemp = X(i)= X(i)X(i) = X(j)X(i) = X(j)X(j) = X(j) = temptemp
EndEnd ififNextNext jj
NextNext ii
Máximo
N-1 N-1
Número de comparaciones ~ N2
Clase 821
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Ejemplo de la función de la variable Ejemplo de la función de la variable Temporal (Temporal (TempTemp):):
Temp
Clase 822
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Ejemplo de la función de la variable Ejemplo de la función de la variable Temporal (Temporal (TempTemp):):
1
Temp
Clase 823
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Ejemplo de la función de la variable Ejemplo de la función de la variable Temporal (Temporal (TempTemp):):
2
Temp
Clase 824
Intercambio (Burbuja), cont.Intercambio (Burbuja), cont.
Ejemplo de la función de la variable Ejemplo de la función de la variable Temporal (Temporal (TempTemp):):
3
Temp
Clase 825
1.2.1 Intercambio (“Burbuja”), cont.1.2.1 Intercambio (“Burbuja”), cont.
número de elementos
# d
e co
mpa
raci
ones
Algoritmoexponencial ~ N2
26
1.2.2 Método de OrdenamientoSelección
Clase 827
2 Método de Selección2 Método de Selección, , cont.cont.
1. Desplegar las cartas sobre una mesa Desplegar las cartas sobre una mesa figuras hacia arribafiguras hacia arriba
Clase 828
Método de SelecciónMétodo de Selección, cont., cont.
2. Retirar la carta de menor valor y ubicarla en otro sitio:
Clase 829
Método de SelecciónMétodo de Selección, cont., cont.
3. Del mazo restante en la mesa, seleccionar la3. Del mazo restante en la mesa, seleccionar lacarta de menor valor, retirarla de la mesa y carta de menor valor, retirarla de la mesa y
ponerla en el otro sitio, detrás de la anterior.ponerla en el otro sitio, detrás de la anterior.
Clase 830
Método de SelecciónMétodo de Selección, cont., cont.
4. Al finalizar, las cartas estarán ordenadas4. Al finalizar, las cartas estarán ordenadasascendentemente:ascendentemente:
Puede demostrarse que el método de selección requiereun número de comparaciones de (N2 - N)/2. En el mejorde los casos, el número de intercambios es cero y en el peor de los casos es (N2 - N)/2.
Clase 831
Ejemplo utilizando el Mazo de Cartas Ejemplo utilizando el Mazo de Cartas de una sola pintade una sola pinta
1.Desplegar las cartas sobre una mesa, figuras hacia arriba.
2.Seleccionar la carta de menor valor, retirarla de la mesa, ponerla en la mano.
3.Del mazo restante en la mesa, seleccionar la carta de menor valor, retirarla de la mesa y ponerla en la mano, detrás de la anterior.
4.Repetir paso 3. Al terminar, las cartas están ordenadas en la mano.
Clase 832
Método de SelecciónMétodo de Selección, cont., cont.Programa en Visual Basic:Programa en Visual Basic:
For i = 1 To N-1c = i : t = X(i)For j = i+1 To N
If(X(j) >= t)Thenc = j : t = X(j)
End IfNext j
X(c) = X(i)
X(i) = t
Next i
Clase 833
Eficiencia de los MétodosEficiencia de los Métodos
Algunos parámetros a considerar son:
1.Número de comparaciones que se efectúan.
2.Número de intercambios de posición (transposiciones) que se ejecutan.
Las transposiciones toman la mayor parte del tiempo.
Clase 8
1.3 1.3 Métodos de BúsquedaMétodos de Búsqueda
La búsqueda implica hallar un elemento en una lista de datos.
Métodos de búsqueda:
SecuencialBinaria
35
1.3.1 Búsqueda Secuencial
Clase 8
BBúsqueda Secuencialúsqueda Secuencial
Lectura de datos vector A(N)
K = 0
Dok = k + 1
Loop Until(Dato = A(k) or k=N)
~ N
El arreglo puede estar, o no estar, ordenado .
Clase 837
Búsqueda SecuencialBúsqueda Secuencial
If k = n And dato <> a(k) ThenText1.Text = "dato no encontrado "
ElseText1.Text = "Posición " & kText2.Text = "Dato " & dato
End If
38
1.3.2 Búsqueda Binaria
Clase 8
2 B2 Búsqueda Binariaúsqueda BinariaEl arreglo está ordenado ascendentemente:1. Comparar el “dato” buscado con el elemento del
medio.1.1. Si aquel es menor que el dato del medio,
entonces la búsqueda se hace en la primera mitad.
1.2. De lo contrario, el “dato” buscado puede estar en la segunda mitad.
2. Repetir el proceso hasta que se encuentre el “dato” buscado, o hasta que se agoten los elementos.
Clase 840
Búsqueda Binaria
Inf
[a1 a2 a3 a4 … am … aj … an]
Supm=(Inf+Sup)/2
A() es un vector ordenado ascendentemente y se esta buscando un “dato” entre los lìmites superior e inferior.
Si dato buscado < am
Sup = m-1
Si dato buscado > am
Inf = m+1Si dato buscado = amLa posición buscada = m
Clase 8
BBúsqueda Binaria, cont.úsqueda Binaria, cont.
Ejemplo: Para hallar el Dato = 40, en la lista 10,20,30,40,50,60,70,80,90
Primero se compara con el elemento del medio, 50. Puesto que Dato < 50, la búsqueda continua con la primera mitad:
10,20,30,40,50. El elemento del medio es ahora 30, que es menor que 40 (el dato buscado).
La búsqueda sigue con la lista 40,50. Encontrándose el valor buscado (40) en uno de los extremos.
Clase 8
BBúsqueda Binaria, cont.úsqueda Binaria, cont.
Lectura de datos X(N)Inf = 1 : Sup = NDom = (Inf+Sup)/2If (dato < X(m))Then
Sup = m Else If(dato > X(m))ThenInf = m
End IfLoop Until (dato=X(m) or Inf >= Sup)
Clase 843
Presentación de resultados
If(dato=X(m)) ThenText1.text = “La posición es:” & mText2.text = “El dato es: ” & X(m)
ElseText1.text = “El dato no se encontro”
EndIf
Clase 8
BBúsqueda Binaria (cont.)úsqueda Binaria (cont.)Este método es más eficiente que el anterior ya que con las primeras dos comparaciones se descartan 3/4 de los datos (el 75%).
~ N: Secuencial
~ Log2(N): Binaria
número de elementos
Com
para
cion
es
45
TAREAS
Clase 846
Listado de ejercicios…
Calcular el mayor y el menor valor de un vector.Calcular la suma y el promedio de un vector.Invertir las entradas de un vector sobre el mismo vector, ej:
[5, 6, 9, 1, 3, 0, 4][4, 0, 3, 1, 9, 6, 5]
Clase 847
Listado de ejercicios…
Conocidas las coordenadas de un conjunto de puntos:
Calcular un vector en la que el elemento (i) sea la distancia del punto i al origen.Calcular una matriz en la que el elemento (i,j) sea la distancia del punto i al punto j.
Clase 848
Listado de ejercicios…
Conocido un vector: identificar qué posición ocupa el cuarto siete?
49
ANEXO 1
50
1.2.3 Método de OrdenamientoInserción
Clase 851
Método de Inserción, cont.Método de Inserción, cont.
Ejemplo: Ejemplo: Ordenar las letras W Q R D C A B Ordenar las letras W Q R D C A B en orden alfabético.en orden alfabético.
1 2 3 4 5 6 7 (posición)1 2 3 4 5 6 7 (posición)Inicial: W Q R D C A BInicial: W Q R D C A B
Paso 1: Q W Paso 1: Q W (los dos primeros se ordenan)(los dos primeros se ordenan)
Paso 2: Q R W Paso 2: Q R W (insertar tercero, en orden)(insertar tercero, en orden)
Paso 3: D Q R W Paso 3: D Q R W (insertar cuarto, en orden)(insertar cuarto, en orden)
Paso 4: C D Q R W Paso 4: C D Q R W (insertar quinto, en orden)(insertar quinto, en orden)
Paso 5: A C D Q R W Paso 5: A C D Q R W (insertar sexto, en orden)(insertar sexto, en orden)
Paso 6: A B C D Q R W Paso 6: A B C D Q R W (insertar séptimo, en (insertar séptimo, en
orden)orden)
Clase 852
Método de InserciónMétodo de Inserción
1. Sostener el mazo de cartas en la mano.2. Tomar dos cartas, colocarla en la mesa. La de
menor valor antes de la de mayor valor.3.Tomar una carta, ubicarla en la mesa,
insertándola en el lugar correcto.Esto implica tener que “empujar” hacia
adelante o hacia atrás, para efectuar lainserción correspondiente.
4. Repetir paso 3, hasta que se agoten las cartas de la mano.
Clase 853
Método de Inserción, cont.Método de Inserción, cont.Programa en Visual Basic:Programa en Visual Basic:
For i = 2 To Nt = X(i) : j = i-1Do Until(j = 0 And t >= X(j))
X(j+1) = X(j)
j = j -1LoopX(j+1) = t
Next i
Método de Inserción también es ~ N2.
54
ANEXO 2ANEXO 2
Subprogramas (Procedimientos):Procedimientos SubProcedimientos Function
Clase 855
Para simplificar las tareas de programación se dividen los programas en componentes lógicos más pequeños. Estos componentes lógicos se denominan procedimientosprocedimientos o subrutinassubrutinas.Los procedimientos resultan muy útiles para condensar las tareas repetitivas o compartidas, como cálculos utilizados frecuentemente, manipulación de texto y controles, operaciones con bases de datos, etc.
SubprogramasSubprogramas
Clase 856
Ya se han utilizado algunos tipos de subprogramas:
Funciones de la librería estándar de VB: Val(), Str(), Sqr(), Atn(), Abs(), etc.Otras funciones: MsgBox(), InputBox(), etc.Métodos propios de algunos controles: Clear, AddItem, Scale, Cls, Line, Circle, etc.Procedimientos asociados a eventos: Private Sub Command1_Click() End Sub
SubprogramasSubprogramas
Clase 857
Un procedimiento siempre se define a nivel de módulo (estándar o de formulario). Por lo tanto, un procedimiento no se puede anidar dentro de otro procedimiento.Todo el código ejecutable de un programa en VB debe estar contenido en uno o varios procedimientos.En VB se utilizan varios tipos de procedimientos:
Procedimientos SubSub que no devuelven un valor.Procedimientos FunctionFunction que devuelven un valor.
Crear procedimientosCrear procedimientos
Clase 858
Los procedimientos Sub no devuelven un valor.Sintaxis:AlcanceAlcance SubSub NombreProcNombreProc((parámetrosparámetros))
CuerpoProcedimientoCuerpoProcedimientoEndEnd SubSub
AlcanceAlcance: Opcional. Es el alcance del procedimiento. Puede ser PrivatePrivate o PublicPublic. Si no se especifica se asume PublicPublic.NombreProcNombreProc: Requerido. Es el nombre del procedimiento.
Procedimientos Procedimientos SubSub
Clase 859
parámetrosparámetros: Opcional. Son los parámetros del procedimiento. (Véase más adelante).CuerpoProcedimientoCuerpoProcedimiento: Opcional. Son las instrucciones que conforman al procedimiento.Cada vez que se llama al procedimiento se ejecutan las instrucciones que hay entre SubSub y EndEnd SubSub. El cuerpo del procedimiento puede tener instrucciones ExitExit SubSub, la cual permite salir de inmediato del procedimiento. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó el procedimiento Sub.
Procedimientos Procedimientos SubSub
Clase 860
Existen dos tipos de procedimientos SubSub: Procedimientos Generales y Procedimientos de Eventos.Un procedimiento de evento es un procedimiento que hace referencia a un evento de un objeto. Siempre el nombre de un procedimiento de evento se compone por el nombre del objeto, seguido de un subrayado, seguido del nombre del evento:
nombreObjeto_nombreEventonombreObjeto_nombreEvento
Ejemplo: Command1_Click(), Form_Load(), Form_Resize()Un procedimiento general indica a la aplicación cómo realizar una tarea específica.
Procedimientos Procedimientos SubSub
Clase 861
Son procedimientos que devuelven un valor.Sintaxis:
AlcanceAlcance FunctionFunction NombreProc(parámetrosNombreProc(parámetros) As Tipo) As TipoCuerpoProcedimientoCuerpoProcedimiento
EndEnd FunctionFunction
AlcanceAlcance: Opcional. Es el alcance del procedimiento. Puede ser PrivatePrivate o PublicPublic. Si no se especifica se asume PublicPublic.NombreProcNombreProc: Requerido. Es el nombre del procedimiento.
Procedimientos Procedimientos FunctionFunction
Clase 862
parámetrosparámetros: Opcional. Son los parámetros del procedimiento. (Véase más adelante).CuerpoProcedimientoCuerpoProcedimiento: Opcional. Son las instrucciones que conforman al procedimiento. Puede tener instrucciones ExitExit FunctionFunction.
TipoTipo: Es el tipo de dato que retorna el procedimiento.El valor que retorna un procedimiento FunctionFunction se le debedebe asignar al nombre del procedimiento, en caso contrario se retorna el valor por defecto.
Procedimientos Procedimientos FunctionFunction
Clase 863
Los argumentos pueden ser constantes, variables o expresiones pasadas a un procedimiento.Ejemplo: en la expresión: X = X = SqrSqr(15)(15), el valor 1515corresponde al argumento pasado a la función SqrSqr de la librería estándar de VB.El parámetro es el nombre de variable por el cual un argumento de procedimiento se conoce dentro del procedimiento. Esta variable recibe el argumento que se pasa dentro del procedimiento. Su alcance es local, es decir, el alcance termina cuando el procedimiento finaliza.
Argumentos Argumentos vsvs ParámetrosParámetros
Clase 864
Los parámetros de un procedimiento corresponde a una lista de variables (separadas por comas) que representan los argumentos que se pasan a un procedimiento cuando se le llama. La declaración de argumentos (parámetros) de un procedimiento tiene la siguiente sintaxis:
[OptionalOptional] [ByValByVal | ByRefByRef] [ParamArrayParamArray] nombre_variablenombre_variable[( )] [AsAs tipotipo]
[= valor_predeterminadovalor_predeterminado]
En la sintaxis, los corchetes ([]) significan que la expresión es opcionalopcional y la barra vertical (|) significa exclusión lógica.
Declaración de ArgumentosDeclaración de Argumentos
Clase 865
ByValByVal indica que el argumento se pasa por valor, es decir, se pasa su valor (una copia de la variable) en vez de su dirección. Como resultado, el valor actual de la variable no puede ser cambiado por el procedimiento al cual se pasa.
Declaración de ArgumentosDeclaración de Argumentos
Clase 866
ByRefByRef indica que el argumento se pasa por referencia, es decir, se pasa su dirección en vez de su valor. Como resultado, el valor real de la variable puede ser cambiado por el procedimiento al cual se pasa. ByRefByRef es el modo predeterminado en Visual Basic.
Declaración de ArgumentosDeclaración de Argumentos
Clase 867
nombre_variablenombre_variable es el nombre del parámetro.Los paréntesis al final del nombre de la variable significan que el parámetro recibe un array. No se debe especificar tamaño ni número de dimensiones del array, sólo se colocan los paréntesis vacíos.tipotipo es el tipo de dato del parámetro. Si no se especifica se asume VariantVariant.
Declaración de ArgumentosDeclaración de Argumentos
Clase 868
Utilizando la instrucción Utilizando la instrucción CallCall::CallCall nombre_procedimiento(arg1nombre_procedimiento(arg1,arg2,,arg2,…,argN…,argN))
En este caso, se debese debe utilizar paréntesis después del nombre del procedimiento.Si el procedimiento retorna un valor, este se pierde.Útil para procedimientos SubSub.Ejemplo: CallCall SqrSqr(15)(15)
Llamar procedimientosLlamar procedimientos
Clase 869
En una expresión:En una expresión:nombre_procedimiento(arg1nombre_procedimiento(arg1,arg2,,arg2,…,argN…,argN))En este caso, se debese debe utilizar paréntesis después del nombre del procedimiento.Sólo es válido para procedimientos FunctionFunction.Ejemplos:
X = X = SqrSqr(15)(15)
Y = Y = AbsAbs(10 * X (10 * X –– AtnAtn(2))(2))
Llamar procedimientosLlamar procedimientos
Clase 870
Ejemplo 1Ejemplo 1
Realizar un procedimiento genérico que permita leer una matriz por el teclado de elementos reales.Realizar un procedimiento genérico que permita mostrar una matriz de elementos reales en una caja de texto.
Clase 871
Ejemplo 1: AnálisisEjemplo 1: Análisis
Un procedimiento genérico para leer una matriz necesita:
Un parámetro que recibe la matriz de tipo real simple: A() As SingleUn parámetro por referencia, de tipo entero, para el número de filas: N As IntegerUn parámetro por referencia, de tipo entero, para el número de columnas: M As Integer
Clase 872
Ejemplo 1: AnálisisEjemplo 1: Análisis
Un procedimiento genérico para mostrar una matriz en una caja de texto necesita:
Un parámetro que recibe la matriz de tipo real simple: A() As SingleUn parámetro por valor, de tipo entero, para el número de filas: ByVal N As IntegerUn parámetro por valor, de tipo entero, para el número de columnas: ByVal M As IntegerUn parámetro con la referencia de la caja de texto: txt As TextBox
Clase 873
Ejemplo 1: ImplementaciónEjemplo 1: ImplementaciónProcedimiento genérico para leer una matriz:
PublicPublic SubSub LeerMatriz(ALeerMatriz(A() () As SingleAs Single, N , N As As IntegerInteger, _, _M M As As IntegerInteger))
DimDim I I As As IntegerIntegerN = N = Val(InputBoxVal(InputBox("Número de Filas:"))("Número de Filas:"))M = M = Val(InputBoxVal(InputBox("Número de Columnas:"))("Número de Columnas:"))ReDimReDim A(1 A(1 ToTo N, 1 N, 1 ToTo M)M)ForFor I = 1 I = 1 ToTo NN
ForFor J = 1 J = 1 ToTo MMA(IA(I, J) = , J) = Val(InputBoxVal(InputBox("Ingrese elemento(" & _("Ingrese elemento(" & _
I & ", " & J & "):"))I & ", " & J & "):"))NextNext JJ
NextNext IIEndEnd SubSub
Clase 874
Ejemplo 1: ImplementaciónEjemplo 1: Implementación
Procedimiento genérico para mostrar una matriz:
PublicPublic SubSub MostrarMatriz(AMostrarMatriz(A() () As SingleAs Single, , ByValByVal N N As As IntegerInteger, _, _
ByValByVal M M As As IntegerInteger, , txttxt As As TextBoxTextBox))
DimDim I I As As IntegerInteger
txt.Texttxt.Text = ""= ""
ForFor I = 1 I = 1 ToTo NN
ForFor J = 1 J = 1 ToTo MM
txt.Texttxt.Text = = txt.Texttxt.Text & & A(IA(I, J) & , J) & vbTabvbTab
NextNext JJ
txt.Texttxt.Text = = txt.Texttxt.Text & & vbCrLfvbCrLf
NextNext II
EndEnd SubSub
Clase 875
Ejemplo 2Ejemplo 2
Realizar un procedimiento que permita multiplicar dos matrices: Una matriz AA de orden mmxxnn y una matriz BBde orden ppxxqq.
Nota: Las matrices se pueden multiplicar si y sólo si nn == pp. El orden de la matriz resultante es mmxxqq.
Clase 876
Ejemplo 2: AnálisisEjemplo 2: Análisis
Un procedimiento para multiplicar dos matrices necesita:
Dos parámetros que reciben las matrices de tipo real simple: A() As Single, B() As SingleCuatro parámetros por valor, de tipo entero, para el orden de cada matriz: N1 As Integer, M1 As Integer, N2 As Integer, M2 As IntegerUn parámetro que devuelve la matriz resultante: C() As SingleEl procedimiento devolverá True si se realizó la multiplicación, en caso contrario devolverá False.
Clase 877
Ejemplo 2: ImplementaciónEjemplo 2: Implementación
Procedimiento para multiplicar dos matrices:
PublicPublic FunctionFunction MultMat(AMultMat(A() () As SingleAs Single, B() , B() As SingleAs Single, _, _ByValByVal N1 N1 As As IntegerInteger, , ByValByVal M1 M1 As As IntegerInteger, _, _ByValByVal N2 N2 As As IntegerInteger, , ByValByVal M2M2 As As IntegerInteger, _, _C() C() As SingleAs Single) ) As As BooleanBoolean
DimDim I I As As IntegerInteger, J, J As As IntegerInteger, K, K As As IntegerInteger, , SumSum As SingleAs SingleIfIf M1 <> N2M1 <> N2 ThenThen MultMatMultMat = = FalseFalse: : ExitExit FunctionFunctionReDimReDim C(1 C(1 ToTo N1, 1 N1, 1 ToTo M2)M2)ForFor I = 1 I = 1 ToTo N1N1
ForFor J = 1 J = 1 ToTo M2M2SumSum = 0= 0ForFor K = 1 K = 1 ToTo M1M1
SumSum = = SumSum + + A(IA(I, K) * , K) * B(KB(K, J), J)NextNext KKC(IC(I, J) = , J) = SumSum
NextNext JJNextNext IIMultMatMultMat = = TrueTrue
EndEnd FunctionFunction
Clase 878
Ejemplo 3Ejemplo 3
Realizar un programa en VB que permita, leer, multiplicar dos matrices y mostrar el resultado.
Clase 879
Ejemplo 3: AnálisisEjemplo 3: Análisis
Un programa que permita multiplicar dos matrices necesita:
Leer las dos matricesRealizar la multiplicaciónMostrar el resultado si la multiplicación fue posible, en caso contrario, mostrar un mensaje descriptivo.
El programa puede hacer uso de los procedimientos definidos anteriormente, implementándolos en un módulo estándar.
Clase 880
Ejemplo 3: ImplementaciónEjemplo 3: Implementación
'En el evento Click de un botón de Comando.DimDim M1() M1() As SingleAs Single, M2() , M2() As SingleAs Single, M3() , M3() As SingleAs SingleDimDim N N As As IntegerInteger, M , M As As IntegerInteger, P , P As As IntegerInteger, Q, Q As As IntegerIntegerCallCall LeerMatriz(M1LeerMatriz(M1, N, M), N, M)CallCall LeerMatriz(M2LeerMatriz(M2, P, Q), P, Q)IfIf ((MultMat(M1MultMat(M1, M2, N, M, P, Q, M3)), M2, N, M, P, Q, M3)) ThenThen
MostrarMatrizMostrarMatriz M3,M3, UBoundUBound(M3(M3, 1),, 1), UBoundUBound(M3(M3, 2), Text1, 2), Text1ElseElse
MsgBoxMsgBox "No se puede multiplicar las matrices: " & _"No se puede multiplicar las matrices: " & _"El número de columnas de la primera matriz es " & _"El número de columnas de la primera matriz es " & _"diferente al número de filas de la segunda " & _"diferente al número de filas de la segunda " & _"matriz.", "matriz.", vbExclamationvbExclamation, "Error", "Error"
EndEnd IfIf