Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sopa de letras

Estas en el tema de Sopa de letras en el foro de C/C++ en Foros del Web. Hola tengo una duda y es que estoy intentando hacer una sopa de letras, introduzco la palabra a encontrar: Ejemplo: moto Luego que introduzca 16 ...
  #1 (permalink)  
Antiguo 17/01/2015, 05:19
 
Fecha de Ingreso: enero-2015
Mensajes: 1
Antigüedad: 9 años, 10 meses
Puntos: 0
Sopa de letras

Hola tengo una duda y es que estoy intentando hacer una sopa de letras, introduzco la palabra a encontrar:
Ejemplo: moto
Luego que introduzca 16 caracteres (ya que es una matriz 4x4):
lola
moto
coco
pepe

Ahora tiene que mostrar la matriz y luego buscar la palabra y decirme en que fila empieza y acaba y lo mismo en columna.

El problema lo tengo en las funciones buscar horizontal derecha izquierda, vertical arriba abajo y diagonal superior y inferior. Si alguien me puede ayudar. Gracias de antemano!

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6. #define MIDA 4
  7.  
  8. void llegirParaula(char paraula[MIDA]);
  9. void llegirSopa(char sopa[MIDA][MIDA]);
  10. void mostrarSopa(char sopa[MIDA][MIDA]);
  11.  
  12. void hor_dre(char sopa[MIDA][MIDA], char paraula[]);
  13.  
  14. void ver_dal(char sopa[MIDA][MIDA], char paraula[]);
  15. void hor_esq(char sopa[MIDA][MIDA], char paraula[]);
  16. void ver_bai(char sopa[MIDA][MIDA], char paraula[]);
  17.  
  18. int main()
  19. {
  20.     char paraula[MIDA];
  21.     char sopa[MIDA][MIDA];
  22.  
  23.     printf("Introdueix una cadena acabada en \'\\n\': ");
  24.     llegirParaula(paraula);
  25.  
  26.     printf("Introdueix els 64 caracters de la sopa: \n");
  27.     llegirSopa(sopa);
  28.     mostrarSopa(sopa);
  29.  
  30.     printf("\nParaula a cercar: %s\n", paraula);
  31.    
  32.     hor_dre(sopa, paraula);
  33.     /*
  34.     ver_dal(sopa, paraula);
  35.     hor_esq(sopa, paraula);
  36.     ver_bai(sopa, paraula);
  37.     */
  38. }
  39.  
  40. void llegirParaula(char paraula[MIDA]){
  41.  
  42.     char c;
  43.     int i = 0;
  44.    
  45.     scanf("%c", &c);
  46.  
  47.     while(c != '\n' && i < MIDA){
  48.         paraula[i] = c;
  49.         i = i + 1;
  50.         scanf("%c", &c);
  51.     }
  52.    
  53.     paraula[i] = '\0';
  54. }
  55.  
  56. void llegirSopa(char sopa[MIDA][MIDA]) {
  57.     int f, c;
  58.     char car;
  59.  
  60.     f = 0;
  61.     while (f < MIDA) {
  62.         c = 0;
  63.         while (c < MIDA) {
  64.             scanf("%c", &car);
  65.             if (islower(car)) {
  66.                 sopa[f][c] = car;
  67.                 c = c + 1;
  68.             }
  69.         }
  70.         f = f + 1;
  71.     }
  72. }
  73.  
  74. void mostrarSopa(char sopa[MIDA][MIDA]){
  75.    
  76.     int f, c;
  77.    
  78.     for(f = 0; f < MIDA; f++){
  79.         for(c = 0; c < MIDA; c++){
  80.             printf("|%c|", sopa[f][c]);    
  81.         }
  82.     printf("\n");  
  83.     }
  84. }
  85.  
  86. void hor_dre(char sopa[MIDA][MIDA], char paraula[]){
  87.     int f, c, k;
  88.     char car;
  89.     bool trobat = false;   
  90.  
  91.     for(f = 0; f < MIDA && !trobat; f++)
  92.     {
  93.         for(k = 0, c=0; c < MIDA && !trobat; c++){
  94.             printf("%c", sopa[f][c]);
  95.             if(strcmp(paraula, sopa[f]) == 0){
  96.                 trobat = true;
  97.             }
  98.         }printf("\n");
  99.     }  
  100.     if(trobat)
  101.         printf("\t|| La paraula [%s] es troba en la sopa ||\n", paraula);
  102.     else
  103.         printf("\t|| La paraula [%s] no hi es ||\n", paraula);
  104. }
  105.  
  106. void ver_dal(char sopa[MIDA][MIDA], char paraula[])
  107. {
  108.     int f, c, k, ok;
  109.     char car;  
  110.  
  111.     for(c=0; c < MIDA; c++)
  112.     {
  113.         for(k = 0, f=0; f < MIDA; f++){
  114.             printf("%c", sopa[f][c]);
  115.             if(strcmp(paraula, sopa[c]) == 0){
  116.                 ok = 1;
  117.             }
  118.         }printf("\n");
  119.     }  
  120.     if(ok != 0)
  121.         printf("\t|| La paraula [%s] es troba en la sopa ||\n", paraula);
  122.     else
  123.         printf("\t|| La paraula [%s] no hi es ||\n", paraula);
  124. }
  125.  
  126.  
  127. void hor_esq(char sopa[MIDA][MIDA], char paraula[]){
  128.     int f, c, k, ok;
  129.     char car;  
  130.  
  131.     for(f=0; f < MIDA; f++)
  132.     {
  133.         for(k = 0, c=0; c < MIDA; c--){
  134.             printf("%c", sopa[f][c]);
  135.             if(strcmp(paraula, sopa[f]) == 0){
  136.                 ok = 1;
  137.             }
  138.         }printf("\n");
  139.     }  
  140.     if(ok != 0)
  141.         printf("\t|| La paraula [%s] es troba en la sopa ||\n", paraula);
  142.     else
  143.         printf("\t|| La paraula [%s] no hi es ||\n", paraula);
  144. }
  145.  
  146. void ver_bai(char sopa[MIDA][MIDA], char paraula[])
  147. {
  148.     int f, c, k, ok;
  149.     char car;  
  150.  
  151.     for(c=0; c < MIDA; c++)
  152.     {
  153.         for(k = 0, f=0; f < MIDA; f--){
  154.             printf("%c", sopa[f][c]);
  155.             if(strcmp(paraula, sopa[c]) == 0){
  156.                 ok = 1;
  157.             }
  158.         }printf("\n");
  159.     }  
  160.     if(ok != 0)
  161.         printf("\t|| La paraula [%s] es troba en la sopa ||\n", paraula);
  162.     else
  163.         printf("\t|| La paraula [%s] no hi es ||\n", paraula);
  164. }

Última edición por razpeitia; 18/01/2015 a las 14:57
  #2 (permalink)  
Antiguo 18/01/2015, 05:37
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Sopa de letras

Mete el código entre estas etiquetas:
Código PHP:
[HIGHLIGHT="C++"][/HIGHLIGHT
Tráducelo para los no parlantes, la mayoría de aquí no hablamos Catalán.

Indica con más claridad cual es ese problema que tienes (¿un error de compilación? ¿De ejecución? ¿Te da una salida incorrecta? ¿Cuál?).
  #3 (permalink)  
Antiguo 24/01/2015, 11:49
 
Fecha de Ingreso: diciembre-2014
Ubicación: Lleida
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Sopa de letras

Creo que voy a tu clase, UDL 1 Curso, no hay ningun oracio creo, como te llamas en realidad?
  #4 (permalink)  
Antiguo 24/01/2015, 12:11
 
Fecha de Ingreso: diciembre-2014
Ubicación: Lleida
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Sopa de letras

fallos a primera vista que veo:
cuando dices que se inserte la matriz, en vez de poner 64 pon MIDA*MIDA, ya que asi pondra 16(caracteres que acepta la matriz).

En cada funcion para buscar, estas comparando toda la fila o columna con la palabra a buscar.
(En el caso que la palabra a buscar sea mas pequeña que la longitud maxima de la matriz, no la encontrara) ademas que en cada funcion buscar, imprimes cada letra que buscas.

Te recomiendo que lo implementes de la forma siguiente:
1.-Insertas el string a buscar, asegurandote de que lo conviertes a minusculas.
2.-Insertas la matriz, asegurandote que esta en minusculas.
3.-Bucle para buscar una coincidencia en la matriz con la primera letra(bool primera_letra).
4.-Bucle para buscar la segunda letra alrededor
5.-ya sabes la direccion, busca una coincidencia en esa direccion

La practica se implementa en 100lineas o menos.

Etiquetas: char, funcion, int, letras, sopa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:50.