Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/01/2015, 05:19
oracio10
 
Fecha de Ingreso: enero-2015
Mensajes: 1
Antigüedad: 9 años, 3 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