iniciar-programa
define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;
define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;

define-prototipo-instruccion busca(n);
define-prototipo-instruccion buscanuevo;
define-prototipo-instruccion determina(n);





define-nueva-instruccion BuscaCuadro como
inicio
si orientado-al-norte entonces inicio
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada y derecha-bloqueada entonces inicio
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
si frente-bloqueado entonces inicio
mientras no orientado-al-oeste hacer gira-izquierda;
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;
mientras izquierda-bloqueada hacer inicio
avanza;
fin;
gira-izquierda;
avanza;
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
fin;

si orientado-al-este entonces inicio
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada y derecha-bloqueada entonces inicio
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
si frente-bloqueado entonces inicio
mientras no orientado-al-sur hacer gira-izquierda;
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;
mientras derecha-bloqueada hacer inicio
avanza;
fin;
gira-derecha;
avanza;
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
fin;


si orientado-al-sur entonces inicio
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada y derecha-bloqueada entonces inicio
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
si frente-bloqueado entonces inicio
mientras no orientado-al-oeste hacer gira-izquierda;
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;
mientras derecha-bloqueada hacer inicio
avanza;
fin;
gira-derecha;
avanza;
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;

fin;

si orientado-al-oeste entonces inicio
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada y derecha-bloqueada entonces inicio
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
si frente-bloqueado entonces inicio
mientras no orientado-al-norte hacer gira-izquierda;
mientras frente-libre y (derecha-libre o izquierda-libre) hacer inicio
avanza;
fin;
si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;
mientras derecha-bloqueada hacer inicio
avanza;
fin;
gira-derecha;
avanza;
mientras derecha-bloqueada y izquierda-bloqueada y frente-libre  hacer inicio
avanza;
fin;
Busca(0);
fin;
fin;

fin;








define-nueva-instruccion determina(n) como inicio
 Si junto-a-zumbador entonces inicio
 coge-zumbador;
 Si junto-a-zumbador entonces inicio
 Coge-zumbador;
 fin sino
 si no junto-a-zumbador entonces inicio
 mientras no orientado-al-norte hacer gira-izquierda;
 BuscaCuadro;
 sal-de-instruccion;
 fin;
 si junto-a-zumbador entonces inicio
 Coge-zumbador;
 fin sino inicio
 mientras no orientado-al-este hacer gira-izquierda;
 BuscaCuadro;
 sal-de-instruccion;
 fin;
 si junto-a-zumbador entonces inicio
 coge-zumbador;
 fin sino inicio
 mientras no orientado-al-sur hacer gira-izquierda;
 BuscaCuadro;
 sal-de-instruccion;
 fin;
 si no junto-a-zumbador entonces inicio
 mientras no orientado-al-oeste hacer gira-izquierda;
 BuscaCuadro;
 sal-de-instruccion;
 fin;
 fin;
 fin;

















define-nueva-instruccion buscanuevo como inicio
mientras (derecha-libre o izquierda-libre) y frente-libre  y no junto-a-zumbador hacer inicio
avanza;
fin;

si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;

mientras (derecha-libre o izquierda-libre) y frente-libre  y no junto-a-zumbador hacer inicio
avanza;
fin;

si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;

si no junto-a-zumbador entonces inicio
gira-derecha;
Si frente-libre entonces inicio
avanza;
Si (izquierda-libre o derecha-libre)  entonces inicio
gira-izquierda;
Buscanuevo;
fin;
fin;

si frente-libre entonces inicio
media-vuelta;
avanza;
gira-derecha;
fin sino si frente-bloqueado entonces inicio
gira-izquierda;
fin;

mientras (derecha-libre o izquierda-libre) y frente-libre  y no junto-a-zumbador hacer inicio
avanza;
fin;

si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
apagate;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
apagate;
fin;
fin;

si junto-a-zumbador entonces inicio
 Determina(0);
 fin;

fin;















define-nueva-instruccion busca(n) como inicio
mientras no orientado-al-oeste hacer inicio
gira-izquierda;
fin;

mientras (derecha-libre o izquierda-libre) y frente-libre  hacer inicio
avanza;
fin;

si izquierda-bloqueada Y derecha-bloqueada  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado entonces inicio
media-vuelta;
fin;

mientras no orientado-al-sur hacer inicio
gira-izquierda;
fin;

mientras (derecha-libre o izquierda-libre) y frente-libre  hacer inicio
avanza;
fin;

si izquierda-bloqueada Y DERECHA-BLOQUEADA  entonces inicio
media-vuelta; avanza;
fin
sino si frente-bloqueado  entonces inicio
media-vuelta;
fin;


 BuscaNuevo;

fin;

    inicia-ejecucion
     busca(0);

    apagate;
    termina-ejecucion
finalizar-programa
