iniciar-programa
define-nueva-instruccion manda (m) como inicio
si junto-a-zumbador entonces inicio
    coge-zumbador;
    manda (sucede(m));
    fin
    sino inicio
        mientras no-orientado-al-sur hacer gira-izquierda;
        si frente-libre entonces avanza;
        mientras no-orientado-al-este hacer gira-izquierda;
        mientras frente-libre y junto-a-zumbador hacer avanza;
        repetir m veces deja-zumbador;
        mientras no-orientado-al-oeste hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        mientras no-orientado-al-norte hacer gira-izquierda;
        si frente-libre entonces avanza;
        mientras no-orientado-al-este hacer gira-izquierda;
        mientras frente-libre y no-junto-a-zumbador hacer avanza;
    fin;
 fin;

define-nueva-instruccion recorre (r) como inicio
si junto-a-zumbador entonces inicio
    coge-zumbador;
    recorre (sucede(r));
    fin
    sino inicio
       mientras no-orientado-al-oeste hacer gira-izquierda;
       mientras no-junto-a-zumbador y frente-libre hacer avanza;
       si junto-a-zumbador entonces inicio
       mientras no-orientado-al-este hacer gira-izquierda;
       si frente-libre entonces avanza;
       repetir r veces deja-zumbador;
       si frente-libre entonces avanza;
       mientras no-junto-a-zumbador y frente-libre hacer avanza;
       fin
       sino inicio
        mientras no-orientado-al-este hacer gira-izquierda;
       repetir r veces deja-zumbador;
       si frente-libre entonces avanza;
       mientras no-junto-a-zumbador y frente-libre hacer avanza;
   fin;
fin;
fin;

define-nueva-instruccion cuenta (p) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    cuenta (sucede(p));
    fin
    sino inicio
        mientras no-orientado-al-norte hacer gira-izquierda;
        si frente-libre entonces avanza;
        repetir p veces deja-zumbador;
        mientras no-orientado-al-sur hacer gira-izquierda;
        si frente-libre entonces avanza;
        mientras no-orientado-al-oeste hacer gira-izquierda;
        si frente-libre entonces avanza;
    fin;
fin;
define-nueva-instruccion cuental (x) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    cuental (sucede(x));
    fin
    sino inicio
       mientras no-orientado-al-oeste hacer gira-izquierda;
       mientras frente-libre hacer avanza;
       mientras no-orientado-al-sur hacer gira-izquierda;
       mientras frente-libre hacer avanza;
       mientras no-orientado-al-este hacer gira-izquierda;
       repetir precede (x) veces si frente-libre entonces avanza;
       mientras no-orientado-al-oeste hacer gira-izquierda;

    fin;
fin;

define-nueva-instruccion cuentap (n) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    cuentap (sucede(n));
    fin
    sino inicio
    mientras no-orientado-al-oeste hacer gira-izquierda;
    si frente-libre entonces avanza;
    cuental (0);
    si frente-libre entonces avanza;
    repetir n veces cuenta (0);
    mientras no-orientado-al-este hacer gira-izquierda;
    si frente-libre entonces avanza;
    mientras no-junto-a-zumbador y frente-libre hacer avanza;
    mientras frente-libre y junto-a-zumbador o frente-bloqueado y junto-a-zumbador hacer recorre (0);
    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    mientras no-orientado-al-norte hacer gira-izquierda;
    si frente-libre entonces avanza;
    mientras no-orientado-al-este hacer gira-izquierda;
    mientras frente-libre y no-junto-a-zumbador hacer avanza;
    mientras frente-libre y junto-a-zumbador o frente-bloqueado y junto-a-zumbador hacer manda (0);
    fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer gira-izquierda;
    si frente-bloqueado entonces apagate;
    mientras no-orientado-al-norte hacer gira-izquierda;
    si frente-libre entonces avanza;
    mientras no-orientado-al-este hacer gira-izquierda;
    si frente-libre entonces avanza;
    cuentap (0);

        apagate;
    termina-ejecucion
finalizar-programa
