Pascal/Turbo Pascal - Proyecto de Programacion, Duda respecto a como entender el problema

 
Vista:
Imágen de perfil de Franklin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Franklin (4 intervenciones) el 04/05/2015 21:33:33
Muy buenas tardes PROGRAMADORES!...
Muchas gracias de antemano si pudiesen ayudarme, es la primera vez en el foro, Y busco ayuda porque no entiendo mucho de la materia (me gusta pero me complica)
Estudio Ing Informatica 3er Semestre, Tengo Conflictos con un Proyecto de "ALGORITMOS Y PROGRAMACION I"

Resulta que tengo el siguiente Proyecto, no pido que me digan como hacerlo basicamente la matriz ya le tengo hecha...
Lo unico que no entiendo es como imprimir lo que me piden, en si no entiendo la sintaxis del problema...
Si me pudiesen solo dar una idea para guiarme. Muchas gracias nuevamente.

Ahi va:
AJEDREZ DE LETRAS
Encontrar las 20 palabras que están contenidas en 20 variables de tipo string de la longitud variable. El recorrido para encontrar las palabras es siguiendo la trayectoria de las piezas de ajedrez que es de la siguiente manera:

TORRE Se mueve en líneas horizontales y verticales, de izquierda a derecha y viceversa

ALFIL Se mueve en líneas diagonales, de izquierda a derecha y viceversa

CABALLO Esto es dos en dirección vertical (hacia arriba o hacia abajo) y una en horizontal (izquierda o derecha) , o dos en dirección horizontal (izquierda o derecha) y una vertical (hacia arriba o hacia abajo).

Sin-titulo

Ejemplo:

Sean las variables de entrada siguientes, de longitud 6:

1. ORMROG = variable1
2. LETORT = variable2
3. LIORRE = variable3
4. AANIER = variable4
5. BAUOYE = variable5
6. ASNOEP = variable6
7. CLIFLA = variable7

Descubrir con los movimientos de las piezas de ajedrez TORRE, ALFIL, CABALLO las palabras caballo, reina, rey, toro, alfil, peón, tía, ojo. Cada palabra tiene una sola trayectoria.
La salida es la ruta a seguir para cada palabra, dentro de cada variable de entrada:
Por ejemplo para caballo, reina, ojo, toro y tía la salida debe ser:

CABALLO, trayectoria de torre
Variable7[1]
Variable6[1]
Variable5[1]
Variable4[1]
Variable3[1]
Variable2[1]
Variable1[1]

REINA, trayectoria de torre
Variable4[6]
Variable4[5]
Variable4[4]
Variable4[3]
Variable4[2]

OJO, NO EXISTE

TIA, trayectoria de alfil
Variable2[3]
Variable3[2]
Variable4[1]

TORO, trayectoria de caballo
Variable2[3]
Variable2[4]
Variable2[5]
Variable1[5]

UNICAMENTE USAR STRING, CHAR, LENGTH, POS, COPY, INSERT, DELETE
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 04/05/2015 22:52:59
Limitado a lo que expresas mira esto,

ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
      palabra : estring[20];
      cont : integer;
 
    cont := 1;
    palabra[cont] := copy(variable2,3,1);
    palabra[0] := chr(cont);
    cont := cont + 1;
    palabra[cont] := copy(variable2,4,1);
    palabra[0] := chr(cont);
    cont := cont + 1;
    palabra[cont] := copy(variable2,5,1);
    palabra[0] := chr(cont);
    cont := cont + 1;
    palabra[cont] := copy(variable1,5,1);
    palabra[0] := chr(cont);
    writeln(palabra);
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 Franklin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Franklin (4 intervenciones) el 05/05/2015 01:55:19
Gracias amigo..
Pero lo que no entiendo exactamente que es lo que me pide el problema
Quisiera entender (en palabras) que expresa en el enunciado.
Que quiere como respuesta, porque la verdad no entiendo.
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 Franklin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Franklin (4 intervenciones) el 05/05/2015 02:18:42
quería saber si me puedes explicar o simplemente decirme sobre que tiene que hacer en si el programa, que debe pedir y que debe imprimir
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 05/05/2015 11:54:15
Tienes que buscar las frases que te indican moviéndote en el sentido que se mueve la pieza del
ajedrez indicada tomando la posición donde fu localizada cada letra y escribir tanto las posiciones como
la frase tomada.
Como bien tienes tu marcado arriba.
Espero sea esto lo que quieres si necesitas un pequeño ejemplo dímelo.
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 Franklin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Franklin (4 intervenciones) el 05/05/2015 15:19:42
Muchas gracias por responder.
Un pequeño ejemplo seria?
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 05/05/2015 21:16:59
Te lo preparare de tus datos
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 06/05/2015 22:11:44
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
{A qui tienes el movimiento del caballo}
 
program frases;
  uses
     crt;
 
  const
     maxt = 7;
     maxv = 5;
     maxm = 5;
     texto : array[1..maxt] of string = (
     'ORMROG','LETORT','LIORRE','AANIER','BAUOYE','ASNOEP','CLIFLA');
 
   vuscar : array[1..maxv] of string = (
   'CABALLO','REINA','OJO','TIA','TORO');
 
   mueve : array[1..maxm] of string = (
   'torre','torre','no','alfil','caballo');
 
  var
    frasa : string;
    tx, x, y : integer;
 
  procedure pantalla;
  var
     m, x1, y1 : integer;
     begin
        m := 1;
      repeat
         for x1 := 1 to length(texto[m]) do
         begin
           gotoxy(x1 * 4, m * 2);write(texto[m][x1]);
        end;
        m := m + 1;
      until m > maxt;
     end;
 
 
   procedure caballo(frase : string);
   type
      cord = record
           xx, yy : integer;
           car    : char;
        end;
   var
      pos : array[1..(maxt * 6)] of cord;
      cp, d, s : integer;
      locali : boolean;
   begin
      locali := false;
      for d := 1 to 7 do
      begin
      cp := 1;
      for s := 1 to ord(texto[d][0]) do
      begin
         if upcase(texto[d][s]) = upcase(frase[1]) then
         begin
            pos[cp].xx := s;
            pos[cp].yy := d;
            pos[cp].car := texto[d][s];
            cp := cp + 1;
            if (d > 1) and (s > 3) then
            begin
             if (upcase(texto[d][s - 1]) = upcase(frase[2])) and
                (upcase(texto[d][s - 2]) = upcase(frase[3])) and
                (upcase(texto[d - 1][s - 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s - 1];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s - 2];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d - 1;
                   pos[cp].car := texto[d - 1][s - 2];
                   locali := true;
                   break;
                end;
            end
          else
            if (d < 6) and (s > 2) then
            begin
               if (upcase(texto[d][s + 1]) = upcase(frase[2])) and
                (upcase(texto[d][s + 2]) = upcase(frase[3])) and
                (upcase(texto[d - 1][s + 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s + 1];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s + 2];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d - 1;
                   pos[cp].car := texto[d - 1][s + 2];
                   locali := true;
                   break;
                end;
            end
          else
              if (d > 2) and (s > 1) then
              begin
                 if (upcase(texto[d - 1][s]) = upcase(frase[2])) and
                (upcase(texto[d - 2][s]) = upcase(frase[3])) and
                (upcase(texto[d - 2][s - 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d - 1;
                   pos[cp].car := texto[d - 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d - 2;
                   pos[cp].car := texto[d - 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d - 2;
                   pos[cp].car := texto[d - 2][s - 1];
                   locali := true;
                   break;
                end;
             end
            else
              if (d > 2) and (s < 6) then
              begin
                 if (upcase(texto[d - 1][s]) = upcase(frase[2])) and
                (upcase(texto[d - 2][s]) = upcase(frase[3])) and
                (upcase(texto[d - 2][s + 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d - 1;
                   pos[cp].car := texto[d - 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d - 2;
                   pos[cp].car := texto[d - 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d - 2;
                   pos[cp].car := texto[d - 2][s + 1];
                   locali := true;
                   break;
                end;
              end
            else
              if (d < 5) and (s > 1) then
              begin
                 if (upcase(texto[d + 1][s]) = upcase(frase[2])) and
                (upcase(texto[d + 2][s]) = upcase(frase[3])) and
                (upcase(texto[d + 2][s - 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d + 1;
                   pos[cp].car := texto[d + 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d + 2;
                   pos[cp].car := texto[d + 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d + 2;
                   pos[cp].car := texto[d + 2][s - 1];
                   locali := true;
                   break;
                end;
             end
          else
             if (d < 5) and (s < 6) then
              begin
                if (upcase(texto[d + 1][s]) = upcase(frase[2])) and
                (upcase(texto[d + 2][s]) = upcase(frase[3])) and
                (upcase(texto[d + 2][s + 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d + 1;
                   pos[cp].car := texto[d + 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d + 2;
                   pos[cp].car := texto[d + 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d + 2;
                   pos[cp].car := texto[d + 2][s + 1];
                   locali := true;
                   break;
                end;
              end
            else
               if (d < 6) and (s > 3) then
               begin
                if (upcase(texto[d][s - 1]) = upcase(frase[2])) and
                (upcase(texto[d][s - 2]) = upcase(frase[3])) and
                (upcase(texto[d + 1][s - 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s - 1];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s - 2];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d + 1;
                   pos[cp].car := texto[d + 1][s - 2];
                   locali := true;
                   break;
                end;
            end
          else
             if (d < 6) and (s < 5) then
             begin
                if (upcase(texto[d][s + 1]) = upcase(frase[2])) and
                (upcase(texto[d][s + 2]) = upcase(frase[3])) and
                (upcase(texto[d + 1][s + 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s + 1];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d;
                   pos[cp].car := texto[d][s + 2];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d + 1;
                   pos[cp].car := texto[d + 1][s + 2];
                   locali := true;
                   break;
                end;
              end;
            end;
          end;
        end;
          if locali = true then
          begin
             textcolor(10);
             for s := 1 to length(vuscar[5]) do
             begin
             gotoxy(pos[s].xx * 4,pos[s].yy * 2);write(pos[s].car);
             end;
             textcolor(7);
             for s := 1 to length(vuscar[5]) do
             begin
    gotoxy(50,4 + s);write(pos[s].xx,' Y ',pos[s].yy,' Letra ',pos[s].car);
             end;
          end;
 
       end;
 
 
 
    begin
       clrscr;
       pantalla;
       caballo(vuscar[5]);
       readkey;
    end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 07/05/2015 03:43:13
Hola, estaba leyendo y me parece muy interesante, me gustaría saber como seria esa misma parte del programa del caballo pero esta vez que el usuario inserte la palabra a buscar y que el programa la busque en toda la matriz.. osea que vea algo como

writeln(''indique la palabr a buscar)

y el usuario inserte cualquier palabra y la busque.. como se haría ?


Gracias de verdad por responder y disculpe las molestias.
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 07/05/2015 11:35:14
Primero la palabra tendría que estar insertada en la matriz de tal manera
que resultase siempre el movimiento del caballo.
Después solo tendrías que entrar la frase a buscar pero teniendo en cuenta
que solo puede contener 4 caracteres y eso seria:

1
2
3
4
5
6
7
8
9
var
   frase : string[4];
 
 write('  Entre Frase A Buscar : ');
 readln(frase);
 if length(frase) = 4 then
 begin
    caballo(frase);
 end;
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 07/05/2015 12:49:43
Ah vale, pero es que yo estoy aprendiendo y me complico mucho con las matrices y string disculpa si pregunto mucho.. Yo quiero poner esa opción de que pida la palabra en ese programa que hiciste anteriormente y también quiero agregarle una matriz 20x20 la cual haría una procedimiento que se llame "llenaMatriz" donde yo la voy a llenar de letras y palabras.. O simplemente tener lista la matriz 20x20 desde un archivo.. Medio lo veo pero no logro hacerlo.. Debería (creo yo) ser mas fácil con todo lo que hiciste pero aun asi me complico como agregaría esas dos cosas allí (*pide al usuario y * llenar matriz 20x20). Me ayudarías con eso por favor.
Nuevamente disculpa las molestias, 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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 07/05/2015 22:47:06
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
{A qui lo tienes}
 
program lamatriz;
  uses
    crt;
 
 
 
  type
     string4 = string[4];
     string20 = string[20];
     matriz = array[1..20] of string20;
 
 
  var
    tabla : matriz;
    f : text;
 
   function palabra : string4;
   var
      bu : string4;
   begin
      clrscr;
      write('   Entre Frase 4 Caracteres : ');
      readln(bu);
      palabra := copy(bu,1,4);
   end;
 
 
   procedure entra_matriz;
   var
     t, r : integer;
     begin
        for t := 1 to 20 do
        begin
            write('  Entre Dato En Posicion Matriz ',t,' : ');
            readln(tabla[t]);
        end;
        assign(f,'lamatriz.txt');
        rewrite(f);
        write(f,tabla[1]);
        close(f);
        for r := 2 to 20 do
        begin
           Append(f);
           write(f,tabla[1]);
           close(f);
        end;
      end;
 
    procedure carga_matriz;
    var
      p : integer;
    begin
       assign(f,'lamatriz.txt');
     {$I-}  reset(f); {$I+}
     if ioresult <> 0 then
     begin
        writeln('  Error De Archivo Pulse Una Tecla ');
        readkey;
     end
  else
     begin
        p := 1;
        while not eof(f) do
        begin
           readln(f,tabla[p]);
           p := p + 1;
           if p > 20 then
           break;
        end;
        close(f);
     end;
    end;
 
 
 
  begin
         entra_matriz;
         carga_matriz;
         {Entra_matriz de 20 X 20 y la salva a disco }
         {Carga_matriz la carga de disco a matriz}
  end.
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 07/05/2015 23:23:01
disculpa, cuando dice

"Entre Dato En Posicion Matriz 1"
"Entre Dato En Posicion Matriz 2" etc.

que significa ? que debería poner ?, las letras ?

me confundió esos códigos al llenar la matriz
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 08/05/2015 00:00:43
Debes rellenar la matriz con los caracteres que quieras insertar en cada linea de la matriz ya que
tienes una matriz de 20X20 una es un array lo otro un string de 20 caracteres.
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 08/05/2015 00:14:38
ah ok, si quiero unir eso al programa de sopa de letras con el caballo, debería borrar donde inicias cada palabra y poner ese nuevo donde lleno la matriz ? osea estoy intentando ordenar todo pero no me compila aun.. no estoy poniendo las cosas bien al parecer, estoy uniendo todo a ver como queda pero veo que algo aun falta, talvez borre algo que no debía, no se

seria mas o menos este orden

primero llenaría la matriz 20x20 {seria el codigo que tiene la 20x20}
luego me pediría buscar la palabra en esa matriz que llene {seria el codigo que pasaste donde dice "entre frase a buscar"}
luego el programa recorrerá toda la matriz hasta buscar esa palabra e imprimira la palabra buscada en sus posiciones mostrando a u vez la matriz 20x20 ?
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 08/05/2015 14:26:15
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
{A qui Tienes Pero ten En cuenta la colocación del movimiento del caballo }
 
 
program lamatriz;
  uses
    crt;
 
  const
      maxt = 20;
 
 
  type
     string4 = string[4];
     string20 = string[20];
     matriz = array[1..20] of string20;
 
 
  var
    tabla : matriz;
    f : text;
    tx, x, y : integer;
    vuscar : string[5];
    error : boolean;
 
 
 
  procedure pantalla;
  var
     m, x1, y1 : integer;
     begin
        m := 1;
      repeat
         for x1 := 1 to maxt do
         begin
           gotoxy(2  + (x1 * 2), m);write(tabla[x1][m]);
        end;
        m := m + 1;
      until m > maxt;
     end;
 
 
   function palabra : string4;
   var
      bu : string4;
   begin
      clrscr;
      write('   Entre Frase 4 Caracteres : ');
      readln(bu);
      palabra := copy(bu,1,4);
   end;
 
 
   procedure entra_matriz;
   var
     t, r : integer;
     begin
        for t := 1 to 20 do
        begin
            write('  Entre Dato En Posicion Matriz ',t,' : ');
            readln(tabla[t]);
        end;
        assign(f,'lamatriz.txt');
        rewrite(f);
        write(f,tabla[1]);
        close(f);
        for r := 2 to 20 do
        begin
           Append(f);
           write(f,tabla[1]);
           close(f);
        end;
      end;
 
    procedure carga_matriz;
    var
      p : integer;
    begin
       assign(f,'lamatriz.txt');
     {$I-}  reset(f); {$I+}
     if ioresult <> 0 then
     begin
        writeln('  Error De Archivo Pulse Una Tecla ');
        error := true;
        readkey;
     end
  else
     begin
        p := 1;
        error := false;
        while not eof(f) do
        begin
           readln(f,tabla[p]);
           p := p + 1;
           if p > 20 then
           break;
        end;
        close(f);
     end;
    end;
 
    procedure caballo(frase : string);
    type
      cord = record
           xx, yy : integer;
           car    : char;
        end;
   var
      pos : array[1..(maxt * 20)] of cord;
      cp, d, s : integer;
      locali : boolean;
   begin
      locali := false;
      for d := 1 to 20 do
      begin
      if locali = true then
      break;
      cp := 1;
      for s := 1 to ord(tabla[d][0]) do
      begin
         if upcase(tabla[d][s]) = upcase(frase[1]) then
         begin
            pos[cp].xx := s;
            pos[cp].yy := d;
            pos[cp].car := tabla[d][s];
            cp := cp + 1;
            if (d > 1) and (s > 3) then
            begin
             if (upcase(tabla[d][s - 1]) = upcase(frase[2])) and
                (upcase(tabla[d][s - 2]) = upcase(frase[3])) and
                (upcase(tabla[d - 1][s - 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s - 1];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s - 2];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d - 1;
                   pos[cp].car := tabla[d - 1][s - 2];
                   locali := true;
                   break;
                end;
            end
          else
            if (d > 1) and (s < 18) then
            begin
               if (upcase(tabla[d][s + 1]) = upcase(frase[2])) and
                (upcase(tabla[d][s + 2]) = upcase(frase[3])) and
                (upcase(tabla[d - 1][s + 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s + 1];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s + 2];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d - 1;
                   pos[cp].car := tabla[d - 1][s + 2];
                   locali := true;
                   break;
                end;
            end
          else
              if (d > 2) and (s > 1) then
              begin
                 if (upcase(tabla[d - 1][s]) = upcase(frase[2])) and
                (upcase(tabla[d - 2][s]) = upcase(frase[3])) and
                (upcase(tabla[d - 2][s - 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d - 1;
                   pos[cp].car := tabla[d - 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d - 2;
                   pos[cp].car := tabla[d - 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d - 2;
                   pos[cp].car := tabla[d - 2][s - 1];
                   locali := true;
                   break;
                end;
             end
            else
              if (d > 2) and (s < 20) then
              begin
                 if (upcase(tabla[d - 1][s]) = upcase(frase[2])) and
                (upcase(tabla[d - 2][s]) = upcase(frase[3])) and
                (upcase(tabla[d - 2][s + 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d - 1;
                   pos[cp].car := tabla[d - 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d - 2;
                   pos[cp].car := tabla[d - 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d - 2;
                   pos[cp].car := tabla[d - 2][s + 1];
                   locali := true;
                   break;
                end;
              end
            else
              if (d < 18) and (s > 1) then
              begin
                 if (upcase(tabla[d + 1][s]) = upcase(frase[2])) and
                (upcase(tabla[d + 2][s]) = upcase(frase[3])) and
                (upcase(tabla[d + 2][s - 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d + 1;
                   pos[cp].car := tabla[d + 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d + 2;
                   pos[cp].car := tabla[d + 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d + 2;
                   pos[cp].car := tabla[d + 2][s - 1];
                   locali := true;
                   break;
                end;
             end
          else
             if (d < 18) and (s < 20) then
              begin
                if (upcase(tabla[d + 1][s]) = upcase(frase[2])) and
                (upcase(tabla[d + 2][s]) = upcase(frase[3])) and
                (upcase(tabla[d + 2][s + 1]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s;
                   pos[cp].yy := d + 1;
                   pos[cp].car := tabla[d + 1][s];
                   cp := cp + 1;
                   pos[cp].xx := s;
                   pos[cp].yy := d + 2;
                   pos[cp].car := tabla[d + 2][s];
                   cp := cp + 1;
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d + 2;
                   pos[cp].car := tabla[d + 2][s + 1];
                   locali := true;
                   break;
                end;
              end
            else
               if (d < 20) and (s > 3) then
               begin
                if (upcase(tabla[d][s - 1]) = upcase(frase[2])) and
                (upcase(tabla[d][s - 2]) = upcase(frase[3])) and
                (upcase(tabla[d + 1][s - 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s - 1;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s - 1];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s - 2];
                   cp := cp + 1;
                   pos[cp].xx := s - 2;
                   pos[cp].yy := d + 1;
                   pos[cp].car := tabla[d + 1][s - 2];
                   locali := true;
                   break;
                end;
            end
          else
             if (d < 20) and (s < 18) then
             begin
                if (upcase(tabla[d][s + 1]) = upcase(frase[2])) and
                (upcase(tabla[d][s + 2]) = upcase(frase[3])) and
                (upcase(tabla[d + 1][s + 2]) = upcase(frase[4])) then
                begin
                   pos[cp].xx := s + 1;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s + 1];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d;
                   pos[cp].car := tabla[d][s + 2];
                   cp := cp + 1;
                   pos[cp].xx := s + 2;
                   pos[cp].yy := d + 1;
                   pos[cp].car := tabla[d + 1][s + 2];
                   locali := true;
                   break;
                end;
              end;
            end;
          end;
        end;
          if locali = true then
          begin
             vuscar := copy(frase,1,length(frase));
             textcolor(10);
             for s := 1 to length(vuscar) do
             begin
             gotoxy(2 + (pos[s].xx * 2),pos[s].yy);write(pos[s].car);
             end;
             textcolor(7);
             for s := 1 to length(vuscar) do
             begin
    gotoxy(50,4 + s);write(pos[s].xx,' Y ',pos[s].yy,' Letra ',pos[s].car);
             end;
          end;
 
       end;
 
 
   function carga_o_entra_matriz : boolean;
   var
     tec : char;
   begin
       carga_o_entra_matriz := true;
      clrscr;
      writeln('   [C] = Carga de Archivo  [N] = Nueva Matriz [S] = Nada');
      writeln;
      writeln('   Elija Opcion');
      repeat
          tec := upcase(readkey);
      until tec in['C','N','S'];
      if tec = 'N' then
      entra_matriz;
        if tec = 'C' then
        carga_matriz;
         if tec = 'S' then
          carga_o_entra_matriz := false;
      if error = true then
      carga_o_entra_matriz := false;
   end;
 
  begin
     clrscr;
     if carga_o_entra_matriz = true then
     begin
     vuscar := palabra;
     clrscr;
     pantalla;
     caballo(vuscar);
     readkey;
     end
   else
      begin
         clrscr;
         writeln('   Error Encontrado Pulse Una Tecla');
         readkey;
      end;
  end.
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 08/05/2015 15:21:26
Gracias..

tengo dudas..

ok cree la matriz y me la cargo..
cuando dice entre frase de 4 caracteres esa es la palabra a buscar en mi matriz ? porque lo hice y no logro encontrarme la palabra.. no se si la matriz hay que crearla en una forma especifica ? estoy creando asi la matriz en mi bloc de notas en el escritorio


R O J H G F D S E R T G F D S W E R H Y
O H J H G K J U Y H O J H G R F D W S A
T L K J H G F D S H L J L K I U J N M H
M N B G F V C D S A L E R T Y U Y I O L
N J H Y T G F R N B A L K I U J H Y T G
M N B G T R V F R E S S Y T G B V F R E
M N H Y T G V F R D A J H Y U N M J H G
M N H J K L O I U Y C L K U J H Y H G F
L M N B G F V C D S A L E R T Y U Y I O
Ñ M N B G F V C D S A L E R T Y U Y I O
P M N B G F V C D S A L E R T Y U Y I O
O M N B G F V C D S A L E R T Y U Y I O
I M N B G F V C D S A L E R T Y U Y I O
J M N B G F V C D S A L E R T Y U Y I O
H M N B G F V C D S A L E R T Y U Y I O
Y M N B G F V C D S A L E R T Y U Y I O
T M N B G F V C D S A L E R T Y U Y I O
F M N B G F V C D S A L E R T Y U Y I O
B M N B G F V C D S A L E R T Y U Y I O
M M N B G F V C D S A L E R T Y U Y I O


y agregue la palabra "toro" ya en el principio con la forma del caballo.. bueno no se que estare haciendo mal..
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 08/05/2015 22:14:21
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
{Pequeño fallo por mi parte disculpa}
 
procedure pantalla;
  var
     m, x1, y1 : integer;
     begin
        m := 1;
      repeat
         for x1 := 1 to maxt do
         begin
           gotoxy(2  + (x1 * 2), m);write(tabla[m][x1]);
        end;
        m := m + 1;
      until m > maxt;
     end;
 
procedure entra_matriz;
   var
     t, r : integer;
     begin
        for t := 1 to 20 do
        begin
            write('  Entre Dato En Posicion Matriz ',t,' : ');
            readln(tabla[t]);
        end;
        assign(f,'lamatriz.txt');
        rewrite(f);
        writeln(f,tabla[1]);
        close(f);
        for r := 2 to 20 do
        begin
           Append(f);
           writeln(f,tabla[r]);
           close(f);
        end;
      end;
{ Mira estos 2 procedimientos tenían fallo }
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 08/05/2015 23:00:30
disculpa, pero sigue pasando lo mismo, no me identifica la palabra
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 09/05/2015 00:02:19
corrijo, si me detecto en una llenanad la matriz desde el programa en archivo no logro que me detecte no se, a veces no me detecta pero gracias de verdad
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 09/05/2015 11:25:37
Te lo revisare con calma a ver donde puede estar el fallo.
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 09/05/2015 14:17:10
note que esta agarrando la matriz pero no 20x20, cuando pongo la matriz 20x20 en el archivo la agarra pero la pone con 20 filas y 10 columnas. disculpa, ahorita me estoy poniendo a trabajar en la torre y estoy haciendo corridas enfrio con el rograma que hiciste para entender todo lo que has hecho pero hay cosas que usaste que no entiendo como el "gotoxy" que funcion cumple ?seria genial y estupendo tener anotaciones de algunos pasos y asi ayudarme y no perderme en los procesos que hace el programa, espero no molestar
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 09/05/2015 23:33:41
Posiciona el cursor en pantalla en las coordenadas x y para en nuestro caso presentar los resultados.
gotoxy(x,y);write(' El trxto');
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 09/05/2015 23:44:14
gracias... habría alguna posibilidad de ayudarme con la parte de la torre ?
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 10/05/2015 00:31:42
el programa me corre solo una posicion del caballo ya que ahorita lo estaba verificando, al parecer ese es el problema
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 11/05/2015 21:35:21
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
{A qui lo tienes }
 
program lamatriz;
  uses
    crt;
 
  const
      maxt = 20;
 
 
  type
     string4 = string[4];
     string20 = string[maxt];
     matriz = array[1..maxt] of string20;
 
 
  var
    tabla : matriz;
    f : text;
    tx, x, y : integer;
    vuscar : string[5];
    error : boolean;
 
 
 
  procedure pantalla;
  var
     m, x1, y1 : integer;
     begin
        m := 1;
      repeat
         for x1 := 1 to maxt do
         begin
           gotoxy(2  + (x1 * 2), m);write(tabla[m][x1]);
        end;
        m := m + 1;
      until m > maxt;
     end;
 
 
   function palabra : string4;
   var
      bu : string4;
   begin
      clrscr;
      write('   Entre Frase 4 Caracteres : ');
      readln(bu);
      palabra := copy(bu,1,4);
   end;
 
 
   procedure entra_matriz;
   var
     t, r : integer;
     begin
        for t := 1 to 20 do
        begin
            write('  Entre Dato En Posicion Matriz ',t,' : ');
            readln(tabla[t]);
        end;
        assign(f,'lamatriz.txt');
        rewrite(f);
        writeln(f,tabla[1]);
        close(f);
        for r := 2 to 20 do
        begin
           Append(f);
           writeln(f,tabla[r]);
           close(f);
        end;
      end;
 
    procedure carga_matriz;
    var
      p : integer;
    begin
       assign(f,'lamatriz.txt');
     {$I-}  reset(f); {$I+}
     if ioresult <> 0 then
     begin
        writeln('  Error De Archivo Pulse Una Tecla ');
        error := true;
        readkey;
     end
  else
     begin
        p := 1;
        error := false;
        while not eof(f) do
        begin
           readln(f,tabla[p]);
           p := p + 1;
           if p > 20 then
           break;
        end;
        close(f);
     end;
    end;
 
    procedure caballo(frase : string);
    type
      cord = record
           xx, yy : integer;
           car    : char;
        end;
   var
      pos : array[1..(maxt * maxt)] of cord;
      cp, d, s : integer;
      locali : boolean;
   begin
      locali := false;
     for d := 1 to maxt do
     begin
      if locali = true then
      break;
      cp := 1;
      for s := 1 to length(tabla[d]) do
      begin
         if upcase(tabla[d][s]) = upcase(frase[1]) then
         begin
            if locali = false then
            begin
            fillchar(pos,sizeof(pos),0);
            cp := 1;
            end;
            pos[cp].xx := s;
            pos[cp].yy := d;
            pos[cp].car := tabla[d][s];
            cp := cp + 1;
            if (tabla[d][s + 1] = frase[2]) and
               (tabla[d][s + 2] = frase[3]) and
               (tabla[d - 1][s + 2] = frase[4]) then
               begin
                  pos[cp].xx := s + 1;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s + 1];
                  cp := cp + 1;
                  pos[cp].xx := s + 2;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s + 2];
                  cp := cp + 1;
                  pos[cp].xx := s + 2;
                  pos[cp].yy := d - 1;
                  pos[cp].car := tabla[d - 1][s + 2];
                  locali := true;
                  break;
               end
           else
             if (tabla[d][s + 1] = frase[2]) and
               (tabla[d][s + 2] = frase[3]) and
               (tabla[d + 1][s + 2] = frase[4]) then
               begin
                  pos[cp].xx := s + 1;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s + 1];
                  cp := cp + 1;
                  pos[cp].xx := s + 2;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s + 2];
                  cp := cp + 1;
                  pos[cp].xx := s + 2;
                  pos[cp].yy := d + 1;
                  pos[cp].car := tabla[d + 1][s + 2];
                  locali := true;
                  break;
               end
            else
               if (tabla[d][s - 1] = frase[2]) and
               (tabla[d][s - 2] = frase[3]) and
               (tabla[d - 1][s - 2] = frase[4]) then
               begin
                  pos[cp].xx := s - 1;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s - 1];
                  cp := cp + 1;
                  pos[cp].xx := s - 2;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s - 2];
                  cp := cp + 1;
                  pos[cp].xx := s - 2;
                  pos[cp].yy := d - 1;
                  pos[cp].car := tabla[d - 1][s - 2];
                  locali := true;
                  break;
               end
            else
               if (tabla[d][s - 1] = frase[2]) and
               (tabla[d][s - 2] = frase[3]) and
               (tabla[d + 1][s - 2] = frase[4]) then
               begin
                  pos[cp].xx := s - 1;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s - 1];
                  cp := cp + 1;
                  pos[cp].xx := s - 2;
                  pos[cp].yy := d;
                  pos[cp].car := tabla[d][s - 2];
                  cp := cp + 1;
                  pos[cp].xx := s - 2;
                  pos[cp].yy := d + 1;
                  pos[cp].car := tabla[d + 1][s - 2];
                  locali := true;
                  break;
               end
            else
              if (tabla[d + 1][s] = frase[2]) and
               (tabla[d + 2][s] = frase[3]) and
               (tabla[d + 2][s + 1] = frase[4]) then
               begin
                  pos[cp].xx := s;
                  pos[cp].yy := d + 1;
                  pos[cp].car := tabla[d + 1][s];
                  cp := cp + 1;
                  pos[cp].xx := s;
                  pos[cp].yy := d + 2;
                  pos[cp].car := tabla[d + 2][s];
                  cp := cp + 1;
                  pos[cp].xx := s + 1;
                  pos[cp].yy := d + 2;
                  pos[cp].car := tabla[d + 2][s + 1];
                  locali := true;
                  break;
               end
             else
                if (tabla[d + 1][s] = frase[2]) and
               (tabla[d + 2][s] = frase[3]) and
               (tabla[d + 2][s - 1] = frase[4]) then
               begin
                  pos[cp].xx := s;
                  pos[cp].yy := d + 1;
                  pos[cp].car := tabla[d + 1][s];
                  cp := cp + 1;
                  pos[cp].xx := s;
                  pos[cp].yy := d + 2;
                  pos[cp].car := tabla[d + 2][s];
                  cp := cp + 1;
                  pos[cp].xx := s - 1;
                  pos[cp].yy := d + 2;
                  pos[cp].car := tabla[d + 2][s - 1];
                  locali := true;
                  break;
               end
            else
               if (tabla[d - 1][s] = frase[2]) and
               (tabla[d - 2][s] = frase[3]) and
               (tabla[d - 2][s - 1] = frase[4]) then
               begin
                  pos[cp].xx := s;
                  pos[cp].yy := d - 1;
                  pos[cp].car := tabla[d - 1][s];
                  cp := cp + 1;
                  pos[cp].xx := s;
                  pos[cp].yy := d - 2;
                  pos[cp].car := tabla[d - 2][s];
                  cp := cp + 1;
                  pos[cp].xx := s - 1;
                  pos[cp].yy := d - 2;
                  pos[cp].car := tabla[d - 2][s - 1];
                  locali := true;
                  break;
               end
            else
               if (tabla[d - 1][s] = frase[2]) and
               (tabla[d - 2][s] = frase[3]) and
               (tabla[d - 2][s + 1] = frase[4]) then
               begin
                  pos[cp].xx := s;
                  pos[cp].yy := d - 1;
                  pos[cp].car := tabla[d - 1][s];
                  cp := cp + 1;
                  pos[cp].xx := s;
                  pos[cp].yy := d - 2;
                  pos[cp].car := tabla[d - 2][s];
                  cp := cp + 1;
                  pos[cp].xx := s + 1;
                  pos[cp].yy := d - 2;
                  pos[cp].car := tabla[d - 2][s + 1];
                  locali := true;
                  break;
               end;
            end;
          end;
       end;
          if locali = true then
          begin
             vuscar := copy(frase,1,length(frase));
             textcolor(10);
             for s := 1 to length(vuscar) do
             begin
             gotoxy(2 + (pos[s].xx * 2),pos[s].yy);write(pos[s].car);
             end;
             textcolor(7);
             for s := 1 to length(vuscar) do
             begin
    gotoxy(50,4 + s);write(pos[s].xx,' Y ',pos[s].yy,' Letra ',pos[s].car);
             end;
          end;
       end;
 
 
   function carga_o_entra_matriz : boolean;
   var
     tec : char;
   begin
       carga_o_entra_matriz := true;
      clrscr;
      writeln('   [C] = Carga de Archivo  [N] = Nueva Matriz [S] = Nada');
      writeln;
      writeln('   Elija Opcion');
      repeat
          tec := upcase(readkey);
      until tec in['C','N','S'];
      if tec = 'N' then
      entra_matriz;
        if tec = 'C' then
        carga_matriz;
         if tec = 'S' then
          carga_o_entra_matriz := false;
      if error = true then
      carga_o_entra_matriz := false;
   end;
 
  begin
     clrscr;
     if carga_o_entra_matriz = true then
     begin
     vuscar := palabra;
     clrscr;
     pantalla;
     caballo(vuscar);
     readkey;
     end
   else
      begin
         clrscr;
         writeln('   Error Encontrado Pulse Una Tecla');
         readkey;
      end;
  end.
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 Melvin

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por Melvin (15 intervenciones) el 12/05/2015 00:06:38
hola, de verdad agradez tu colaboracion esto me es de gran ayuda.. no si si estas muy ocupado pero como veras tengo esto hecho dela torre pero no se que le pasa, compila pero me da un error que no me sigue ejecutando.. sabrias porque ? me podrias corregir y dejar la nota porque estaba fallando gracias.. tambien quisiera agregar la matriz como tu hiciste que cundo encuentra la palabra la ponga en verde y la ponga a un lado.. no veo como acomodarlo como tu


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
program AJEDREZ;
uses    crt;
 
type
  matriz = ARRAY [1..20 , 1..256] OF string;
  lp = ARRAY [1..20] OF string;
 
var
  linea,palabra:lp;
  a,b:matriz;
  i,j,nl,np:integer;
  Found:boolean;
  palabrap:string;
 
  function TORRE(nl:integer; palabra:string; var b,a:matriz):boolean ;
    var
      x,y,i,j,lP:integer;
      L,fL,palabraE:string;
      encontre:boolean;
 
    begin
    lP:=length(palabra);
    fL:=palabra[1];
    encontre:=false;
 
      repeat
 
        for x:=1 to nl do  //BUSCAR POSICION DE LETRA DENTRO DE LA MATRIZ
          begin
          for y:=1 to 256 do
            begin
                 L:=b[x,y];
                 if (fL = L) then  break;
            end;
            if (fL = L) then begin b[x,y]:=''; break; end;
          end;
 
        if (encontre = false) and (a[x,y+1] <> '') then  //BUSCAR PALABRA HACIA LA DERECHA
             begin
                palabraE:='';
                for i:=y to y+lP-1 do
                  palabraE:=palabraE+a[x,i];
                  writeln(palabraE,x,y);
                  if palabraE = palabra then
                   begin
                        j:=0;
                        encontre:=true;
                        writeln('Palabra: ',palabra,', Movimiento: TORRE');
                        for i:=y to y+lp-1 do
                          begin
                          j:=j+1;
                          Writeln('Letra ',palabra[j],' linea ',x, ' posicion ',i,';');
                          end;
 
                   end;
           end;
 
        if (encontre = false) and (a[x,y-1] <> '') then  //BUSCAR PALABRA HACIA LA IZQUIERDA
           begin
                palabraE:='';
                for i:=y downto y-lP+1 do
                  palabraE:=palabraE+a[x,i];
                  writeln(palabraE,x,y);
                  if palabraE = palabra then
                     begin
                        j:=0;
                        encontre:=true;
                        writeln('Palabra: ',palabra,', Movimiento: TORRE');
                        for i:=y downto y-lP+1 do
                          begin
                          j:=j+1;
                          Writeln('Letra ',palabra[j],' linea ',x, ' posicion ',i,';');
                          end;
 
                     end;
           end;
 
        if (encontre = false) and (a[x+1,y] <> '') then  //BUSCAR PALABRA HACIA ABAJO
           begin
                palabraE:='';
                for i:=x to x+lP-1 do
                  palabraE:=palabraE+a[i,y];
                  writeln(palabraE,x,y);
                  if palabraE = palabra then
                     begin
                        j:=0;
                        encontre:=true;
                        writeln('Palabra: ',palabra,', Movimiento: TORRE');
                        for i:=x to x+lp-1 do
                          begin
                          j:=j+1;
                          Writeln('Letra ',palabra[j],' linea ',i, ' posicion ',y,';');
                          end;
 
                     end;
           end;
 
 
        if (encontre = false) and (a[x-1,y] <> '')  then  //BUSCAR PALABRA HACIA ARRIBA
           begin
                palabraE:='';
                for i:=x downto x-lP+1 do
                  palabraE:=palabraE+a[i,y];
                  writeln(palabraE,x,y);
                  if palabraE = palabra then
                     begin
                        j:=0;
                        encontre:=true;
                        writeln('Palabra: ',palabra,', Movimiento: TORRE');
                        for i:=x downto x-lP+1 do
                          begin
                          j:=j+1;
                          Writeln('Letra ',palabra[j],' linea ',i, ' posicion ',y,';');
                          end;
 
                     end;
           end;
 
      until (encontre = true) or (L = '');
 
      if (encontre = true) then TORRE:=true
 
      else  TORRE:=false;
 
      writeln(palabraE,x,y);
 
    end;
 
begin
  Write('Ingrese el numero de lineas a ingresar: ');
  readln(nl);
  write('Ingrese el numero de palabras a ingresar: ');
  readln(np);
  writeln;
  writeln;
 
  for i:=1 to nl do //ciclo para leer lineas
    begin
    Write('Ingrese la linea',i,': ');
    readln(linea[i]);
    end;
 
  writeln;
  writeln;
 
  for i:=1 to np do //ciclo para leer palabras
    begin
    Write('Ingrese la palabra',i,': ');
    readln(palabra[i]);
    end;
 
  for i:=1 to nl do //ciclo para crear la matriz
    for j:=1 to length(linea[i]) do
      a[i,j]:=copy(linea[i],j,1);
 
  for i:=1 to nl do //ciclo para crear la matriz duplicado
    for j:=1 to length(linea[i]) do
      b[i,j]:=copy(linea[i],j,1);
 
 
  Found:=false;
  palabrap:='arroz';
  Found:=TORRE(nl,palabrap,b,a);
 
 
  readkey;
 
end.
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

Proyecto de Programacion, Duda respecto a como entender el problema

Publicado por ramon (2158 intervenciones) el 13/05/2015 11:22:19
Mira primero esta estructura matriz = ARRAY [1..20 , 1..256] OF string; es demasiado grande para
pascal y te de volvedera un error.
de verías dejarla así:
type
posicion = record
posx, posy : integer;
caract : char;
end;
matriz = array[1..20] of posicion;
con ello cubrirías las necesidades de los datos de la torre.
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