Hola! Como estan? Necesito ayuda urgente con este ejercicio en pascal con arrays .
Llevo dandole vueltas, cualquier ayuda es bienvenida y agradecida .
ESTE ES EL EJERCICIO:
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:
1, 2, …, F.
Las columnas se numeran de izquierda a derecha con números naturales:
1, 2, …, C.
Las órdenes que emite el bastón de mando están codificadas con letras:
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.
Ejemplo:
Parte desde Fila = 5 , columna = 3, con la secuencia = NNNNNNNOO
Quedaría en la posición Fila = 12, columna = 1
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.
Necesito ayuda con un ejercicio en pascal!!
Moderador: Moderadores
Re: Necesito ayuda con un ejercicio en pascal!!
Pudiste hacerlo? Pasalo plis
- GonzaloVazquez
- Junior
- Mensajes: 10
- Registrado: Lun Dic 09, 2024 6:10 pm
- Contactar:
Re: Necesito ayuda con un ejercicio en pascal!!
¡Hola! Aquí tienes una posible solución en Pascal, que cumple con los requisitos del problema:
Código: Seleccionar todo
program RobotEnCuadricula;
uses crt;
const
MAX_F = 20;
MAX_C = 20;
type
Matriz = array[1..MAX_F, 1..MAX_C] of char;
var
mapa: Matriz;
F, C, fila, columna, i: integer;
secuencia: string;
procedure InicializarMapa(var mapa: Matriz; F, C: integer);
var
i, j: integer;
begin
for i := 1 to F do
for j := 1 to C do
mapa[i, j] := '.';
end;
procedure MostrarMapa(var mapa: Matriz; F, C: integer);
var
i, j: integer;
begin
for i := F downto 1 do
begin
for j := 1 to C do
write(mapa[i, j], ' ');
writeln;
end;
end;
procedure MoverRobot(var fila, columna: integer; F, C: integer; direccion: char);
begin
case direccion of
'N': if fila < F then inc(fila);
'S': if fila > 1 then dec(fila);
'E': if columna < C then inc(columna);
'O': if columna > 1 then dec(columna);
end;
end;
begin
clrscr;
write('Ingrese número de filas (1-20): '); readln(F);
write('Ingrese número de columnas (1-20): '); readln(C);
write('Ingrese fila inicial del robot: '); readln(fila);
write('Ingrese columna inicial del robot: '); readln(columna);
write('Ingrese la secuencia de órdenes (máx 25): '); readln(secuencia);
InicializarMapa(mapa, F, C);
mapa[fila, columna] := 'X';
writeln('Estado inicial del mapa:');
MostrarMapa(mapa, F, C);
for i := 1 to length(secuencia) do
begin
mapa[fila, columna] := 'x'; // Marcar la casilla como visitada
MoverRobot(fila, columna, F, C, secuencia[i]);
mapa[fila, columna] := 'X'; // Actualizar la posición del robot
writeln('Paso ', i, ':');
MostrarMapa(mapa, F, C);
end;
writeln('Posición final del robot: [Fila=', fila, ', Columna=', columna, ']');
end.