Dev - C++ - Buscar palabra en una matriz tipo char. (Sopa de letras)

 
Vista:
Imágen de perfil de Rojas

Buscar palabra en una matriz tipo char. (Sopa de letras)

Publicado por Rojas (5 intervenciones) el 30/05/2018 05:24:52
Hola, soy nueva en esto de la programación... y necesito hacer un metodo en el cual el usuario escriba una palabra y la busque en la matriz (la cual es una sopa de letras), y retorne la posición y hacia que dirección esta la palabra. Ejemplo:
La palabra SOPA en la Sopa de Letras:
A F M A H G A
T P Y P W P L
X H O O O R Z
A P O S O P A
R T O O O I U
F P U P V P C
A N Q A Z B A

1. Está en la posición [3, 3] hacia la derecha.
2. Está en la posición [3, 3] hacia abajo.
3. Está en la posición [3, 3] hacia arriba.
4. Está en la posición [3, 3] hacia la izquierda.
5. Está en la posición [3, 3] hacia la derecha y abajo.
6. Está en la posición [3, 3] hacia la derecha y arriba.
7. Está en la posición [3, 3] hacia la izquierda y abajo.
8. Está en la posición [3, 3] hacia la izquierda y arriba.

Si la palabra que se busca es “LETRAS”, el programa debe mostrar en la pantalla:

La palabra LETRAS en la Sopa de Letras:

A F M A H G A
T P Y P W P L
X H O O O R Z
A P O S O P A
R T O O O I U
FP U P V P C
A N Q A Z B A

No aparece.

alguien me podría por favor dar un ejemplo de como puedo hacerlo, gracias!
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
Val: 25
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buscar palabra en una matriz tipo char. (Sopa de letras)

Publicado por Alejandro (9 intervenciones) el 30/05/2018 18:53:30
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Te dejo la respuesta en php, te toca traducirla XD
Es una solucion muy primitiva pues se puede mejor con algo mas de tiempo y dedicacion por el momento cumple con lo requerido.

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
<?php
$palabra = $_POST['palabra'];
 
$sopa=array(
	array( "A", "F", "M", "A", "H", "G", "A" ),
	array( "T", "P", "Y", "P", "W", "P", "L" ),
	array( "X", "H", "O", "O", "O", "R", "Z" ),
	array( "A", "P", "O", "S", "O", "P", "A" ),
	array( "R", "T", "O", "O", "O", "I", "U" ),
	array( "F", "P", "U", "P", "V", "P", "C" ),
	array( "A", "N", "Q", "A", "Z", "B", "A" )
);
 
echo "<table>";
	foreach($sopa as $row){
		echo "<tr>";
			foreach($row as $cell){
				echo "<td>$cell</td>";
			}
		echo "</tr>";
	}
echo "</table>";
 
$palabras =array();
$len = strlen($palabra)-1;
$match = false;
for($i=0, $rows=count($sopa); $i<$rows; $i++){
	for($j=0, $cols=count($sopa[$i]); $j<$cols; $j++){
 
		if($i-$len >=0){
			$up = "";
			for($k=0; $k<=$len; $k++){
				$up .= $sopa[$i-$k][$j];
			}
			if($up==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia arriba.<br />";
			}
		}
 
		if( $i-$len>=0 and $j+$len<$cols ){
			$upRight ="";
			for($k=0; $k<=$len; $k++){
				$upRight .= $sopa[$i-$k][$j+$k];
			}
			if($upRight==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia arriba y derecha.<br />";
			}
		}
 
		if( $j+$len<$cols ){
			$right ="";
			for($k=0; $k<=$len; $k++){
				$right .= $sopa[$i][$j+$k];
			}
			if($right==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia derecha.<br />";
			}
		}
 
		if( $i+$len<$rows and $j+$len<$cols ){
			$rightDown ="";
			for($k=0; $k<=$len; $k++){
				$rightDown .= $sopa[$i+$k][$j+$k];
			}
			if($rightDown==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia derecha y abajo.<br />";
			}
		}
 
		if( $i+$len<$rows ){
			$down ="";
			for($k=0; $k<=$len; $k++){
				$down .= $sopa[$i+$k][$j];
			}
			if($down==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia abajo.<br />";
			}
		}
 
		if( $i+$len<$rows and $j-$len>=0 ){
			$downLeft ="";
			for($k=0; $k<=$len; $k++){
				$downLeft .= $sopa[$i+$k][$j-$k];
			}
			if($downLeft==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia abajo e izquierda.<br />";
			}
		}
 
		if( $j-$len>=0 ){
			$left ="";
			for($k=0; $k<=$len; $k++){
				$left .= $sopa[$i][$j-$k];
			}
			if($left==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia izquierda.<br />";
			}
		}
 
		if( $j-$len>=0 and $i-$len>=0 ){
			$leftUp ="";
			for($k=0; $k<=$len; $k++){
				$leftUp .= $sopa[$i-$k][$j-$k];
			}
			if($leftUp==$palabra){
				$match = true;
				echo "Esta en la posicion [$i,$j] hacia izquierda y arriba.<br />";
			}
		}
 
	}
}
 
if(!$match){
	echo "La palabra \"<b>$palabra</b>\" no aparece.";
}
?>
<form method="POST" >
	<input name="palabra" type="text" value="SOPA"  />
	<input type="submit" value="buscar" />
</form>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rojas

Buscar palabra en una matriz tipo char. (Sopa de letras)

Publicado por Rojas (5 intervenciones) el 01/06/2018 04:12:43
Gracias, pero la verdad es que estoy en el primer semestre de la carrera y si supiera que significa cada cosa, no lo estaría preguntando aquí. Pero muchas gracias.
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
Imágen de perfil de Alejandro
Val: 25
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buscar palabra en una matriz tipo char. (Sopa de letras)

Publicado por Alejandro (9 intervenciones) el 02/06/2018 19:07:27
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Lo tome como reto personal pues tambien recien comienso a aprender C++.

Lo he realizado aunque me quedan dudas.
Segun lo que entendi en mi libro se declara y se inicializa
array< array<char,6>,6> sopa;
sopa={'A','F',....};
Tube problemas y en internet encontre la forma como lo deje en el codigo, es mas facil :D, pero yo seguia con error, para mi era sopa[6][6] pero decia que eran mucho elementos inicializadores asi que lo deje como sopa[7][7] y funciono, no lo entiendo.

Este es el codigo, falta completar las demas direcciones.
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
#include <iostream>
#include <string>
#include <array>
using namespace std;
 
int main(){
	char sopa[7][7] = {
	    'A', 'F', 'M', 'A', 'H', 'G', 'A',
	    'T', 'P', 'Y', 'P', 'W', 'P', 'L',
	    'X', 'H', 'O', 'O', 'O', 'R', 'Z',
	    'A', 'P', 'O', 'S', 'O', 'P', 'A',
	    'R', 'T', 'O', 'O', 'O', 'I', 'U',
	    'F', 'P', 'U', 'P', 'V', 'P', 'C',
	    'A', 'N', 'Q', 'A', 'Z', 'B', 'A'
	};
	string palabraSrh = "";
	string palabraTmp = "";
 
    int rows=sizeof(sopa)/sizeof(*sopa);
    for(int i=0; i<rows; i++){
        int cols=sizeof(sopa[i])/sizeof(*sopa[i]);
        for(int j=0; j<cols; j++){
            cout<<sopa[i][j];
        }
        cout<<endl;
    }
    cout<<endl;
 
    cout<<"Ingrese la palabra que desea buscar: ";
    cin>>palabraSrh;
 
    int len = palabraSrh.length()-1;
    for(int i=0; i<rows; i++){
        int cols=sizeof(sopa[i])/sizeof(*sopa[i]);
        for(int j=0; j<cols; j++){
            if(j+len<cols){
                palabraTmp="";
                for(int k=0; k<=len; k++){
                    palabraTmp+=sopa[i][j+k];
                }
                if(palabraTmp==palabraSrh){
                    cout<<"Esta en la posicion ["<<i<<","<<j<<"] hacia derecha"<<endl;
                }
            }
        }
    }
 
    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
1
Comentar
Imágen de perfil de Rojas

Buscar palabra en una matriz tipo char. (Sopa de letras)

Publicado por Rojas (5 intervenciones) el 04/06/2018 07:08:50
Muchas gracias, la verdad es que estos dos dias no he tenido tiempo de sentarme a seguir intentandolo, hasta apenas pude leer tus respuestas. Gracias por el codigo, pero es que aún soy demasiado novata para traducirlo a las palabras que yo uso. Pero de tu otra respuesta en el otro tema creo me ayudará más, ya que me da las ideas de lo que tengo que hacer. Así que muchas gracias, cuando logre terminar mi tarea al 100% publicare el codigo.
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

Buscar palabra en una matriz tipo char. (Sopa de letras)

Publicado por petaca (1 intervención) el 07/04/2022 22:38:20
hace lo mismo pero en c++
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