Necesito ayuda con un ejercicio en pascal!!

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
SsabrinaSosa

Necesito ayuda con un ejercicio en pascal!!

Mensaje por SsabrinaSosa » Vie Jul 01, 2016 6:42 am

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.

Avatar de Usuario
Lucia.f.camanoooo

Re: Necesito ayuda con un ejercicio en pascal!!

Mensaje por Lucia.f.camanoooo » Dom Jul 24, 2016 2:41 am

Pudiste hacerlo? Pasalo plis

Avatar de Usuario
GonzaloVazquez
Junior
Mensajes: 10
Registrado: Lun Dic 09, 2024 6:10 pm
Contactar:

Re: Necesito ayuda con un ejercicio en pascal!!

Mensaje por GonzaloVazquez » Lun Dic 09, 2024 6:38 pm

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

Responder