Está en la página 1de 2

Laboratorio de Programacin 1A E.T.S.I.

Informtica Gestin

Prctica 9: Ordenacin y Bsqueda en C++.


Teora
Veamos a continuacin algunos de los algoritmos clsicos de ordenacin y bsqueda. y sus posibles implementaciones en C++.
// CUEPROS DE PROCEDIMIENTOS Y FUNCIONES void BusquedaSecuencial(int x, TVector v, int ini, int fin, int &pos, bool &encontrado) { pos = ini; encontrado=false; while ( (pos <=fin) && (!encontrado) ) { if (v[pos]==x) { encontrado=true; } else { ++pos; } } } void BusquedaBinaria(int x, TVector v, int ini, int fin, int &pos, bool &encontrado) { encontrado=false; while ( (ini <=fin) && (!encontrado) ) { pos = (ini+fin)/2; if (v[pos]==x) { encontrado=true; } else if (x < v[pos]) { ini = pos +1; } else { fin = pos-1; } } } void OrdenacionInserccion(TVector &v,int ini, int fin) { int i, pos, aux; for(i=ini+1;i<=fin;++i) { aux = v[i]; pos = buscar_posicion(aux, v, ini, i-1); abrir_hueco(v, pos, i); v[pos]=aux; } } void OrdenacionSeleccion(TVector &v,int ini, int fin) { int i,pos; for(i=ini;i<fin;++i) { pos = PosicionmenorElemento(v,i,fin); intercambia(v[i],v[pos]); } } void OrdenacionIntercambio(TVector &v,int ini, int fin) { int i,j,aux; bool intercambio; intercambio= true; i=ini; while( (i<=fin-1) && (intercambio) ) { intercambio = false; for(j=ini;j<=fin-1;++j) { if (v[j]>v[j+1]) { intercambio= true;

Jos Luis Pastrana Brincones @ 2002 1

Laboratorio de Programacin 1A E.T.S.I. Informtica Gestin


intercambia(v[j],v[j+1]); } } ++i; } } int buscar_posicion(int aux, TVector v, int ini, int fin) { int i; i = ini; while( (i<=fin) && (v[i]<aux) ) { ++i; } return i; } void abrir_hueco(TVector &v, int ini, int fin) { int i; for(i=fin;i>=ini+1;--i) { v[i] = v[i-1]; } } void intercambia(int &x, int &y) { int t; t = x; x = y; y = t; } int PosicionmenorElemento(TVector v,int ini, int fin) { int i,menor; menor = ini; for(i=ini+1;i<=fin;++i) { if (v[i]<v[menor]) { menor = i; } } return menor; }

Prctica
Se desea elaborar un diccionario ingls/espaol, en el que cada palabra en ingls tiene un mximo de 5 posibles traducciones al espaol, junto con un conjunto de usos gramaticales de esa palabra (sustantivo, adjetivo, preposicin, verbo). Por cuestiones de eficiencia se decide implementar el diccionario usando una tabla hash, cuyo ndice vaya de la 'A' a la 'Z' y se usar un cubo de un mximo de 20 palabras para manejar las posibles colisiones (palabras diferentes que empiecen por la misma letra). Debido a que las palabras en un diccionario deben estar ordenadas, ser necesario que las colisiones y las traducciones tambin lo estn. Esto, adems, podr ser utilizado para buscar una palabra de forma ms rpida, ya que podremos usar un algoritmo de bsqueda binaria. Se pide realizar un programa en C++ con las siguientes opciones de men: A. Inserta una palabra en el diccionario. B. Busca una palabra en el diccionario a partir de su nombre en ingls y escribe en pantalla todas sus traducciones y usos gramaticales. C. Borra una palabra del diccionario a partir de su nombre en ingls. D. Modifica una palabra del diccionario. E. Listar Diccionario. Muestra todas las palabras del diccionario, as como sus traducciones y usos, ordenadas alfabticamente. X. Salir del Programa. Se pedir al usuario una confirmacin de abandono del programa, saliendo del mismo en caso de que sea afirmativa y mostrando el nombre, apellidos y curso del autor del programa o volviendo al men principal si no lo es.

Jos Luis Pastrana Brincones @ 2002 2

También podría gustarte