Está en la página 1de 11

Prof. Mara Beatriz Serrano V.

1/11
Computacin II
Mtodos de Bsqueda


Bsqueda Secuencial / Lineal

Esta practica tiene como objetivo principal ejercitar la manipulacin de arreglos unidimensionales,
as como tambin reforzar las tcnicas de depuracin y el anlisis de programas.

BSQUEDA SECUENCIAL / LINEAL
El proceso de bsqueda secuencial es una de las operaciones ms comunes en la manipulacin de
arreglos. Puede definirse como el proceso de determinar el elemento, o su posicin, que cumple
una condicin, comparando con cada uno de los elementos en forma secuencial. Es el mtodo de
bsqueda recomendado cuando se tiene un arreglo en el cual no se conoce la relacin entre sus
elementos, es decir estos estn desordenados.








































{
Proceso de Bsqueda 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 informacin de entrada:
El arreglo
La dimensin del arreglo
La condicin: el valor a buscar
QUE SE PIDE:
Determinar La posicin 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 bsqueda y no
ha terminado de recorrer todo el
arreglo. En este caso POS
almacena la posicin donde se
encuentre VALOR en X.
No encuentra VALOR en el
arreglo, En este caso termina de
recorrer el arreglo. POS
almacena la posicin donde se
encuentre VALOR en X.
Quedando POS con el valor cero.
Prof. Mara Beatriz Serrano V. 2/11
Computacin II
Ejemplo de Bsqueda Secuencial: Valor a buscar en el arreglo A: VALOR = 33
Primera iteracin: 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 iteracin: 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 iteracin: 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 iteracin: 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 iteracin: 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 iteracin: 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, posicin a
posicin hasta agotar los elementos. En este caso, siempre se cumple que A[i] <> VALOR.






Bsqueda Binaria

La bsqueda binaria permite buscar valores mas eficientemente que la bsqueda secuencial, sin
embargo, el mtodo requiere que la informacin sobre la cual se va a buscar este ordenada.
El mtodo se basa en el conocimiento de la informacin. Al estar sta ordenada puede descartarse
la mitad que se sabe no es posible que este la informacin. Veamos algunos ejemplos:





Prof. Mara Beatriz Serrano V. 3/11
Computacin II
EJEMPLO 1: CASO EN QUE NO SE ENCUENTRA EL VALOR

Valor a buscar en el arreglo A: VALOR = 75

Primera iteracin: 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 iteracin: 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 iteracin: 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 iteracin: 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 iteracin: 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 bsqueda, VALOR NO se encuentra en posicin: m; i > j


Prof. Mara Beatriz Serrano V. 4/11
Computacin II
EJEMPLO 2: CASO EN QUE SE ENCUENTRA EL VALOR

Valor a buscar en el arreglo A: VALOR = 48

Primera iteracin: 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 iteracin: 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 iteracin: 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 iteracin: 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 bsqueda, VALOR se encuentra en posicin: m

BSQUEDA BINARIA: INSTRUCCIONES:








QUE SE TIENE:
Para llevar a cabo esta tarea se requiere
de la siguiente informacin de entrada:
El arreglo ORDENADO
La dimensin del arreglo
La condicin: el valor a buscar
QUE SE PIDE:
Determinar La posicin POS donde se
encuentra VALOR en el arreglo X.
Note que tiene dos posibles resultados:
Encontrar VALOR en X
No encontrar VALOR en X
Prof. Mara Beatriz Serrano V. 5/11
Computacin II


























Al gunas Apl icaciones


UNION DE ARREGLOS UNIDIMENSIONALES

B A C =

La unin 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 bsqueda lineal para la generacin 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 unin 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 continuacin y que han sido
declarados y ledos previamente.

A = 10 20 11 56 78 11 95 15 10

B = 10 20 22 56 78 54

El vector unin seria:

C = 10 20 11 56 78 95 15 22 54
{
Proceso de Bsqueda 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 posicin media del
arreglo
Mientras el elemento en la posicin
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
bsqueda.
No encuentra VALOR cuando
termina la bsqueda.
Prof. Mara Beatriz Serrano V. 6/11
Computacin 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 dimensin 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 dimensin.

Los pasos a seguir para determinar la unin 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 dimensin.



INTERSECCION DE ARREGLOS UNIDIMENSIONALES

B A C =

La interseccin de dos arreglos se determina generando un nuevo arreglo con los elementos
comunes a ambos arreglos. Esta aplicacin tambin requiere la implementacin de la bsqueda
lineal para la generacin 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 interseccin 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
continuacin y que han sido declarados y ledos previamente.

A = 10 20 11 56 78 11 95 15 10

B = 10 20 22 56 78 54

El vector interseccin seria:

C = 10 20 56 78

Los pasos a seguir para determinar la interseccin 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 dimensin 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 dimensin.

> Believe none of what you hear,
> half of what you see
> and all of what you write

Prof. Manuel R. Fernndez R. 7/11
Computacin II

Bsqueda
1. Una pareja de novios, pronta a casarse, esta elaborando la lista de invitados para la recepcin.
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 recepcin. 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 recepcin.
El padre de la novia, quien financia la recepcin, 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 recepcin.
Pero a raz 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 informacin correspondiente a los
afiliados a la Tarjeta de Crdito A y a la Tarjeta de Crdito 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 informacin, 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 refrn, elabore un programa que determine cuantas
veces aparece cada vocal.
6. El archivo notas.dat contiene el Nombre, la cdula y la calificacin final de los estudiantes de
computacin del semestre pasado; por otra parte en el archivo retiro.dat se encuentra la
cdula de los alumnos que retiraron la asignatura despus del primer parcial. Elabore un
programa Pascal que :
a) Lea la informacin de los archivos y gurdelas en vectores o un vector de registros.
b) Elimine los estudiantes que retiraron la asignatura
c) Imprima un listado con el nombre, cdula 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 Posicin 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 posicin del vector. Elabore el
Diagrama de Flujo de un programa para encontrar una palabra leda y almacenada en el arreglo
X de L elementos. El programa deber indicar la posicin en A[M] donde comienza la palabra
Prof. Manuel R. Fernndez R. 8/11
Computacin II
X[L]. Si acaso no aparece deber enviar un mensaje alusivo. A continuacin 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 posicin 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 [ledos 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 recepcin de la boda, el padre de la novia decide regresar a casa caminando. El
camino, desde el lugar de la recepcin 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 recepcin. 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 atrs.
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 posicin inicial obtenida
aleatoriamente
Cada avance / retroceso se determina segn 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. podra contar en el camino las veces que el padre paso por ese trayecto.
Recepcin 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 casa

Recepcin 1 1 2 2 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 casa

Recepcin 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 atrs, y un paso
adelante.
X = P U E D E
Prof. Manuel R. Fernndez R. 9/11
Computacin II
12. Dado un vector A de N elementos, elabore un programa Pascal que determine cual es el
elemento que ms se repite (llamado tambin MODA).
13. Dado un vector A de N elementos, elabore un programa Pascal que elimine los elementos del
vector A que ms se repiten.
14. Dado un vector A de M componentes, desarrollar un programa Pascal que cuente las
componentes del vector que no estn repetidas.
Ejemplo:
A = 5 7 4 9 5 2 3 9
Las componentes que no estn repetidas son 4
15. Sean dos vectores: A[N] y B[M] cuyos contenidos son respectivamente, las placas de los
automviles que transitan en un determinado da por una avenida ( A[N] ), y se toman placas
nuevamente veinte das despus, 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 informacin (B[M]) pero no la primera vez (A[N])
b) Porcentaje de vehculos 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 dgitos. Desarrolle un programa que determine en cuantas edades se
cumplen que el primero, central y ultimo de los dgitos son iguales. El digito central en el caso
de que la edad este formada por un numero par de dgitos estar formado por los dos dgitos
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 Computacin, en un archivo de datos que contiene
Nombre Cdula y previa, ordenadas alfabticamente; y la nota del examen final almacenada en
otro archivo que contiene cdula 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 cdigo, el cdigo y el precio de los artculos de
deporte de una tienda. Elabore un programa de consulta para determinar el precio de un
articulo dado. Implemente el mtodo de bsqueda binaria.
19. En tres archivos de datos de nombre Materia1.dat, Materia2.dat, Materia3.dat se tienen los
nombres y cdulas de identidad de los alumnos inscritos en las asignaturas Fsica I, Funciones
Vectoriales y Ecuaciones Diferenciales. Desarrolle un programa Pascal que haciendo uso de
subprogramas lea el contenido de los archivos almacenndolos en tres vectores de registros y
genere un vector de registros con la informacin de los estudiantes que estn 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
Prof. Manuel R. Fernndez R. 10/11
Computacin 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 posicin donde ira 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 nmeros enteros positivos y consecutivos
comenzando por 1. Por ejemplo, se M=2 y N=3, sera:
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 dems filas sern insertadas o anexadas a la matriz C donde le correspondera
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
2 K si
0 6 6 5
2 3 7 2
4 0 8 1
V A

=
=
=
|
|
|
.
|

\
|


=
4 es insercin de posicin La 20 X
1 es insercin de posicin La -3 X
3 es insercin de posicin La 4 X
si
3 6 6 8
2 3 7 0
4 10 8 1
A
|
|
.
|

\
|
=
6 5 4
3 2 1
B
Prof. Manuel R. Fernndez R. 11/11
Computacin II

También podría gustarte