Este documento presenta información sobre métodos de búsqueda en arreglos unidimensionales, incluyendo búsqueda secuencial y búsqueda binaria. Explica los pasos para implementar cada método de búsqueda y provee ejemplos ilustrativos. También describe aplicaciones como unión y intersección de arreglos que requieren búsqueda lineal.
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
Lista invitados boda
1. Prof. María Beatriz Serrano V. 1/11
Computación II
Métodos de Búsqueda
Búsqueda Secuencial / Lineal
Esta practica tiene como objetivo principal ejercitar la manipulación de arreglos unidimensionales,
así como también reforzar las técnicas de depuración y el análisis de programas.
BÚSQUEDA SECUENCIAL / LINEAL
El proceso de búsqueda secuencial es una de las operaciones más comunes en la manipulación de
arreglos. Puede definirse como el proceso de determinar el elemento, o su posición, que cumple
una condición, comparando con cada uno de los elementos en forma secuencial. Es el método de
búsqueda recomendado cuando se tiene un arreglo en el cual no se conoce la relación entre sus
elementos, es decir estos están desordenados.
{
Proceso de Búsqueda Secuencial
de VALOR en el arreglo A
}
{ Inicializaciones }
POS := 0;
I := 1;
{ Recorrido del arreglo buscando VALOR }
While ( ( I< = N ) and
( A[ I ] <> VALOR ) ) do
I := I + 1;
{ Determinar si encontró o no }
If I <= N then
POS := I;
QUE SE TIENE:
Para llevar a cabo esta tarea se requiere
de la siguiente información de entrada:
• El arreglo
• La dimensión del arreglo
• La condición: el valor a buscar
QUE SE PIDE:
Determinar La posición POS donde se
encuentra VALOR en el arreglo A.
Note que tiene dos posibles resultados:
• Encontrar VALOR en A
• No encontrar VALOR en A
COMO LOGRARLO:
Para llevar a cabo esta tarea se requiere
de tres pasos:
• Asumir que VALOR no se encuentra
en el arreglo
• Recorrer el arreglo hasta encontrar o
no encontrar VALOR en el arreglo
• Determinar si encontró o no el
VALOR:
• Encuentra VALOR en el arreglo
cuando termina la búsqueda y no
ha terminado de recorrer todo el
arreglo. En este caso POS
almacena la posición donde se
encuentre VALOR en X.
• No encuentra VALOR en el
arreglo, En este caso termina de
recorrer el arreglo. POS
almacena la posición donde se
encuentre VALOR en X.
Quedando POS con el valor cero.
2. Prof. María Beatriz Serrano V. 2/11
Computación II
Ejemplo de Búsqueda Secuencial: Valor a buscar en el arreglo A: VALOR = 33
Primera iteración: A[1]=1 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=1
Segunda iteración: A[2]=11 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=2
Tercera iteración: A[3]=21 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=3
Cuarta iteración: A[4]=25 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=4
Quinta iteración: A[5]=26 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=5
Sexta iteración: A[6]=33 = VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=6
Note que si el valor NO se encuentra en el arreglo, entonces se recorre todo el arreglo, posición a
posición hasta agotar los elementos. En este caso, siempre se cumple que A[i] <> VALOR.
Búsqueda Binaria
La búsqueda binaria permite buscar valores mas eficientemente que la búsqueda secuencial, sin
embargo, el método requiere que la información sobre la cual se va a buscar este ordenada.
El método se basa en el conocimiento de la información. Al estar ésta ordenada puede descartarse
la mitad que se sabe no es posible que este la información. Veamos algunos ejemplos:
3. Prof. María Beatriz Serrano V. 3/11
Computación II
EJEMPLO 1: CASO EN QUE NO SE ENCUENTRA EL VALOR
Valor a buscar en el arreglo A: VALOR = 75
Primera iteración: A[m]=59 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=1 m=13 j=25
VALOR > A[m] se descarta la primera mitad
Segunda iteración: A[m]=77 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=14 m=20 j=25
VALOR < A[m] se descarta la segunda mitad
Tercera iteración: A[m]=67 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=14 m=17 j=19
VALOR > A[medio] se descarta la primera mitad
Cuarta iteración: A[m]=72 = VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=18 m=19
j =19
VALOR > A[medio] se descarta la primera mitad
Quinta iteración: A[m]=76 = VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
j=19 i=20
m=19
Termina la búsqueda, VALOR NO se encuentra en posición: m; i > j
4. Prof. María Beatriz Serrano V. 4/11
Computación II
EJEMPLO 2: CASO EN QUE SE ENCUENTRA EL VALOR
Valor a buscar en el arreglo A: VALOR = 48
Primera iteración: A[m]=59 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=1 m=13 j=25
VALOR < A[m] se descarta la segunda mitad
Segunda iteración: A[m]=38 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=1 m=7 j=12
VALOR > A[m] se descarta la primera mitad
Tercera iteración: A[m]=50 <> VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=8 m=11 j=12
VALOR < A[m] se descarta la segunda mitad
Cuarta iteración: A[m]=48 = VALOR
A = 1 11 21 25 26 33 38 40 42 48 50 56 59 60 62 64 67 72 76 77 86 88 92 94 97
i=8 m=10
j=10
Termina la búsqueda, VALOR se encuentra en posición: m
BÚSQUEDA BINARIA: INSTRUCCIONES:
QUE SE TIENE:
Para llevar a cabo esta tarea se requiere
de la siguiente información de entrada:
• El arreglo ORDENADO
• La dimensión del arreglo
• La condición: el valor a buscar
QUE SE PIDE:
Determinar La posición POS donde se
encuentra VALOR en el arreglo X.
Note que tiene dos posibles resultados:
• Encontrar VALOR en X
• No encontrar VALOR en X
5. Prof. María Beatriz Serrano V. 5/11
Computación II
Algunas Aplicaciones
UNION DE ARREGLOS UNIDIMENSIONALES
BAC ∪=
La unión de dos arreglos se determina generando un nuevo arreglo con los elementos de ambos
arreglos. Esta es una de las aplicaciones que requieren de la búsqueda lineal para la generación del
nuevo arreglo. Es importante destacar que se agregara [insertara al final del arreglo] un valor
siempre y cuando este no exista ya en el arreglo.
Por ejemplo:
Dados los arreglos A y B, para determinar la unión de ambos es necesario generar un nuevo
arreglo, C, con los elementos de ambos arreglos. Nota: el nuevo arreglo, C, no debe contener
elementos repetidos.
Asumiendo que A y B almacenan los elementos que se especifican a continuación y que han sido
declarados y leídos previamente.
A = 10 20 11 56 78 11 95 15 10
B = 10 20 22 56 78 54
El vector unión seria:
C = 10 20 11 56 78 95 15 22 54
{
Proceso de Búsqueda Binaria
de VALOR en el arreglo X
}
{ Inicializaciones }
m := N div 2 + 1;
i := 1;
j := N;
{ Recorrido del arreglo buscando VALOR }
While ( ( A[ m ] <> VALOR ) and ( i <= j )) do
begin
if A[m] > VALOR then
j := m – 1
else
i := m + 1;
m := ( i + j ) div 2 + 1;
end;
{ Determinar si encontró o no }
If A[m] = VALOR then
POS := m;
COMO LOGRARLO:
Para llevar a cabo esta tarea se requiere
de tres pasos:
• Determinar la posición media del
arreglo
• Mientras el elemento en la posición
media sea diferente de VALOR
ejecute:
o Descartar una mitad del
arreglo
o Determinar el nuevo rango:
como la otra mitad
o Determinar el punto medio
del nuevo rango
• Determinar si encuentra o no el
VALOR
• Encuentra VALOR en el arreglo
cuando aborta el proceso de
búsqueda.
• No encuentra VALOR cuando
termina la búsqueda.
6. Prof. María Beatriz Serrano V. 6/11
Computación II
Para realizar esta tarea es necesario recorrer ambos arreglos y determinar que el elemento a
agregar en el nuevo arreglo NO exista ya en él.
Observe que la dimensión del nuevo arreglo, C, NO es la suma de las dimensiones de los arreglos
procesados, A y B, por lo que se requiere de una variable auxiliar que represente esta dimensión.
Los pasos a seguir para determinar la unión de dos arreglos son:
• Recorrer el primer arreglo
• Buscar que NO esté en C para ser insertado en C
• Recorrer el segundo arreglo
• Buscar que NO esté en C para ser insertado en C
Recuerde que al insertar un valor siempre será al final de C, y que debe actualizar su dimensión.
INTERSECCION DE ARREGLOS UNIDIMENSIONALES
BAC ∩=
La intersección de dos arreglos se determina generando un nuevo arreglo con los elementos
comunes a ambos arreglos. Esta aplicación también requiere la implementación de la búsqueda
lineal para la generación del nuevo arreglo. Es importante destacar que se agregara [insertara al
final del arreglo] un valor siempre y cuando este no exista ya en el arreglo.
Por ejemplo:
Dados los arreglos A y B, para determinar la intersección de ambos es necesario generar un nuevo
arreglo, C, con los elementos comunes a ambos arreglos. Nota: el nuevo arreglo, C, no debe
contener elementos repetidos. Asumiendo que A y B almacenan los elementos que se especifican a
continuación y que han sido declarados y leídos previamente.
A = 10 20 11 56 78 11 95 15 10
B = 10 20 22 56 78 54
El vector intersección seria:
C = 10 20 56 78
Los pasos a seguir para determinar la intersección de dos arreglos son:
• Recorrer el arreglo A
• Buscar el elemento en B
• Si el elemento está en B
o Buscar que NO esté en C para ser insertado.
Observe que la dimensión del nuevo arreglo, C, NO es la suma de las dimensiones de los arreglos
procesados, A y B, por lo que se requiere de una variable auxiliar que represente esta dimensión.
> Believe none of what you hear,
> half of what you see
> and all of what you write
7. Prof. Manuel R. Fernández R. 7/11
Computación II
Búsqueda
1. Una pareja de novios, pronta a casarse, esta elaborando la lista de invitados para la recepción.
Cada uno tiene su lista de invitados en un archivo de datos, y se desea que Ud. elabore un
programa pascal que procese las listas y al final emita una lista con el nombre de los invitados a
la recepción. NOTA: un invitado no debe aparecer mas de una vez.
2. Una pareja de novios, pronta a casarse, esta elaborando la lista de invitados para la recepción.
El padre de la novia, quien financia la recepción, desea saber quienes son los amigos del novio
que no son amigos de la novia. Cada uno tiene su lista de invitados en un archivo de datos, y
se desea que Ud. elabore un programa pascal que procese las listas y emita el listado deseado
del padre.
3. Una pareja de novios, pronta a casarse, esta elaborando la lista de invitados para la recepción.
Pero a raíz de una pelea sobre “a quien invito y a quien no” se decidió invitar solamente a
aquellos amigos de ambos. Cada uno tiene su lista de invitados en un archivo de datos, y se
desea que Ud. elabore un programa pascal que determine la lista de invitados.
4. Se tiene en dos archivos, DATOS1.DAT y DATOS.DAT, la información correspondiente a los
afiliados a la Tarjeta de Crédito A y a la Tarjeta de Crédito B respectivamente; en cada registro
del archivo: el Nombre (de la columna 1 a la 25) y la Cedula de Identidad (a partir de la
columna 27). Elabore un programa Pascal que lea la información, la almacene en cuatro (4)
vectores y determine e imprima el listado (Nombre y Cedula) de las personas que tienen una
sola tarjeta.
5. Dado un arreglo tipo char que almacena un refrán, elabore un programa que determine cuantas
veces aparece cada vocal.
6. El archivo notas.dat contiene el Nombre, la cédula y la calificación final de los estudiantes de
computación del semestre pasado; por otra parte en el archivo retiro.dat se encuentra la
cédula de los alumnos que retiraron la asignatura después del primer parcial. Elabore un
programa Pascal que :
a) Lea la información de los archivos y guárdelas en vectores o un vector de registros.
b) Elimine los estudiantes que retiraron la asignatura
c) Imprima un listado con el nombre, cédula y nota.
7. Dado un arreglo de N elementos, elabore un programa que ordene el arreglo e imprima el
arreglo ordenado y el valor del índice en el arreglo original al lado de cada elemento.
Ordenado Posición del elemento
en el arreglo original
10 4
20 1
30 8
40 2
50 5
70 7
80 6
90 3
8. Se esta desarrollando un software para procesar palabras, y se tiene en el arreglo A, de M
elementos, todas las letras de un cierto texto; una letra por posición del vector. Elabore el
Diagrama de Flujo de un programa para encontrar una palabra leída y almacenada en el arreglo
X de L elementos. El programa deberá indicar la posición en A[M] donde comienza la palabra
8. Prof. Manuel R. Fernández R. 8/11
Computación II
X[L]. Si acaso no aparece deberá enviar un mensaje alusivo. A continuación se presenta un
ejemplo:
A = E L N O M B R E P U E D E I R S E G U I D O P O R U
La palabra PUEDE aparece en el arreglo A a partir de la posición 11
9. Dado un archivo de datos contentivo de un vector A de M elementos, el cual está ordenado de
manera ascendente, elaborar un programa PASCAL que realice el proceso de insertar varios
elementos K [leídos de teclado / pantalla] en las posiciones que les corresponda, de manera
que el vector permanezca ordenado.
Vector Original: A = 2 5 9 14 25 28 N = 6
Valores a insertar: 3, 15, 40
Vector Modificado: A = 2 3 5 9 14 15 25 28 37 40 43 N = 11
10.Desarrolle un programa Pascal que a medida que vaya leyendo una serie de valores, los vaya
insertando en un vector (inicialmente sin elementos) de forma tal que lo mantenga ordenado.
Imprima el vector resultante.
Valores Vector
3 (3)
5 (3,5)
-1 (-1,3,5)
4 (-1,3,4,5)
16 (-1,3,4,5,16)
11. Al finalizar la recepción de la boda, el padre de la novia decide regresar a casa caminando. El
camino, desde el lugar de la recepción a su casa esta representado por un arreglo
unidimensional de N elementos ( donde N > 20 ). Un extremo representa la casa del padre de
la novia y el otro extremo el lugar de la recepción. Cada elemento del arreglo representa un
paso del padre de la novia. En vista de que el padre esta algo mareado, el camina hacia
delante y hacia atrás.
Se pide que Ud. desarrolle un programa que simule el trayecto del padre de la novia, teniendo
las siguientes consideraciones:
Ud. comienza a simular la trayectoria una vez que el padre de la novia ha comenzado su
retorno a casa. Para lograr esto comienza a partir de una posición inicial obtenida
aleatoriamente
Cada avance / retroceso se determina según valor aleatorio X entre 0 y N/8 [parte entera], de
la siguiente manera: si C es par avanza X pasos hacia su casa, si X es impar retrocede X pasos.
Es requisito que su programa imprima, a cada avance o retroceso, la trayectoria del padre.
Para lograr esto Ud. podría contar en el camino las veces que el padre paso por ese trayecto.
Recepción 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 casa
Recepción 1 1 2 2 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 casa
Recepción 1 1 2 3 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 casa
El arreglo represente los pasos dados por el padre: 7 pasos adelante, 4 pasos atrás, y un paso
adelante.
X = P U E D E
9. Prof. Manuel R. Fernández R. 9/11
Computación II
12.Dado un vector A de N elementos, elabore un programa Pascal que determine cual es el
elemento que más se repite (llamado también MODA).
13.Dado un vector A de N elementos, elabore un programa Pascal que elimine los elementos del
vector A que más se repiten.
14. Dado un vector A de M componentes, desarrollar un programa Pascal que cuente las
componentes del vector que no están repetidas.
Ejemplo:
A = 5 7 4 9 5 2 3 9
Las componentes que no están repetidas son 4
15. Sean dos vectores: A[N] y B[M] cuyos contenidos son respectivamente, las placas de los
automóviles que transitan en un determinado día por una avenida ( A[N] ), y se toman placas
nuevamente veinte días después, B[M]. Desarrolle un programa que determine e imprima:
a) un vector de placas con los carros que pasaron por dicha avenida la segunda vez que se
tomo la información (B[M]) pero no la primera vez (A[N])
b) Porcentaje de vehículos que pasaron ambas veces.
16. Los insectos pertenecientes al Club Los Bichos indican su edad en horas, en la cual no se
conoce el numero de dígitos. Desarrolle un programa que determine en cuantas edades se
cumplen que el primero, central y ultimo de los dígitos son iguales. El digito central en el caso
de que la edad este formada por un numero par de dígitos estará formado por los dos dígitos
centrales.
Insecto 1 5 7 4 9 8 2 3 3
Insecto 2 7 4 9 6 2 1 9
17. Dada las previas de los estudiantes de Computación, en un archivo de datos que contiene
Nombre Cédula y previa, ordenadas alfabéticamente; y la nota del examen final almacenada en
otro archivo que contiene cédula y nota, ordenada por nota, elabore un programa que
determine la definitiva de los estudiantes. Definitiva: 0.6previa + 0.4final.
18. En un archivo de datos se tiene, ordenado por código, el código y el precio de los artículos de
deporte de una tienda. Elabore un programa de consulta para determinar el precio de un
articulo dado. Implemente el método de búsqueda binaria.
19. En tres archivos de datos de nombre Materia1.dat, Materia2.dat, Materia3.dat se tienen los
nombres y cédulas de identidad de los alumnos inscritos en las asignaturas Física I, Funciones
Vectoriales y Ecuaciones Diferenciales. Desarrolle un programa Pascal que haciendo uso de
subprogramas lea el contenido de los archivos almacenándolos en tres vectores de registros y
genere un vector de registros con la información de los estudiantes que están cursando las tres
asignaturas.
N = 8, Valores considerados: 5,9,8,3
5<>9<>8<>3
N = 7, Valores considerados: 7,6,9
7<>6<>9
10. Prof. Manuel R. Fernández R. 10/11
Computación II
20. a) Desarrolle un subprograma PASCAL que convierta la columna K de la Matriz A[MA,NA] en un
vector V[MA]
b) Desarrolle un subprograma PASCAL que inserte en la fila K de la matriz A[MA,NA] los
elementos de un vector V[NA]. Incluya todos los posibles casos: que K sea 1; que K sea una
valor cualquiera comprendido entre 1 y MA; y que K sea igual a MA+1
c) Haciendo uso de los dos subprogramas anteriores, genere una matriz B[MB,NB] como la
traspuesta de A[MA,NA]
d) Desarrolle un subprograma PASCAL que calcule la posición donde iría un elemento X para
que la columna 1 de A[MA,NA] permanezca ordenada.
e) Desarrolle un programa PASCAL donde dadas las dimensiones M y N de una matriz, realice
las siguientes operaciones:
i) Rellene por filas la matriz B[M,N] con los números enteros positivos y consecutivos
comenzando por 1. Por ejemplo, se M=2 y N=3, sería:
ii) Genere una matriz C[MC,NC] como la traspuesta de B[M,N]
iii) Usando los subprogramas anteriores, genere una matriz BO a partir de C, de la siguiente
manera:
(1) Primera fila de BO, igual a la primera columna de C
(2) Las demás filas serán insertadas o anexadas a la matriz C donde le correspondería
para que el primer elemento de la columna de C, se mantenga ordenado al colocarlo
como primer elemento de la fila de BO que se está insertando.
iv) Imprima las matrices B, C y BO una al lado de la otra.
−
=⇒=
−
−
−
=
6
7
8
2Ksi
0665
2372
4081
VA
⇒=
⇒=
⇒=
−−
−−
=
4esinsercióndeposiciónLa20X
1esinsercióndeposiciónLa-3X
3esinsercióndeposiciónLa4X
si
3668
2370
41081
A
=
654
321
B