Pascal/Turbo Pascal - AYUDA con este programa! Tengo parte hecha.

 
Vista:

AYUDA con este programa! Tengo parte hecha.

Publicado por Sabri (9 intervenciones) el 09/07/2016 05:54:38
Tengo que hacer un programa en el que un robot va caminando en una matriz de 20x20, que no se pueda salir de los limites.

Un pequeño robot se mueve respondiendo a las órdenes de un bastón de mando. El robot recorre una cuadrícula de F filas por C columnas y no puede salirse de esos límites. Si lo imaginas como un mapa podemos hablar de Norte arriba, Sur abajo, Oeste a la izquierda y Este a la derecha.

Las filas se numeran de abajo hacia arriba con números naturales:

Las columnas se numeran de izquierda a derecha con números naturales:

Las órdenes que emite el bastón de mando están codificadas con letras:

1, 2, ..., F.

1, 2, ..., C.

N avance un cuadradito en dirección Norte

S avance un cuadradito en dirección Sur

E avance un cuadradito en dirección Este

O avance un cuadradito en dirección Oeste.

Sin embargo hay una excepción. Cuando está en un borde y recibe una orden para exceder ese límite entonces esa orden es ignorada.
El dueño del robot quiere saber adónde irá a parar el robot, después de ejecutar una secuencia de mandos, a partir de cierta posición inicial.

Para ello se te solicita un programa que dada una posición inicial del robot y una serie de órdenes enviadas por el bastón de mando, determine la posición final del robot, mostrando el recorrido paso a paso (ejemplo poniendo X en la casilla de la matriz que ocupa el robot, y cambiándola por una x cuando el robot la abandona).

Restricciones:

Sobre el número de filas 0 < F < 20

Sobre el número de columnas 0 < C < 20

Largo máximo de la secuencia de órdenes 25.

Datos de entrada

- columna donde está inicialmente el robot

- fila donde está inicialmente el robot

- la secuencia de órdenes dadas por el bastón de mando, sin separación entre ellas.

Parte desde Fila = 5 , columna = 3, con la secuencia = NNNNNNNOO

A partir de esta posición, puede recibir otra secuencia de órdenes, considerando esta [fila, columna] como dato de inicio para su nuevo rumbo. Establecer un fin de datos acorde.

Ejemplo:

Quedaría en la posición Fila = 12, columna = 1

ESTO ES LO QUE TENGO HASTA AHORA ! :)
Cualquier ayuda se agradece!


Program Robot(output,input);
Uses crt;
Const filas=20;
columnas=20;
simbolo: array [0..2] of char = (' ', 'O', 'X');
Var i,j,t:integer;
linea:string[25];
secuencia:ARRAY[1..25] OF CHAR;
tablero:array[1..filas,1..columnas] of integer;
posinicial:array[1..filas,1..columnas] of CHAR;

procedure DibujarTablero;
var
F, C: integer;
begin
WriteLn;
WriteLn('----------------------------------------------------------------');
for F := 1 to 20 do
begin
Write('|');
for C := 1 to 20 do
Write(' '+simbolo[tablero[F,C]]+'|');
WriteLn;
WriteLn('-------------------------------------------------------------');
end
end;
procedure PreguntarPosicion;
var
fila, columna: integer;
begin
WriteLn;
(* Pido fila*)
repeat
Write('En que fila (1 a 20) ');
ReadLn(fila);
until fila in [1..20];

(* Pido columna*)
repeat
Write('En que columna (1 a 20) ');
ReadLn(columna);
until columna in [1..20];
end;
Begin
DibujarTablero;
PreguntarPosicion;
write('Ingrese la secuencia de mando: ');
write('N (NORTE), S (SUR), E(ESTE), O(OESTE): ');
readln(secuencia);
for i:= 1 to filas do
Begin
for j:= 1 to columnas do
gotoXY(i,j);
posinicial[i,j]:='X';
for t:= 1 to length(linea) do
Begin
if secuencia[t]='N' then
Begin
j:=j+1;
posinicial[i,j]:='X';
end
Else
if secuencia[t]='S' then
Begin
j:=j-1;
posinicial[i,j]:='X';
end
else
if secuencia[t]='O' then
Begin
i:=i-1;
posinicial[i,j]:='X';
end
else
if secuencia[t]='E' then
Begin
i:=i+1;
posinicial[i,j]:='X';
end;
end;
end;
WRITELN('La ubicacion del robot es: FILA: ',i,' COLUMNA: ',j);
gotoXY(i,j);
posinicial[i,j]:='X';
readkey;
end.
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

AYUDA con este programa! Tengo parte hecha.

Publicado por ramon (2158 intervenciones) el 09/07/2016 12:18:10
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
{Espero esto te encamine pero ya conteste en anterior petición mirarlas}
 
program robot;
 uses
    crt;
  const
 
      longordenmax = 25;
 
  type
    cuadros = array[0..20,0..20] of char;
    string25 = string[25];
 
 
   var
     tablero : cuadros;
     t, x, y : integer;
     mando : string25;
     posinix, posfinx, posiniy, posfiny : integer;
     origrnmodo : integer;
     tec : char;
 
   procedure iniciatablero;
   begin
      fillchar(tablero,sizeof(tablero),chr(1));
   end;
 
   procedure presentatablero(x1, y1 : integer);
   var
      t1, t2 : integer;
   begin
      clrscr;
      writeln('   ****** El Tablero ******');
      writeln;
      for t1 := 0 to 20 do
        for t2 := 0 to 20 do
        begin
        gotoxy(x1 + t2, y1 + t1);write(tablero[t1,t2]);
        end;
   end;
 
   function cordenadasx(xcmax : integer) : boolean;
   begin
       if (xcmax < 20) or (xcmax > - 0) then
       cordenadasx := true
    else
       cordenadasx := false;
   end;
 
 
    function cordenadasy(ycmax : integer) : boolean;
    begin
       if (ycmax < 20) or (ycmax > - 0) then
       cordenadasy := true
    else
       cordenadasy := false;
   end;
 
   procedure ponposicionrobot(xr, yr : integer);
   begin
      tablero[yr,xr] := chr(2);
   end;
 
   procedure entradacoryman(var x1, y1 : integer; var baston : string25);
   begin
      clrscr;
      writeln('   **** Entrada Cordenadas X E Y De Inicio Y Mando ****');
      writeln;
      write('  Posicion columnas : ');
      readln(x1);
      write('  Posicion filas    : ');
      readln(y1);
      write('  Mando : ');
      readln(baston);
      posinix := x1;
      posiniy := y1;
      posfinx := 0;
      posfiny := 0;
   end;
 
 
   begin
      origrnmodo := lastmode;
      textmode(c80 + font8x8);
      clrscr;
      iniciatablero;
      entradacoryman(x,y,mando);
      if (cordenadasx(x) = true) and (cordenadasy(y) = true) then
      begin
      ponposicionrobot(x,y);
      for t := 1 to length(mando) do
      begin
   case mando[t] of
  'n','N' : y := y + 1;
  's','S' : y := y - 1;
  'e','E' : x := x + 1;
  'o','O' : x := x - 1;
     end;
       if (cordenadasx(x) = true) and (cordenadasy(y) = true) then
       begin
          tablero[y,x] := chr(2);
       end;
      end;
      posfinx := x;
      posfiny := y;
      presentatablero(10,3);
      writeln;
      writeln('   Posicion Inicial : ',posinix,'x',
      posiniy,'   Posicion Final : ',posfinx,'x',posfiny);
 repeat
      writeln('   Desea Entrar Mas Mandotos [S/N]');
    repeat
        tec := upcase(readkey);
    until tec in['S','N'];
    if tec = 'S' then
    begin
       iniciatablero;
       x := posfinx;
       y := posfiny;
       write('  Mando : ');
       readln(mando);
       ponposicionrobot(x,y);
       posinix := x;
       posiniy := y;
      for t := 1 to length(mando) do
      begin
   case mando[t] of
  'n','N' : y := y + 1;
  's','S' : y := y - 1;
  'e','E' : x := x + 1;
  'o','O' : x := x - 1;
     end;
       if (cordenadasx(x) = true) and (cordenadasy(y) = true) then
       begin
          tablero[y,x] := chr(2);
       end;
      end;
      posfinx := x;
      posfiny := y;
      presentatablero(10,3);
      writeln;
      writeln('   Posicion Inicial : ',posinix,'x',
      posiniy,'   Posicion Final : ',posfinx,'x',posfiny);
    end;
    until tec = 'N';
      end
   else
      writeln('  Fuera de cordenadas pulse una tecla');
      textmode(origrnmodo);
   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

AYUDA con este programa! Tengo parte hecha.

Publicado por Nahuel (2 intervenciones) el 22/07/2016 03:40:34
Hola Sabrina, no me haces el favor de pasarme como te quedó terminado? 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