iniciar-programa
define-nueva-instruccion gira (r) como inicio
repetir r veces gira-izquierda;
fin;


define-nueva-instruccion mover (m) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   mover (m);
    deja-zumbador;
    fin
    sino inicio
    repetir m veces deja-zumbador;
    avanza;


 fin;
fin;



define-nueva-instruccion cambia (m) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   cambia (sucede(m));
    fin
    sino inicio
    avanza;
    gira (2);
    mover (m);

 fin;
fin;



define-nueva-instruccion sort2 (p) como inicio
 si junto-a-zumbador y no si-es-cero (p) entonces inicio
  coge-zumbador;
   sort2 (precede(p));
    deja-zumbador;
     fin
     sino inicio
    si no-junto-a-zumbador entonces gira (2);

 fin;
fin;



define-nueva-instruccion sort (p) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   sort (sucede(p)) ;
    fin
    sino inicio
     repetir p veces deja-zumbador;
     avanza;
     sort2 (p);

 fin;
fin;



define-nueva-instruccion ordena (k) como inicio
 si no si-es-cero (k) entonces inicio
  repetir k veces inicio
   sort (0);
    si orientado-al-oeste entonces cambia (0);

    fin;

    gira (2);
    mientras frente-libre hacer avanza;
    gira (2);

   ordena (precede(k));

 fin;
fin;



define-nueva-instruccion bubble (k) como inicio
 si frente-libre entonces inicio
  avanza;
   bubble (sucede(k));
    fin
    sino inicio
    gira (2);
   ordena (k);
 fin;
fin;

(*-----------------------------------------------------------------*)



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




define-nueva-instruccion resta (k) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   resta (sucede(k));
    fin
     sino inicio
    repetir k veces deja-zumbador;
   avanza;
  resta2 (k);
 fin;
fin;




define-nueva-instruccion lleva como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   lleva;
    deja-zumbador;
     fin
      sino inicio
     gira (3);
    avanza;
   mientras junto-a-zumbador hacer coge-zumbador;
 fin;
fin;



    inicia-ejecucion

    gira (3);

    mientras frente-libre y junto-a-zumbador hacer avanza;
    gira (2);
    si no-junto-a-zumbador entonces avanza;
    bubble (0);

    mientras frente-libre y junto-a-zumbador hacer avanza;
    gira (2);
    si no-junto-a-zumbador entonces avanza;

    mientras frente-libre hacer resta (0);

    gira (3);
    avanza;
    gira (3);
    mientras frente-libre y junto-a-zumbador hacer avanza;
    gira (2);
    si no-junto-a-zumbador entonces avanza;
    bubble (0);

    lleva;



        apagate;
    termina-ejecucion
finalizar-programa
