Title: Algoritmos y Programacin Clase 8
1Algoritmos y ProgramaciónClase 8
- Ordenamiento y Búsqueda
- Anexo Uso de Procedimientos Sub y Procedimientos
Function
2EXAMEN
- Lunes 16 de abril 4 pm.
- Tema Lo visto hasta la clase de hoy.
3Contenido
- Ordenamiento y Búsqueda
- 1.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
41.1 Ejemplos
- Ordenamiento y búsqueda
- En el directorio telefónico.
- En el diccionario.
- Inventarios.
- Lista de carnés.
- Billetes (con repetición)
- Facturación, proveedores.
- Biblioteca, etc.
5Ordenamiento
- El ordenamiento de una serie de datos puede ser
ascendente o descendente - Orden ascendente X1 ? X2 ?... ? Xi-1 ? Xi ? Xi1
?... ? Xn - Orden descendente X1 ? X2 ?... ? Xi-1 ? Xi ?
Xi1 ? ... ? Xn
6Métodos de ordenamiento
- Cinco métodos básicos de ordenamiento de
vectores - Intercambio (Burbuja)
- Selección
- Inserción
- Shell
- QuickSort
- Ejemplo Un mazo de cartas, de una sola pinta.
Tarea
71.2.1 Método de OrdenamientoIntercambio (Burbuja)
8Intercambio (Burbuja), cont.
1. Desplegar las cartas sobre una mesa,en lÃnea,
figuras hacia arriba
Para abreviar la explicación del algoritmo se
toma un subconjunto del mazo de cartas, por
ejemplo el conformado por las cartas que se
muestran.
9 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 intercambio. La carta 5 se lleva a la
posición 1, y la carta 9 a la posición 2.
10Intercambio (Burbuja), cont.
2. Intercambiar las cartas que están
desordenadas (se compara la primera con todas
las demás)
2.1 La carta en la primera posición se lleva a
una ubicación temporal.
Esta carta se ubicará en la segunda posición
11Intercambio (Burbuja), cont.
La carta en la ubicación temporal se lleva a la
segunda posición. Asà se ha efectuado un proceso
de intercambio (transposición, permutación).
12Intercambio (Burbuja), cont.
RESULTADO PARCIAL DEL ORDENAMIENTO
13Intercambio (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Ã
se efectúa el intercambio.
14Intercambio (Burbuja), cont.
RESULTADO PARCIAL DEL ORDENAMIENTO
La carta 4, en la posición 3, se lleva a una
ubicación temporal la carta 5, en la posición 1,
se lleva a la posición 3 y la carta 4 se lleva
de la posición temporal a la posición 1.
15Intercambio (Burbuja), cont.
La carta 4, en la posición 1, se compara con
las demás el intercambio se hace con la carta 2,
que está en la posición 5.
16 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.2 La carta 2, ahora en la posición 1, es la de
menor valor.
17 Intercambio (Burbuja), cont.
2. Intercambiar las cartas que están
desordenadas (se compara la segunda con todas
las demás) 1 2 3 4 5 6 7
El proceso de intercambio se repite hasta que las
cartas estén ordenadas ascendentemente.
18 Intercambio (Burbuja), cont.
3. Finalizar cuando todas las cartas están
ordenadas 1 2 3 4 5 6 7
Este método implica dos iteraciones una que toma
cada carta y otra que compara la carta tomada
con todas las demás en dicha comparación se
decide efectuar, o no, el intercambio.
19Intercambio (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.
20Intercambio (Burbuja), cont.
- El algoritmo en Visual Basic
- For i 1 To N-1
- For j i1 To N
- If(X(j) gt X(i))Then
- temp X(i)
- X(i) X(j)
- X(j) temp
- End if
- Next j
- Next i
Máximo N-1
N-1
Número de comparaciones N2
21Intercambio (Burbuja), cont.
- Ejemplo de la función de la variable
- Temporal (Temp)
Temp
22Intercambio (Burbuja), cont.
- Ejemplo de la función de la variable
- Temporal (Temp)
1
Temp
23Intercambio (Burbuja), cont.
- Ejemplo de la función de la variable
- Temporal (Temp)
2
Temp
24Intercambio (Burbuja), cont.
- Ejemplo de la función de la variable
- Temporal (Temp)
3
Temp
251.2.1 Intercambio (Burbuja), cont.
de comparaciones
Algoritmo exponencial N2
número de elementos
261.2.2 Método de OrdenamientoSelección
272 Método de Selección, cont.
1. Desplegar las cartas sobre una mesa figuras
hacia arriba
28 Método de Selección, cont.
2. Retirar la carta de menor valor y ubicarla en
otro sitio
29 Método de Selección, cont.
3. Del mazo restante en la mesa, seleccionar la
carta de menor valor, retirarla de la mesa y
ponerla en el otro sitio, detrás de la anterior.
30Método de Selección, cont.
4. Al finalizar, las cartas estarán
ordenadas ascendentemente
Puede demostrarse que el método de selección
requiere un número de comparaciones de (N2 -
N)/2. En el mejor de los casos, el número de
intercambios es cero y en el peor de los casos
es (N2 - N)/2.
31Ejemplo utilizando el Mazo de Cartas de 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.
32 Método de Selección, cont.
Programa en Visual Basic
For i 1 To N-1 c i t X(i) For j
i1 To N If(X(j) gt t)Then c j
t X(j) End If Next j X(c)
X(i) X(i) t Next i
33Eficiencia 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.
341.3 Métodos de Búsqueda
- La búsqueda implica hallar un elemento en una
lista de datos. - Métodos de búsqueda
- Secuencial
- Binaria
351.3.1 Búsqueda Secuencial
36 Búsqueda Secuencial
Lectura de datos vector A(N) K 0 Do k k
1 Loop Until(Dato A(k) or kN)
N
El arreglo puede estar, o no estar, ordenado .
37 Búsqueda Secuencial
- If k n And dato ltgt a(k) Then
- Text1.Text "dato no encontrado "
- Else
- Text1.Text "Posición " k
- Text2.Text "Dato " dato
- End If
381.3.2 Búsqueda Binaria
392 Búsqueda Binaria
- El 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.
40Búsqueda Binaria
A() es un vector ordenado ascendentemente y se
esta buscando un dato entre los lìmites
superior e inferior.
a1 a2 a3 a4 am aj an
Si dato buscado am La posición buscada m
41Bú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 lt 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.
42Búsqueda Binaria, cont.
Lectura de datos X(N) Inf 1 Sup N Do m
(InfSup)/2 If (dato lt X(m))Then Sup m
Else If(dato gt X(m))Then Inf m End
If Loop Until (datoX(m) or Inf gt Sup)
43Presentación de resultados
- If(datoX(m)) Then
- Text1.text La posición es m
- Text2.text El dato es X(m)
- Else
- Text1.text El dato no se encontro
- EndIf
44Bú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
Comparaciones
Log2(N) Binaria
número de elementos
45TAREAS
46Listado 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
47Listado 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.
48Listado de ejercicios
- Conocido un vector
- identificar qué posición ocupa el cuarto siete?
49ANEXO 1
501.2.3 Método de OrdenamientoInserción
51Método de Inserción, cont.
Ejemplo Ordenar las letras W Q R D C A B
en orden alfabético. 1 2 3
4 5 6 7 (posición) Inicial W Q R D C A
B Paso 1 Q W (los dos primeros se
ordenan) Paso 2 Q R W (insertar tercero, en
orden) Paso 3 D Q R W (insertar cuarto, en
orden) Paso 4 C D Q R W (insertar quinto, en
orden) Paso 5 A C D Q R W (insertar sexto, en
orden) Paso 6 A B C D Q R W (insertar séptimo,
en orden)
52Mé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 la
- inserción correspondiente.
- 4. Repetir paso 3, hasta que se agoten las cartas
de la mano.
53Método de Inserción, cont.
Programa en Visual Basic
For i 2 To N t X(i) j i-1 Do
Until(j 0 And t gt X(j)) X(j1) X(j)
j j -1 Loop X(j1) t Next i
Método de Inserción también es N2.
54ANEXO 2
- Subprogramas (Procedimientos)
- Procedimientos Sub
- Procedimientos Function
55Subprogramas
- 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
procedimientos o subrutinas. - 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.
56Subprogramas
- 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
57Crear procedimientos
- 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 Sub que no devuelven un valor.
- Procedimientos Function que devuelven un valor.
58Procedimientos Sub
- Los procedimientos Sub no devuelven un valor.
- Sintaxis
- Alcance Sub NombreProc(parámetros)
- CuerpoProcedimiento
- End Sub
- Alcance Opcional. Es el alcance del
procedimiento. Puede ser Private o Public. Si no
se especifica se asume Public. - NombreProc Requerido. Es el nombre del
procedimiento.
59Procedimientos Sub
- parámetros Opcional. Son los parámetros del
procedimiento. (Véase más adelante). - CuerpoProcedimiento Opcional. Son las
instrucciones que conforman al procedimiento. - Cada vez que se llama al procedimiento se
ejecutan las instrucciones que hay entre Sub y
End Sub. - El cuerpo del procedimiento puede tener
instrucciones Exit Sub, 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.
60Procedimientos Sub
- Existen dos tipos de procedimientos Sub
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_nombreEvento
- Ejemplo Command1_Click(), Form_Load(),
Form_Resize() - Un procedimiento general indica a la aplicación
cómo realizar una tarea especÃfica.
61Procedimientos Function
- Son procedimientos que devuelven un valor.
- Sintaxis
- Alcance Function NombreProc(parámetros) As
Tipo - CuerpoProcedimiento
- End Function
- Alcance Opcional. Es el alcance del
procedimiento. Puede ser Private o Public. Si no
se especifica se asume Public. - NombreProc Requerido. Es el nombre del
procedimiento.
62Procedimientos Function
- parámetros Opcional. Son los parámetros del
procedimiento. (Véase más adelante). - CuerpoProcedimiento Opcional. Son las
instrucciones que conforman al procedimiento.
Puede tener instrucciones Exit Function. - Tipo Es el tipo de dato que retorna el
procedimiento. - El valor que retorna un procedimiento Function se
le debe asignar al nombre del procedimiento, en
caso contrario se retorna el valor por defecto.
63Argumentos vs Parámetros
- Los argumentos pueden ser constantes, variables o
expresiones pasadas a un procedimiento. - Ejemplo en la expresión X Sqr(15), el valor
15 corresponde al argumento pasado a la función
Sqr 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.
64Declaración de Argumentos
- 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 - Optional ByVal ByRef ParamArray
nombre_variable( ) As tipo
valor_predeterminado - En la sintaxis, los corchetes () significan que
la expresión es opcional y la barra vertical ()
significa exclusión lógica.
65Declaración de Argumentos
- ByVal 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.
66Declaración de Argumentos
- ByRef 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. - ByRef es el modo predeterminado en Visual Basic.
67Declaración de Argumentos
- nombre_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. - tipo es el tipo de dato del parámetro. Si no se
especifica se asume Variant.
68Llamar procedimientos
- Utilizando la instrucción Call
- Call nombre_procedimiento(arg1,arg2,,argN)
- En este caso, se debe utilizar paréntesis después
del nombre del procedimiento. - Si el procedimiento retorna un valor, este se
pierde. - Útil para procedimientos Sub.
- Ejemplo Call Sqr(15)
69Llamar procedimientos
- En una expresión
- nombre_procedimiento(arg1,arg2,,argN)
- En este caso, se debe utilizar paréntesis después
del nombre del procedimiento. - Sólo es válido para procedimientos Function.
- Ejemplos
- X Sqr(15)
- Y Abs(10 X Atn(2))
70Ejemplo 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.
71Ejemplo 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 Single - Un parámetro por referencia, de tipo entero, para
el número de filas N As Integer - Un parámetro por referencia, de tipo entero, para
el número de columnas M As Integer
72Ejemplo 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 Single - Un parámetro por valor, de tipo entero, para el
número de filas ByVal N As Integer - Un parámetro por valor, de tipo entero, para el
número de columnas ByVal M As Integer - Un parámetro con la referencia de la caja de
texto txt As TextBox
73Ejemplo 1 Implementación
- Procedimiento genérico para leer una matriz
- Public Sub LeerMatriz(A() As Single, N As
Integer, _ - M As Integer)
- Dim I As Integer
- N Val(InputBox("Número de Filas"))
- M Val(InputBox("Número de Columnas"))
- ReDim A(1 To N, 1 To M)
- For I 1 To N
- For J 1 To M
- A(I, J) Val(InputBox("Ingrese elemento("
_ - I ", " J ")"))
- Next J
- Next I
- End Sub
74Ejemplo 1 Implementación
- Procedimiento genérico para mostrar una matriz
- Public Sub MostrarMatriz(A() As Single, ByVal N
As Integer, _ - ByVal M As Integer, txt
As TextBox) - Dim I As Integer
- txt.Text ""
- For I 1 To N
- For J 1 To M
- txt.Text txt.Text A(I, J) vbTab
- Next J
- txt.Text txt.Text vbCrLf
- Next I
- End Sub
75Ejemplo 2
- Realizar un procedimiento que permita multiplicar
dos matrices - Una matriz A de orden mxn y una matriz B de
orden pxq. - Nota Las matrices se pueden multiplicar si y
sólo si n p. El orden de la matriz resultante
es mxq.
76Ejemplo 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 Single - Cuatro parámetros por valor, de tipo entero, para
el orden de cada matriz N1 As Integer, M1 As
Integer, N2 As Integer, M2 As Integer - Un parámetro que devuelve la matriz resultante
C() As Single - El procedimiento devolverá True si se realizó la
multiplicación, en caso contrario devolverá False.
77Ejemplo 2 Implementación
- Procedimiento para multiplicar dos matrices
- Public Function MultMat(A() As Single, B() As
Single, _ - ByVal N1 As Integer,
ByVal M1 As Integer, _ - ByVal N2 As Integer,
ByVal M2 As Integer, _ - C() As Single) As Boolean
- Dim I As Integer, J As Integer, K As Integer,
Sum As Single - If M1 ltgt N2 Then MultMat False Exit Function
- ReDim C(1 To N1, 1 To M2)
- For I 1 To N1
- For J 1 To M2
- Sum 0
- For K 1 To M1
- Sum Sum A(I, K) B(K, J)
- Next K
- C(I, J) Sum
- Next J
- Next I
- MultMat True
78Ejemplo 3
- Realizar un programa en VB que permita, leer,
multiplicar dos matrices y mostrar el resultado.
79Ejemplo 3 Análisis
- Un programa que permita multiplicar dos matrices
necesita - Leer las dos matrices
- Realizar la multiplicación
- Mostrar 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.
80Ejemplo 3 Implementación
- 'En el evento Click de un botón de Comando.
- Dim M1() As Single, M2() As Single, M3() As
Single - Dim N As Integer, M As Integer, P As Integer, Q
As Integer - Call LeerMatriz(M1, N, M)
- Call LeerMatriz(M2, P, Q)
- If (MultMat(M1, M2, N, M, P, Q, M3)) Then
- MostrarMatriz M3, UBound(M3, 1), UBound(M3,
2), Text1 - Else
- MsgBox "No se puede multiplicar las matrices
" _ - "El número de columnas de la primera
matriz es " _ - "diferente al número de filas de la
segunda " _ - "matriz.", vbExclamation, "Error"
- End If