Diccionario electrónico

Anuncio
PROBLEMA
Se quiere construir el índice en memoria para acceder electrónicamente
a un diccionario de palabras.
El diccionario se encuentra un fichero secuencial desordenado y
depurado (DICCIONARIO) grabado en el disco duro. El tamaño de
este diccionario justifica la creación de este índice.
PROCEDIMIENTO
El fichero DICCIONARIO contiene registros con todas las palabras del diccionario de la
lengua española, con el siguiente diseño:
PALABRA: Alfanumérico
DESCRIPCIÓN: Alfanumérico
Se creará en memoria un array de 27 elementos correspondientes a las 27 letras del
alfabeto Español (se incluye la Ñ y se prescinde de la CH y la LL) con la siguiente
estructura:
Letra del alfabeto español: Carácter
Puntero a palabras: Puntero a nodo
A continuación se lee secuencialmente el fichero DICCIONARIO añadiendo a la lista
enlazada de la letra que le corresponda, un nodo con la palabra leída y la posición que
ocupa el registro dentro del fichero.
La estructura de datos del índice en memoria tendrá el diseño de la figura:
Letra Puntero
1
A
Palabra nº Registro
sig
2
B
Palabra nº Registro
sig
..
...
..
...
27
Z
Palabra nº Registro
sig
T_LETRAS
LISTAS ENLAZADAS DE PALABRAS
- Las listas enlazadas estarán ordenadas por orden alfabético de palabras.
- El nº Registro es el nº de orden del registro en el fichero: ejemplo la
palabra bosque está en el registro 14.245. Por tanto nº Registro es 14.245.
1. Escribir una rutina CREA_ARRAY que cree el array T_LETRAS.
Letra Puntero
1
A
2
B
..
...
..
...
27
Z
NULL
NULL
NULL
T_LETRAS
COMIENZO CREA_ARRAY(T_LETRAS)
TRANSFORMA
T_LETRAS ES ARRAY(27) DE TIPO LETRAS
ENTORNO
ALGORITMO
T_LETRAS(1).LETRA = ‘A’
T_LETRAS(2).LETRA = ‘B’
T_LETRAS(3).LETRA = ‘C’
.........
T_LETRAS(..).LETRA = ‘N’
T_LETRAS(..).LETRA = ‘Ñ’
.........
T_LETRAS(27).LETRA = ‘Z’
PARA(I=1;I<=27;I=I+1)
T_LETRAS(I).PUNTERO = NULL
FIN PARA
FIN CREA_ARRAY
2
Escribir una rutina CREA_LISTAS que a partir del fichero
DICCIONARIO cree y añada a las listas enlazadas de palabras, la
palabra y su posición en el fichero en la correspondiente lista enlazada.
NOTA: Debe utilizarse la función INDICE del tema Cadenas de
Caracteres.
Ejemplo: POS = INDICE (PALABRA,T_LETRAS(I).LETRA)
si POS = 1, La palabra empieza por la letra
si POS != 1, La palabra NO empieza por la letra
DICCIONARIO
Letra Puntero
Palabra
Palabra
Palabra
Palabra
Palabra
Palabra
EOF
Descripcion
Descripcion
Descripcion
Descripcion
Descripcion
Descripcion
1
A
Palabra nº Registro
sig
2
B
Palabra nº Registro
sig
Palabra nº Registro
sig
..
...
..
...
27
Z
T_LETRAS
LISTAS ENLAZADAS DE PALABRAS
COMIENZO CREA_LISTAS (T_LETRAS)
TRANSFORMA
T_LETRAS ES ARRAY(27) DE LETRAS
ENTORNO
PALABRA ES ALFANUMERICO //datos del fichero
DESCRIPCION ES ALFANUMERICO
I ES ENTERO
// Contador de bucle
NREG ES ENTERO
//Número de registro
AUX,LUG SON PUNTEROS A LISTA
ST ES ENTERO
ALGORITMO
ABRIR (DICCIONARIO)
LEER PALABRA,DESCRIPCIÓN
NREG = 1
MIENTRAS (NO EOF) Y (ST != 2)
I=1
MIENTRAS(I<=27) Y (INDICE(PALABRA,T_LETRAS(I).LETRA)!= 1)
I=I+1
FIN MIENTRAS
LLAMAR BUSCA_INSERTAR(T_LETRAS(I).PUNTERO,PALABRA,LUG,AUX)
SI(LUG = NULL)
LLAMAR INSPRI(T_LETRAS(I).PUNTERO,PALABRA,NREG,ST)
SINO
LLAMAR INSLUG(LUG,PALABRA,NREG,ST)
FIN SI
SI(ST = 2)
ESCRIBIR “ERROR, FALTA MEMORIA”
FIN SI
LEER PALABRA,DESCRIPCIÓN
NREG = NREG + 1
FIN MIENTRAS
CERRAR (DICCIONARIO)
FIN CREA_LISTAS
COMIENZO BUSCA_PALABRA(T_LETRAS)
RECIBE
T_LETRAS ES ARRAY(27) DE LETRAS
ENTORNO
PAL ES ALFANUMERICO
//Palabra leida del teclado
I ES ENTERO
//Contador de bucle
LUG ES PUNTERO A LISTA
//Resultado de la búsqueda
ALGORITMO
LEER PAL
I=1
MIENTRAS(I<=27) Y ((INDICE(PAL,T_LETRAS(I).LETRA!= 1)
I=I+1
FIN MIENTRAS
SI(I<=27)
LLAMAR BUSCA_ORDENADA(T_LETRAS(I).PUNTERO,PAL,LUG)
SI(LUG!=NULL) Y (LUG->PALABRA = PAL)
LEER REGISTRO (LUG->NREGISTRO) PAL,DESCRIPCIÓN
ESCRIBIR DESCRIPCION
SINO
ESCRIBIR “PALABRA NO EXISTE EN EL DICCIONARIO
FIN SI
SINO
ESCRIBIR “LA PALABRA ES INCORRECTA”
FIN SI
FIN BUSCA PALABRA
COMIENZO PRINCIPAL
ENTORNO
T_LETRAS ES ARRAY(27) DE LETRAS
SINO ES ALFANUMERICO
LLAMAR CREA_ARRAY(T_LETRAS)
LLAMAR CREA_LISTA(T_LETRAS)
ABRIR (DICCIONARIO)
REPETIR
LLAMAR BUSCA_PALABRA(T_LETRAS)
LEER SINO
MIENTRAS (SINO = “SI”)
CERRAR (DICCIONARIO)
FIN PRINCIPAL
Descargar