Sopa de letras en Pascal

Me han mandado hacer un programa usando matrices representando una sopa de letras. La verdad que no se por donde empezar y quisiera saber si podría ayudarme. Lo que se pide es:
Escribir un programa en Pascal que realice la búsqueda de una palabra en una "sopa de letras" con las siguientes características.
· La búsqueda se realizará horizontal y verticalmente, es decir, no hay que realizar búsqueda diagonal.
· La palabra puede aparecer al derecho o al revés, tanto horizontal como verticalmente.
El resultado de la ejecución del programa será una frase indicando cuántas veces aparece la palabra en la "sopa de letras".
La sopa de letras se almacenará en una matriz cuadrada, como máximo de 9x9.
El programa empieza con la elección del fichero con la sopa de letras y a continuación la elección de la palabra que queremos buscar y el resultado de la búsqueda. Para la elección del fichero aparecerá un menú con las cuatro posibles opciones:
1. Fichero 1.-contiene una matriz de 5x5
2. Fichero 2.-contiene una matriz de 7x7
3. Fichero 3.-contiene una matriz de 9x9
4. Salir del programa
Elija una opción(valores numerícos):
En cada una de las opciones se realizarán las siguientes tareas:
Opciones 1, 2 y 3.- mediante estas opciones el programa:
Leerá del fichero de datos correspondiente los valores de la sopa de letras.
Leerá desde Input la palabra que queremos buscar en la sopa de letras. La palabra tendrá entre 2 y N caracteres (siendo N la dimensión de la matriz).
Buscará en la matriz de la sopa de letras la palabra leída.
Imprimirá la matriz de la sopa de letras.
Imprimirá una frase indicando cuántas veces aparece la palabra en la sopa de letras.
Después de realizar la tarea indicada, se volverá a visualizar de nuevo el menú.
Opción 4.- con esta opción se terminará la ejecución del programa.
Si se elige una opción inexistente, el programa volverá a visualizar de nuevo el menú principal.
La solución se ajustará a las siguientes especificaciones:
Especificaciones de entrada :
- Disponemos de 3ficheros de texto en el que se encuentran grabados los caracteres de una matriz NxN que simula la Sopa de letras (N será 5 en el primer fichero, 7 en el 2º y 9 en el 3º), el fichero tendrá:
- En cada línea los N caracteres de cada una de las filas de la matriz, aparecerán todos seguidos sin ningún carácter blanco, tampoco existirán caracteres blancos al principio o al final de las líneas.
- Existirán, por lo tanto, N líneas en el fichero.
- Por teclado se introducirá la palabra que queremos buscar, dicha palabra tendrá como mínimo 2 caracteres y como máximo N caracteres.
- Trabajaremos con caracteres alfabéticos mayúsculas (excluyendo la Ñ y las vocales acentuadas).
- Los ficheros de texto de entrada que estarán almacenados en C:\P1\ tendrán que llamarse obligatoriamente: datos21b.txt (para la matriz 5x5), datos22b.txt (para la matriz 7x7), datos23b.txt (para la matriz 9x9),
- Las opciones del menú tendrán que ser obligatoriamente valores numéricos de 1 a 4
Especificaciones de salida :
- Se utilizará el fichero estándar de salida: Output.
- Aparecerá en la primera línea del fichero de salida los datos: número de matrícula, apellidos y nombre del alumno que realiza la práctica.
- No se deberá limpiar la pantalla después de la realización de una opción del menú, se dejará únicamente dos o tres líneas en blanco.
- Se podrá limpiar la pantalla antes de la visualización, por primera vez, del menú principal.
Especificaciones de diseño :
- No se podrá utilizar el tipo de datos STRING.
- Se recuerda que no se admite, bajo ningún concepto, la utilización de variables globales dentro de los subprogramas.
- El programa deberán contener, al menos, subprogramas que realicen las siguientes tareas.
- Lectura de la sopa de letras: desde el fichero de texto en la matriz.
- Escritura de la sopa de letras en Output.
- Invertir la palabra que queremos buscar, de esta forma se simplifica la búsqueda de la palabra al derecho y al revés.
Muchas gracias, un saludo. Arroba2

1 respuesta

Respuesta
1
Es simple, deberías recorrer la matriz una a una las celdas y revisar hacria los 4 sentidos si aparecen las palabras que te den.
Es simple, pero hay que escribir bastante, si quieres, armate todo y yo te hago el sistema de búsqueda, o dame un tiempo, ya que estoy medio con el tiempo contado para poner en producción un proyecto muy grande.
Buenas tardes, me han mandado hacer un programa usando matrices representando una sopa de letras. La verdad que no se por donde empezar y quisiera saber si podría ayudarme. Lo que se pide es:
Escribir un programa en Pascal que realice la búsqueda de una palabra en una "sopa de letras" con las siguientes características.
· La búsqueda se realizará horizontal y verticalmente, es decir, no hay que realizar búsqueda diagonal.
· La palabra puede aparecer al derecho o al revés, tanto horizontal como verticalmente.
El resultado de la ejecución del programa será una frase indicando cuántas veces aparece la palabra en la "sopa de letras".
La sopa de letras se almacenará en una matriz cuadrada, como máximo de 9x9.
El programa empieza con la elección del fichero con la sopa de letras y a continuación la elección de la palabra que queremos buscar y el resultado de la búsqueda. Para la elección del fichero aparecerá un menú con las cuatro posibles opciones:
1. Fichero 1.-contiene una matriz de 5x5
2. Fichero 2.-contiene una matriz de 7x7
3. Fichero 3.-contiene una matriz de 9x9
4. Salir del programa
Elija una opción(valores numerícos):
En cada una de las opciones se realizarán las siguientes tareas:
Opciones 1, 2 y 3.- mediante estas opciones el programa:
Leerá del fichero de datos correspondiente los valores de la sopa de letras.
Leerá desde Input la palabra que queremos buscar en la sopa de letras. La palabra tendrá entre 2 y N caracteres (siendo N la dimensión de la matriz).
Buscará en la matriz de la sopa de letras la palabra leída.
Imprimirá la matriz de la sopa de letras.
Imprimirá una frase indicando cuántas veces aparece la palabra en la sopa de letras.
Después de realizar la tarea indicada, se volverá a visualizar de nuevo el menú.
Opción 4.- con esta opción se terminará la ejecución del programa.
Si se elige una opción inexistente, el programa volverá a visualizar de nuevo el menú principal.
La solución se ajustará a las siguientes especificaciones:
Especificaciones de entrada :
- Disponemos de 3ficheros de texto en el que se encuentran grabados los caracteres de una matriz NxN que simula la Sopa de letras (N será 5 en el primer fichero, 7 en el 2º y 9 en el 3º), el fichero tendrá:
- En cada línea los N caracteres de cada una de las filas de la matriz, aparecerán todos seguidos sin ningún carácter blanco, tampoco existirán caracteres blancos al principio o al final de las líneas.
- Existirán, por lo tanto, N líneas en el fichero.
- Por teclado se introducirá la palabra que queremos buscar, dicha palabra tendrá como mínimo 2 caracteres y como máximo N caracteres.
- Trabajaremos con caracteres alfabéticos mayúsculas (excluyendo la Ñ y las vocales acentuadas).
- Los ficheros de texto de entrada que estarán almacenados en C:\P1\ tendrán que llamarse obligatoriamente: datos21b.txt (para la matriz 5x5), datos22b.txt (para la matriz 7x7), datos23b.txt (para la matriz 9x9),
- Las opciones del menú tendrán que ser obligatoriamente valores numéricos de 1 a 4
Especificaciones de salida :
- Se utilizará el fichero estándar de salida: Output.
- Aparecerá en la primera línea del fichero de salida los datos: número de matrícula, apellidos y nombre del alumno que realiza la práctica.
- No se deberá limpiar la pantalla después de la realización de una opción del menú, se dejará únicamente dos o tres líneas en blanco.
- Se podrá limpiar la pantalla antes de la visualización, por primera vez, del menú principal.
Especificaciones de diseño :
- No se podrá utilizar el tipo de datos STRING.
- Se recuerda que no se admite, bajo ningún concepto, la utilización de variables globales dentro de los subprogramas.
- El programa deberán contener, al menos, subprogramas que realicen las siguientes tareas.
- Lectura de la sopa de letras: desde el fichero de texto en la matriz.
- Escritura de la sopa de letras en Output.
- Invertir la palabra que queremos buscar, de esta forma se simplifica la búsqueda de la palabra al derecho y al revés.
Muchas gracias, un saludo. arroba2
Muchas gracias a ti, por la rapidez. Es que no veo claro lo de los 4 sentidos y he pensado primero hacerlo al derecho y luego al revés, no se si me explico. De todas las formas tengo tiempo para entregarlo (un mes más o menos), asique me pondré con ello y cuando tenga algo te lo mando y me corriges, lo más seguro es que tardes tu bastante menos, je je.
Muchas gracias por todo, saludos. arroba2
Ejemplo:
Por ejemplo, tenemos la matriz 7x7:
1 2 3 4 5 6 7
1 L A S Z X A B
2 P E P E P E P
3 L I S A L A S
4 T L G F A S F
5 S A G D S D A
6 U S A L U W T
7 L A M Y S Q 0
Si buscamos la palabra: LAS
El resultado de la ejecución será:
La palabra LAS aparece 6 veces en la Sopa de Letras.
Si buscamos la palabra: PEPE
El resultado de la ejecución será:
La palabra PEPE aparece 4 veces en la Sopa de Letras.
Cuando me refiero a los 4 sentidos, me refiero a incrementar y decremantar el valos de la coordenada POR para ir hacia adelante o atrás en el mismo renglón o incrementar y decremantar Y para buscar hacia abajo o arriba. Pero dale, hacete el tema de la lectura del archivo y el ingreso de la palabra a buscar y lo terminamos juntos
No hay problema.
El subprograma de lectura del arachivo ya lo tengo hecho, y tengo la asignación del fichero. Lo que no se es como meter las palabras a buscar, pero seguiré con ello. A ver si la semana que viene tengo algo más claro.
Gracias, saludos
Cuando puedas, pásame lo que tienes hecho, sino, te voy a tener que pasar solo un ejemplo de como recorrer la matriz
De momento esto es lo que tengo. Dónde hay ** es que tengo dudas, por ejemplo no se como declarar el array (no se puede con string), la función no se si está del todo bien y luego en el procedure no se cómo hacer la búsqueda.
Program SopaDeLetras (F,Output);
uses crt;
**TYPE Tcadena = array ('a'..'z') : char; **
VAR F1,F2,F3: text;
Opcion:Char;
**Function Palabra (Pal:Tcadena):Tcadena; **
Begin
WriteLn('Escriba la palabra que desea buscar en la sopa de letras');
Read(Pal);
While length(pal) downto 3 do
Begin
WriteLn('El tamaño minimo de la palabra son tres letras: ');
WriteLn('Escriba de nuevo una palabra a buscar: ');
Read(Pal)
End;
Palabra:=Pal;
End;
**Procedure Buscar(F:text); **
Var Pal:Tcadena;
Begin
Palabra(Pal);
Readln(f, x);
**Búsqueda normal y a la inversa
End;
Begin (*Programa Principal*)
Assign(F1, ' C:\P1\ datos21b.txt ');
Assign(F2, ' C:\P1\ datos22b.txt ');
Assign(F3, ' C:\P1\ datos23b.txt ');
Reset(F1);
Reset(F2);
Reset(F3);
WriteLn('be0100, Estefania Moreno Arroba');
WriteLn('***** Presione ENTER para continuar *****');
ReadKey;
Repeat
ClrScr;
WriteLn(' ELIGE UNA OPCION:');
WriteLn;
WriteLn('1 - Sopa de letras 5x5');
WriteLn('2 - Sopa de letras 7x7');
WriteLn('3 - Sopa de letras 9x9');
WriteLn('4 - Salir del programa');
WriteLn;
Repeat
Opcion:=ReadKey;
Until (Opcion >= '4') And (Opcion <= '3');
Case Opcion of
'1': Buscar(F1);
'2': Buscar(F2);
'3': Buscar(F3);
End;
Until Opcion = '4';
End.
Gracias y saludos
uy... ¿pero vos no sos al que le pase el programa casi terminado? ¿O hay 2 con el mismo problema?, si sos otro, dame un toque que lo estoy terminando
Saludos.
Gabriel
gabarenas arroba hotmail.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas