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.
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


0