13 Ordenamiento Burbuja Algoritmo Arreglos Unidimensionales PROGRAM Ordenamiento_Burbuja; CONST Largo = 5; VAR A: ARRAY[1..Largo] OF INTEGER; i,j: INTEGER; BEGIN FOR i:=1 TO Largo DO BEGIN WRITE(Ingrese elemento ,i, : ); READLN(A[i]) END; FOR i:=Largo DOWNTO 2 DO FOR j:=1 TO i-1 DO IF A[j] > A[j+1] THEN Intercambiar(A[j],A[j+1]); FOR i:=1 TO Largo DO WRITELNA(A[i]) END. (Gp:) i: indica la cantidad de casillas a comparar en cada vuelta. j: indica la cantidad de compa- raciones que se hacen por vuelta.
14 Búsqueda Existen numerosos métodos para buscar un dato entre los elementos de un arreglo, algunos más rápidos que otros.
Por ejemplo, el método carretero consiste en comparar uno a uno el dato buscado con cada elemento del arreglo.
Escriba un programa que busque la posición en la que se encuentra el entero 15, dentro de un arreglo que contiene (ordenadamente) los números: 3,6,7,10,15,17,18 (7 en total) (solución en diapositiva siguiente) Arreglos Unidimensionales
15 PROGRAM busqueda_carretera; CONST Largo = 15; TYPE vector = ARRAY[1..Largo] OF INTEGER; VAR X: vector; i, pos, num: INTEGER; FUNCTION buscar(A: vector; dato: INTEGER): INTEGER; VAR j: INTEGER; BEGIN j := 1; WHILE (j < = Largo) AND (A[j] < > dato) DO j := j + 1; buscar := j END; BEGIN FOR i := 1 TO Largo DO BEGIN WRITE(Ingrese número: ); READLN(X[i]) END WRITE(Ingrese número a buscar: ); READLN(num); pos := buscar(X, num); IF pos > Largo THEN WRITELN(No se encuentra el número) ELSE WRITELN(El número ,num, está en la posición , pos) END. Búsqueda …solución Arreglos Unidimensionales (Gp:) Función que implementa la búsqueda carretera.
16 Búsqueda Binaria Este algoritmo permite buscar un dato entre los elementos de un arreglo considerablemente más rápido que la búsqueda carretera. Se basa en subdividir progresivamente el arreglo en 2 partes, buscando en aquella donde se encuentre el número. El arreglo donde se buscará debe estar ordenado. Ejemplo: Arreglos Unidimensionales medio Si A[Medio] = 15, entonces Encontrado = TRUE Si A[Medio] < 15, entonces Primero = Medio + 1 Si A[Medio] > 15, entonces Ultimo = Medio – 1 medio (Gp:) Encontrado = TRUE
(Gp:) 3 (Gp:) 6 (Gp:) 7 (Gp:) 10 (Gp:) 15 (Gp:) 17 (Gp:) 18 (Gp:) primero (Gp:) último (Gp:) A
(Gp:) 3 (Gp:) 6 (Gp:) 7 (Gp:) 10 (Gp:) 15 (Gp:) 17 (Gp:) 18 (Gp:) primero (Gp:) último (Gp:) A
(Gp:) 3 (Gp:) 6 (Gp:) 7 (Gp:) 10 (Gp:) 15 (Gp:) 17 (Gp:) 18 (Gp:) primero, ultimo, medio (Gp:) A
17 Búsqueda Binaria …solución Arreglos Unidimensionales FUNCTION busqueda_binaria(A: vector; dato: INTEGER): INTEGER; VAR primero, ultimo, medio: INTEGER; encontrado: BOOLEAN; BEGIN primero := 1; ultimo := Largo; encontrado := FALSE; WHILE (primero < = ultimo) AND NOT(encontrado) DO BEGIN medio := (primero + ultimo) DIV 2; IF A[medio] = dato THEN encontrado := TRUE ELSE IF A[medio] < dato THEN primero := medio + 1 ELSE ultimo := medio – 1 END; IF encontrado THEN busqueda_binaria := medio ELSE busqueda_binaria = -1 END; Escribiremos sólo la función busqueda_binaria.
18 Arreglos Bidimensionales (Gp:) 1 (Gp:) 2 (Gp:) N (Gp:) 1 (Gp:) 2 (Gp:) M (Gp:) Declaración: TYPE matriz = ARRAY[1..N,1..M] OF REAL; VAR A: matriz;
Asignación: A[i,j] := valor; Los arreglos bidimensionales se caracterizan por tener dos índices, representando una matriz.
19 Recorrido: el recorrido se efectúa con 2 FOR anidados, y se puede hacer de dos maneras. Arreglos Bidimensionales (Gp:) 1) FOR i := 1 TO N FOR j := 1 TO M READLN(A[i,j]) (Gp:) x (Gp:) x (Gp:) x (Gp:) x (Gp:) 1 (Gp:) 2 (Gp:) N (Gp:) 1 (Gp:) 2 (Gp:) M (Gp:) i (Gp:) j (Gp:) Recorrido hacia el lado, se va llenando el arreglo por filas.
(Gp:) 2) FOR j := 1 TO M FOR i := 1 TO N READLN(A[i,j]) (Gp:) x (Gp:) x (Gp:) x (Gp:) 1 (Gp:) 2 (Gp:) N (Gp:) 1 (Gp:) 2 (Gp:) M (Gp:) i (Gp:) j (Gp:) Recorrido hacia abajo, se va llenando el arreglo por columnas.
20 1. Modificar el algoritmo de ordenamiento burbuja para ordenar los elementos en forma descendente.
2. Se tienen 2 arreglos unidimensionales de tamaño N, en nombre[i] y promedio[i] se almacena el nombre y el promedio del alumno i, respectivamente. Realizar un programa que liste los 10 alumnos con menor promedio.
Ayuda, considere la variable nombre del tipo: tipo_nombre = array[1..N] OF STRING[30] Tarea Nº 2
21 3. Se tienen dos arreglos A y B con números enteros, de largo N y M respectivamente, los cuales están ordenados ascendentemente. Realizar un procedimiento que mezcle los dos arreglos en uno nuevo, de manera que éste también se encuentre ordenado. Tarea Nº 2 (Gp:) 4. Usando recurrencia, calcular el i-ésimo elemento en la serie:
22 5. Se desea controlar los resultados de los alumnos en las diferentes asignaturas. Escriba un programa que lea las notas obtenidas en las distintas asignaturas. Además se debe visualizar en pantalla el nombre, calificaciones, promedio por asignatura y general de cada estudiante. Asuma que en el curso hay 50 alumnos, y que cada uno de ellos tiene 6 asignaturas. Tarea Nº 2
Página anterior | Volver al principio del trabajo | Página siguiente |