Dev - C++ - Juego sopa de letras

 
Vista:
sin imagen de perfil
Val: 31
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Juego sopa de letras

Publicado por fernanda (10 intervenciones) el 12/02/2021 01:19:05
Debo buscar la palabra de forma horizontal a la derecha, vertical(de arriba hacia abajo) y en diagonal hacia del sureste. Por ejemplo la palabra "kl", aparece en el tablero, a partir de la celda del renglón 2 y columna 0, leyendo hacia la "derecha". En el caso de la palabra "dk" aparece a partir de la celda del reglón 1, columna 0 y leyendo hacia "abajo". En el caso de la palabra "dl" aparece a partir de la celda del reglón 1, columna 0 y leyendo hacia el "sureste". Pero la palabra "al", no se encuentra en el tablero, si consideramos únicamente los 3 sentidos válidos.

Me podrían ayudar, ya tengo un ciclo que busca la palabra hacia la derecha pero no sé como buscar de forma vertical y en diagonal, podrían ayudarme por favor, este es mi código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#define REN 10
#define COL 10
int main(int argc, char *argv[]) {
 
    int renglon, columna;
    char caracter, aux;
    int tam;
    char matriz[REN][COL];
    char palabra1[11];
    char palabra2[11];
    char palabra3[11];
    int bandera,contador,longitud;
 
    gets(palabra1);
    gets(palabra2);
    gets(palabra3);
 
    scanf ("%d",&tam);
    scanf ("%c",&aux);
 
    //CICLO PARA LA CAPTURA DE DATOS
    for(renglon=0; renglon<tam; renglon++){
        for (columna=0; columna<tam; columna++){
            scanf ("%c", &matriz[renglon][columna]);
            scanf ("%c", &aux);
        }
    }
 
    for(renglon=0; renglon<tam; renglon++){
        for (columna=0; columna<tam; columna++){
            if (matriz[renglon][columna] == palabra1[0]){
            //comenzamos a buscar la palabra
            //DERECHA (IMPLEMENTAMOS UN CICLO QUE BUSQUE A LA DERECHA LA SUIGUENTE LETRA DE LA PALABRA)
                longitud= strlen(palabra1);
                bandera=1;
                for (contador=1;contador<longitud && columna+contador<tam; contador++);//controla no exceder a la longitud de la palabra
                    if (matriz [renglon][columna+contador] == palabra1[contador]){
                        bandera=0; // si la bandera cambia a cero es por que la palabra no se encuentra a la deracha
                        break;
                    }
                }
                //verificar el codigo cuando termine
                //si todos los caracteres coincidieron
                if (bandera==1  && contador==longitud ){
                    //imprimir las coordenadas
                    printf ("%c:%d %d derecha,",palabra1, renglon,columna);
                }
            //SURESTE
 
 
 
            //ABAJO
 
 
        }
    }
 
 
 
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Juego sopa de letras

Publicado por Rodrigo (539 intervenciones) el 12/02/2021 02:01:10
Es rara la linea 38.
En ella se compara el caracter dentro de la matriz con el de la palabra, y si coinciden, se cambia la bandera indicando que la palabra no esta.
No tiene que ser justo lo contrario? Osea, si NO coinciden el elemento no esta?

Respecto a como hacer hacia abajo, el contador en vez de afectar a las columnas tiene que afectar a las filas.
El codigo que tienes el contador se usa en las columnas, en el siguiente ciclo usalo en las filas y en el ultimo, tanto a filas como columnas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 31
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Juego sopa de letras

Publicado por fernanda (10 intervenciones) el 12/02/2021 03:15:36
algo así
creo que ya lo solucioné

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#include <stdio.h>
#include <string.h>
#define TAM 10
 
int main() {
 
	char matriz[TAM][TAM];
	char palabra1[TAM+1], palabra2[TAM+1], palabra3[TAM+1];
	int n, renglon, columna, bandera, veces=0, contador;
	char auxiliar;
 
	gets (palabra1);
	gets (palabra2);
	gets (palabra3);
 
	scanf ("%d", &n);
 
 
	scanf ("%c", &auxiliar);
 
	for (renglon=0; renglon<n; renglon++){
		for (columna=0; columna<n; columna++){
			scanf ("%c", &matriz[renglon][columna]);
			scanf ("%c", &auxiliar);
		}
	}
 
	//---------------------------------------------------------------------------------
 
	printf ("%s:", palabra1);
	for (renglon=0;renglon<n; renglon++){
		for (columna=0;columna<n;columna++){
			if (matriz[renglon][columna]==palabra1[0]){
				int numcaracteres1=strlen (palabra1);
 
				bandera=1;
 
				for (contador=1; contador<numcaracteres1 && columna+contador<n; contador++){
 
					if (matriz[renglon][columna+contador]!=palabra1[contador]){
						bandera=0;
						break;
					}
				}
				if (bandera==1 && contador==numcaracteres1){
					veces=1;
					printf ("%d %d derecha,", renglon, columna);
 
				}
 
 
				for (contador=1; contador<numcaracteres1 && columna+contador<n; contador++){
 
					if (matriz[renglon+contador][columna+contador]!=palabra1[contador]){
						bandera=0;
						break;
					}
 
				}
				if (bandera==1 && contador==numcaracteres1){
					veces=1;
					printf ("%d %d sureste,", renglon, columna);
				}
 
 
				for (contador=1; contador<numcaracteres1 && renglon+contador<n; contador++){
 
					if (matriz[renglon+contador][renglon+columna]!=palabra1[contador]){
						bandera=0;
						break;
					}
 
				}
				if (bandera==1 && contador==numcaracteres1){
					veces=1;
					printf ("%d %d abajo,", renglon, columna);
 
				}
				//--------------------------------------------------------------------------------------------------------
				printf ("%s:", palabra2);
				for (renglon=0;renglon<n; renglon++){
					for (columna=0;columna<n;columna++){
						if (matriz[renglon][columna]==palabra2[0]){
							int numcaracteres1=strlen (palabra2);
 
							bandera=1;
							bandera=1;
 
							for (contador=1; contador<numcaracteres1 && columna+contador<n; contador++){
 
								if (matriz[renglon][columna+contador]!=palabra2[contador]){
									bandera=0;
									break;
								}
							}
							if (bandera==1 && contador==numcaracteres1){
								veces=1;
								printf ("%d %d derecha,", renglon, columna);
 
							}
 
 
							for (contador=1; contador<numcaracteres1 && columna+contador<n; contador++){
 
								if (matriz[renglon+contador][columna+contador]!=palabra2[contador]){
									bandera=0;
									break;
								}
 
							}
							if (bandera==1 && contador==numcaracteres1){
								veces=1;
								printf ("%d %d sureste,", renglon, columna);
							}
 
 
							for (contador=1; contador<numcaracteres1 && renglon+contador<n; contador++){
 
								if (matriz[renglon+contador][renglon+columna]!=palabra2[contador]){
									bandera=0;
									break;
								}
 
							}
							if (bandera==1 && contador==numcaracteres1){
								veces=1;
								printf ("%d %d abajo,", renglon, columna);
 
							}
 
						}
					}
				}
 
				//------------------------------------------------------------------------------------------------------------------------------
				printf ("%s:", palabra2);
				for (renglon=0;renglon<n; renglon++){
					for (columna=0;columna<n;columna++){
						if (matriz[renglon][columna]==palabra2[0]){
							int numcaracteres1=strlen (palabra2);
 
							bandera=1;
							bandera=1;
 
							for (contador=1; contador<numcaracteres1 && columna+contador<n; contador++){
 
								if (matriz[renglon][columna+contador]!=palabra2[contador]){
									bandera=0;
									break;
								}
							}
							if (bandera==1 && contador==numcaracteres1){
								veces=1;
								printf ("%d %d derecha,", renglon, columna);
 
							}
 
 
							for (contador=1; contador<numcaracteres1 && columna+contador<n; contador++){
 
								if (matriz[renglon+contador][columna+contador]!=palabra2[contador]){
									bandera=0;
									break;
								}
 
							}
							if (bandera==1 && contador==numcaracteres1){
								veces=1;
								printf ("%d %d sureste,", renglon, columna);
							}
 
 
							for (contador=1; contador<numcaracteres1 && renglon+contador<n; contador++){
 
								if (matriz[renglon+contador][renglon+columna]!=palabra2[contador]){
									bandera=0;
									break;
								}
 
							}
							if (bandera==1 && contador==numcaracteres1){
								veces=1;
								printf ("%d %d abajo,", renglon, columna);
 
							}
						}
					}
				}
				//-----
 
			}
		}
	}
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar