[ Foro de Pascal ]

el preso de alcatraz...

18-May-2011 15:59
oscar gomez
3 Respuestas

Hola profesor Nacho cabanes,gracias por tu tiempo y tus explicaciones.

profesor tengo el siguiente programa y necesito me orientes en el:

a un preso del primer patio de alcatraz le han dicho que si atraviesa los mxn patios de la penitenciaria de alcatraz,la cual puede ser recorrida en zig zag como se observa en la figuara:

----------------->
<----------------
----------------->
<----------------

podra encontrar un tunel de escape localizado en el ultimo patio.el preso comienza a ejecutar su plan de fuga pero la estricta vigilancia lo obliga a regresarse un patio por cada dos patios que avance.del mismo modo el guardian del ultimo patio le han soplado el plan de fuga y al mismo instante que el preso comienza a ejecutar su plan de captura al preso,avanzando un patio cada vez que el preso avanza dos o retrocede uno.suponiendo que el preso quedara paralizado del susto cuando vea al guardian en el mismo patio. hacer un programa pascal que pronostique:

a) en que patio atrapara el guardian al preso.

b)muestre en pantalla solo  el recorrido del preso hasta cuando fue atrapado por el guardian, y de igual forma muestre solo el recorrido del guardian hasta que atrapo al preso.

c)si el guardian desconociera el plan del preso y la vigilancia no lo obligara a retroceder por medio de los primeros mxn enteros positivos,muestre en pantalla la ruta que seguira el preso y la que seguira el guardia.


BIEN PROFESOR, LO DEL RECORRIDO EN ZIG ZAG EN LA MATRIZ LO TENGO CONTROLADO, LO QUE ME SURGE DUDAS ES QUE PARA ALGUNAS DIMENSIONES DEL ENUNCIADO EL GUARDIAN NUNCA ATRAPARIA AL PRESO
COMO CREO ES EL CASO DE UNA MARIZ DE 6X6,como podria restringir estos casos, pues la idea por favor corrigeme si estoy mal es utilizar un repeat hasta que porejemplo until(p=g),iniciando p:=1 y g:=mxn,,como podria para mostrar el recorrido del preso ,podria ser porejemplo,si el guardian atrapo al preso en el patio o casilla p? por favor orienteme que debo hacer mas o menos como podria ser el seudocodigo solo para la parte de en que casilla atrapara el guardian al preso??? mil gracias por orientarnos profesor.


19-May-2011 17:59
Nacho Cabanes (+30)

Supongo que lo podrías plantear como dos funciones: una que calcule la siguiente posición a una dada para el preso, y otra que calcula la siguiente posición para el guardia.

Cuando la casilla que te devuelve la primera función y la casilla que te devuelve la segunda función coinciden, es porque el guardia ha alcanzado al preso.

Para mostrar en pantalla, basta con hacer una variante de cada una de esas funciones que escriba en pantalla la posición en que se encuentra (en vez de ser una función nueva, podría ser un parámetro que indicara si escribir en pantalla o no).

De igual modo, el hecho de que retroceda o no, se podría indicar mediante otro parámetro. Así la función del preso podría ser algo como

function proximaCasilla(inicial: casilla, mostrar: boolean, retroceder: boolean) : boolean;


19-May-2011 20:59
oscar gomez

hola profesor nacho.

profesor pero en el caso que me indicas de la funcion, realmente no estaria reciviendo ningun valor que me indique en que patio( en este caso al ser una matriz, en que celda), atrapa el guardian al ladron, pues se esta solo diciendo si lo atrapo o no? podrias extenderte un poco mas con algun tipo de seudocodigo para una posible solucion del programa?

mil gracias en lo que mas puedas ayudarme


21-May-2011 21:46
Nacho Cabanes (+30)

Cierto, la función "proximaCasilla" no devolvería un boolean, sino una casilla. De ese modo, podrías comparar si la próxima casilla a la que van a ir a parar el ladrón y el guardián son la misma, que es el caso en el que le atrapa.

Realmente hay que afinar un poco más, porque si lo planteas así, se podrían "cruzar" (podría estar el ladrón en la casilla 1,1 y el guardián en la 1,2, de modo que se intercambiarían sus casillas pero no llegarían a encontrarse en la misma casilla en ningún momento) y quizá eso se deba considerar también como que le atrapó.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)