iniciar-programa
define-nueva-instruccion gira(n) como
inicio
   repetir n veces gira-izquierda;
fin;
 define-nueva-instruccion terminar(n) como
 inicio
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     terminar(sucede(n));
   fin
   sino
   inicio
      gira(2);
      avanza;
      gira(1);
      avanza;

      repetir n veces inicio
        deja-zumbador;
      fin;
      apagate;
   fin;
 fin;
 define-nueva-instruccion ennal(n) como
 inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       ennal(sucede(n));
    fin
    sino
    inicio
      gira(1);
      avanza;

      gira(1);
      avanza;
      gira(3);
      avanza;
      repetir n veces inicio
        coge-zumbador;
      fin;
      si junto-a-zumbador entonces
      inicio
        terminar(0);
      fin
      sino
      inicio
        apagate;
      fin;
    fin;
 fin;




 define-nueva-instruccion multi2(n) como
 inicio
     si junto-a-zumbador entonces
     inicio
        coge-zumbador;
        multi2(sucede(n));
     fin
     sino
     inicio
        repetir n veces inicio
           deja-zumbador;
        fin;
        avanza;
        gira(1);
        avanza;
        si junto-a-zumbador entonces
        inicio
        mientras junto-a-zumbador hacer inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           avanza;
           repetir n veces inicio
              deja-zumbador;
           fin;
           gira(2);
           avanza;
           gira(2);
        fin;
        fin;
        fin;
        si no-junto-a-zumbador entonces
        inicio
           avanza;
           ennal(0);

        fin;



     fin;
 fin;


 define-nueva-instruccion contar(n) como
 inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       contar(sucede(n));
    fin
    sino
    inicio
      repetir n veces deja-zumbador;
      avanza;
      repetir n veces deja-zumbador;
      gira(2);
      avanza;
      gira(3);
    fin;
 fin;


 define-nueva-instruccion  recfin(n) como
 inicio
    gira(3);
    avanza;
    gira(1);
    avanza;
    gira(1);
    avanza;
    multi2(0);

 fin;


define-nueva-instruccion divi(n) como
inicio
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     divi(sucede(n));
   fin
   sino
   inicio
   repetir n veces inicio
     deja-zumbador;
   fin;
      gira(3);
      avanza;
      gira(1);
      avanza;
      gira(1);
      avanza;
      gira(3);
       contar(0);
      mientras junto-a-zumbador hacer
      inicio
         si junto-a-zumbador entonces inicio
           repetir n veces
           inicio
           si junto-a-zumbador entonces
           inicio
                 coge-zumbador;
           fin
           sino
           inicio
              recfin(0);

           fin;
           fin;

           gira(3);
           avanza;
           gira(1);
           avanza;
           gira(1);
           avanza;
           deja-zumbador;
           avanza;
           gira(1);
           avanza;
           avanza;
           gira(1);
           avanza;
           gira(1);
           avanza;
         fin
         sino
         inicio
         apagate;
         fin;
      fin;
   fin;
fin;












define-nueva-instruccion multi(n) como
inicio
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     multi(sucede(n));
   fin
   sino
   inicio

      gira(2);
      avanza;
      mientras junto-a-zumbador hacer
      inicio
      si junto-a-zumbador entonces
      inicio
        coge-zumbador;
      gira(1);
      avanza;
      gira(3);
      avanza;
      gira(3);
      avanza;
     repetir n veces deja-zumbador;
      gira(2);
      avanza;
      gira(1);
      avanza;
      gira(1);
      avanza;
      gira(1)

      fin;


      si no-junto-a-zumbador entonces
      inicio
          gira(1);
          repetir 2 veces avanza;
          divi(0);
      fin;
      fin;
   fin;
fin;

    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    si orientado-al-norte entonces
    inicio
      si frente-libre entonces
      inicio
        avanza;
      fin;
      si frente-bloqueado entonces
      inicio
        gira(3);
        avanza;
        gira(1);
        avanza;
        gira(1);
        avanza;
        gira(3);
        avanza;
        multi(0);
      fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
