iniciar-programa

  define-nueva-instruccion gira-derecha como inicio
    gira-izquierda;
    gira-izquierda;
    gira-izquierda;
     fin;

    define-nueva-instruccion media-vuelta como inicio
 gira-izquierda;
 gira-izquierda;
 fin;

         define-nueva-instruccion avanza-pasos-norte(x) como
       inicio
        si no si-es-cero(x) entonces
         inicio
          avanza;
          avanza-pasos-norte(precede(x));
          si orientado-al-sur entonces
           avanza;
          fin
          sino
          deja-zumbador;
          si orientado-al-norte entonces
          media-vuelta;
            fin;

      define-nueva-instruccion recoge-avanza-norte(n) como
      inicio
        si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         recoge-avanza-norte(sucede(n));
         deja-zumbador;
         fin
       sino
        avanza-pasos-norte(n);
         fin;



           define-nueva-instruccion avanza-pasos-este(x) como
       inicio
        si no si-es-cero(x) entonces
         inicio
          avanza;
          avanza-pasos-este(precede(x));
          si orientado-al-oeste entonces
           avanza;
          fin
          sino
          deja-zumbador;
          si orientado-al-este entonces
          media-vuelta;
            fin;


      define-nueva-instruccion recoge-avanza-este(n) como
      inicio
        si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         recoge-avanza-este(sucede(n));
         deja-zumbador;
         fin
       sino
        avanza-pasos-este(n);
         fin;




          define-nueva-instruccion avanza-pasos-sur(x) como
       inicio
        si no si-es-cero(x) entonces
         inicio
          avanza;
          avanza-pasos-sur(precede(x));
          si orientado-al-norte entonces
           avanza;
          fin
          sino
          deja-zumbador;
          si orientado-al-sur entonces
          media-vuelta;
            fin;


      define-nueva-instruccion recoge-avanza-sur(n) como
      inicio
        si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         recoge-avanza-sur(sucede(n));
         deja-zumbador;
         fin
       sino
        avanza-pasos-sur(n);
         fin;







         define-nueva-instruccion avanza-pasos-oeste(x) como
       inicio
        si no si-es-cero(x) entonces
         inicio
          avanza;
          avanza-pasos-oeste(precede(x));
          si orientado-al-este entonces
           avanza;
          fin
          sino
          deja-zumbador;
          si orientado-al-oeste entonces
          media-vuelta;
            fin;


      define-nueva-instruccion recoge-avanza-oeste(n) como
      inicio
        si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         recoge-avanza-oeste(sucede(n));
         deja-zumbador;
         fin
       sino
        avanza-pasos-oeste(n);
         fin;



        define-nueva-instruccion deja4 como inicio
          mientras junto-a-zumbador hacer inicio
           avanza;
          si no-junto-a-zumbador  entonces inicio
           gira-izquierda;
           avanza;
             si no-junto-a-zumbador entonces inicio
           deja-zumbador;
           gira-derecha;
           fin
           sino si junto-a-zumbador entonces inicio
            apagate;
           fin;
           fin;
           fin;
           fin;







           define-nueva-instruccion deja3 como inicio
          mientras junto-a-zumbador hacer inicio
           avanza;
          si no-junto-a-zumbador y orientado-al-este entonces inicio
           gira-derecha;
           avanza;
           si no-junto-a-zumbador entonces inicio
           deja-zumbador;
           gira-izquierda;
           fin
           sino si junto-a-zumbador y orientado-al-sur entonces inicio
            gira-izquierda;
            deja4;
           fin;
           fin;
           fin;
           fin;


           define-nueva-instruccion deja2 como inicio

            mientras junto-a-zumbador hacer inicio
           avanza;
          si no-junto-a-zumbador y orientado-al-oeste entonces inicio
           gira-izquierda;
           avanza;
             si no-junto-a-zumbador entonces inicio
           deja-zumbador;
           gira-derecha;
           fin
           sino si junto-a-zumbador y orientado-al-sur entonces inicio
            gira-izquierda;
            deja3;
           fin;
           fin;
           fin;
           fin;


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

          mientras junto-a-zumbador hacer inicio
          avanza;
          si no junto-a-zumbador entonces inicio
           gira-izquierda;
           avanza;
           si no-junto-a-zumbador entonces inicio
           deja-zumbador;
           gira-derecha;
            fin
            sino si junto-a-zumbador entonces inicio

              deja2;
           fin;
           fin;
           fin;
           fin;


        define-nueva-instruccion reparte como inicio
        mientras junto-a-zumbador hacer inicio
         coge-zumbador;
         fin;
         mientras no orientado-al-este hacer inicio
          gira-izquierda;
          fin;
           mientras frente-libre y no-junto-a-zumbador hacer inicio
           avanza;
           si junto-a-zumbador entonces
           deja;
            fin;
             fin;










    inicia-ejecucion
    mientras no orientado-al-norte hacer inicio
     gira-izquierda;
     fin;
     si no-junto-a-zumbador entonces inicio
     deja-zumbador;
     apagate;
     fin;


     si junto-a-zumbador y orientado-al-norte entonces inicio
      recoge-avanza-norte(0);
      fin;


     si junto-a-zumbador  entonces inicio
     mientras no orientado-al-este hacer inicio
      gira-izquierda;
      fin;
      recoge-avanza-este(0);
      fin;

      si junto-a-zumbador  entonces inicio
     mientras no orientado-al-sur hacer inicio
      gira-izquierda;
      fin;
      recoge-avanza-sur(0);
      fin;

      si junto-a-zumbador  entonces inicio
     mientras no orientado-al-oeste hacer inicio
      gira-izquierda;
      fin;
      recoge-avanza-oeste(0);
      fin;


        reparte;


        apagate;
    termina-ejecucion
finalizar-programa


