I am trying the following program: the user enters a word and it should be found in a matrix reading from left to right or from right to left. I have managed to find the words reading from left to right, but not from right to left.
I have tried two methods: the first one creating a string 'inside out' to the original string and reading the matrix in a normal way and the second method, using a string equal to the one entered but reading the matrix from right to left.
However, none of the methods work.
Method 1:
#include<stdio.h>
#define N 5
#define M 7
void mostrar_sopa(char sopa[N][M]);
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col);
int cad_iguales (char pal1[], char pal2[]);
int longitud_pal (char pal[]);
void main()
{
int fila, columna;
char pal[M];
char sopa[N][M] =
{
'A', 'A', 'P', 'E', 'P', 'A', 'P',
'B', 'N', 'O', 'T', 'R', 'P', 'Y',
'P', 'E', 'P', 'E', 'P', 'E', 'W',
'A', 'P', 'E', 'P', 'I', 'T', 'A',
'E', 'T', 'O', 'P', 'E', 'P', 'Y',
};
mostrar_sopa(sopa);
printf("\nIntroduce una palabra, de %d caracteres como maximo: ", M);
gets(pal);
for(fila=0; fila<N; fila++)
{
for(columna=0; columna<M; columna++)
{
if(buscar_palabra_horizontal(sopa, pal, fila, columna)==1)
printf("\nEsta en la fila %d y en la columna %d: hacia la derecha", fila, columna);
else if(buscar_palabra_horizontal(sopa, pal, fila, columna)==2)
printf("\nEsta en la fila %d y en la columna %d: hacia la izquierda", fila, columna);
}
}
}
//calcula la longitud de una palabra que recibe como parámetro
int longitud_pal (char pal[M])
{
int i;
for(i=0; pal[i] != '#include<stdio.h>
#define N 5
#define M 7
void mostrar_sopa(char sopa[N][M]);
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col);
int cad_iguales (char pal1[], char pal2[]);
int longitud_pal (char pal[]);
void main()
{
int fila, columna;
char pal[M];
char sopa[N][M] =
{
'A', 'A', 'P', 'E', 'P', 'A', 'P',
'B', 'N', 'O', 'T', 'R', 'P', 'Y',
'P', 'E', 'P', 'E', 'P', 'E', 'W',
'A', 'P', 'E', 'P', 'I', 'T', 'A',
'E', 'T', 'O', 'P', 'E', 'P', 'Y',
};
mostrar_sopa(sopa);
printf("\nIntroduce una palabra, de %d caracteres como maximo: ", M);
gets(pal);
for(fila=0; fila<N; fila++)
{
for(columna=0; columna<M; columna++)
{
if(buscar_palabra_horizontal(sopa, pal, fila, columna)==1)
printf("\nEsta en la fila %d y en la columna %d: hacia la derecha", fila, columna);
}
}
for(fila=0; fila<N; fila++)
{
for(columna=M-1; columna>=0; columna--)
{
if(buscar_palabra_horizontal(sopa, pal, fila, columna)==1)
printf("\nEsta en la fila %d y en la columna %d: hacia la izquierda", fila, columna);
}
}
}
//calcula la longitud de una palabra que recibe como parámetro
int longitud_pal (char pal[M])
{
int i;
for(i=0; pal[i] != '#include<stdio.h>
#define N 5
#define M 7
void mostrar_sopa(char sopa[N][M]);
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col);
int cad_iguales (char pal1[], char pal2[]);
int longitud_pal (char pal[]);
void main()
{
int fila, columna;
char pal[M];
char sopa[N][M] =
{
'A', 'A', 'P', 'E', 'P', 'A', 'P',
'B', 'N', 'O', 'T', 'R', 'P', 'Y',
'P', 'E', 'P', 'E', 'P', 'E', 'W',
'A', 'P', 'E', 'P', 'I', 'T', 'A',
'E', 'T', 'O', 'P', 'E', 'P', 'Y',
};
mostrar_sopa(sopa);
printf("\nIntroduce una palabra, de %d caracteres como maximo: ", M);
gets(pal);
for(fila=0; fila<N; fila++)
{
for(columna=0; columna<M; columna++)
{
if(buscar_palabra_horizontal(sopa, pal, fila, columna)==1)
printf("\nEsta en la fila %d y en la columna %d: hacia la derecha", fila, columna);
else if(buscar_palabra_horizontal(sopa, pal, fila, columna)==2)
printf("\nEsta en la fila %d y en la columna %d: hacia la izquierda", fila, columna);
}
}
}
//calcula la longitud de una palabra que recibe como parámetro
int longitud_pal (char pal[M])
{
int i;
for(i=0; pal[i] != '#include<stdio.h>
#define N 5
#define M 7
void mostrar_sopa(char sopa[N][M]);
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col);
int cad_iguales (char pal1[], char pal2[]);
int longitud_pal (char pal[]);
void main()
{
int fila, columna;
char pal[M];
char sopa[N][M] =
{
'A', 'A', 'P', 'E', 'P', 'A', 'P',
'B', 'N', 'O', 'T', 'R', 'P', 'Y',
'P', 'E', 'P', 'E', 'P', 'E', 'W',
'A', 'P', 'E', 'P', 'I', 'T', 'A',
'E', 'T', 'O', 'P', 'E', 'P', 'Y',
};
mostrar_sopa(sopa);
printf("\nIntroduce una palabra, de %d caracteres como maximo: ", M);
gets(pal);
for(fila=0; fila<N; fila++)
{
for(columna=0; columna<M; columna++)
{
if(buscar_palabra_horizontal(sopa, pal, fila, columna)==1)
printf("\nEsta en la fila %d y en la columna %d: hacia la derecha", fila, columna);
}
}
for(fila=0; fila<N; fila++)
{
for(columna=M-1; columna>=0; columna--)
{
if(buscar_palabra_horizontal(sopa, pal, fila, columna)==1)
printf("\nEsta en la fila %d y en la columna %d: hacia la izquierda", fila, columna);
}
}
}
//calcula la longitud de una palabra que recibe como parámetro
int longitud_pal (char pal[M])
{
int i;
for(i=0; pal[i] != '%pre%'; i++);
return i;
}
//compara dos palabras que recibe como parámetros,
// devuelve: 1 si son iguales y 0 si no lo son
int cad_iguales (char pal1[M], char pal2[M])
{
int i, enc=1;
for(i=0; pal1[i]!='%pre%' && pal2[i]!='%pre%' && enc; i++)
{
if(pal1[i]!=pal2[i])
enc=0;
}
return enc;
}
//Función que permite al usuario mostrar la sopa de letras centrada
void mostrar_sopa(char sopa[N][M])
{
int i, j;
for(i=0; i<N; i++)
{
printf(" ");
for(j=0; j<M; j++)
printf("%2c", sopa[i][j]);
printf("\n");
}
}
//Busca la palabra horizontalmente a partir de una posición de la matriz que
//recibe como parametro
//Devuelve 0 si no la ha encontrado y 1 si la encuentra
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col)
{
int i, j, resul=1;
char pal2[M+1];
for(i=0; pal[i]!='%pre%'; i++)
{
pal2[i]=sopa[fil][col+i];
}
if(cad_iguales(pal, pal2)!=1)
resul=0;
return resul;
}
'; i++);
return i;
}
//compara dos palabras que recibe como parámetros,
// devuelve: 1 si son iguales y 0 si no lo son
int cad_iguales (char pal1[M], char pal2[M])
{
int i, enc=1;
for(i=0; pal1[i]!='%pre%' && pal2[i]!='%pre%' && enc; i++)
{
if(pal1[i]!=pal2[i])
enc=0;
}
return enc;
}
//Función que permite al usuario mostrar la sopa de letras centrada
void mostrar_sopa(char sopa[N][M])
{
int i, j;
for(i=0; i<N; i++)
{
printf(" ");
for(j=0; j<M; j++)
printf("%2c", sopa[i][j]);
printf("\n");
}
}
//Busca la palabra horizontalmente a partir de una posición de la matriz que
//recibe como parametro
//Devuelve 0 si no la ha encontrado, 1 si la encuentra de izquierda a derecha y 2 si la encuentra de derecha a izquierda
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col)
{
int i, j, resul=1, resul2=2;
char pal2[M+1], pal3[M+1];
for(i=0; pal[i]!='%pre%'; i++)
{
pal2[i]=sopa[fil][col+i];
pal3[i]=pal2[longitud_pal(pal2)-i];
}
if(cad_iguales(pal, pal2)!=1)
resul=0;
if(cad_iguales(pal, pal3)!=1)
resul=0;
return resul;
return resul2;
}
'; i++);
return i;
}
//compara dos palabras que recibe como parámetros,
// devuelve: 1 si son iguales y 0 si no lo son
int cad_iguales (char pal1[M], char pal2[M])
{
int i, enc=1;
for(i=0; pal1[i]!='%pre%' && pal2[i]!='%pre%' && enc; i++)
{
if(pal1[i]!=pal2[i])
enc=0;
}
return enc;
}
//Función que permite al usuario mostrar la sopa de letras centrada
void mostrar_sopa(char sopa[N][M])
{
int i, j;
for(i=0; i<N; i++)
{
printf(" ");
for(j=0; j<M; j++)
printf("%2c", sopa[i][j]);
printf("\n");
}
}
//Busca la palabra horizontalmente a partir de una posición de la matriz que
//recibe como parametro
//Devuelve 0 si no la ha encontrado y 1 si la encuentra
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col)
{
int i, j, resul=1;
char pal2[M+1];
for(i=0; pal[i]!='%pre%'; i++)
{
pal2[i]=sopa[fil][col+i];
}
if(cad_iguales(pal, pal2)!=1)
resul=0;
return resul;
}
'; i++);
return i;
}
//compara dos palabras que recibe como parámetros,
// devuelve: 1 si son iguales y 0 si no lo son
int cad_iguales (char pal1[M], char pal2[M])
{
int i, enc=1;
for(i=0; pal1[i]!='%pre%' && pal2[i]!='%pre%' && enc; i++)
{
if(pal1[i]!=pal2[i])
enc=0;
}
return enc;
}
//Función que permite al usuario mostrar la sopa de letras centrada
void mostrar_sopa(char sopa[N][M])
{
int i, j;
for(i=0; i<N; i++)
{
printf(" ");
for(j=0; j<M; j++)
printf("%2c", sopa[i][j]);
printf("\n");
}
}
//Busca la palabra horizontalmente a partir de una posición de la matriz que
//recibe como parametro
//Devuelve 0 si no la ha encontrado, 1 si la encuentra de izquierda a derecha y 2 si la encuentra de derecha a izquierda
int buscar_palabra_horizontal(char sopa[N][M], char pal[M+1], int fil, int col)
{
int i, j, resul=1, resul2=2;
char pal2[M+1], pal3[M+1];
for(i=0; pal[i]!='%pre%'; i++)
{
pal2[i]=sopa[fil][col+i];
pal3[i]=pal2[longitud_pal(pal2)-i];
}
if(cad_iguales(pal, pal2)!=1)
resul=0;
if(cad_iguales(pal, pal3)!=1)
resul=0;
return resul;
return resul2;
}
Method 2:
%pre%For example, if I write 'PAP' (row 0, column 6) it only detects when it starts from column 4 (to the right). And if I write 'ATI' (row 3, column 6) it does not detect it.