C/Visual C - palabras en matriz (expertos)

 
Vista:

palabras en matriz (expertos)

Publicado por guillermo cardona (5 intervenciones) el 01/03/2003 02:15:12
buenas noches damas y caballeros:

tengo un problema con una funcion que se debe crear en lenguaje turbo C y necesito su gran experiencia y ayuda por favor:

tengo una matriz de M xM en la que escondi palabras como:

guillermo
judolflrlñr
ujdkdana
aiupekdk
akllmem
jskiilsllñp

(las palabras estan en todos los ordenes horizontales verticales diagonales, invertidas etc),
cada letra corresponde a una posicion de memoria no es cierto
ahora como hago cuando al digitar una palabra: mario
una funcion recorra la matriz y me muestre si la palabra esta o no y me muestre los avisos(nombre encontrado
mario no encontrado).

agradezco toda su colaboracion y ayuda..

g.cardona
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 Alejandro

Búsqueda de palabras en una matriz M x M

Publicado por Alejandro (1153 intervenciones) el 06/05/2025 23:13:01
Para resolver el problema de buscar una palabra en una matriz de caracteres en Turbo C, puedes implementar una función que recorra la matriz en todas las direcciones posibles: horizontal, vertical y diagonal, tanto en sentido normal como invertido. A continuación, te muestro un ejemplo de cómo podrías hacerlo.

Ejemplo de código en Turbo C



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
#include <stdio.h>
#include <string.h>
 
#define M 6 // Tamaño de la matriz
 
// Prototipo de la función
int buscarPalabra(char matriz[M][M], char *palabra);
 
int main() {
    char matriz[M][M] = {
        {'g', 'u', 'i', 'l', 'l', 'e'},
        {'j', 'u', 'd', 'o', 'l', 'f'},
        {'u', 'j', 'd', 'k', 'd', 'a'},
        {'a', 'i', 'u', 'p', 'e', 'k'},
        {'a', 'k', 'l', 'l', 'm', 'e'},
        {'j', 's', 'k', 'i', 'i', 'l'}
    };
 
    char palabra[20];
    printf("Ingrese la palabra a buscar: ");
    scanf("%s", palabra);
 
    if (buscarPalabra(matriz, palabra)) {
        printf("Nombre encontrado: %s\n", palabra);
    } else {
        printf("%s no encontrado.\n", palabra);
    }
 
    return 0;
}
 
// Función para buscar la palabra en la matriz
int buscarPalabra(char matriz[M][M], char *palabra) {
    int longitud = strlen(palabra);
 
    // Recorrer la matriz
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < M; j++) {
            // Verificar en todas las direcciones
            // Horizontal derecha
            if (j + longitud <= M) {
                if (strncmp(&matriz[i][j],palabra, longitud) == 0) {
                    return 1;
                }
            }
            // Horizontal izquierda
            if (j - longitud >= -1) {
                if (strncmp(&matriz[i][j - longitud + 1], palabra, longitud) == 0) {
                    return 1;
                }
            }
            // Vertical abajo
            if (i + longitud <= M) {
                int k;
                for (k = 0; k < longitud; k++) {
                    if (matriz[i + k][j] != palabra[k]) break;
                }
                if (k == longitud) return 1;
            }
            // Vertical arriba
            if (i - longitud >= -1) {
                int k;
                for (k = 0; k < longitud; k++) {
                    if (matriz[i - k][j] != palabra[k]) break;
                }
                if (k == longitud) return 1;
            }
            // Diagonal derecha abajo
            if (i + longitud <= M && j + longitud <= M) {
                int k;
                for (k = 0; k < longitud; k++) {
                    if (matriz[i + k][j + k] != palabra[k]) break;
                }
                if (k == longitud) return 1;
            }
            // Diagonal izquierda arriba
            if (i - longitud >= -1 && j - longitud >= -1) {
                int k;
                for (k = 0; k < longitud; k++) {
                    if (matriz[i - k][j - k] != palabra[k]) break;
                }
                if (k == longitud) return 1;
            }
            // Diagonal derecha arriba
            if (i - longitud >= -1 && j + longitud <= M) {
                int k;
                for (k = 0; k < longitud; k++) {
                    if (matriz[i - k][j + k] != palabra[k]) break;
                }
                if (k == longitud) return 1;
            }
            // Diagonal izquierda abajo
            if (i + longitud <= M && j - longitud >= -1) {
                int k;
                for (k = 0; k < longitud; k++) {
                    if (matriz[i + k][j - k] != palabra[k]) break;
                }
                if (k == longitud) return 1;
            }
        }
    }
 
    return 0; // Palabra no encontrada
}

Explicación del código:


1. Definición de la matriz: Se define una matriz de caracteres de tamaño M x M y se inicializa con las palabras ocultas.
2. Entrada de usuario: Se solicita al usuario que ingrese la palabra que desea buscar.
3. Función `buscarPalabra`: Esta función recorre la matriz y verifica si la palabra está presente en cualquiera de las direcciones:
- Horizontal (derecha e izquierda)
- Vertical (abajo y arriba)
- Diagonal (en las cuatro direcciones)
4. Comparación de cadenas: Se utiliza `strncmp` para comparar las cadenas de caracteres y verificar si coinciden.
5. Resultados: Se imprime si la palabra fue encontrada o no.

Consideraciones:


- Asegúrate de que el tamaño de la matriz y las palabras se ajusten a tus necesidades.
- Este código está diseñado para ser compilado en Turbo C. Si utilizas un compilador diferente, puede que necesites hacer algunos ajustes.

¡Buena suerte con tu proyecto, Guillermo!
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