iniciar-programa

define-nueva-instruccion norte como inicio
  mientras no orientado-al-norte hacer inicio
    gira-izquierda;
   fin;
  fin;

define-nueva-instruccion sur como inicio
   mientras no orientado-al-sur hacer inicio
     gira-izquierda;
    fin;
  fin;

define-nueva-instruccion este como inicio
  mientras no orientado-al-este hacer inicio
     gira-izquierda;
    fin;
 fin;

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

define-nueva-instruccion coger como inicio
   mientras junto-a-zumbador hacer inicio
       coge-zumbador;
     fin;
  fin;

define-nueva-instruccion dejar(a) como inicio
   repetir a veces inicio
     deja-zumbador;
     fin;
  fin;


define-nueva-instruccion dividir(x) como inicio
  norte;
   mientras junto-a-zumbador hacer inicio
      repetir x veces inicio
        si junto-a-zumbador entonces inicio
           coge-zumbador;
          fin sino inicio
            sur;
          fin;
       fin;
     fin;
     si no orientado-al-sur entonces inicio
       norte;
      fin;
  fin;

define-nueva-instruccion comprovar(n) como inicio
  si junto-a-zumbador entonces inicio
      coge-zumbador;
      comprovar(sucede(n));
    fin sino inicio
         norte;
          dejar(n);
            si no si-es-cero (precede (n)) entonces inicio
           si no si-es-cero (precede (precede (n)))entonces inicio
             dividir(2);
             dejar(n);
             fin sino inicio
             sur;
           fin;
        si orientado-al-sur entonces inicio
              si no si-es-cero (precede(precede(precede(n)))) entonces inicio
                 dividir(3);
                 dejar(n);
               fin;

             si orientado-al-sur entonces inicio
                     si no si-es-cero (precede(precede(precede(precede(precede(n)))))) entonces inicio
                        dividir(5);
                        dejar(n);
                     fin;
                  si orientado-al-sur entonces inicio
                      si no si-es-cero (precede (precede(precede(precede(precede(precede(precede(n)))))))) entonces inicio
                         dividir(7);
                         dejar(n);
                        fin;
                    fin;
         fin;
         fin;
       fin;
    fin;
  fin;

define-nueva-instruccion busqueda como inicio

    si junto-a-zumbador y  orientado-al-sur entonces inicio
         coger;
        norte;
      si frente-libre entonces inicio
           avanza;
           comprovar(0);
           busqueda;
           sur;
           avanza;
          fin;

           este;
           si frente-libre entonces inicio
            avanza;
            comprovar(0);
            busqueda;
             oeste;
             avanza;
            fin;

            oeste;
            si frente-libre entonces inicio
                avanza;
                comprovar(0);
                busqueda;
                este;
                avanza;
              fin;
               sur;
          si frente-libre entonces inicio
             avanza;
             comprovar(0);
             busqueda;
             norte;
             avanza;
            fin;
            sur;
          si frente-libre entonces inicio
             avanza;
             comprovar(0);
             busqueda;
             norte;
             avanza;
            fin;
         apagate;
    fin;
  fin;

    inicia-ejecucion
        sur;
          busqueda;
        apagate;
    termina-ejecucion
finalizar-programa
