iniciar-programa
define-nueva-instruccion gira(x) como repetir x veces gira-izquierda;
define-nueva-instruccion recoge(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        recoge(x);
        repetir x veces deja-zumbador;
        fin sino inicio
        gira(1);
        avanza;
        gira(3);
        avanza;
        gira(3);
        avanza;
    fin;
fin;
define-nueva-instruccion multiplica(x) como inicio
 si junto-a-zumbador entonces inicio
     coge-zumbador;
     multiplica(sucede(x));
     fin sino inicio
     repetir x veces deja-zumbador;
     avanza;
     recoge(x);
     fin;
fin;
define-nueva-instruccion inicia-multiplicacion como inicio
    gira(1);
    avanza;
    gira(3);
    avanza;
    gira(1);
    avanza;
    gira(1);
    avanza;
    gira(3);
    avanza;
    gira(2);
    multiplica(0);
fin;
define-nueva-instruccion repite(x) como inicio
    si junto-a-zumbador y no si-es-cero(x) entonces inicio
        coge-zumbador;
        repite(precede(x));
        fin sino inicio
           si si-es-cero(x) entonces inicio
               avanza;
               gira(1);
               avanza;
               gira(1);
               avanza;
               deja-zumbador;
               gira(2);
               avanza;
               gira(3);
               avanza;
               gira(3);
               avanza;    
               gira(2);
            fin sino inicio
                gira(3);
                avanza;
                repetir x veces deja-zumbador;
                gira(2);
                avanza;
                gira(3);
            fin;
    fin;
fin;
define-nueva-instruccion residuo(x) como inicio
    si junto-a-zumbador entonces inicio
         coge-zumbador;
         residuo(precede(x));
         fin sino inicio
         repetir x veces deja-zumbador;
     fin;
fin;


define-nueva-instruccion divide(x)  como inicio
        si junto-a-zumbador entonces inicio
            repite(x);

            divide(x);
        fin sino inicio
        gira(3);
        avanza;
        si junto-a-zumbador entonces residuo(x);
        fin;
fin;

define-nueva-instruccion divisor(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        divisor(sucede(x));
    fin sino inicio
    avanza;
    gira(1);
    avanza;
    gira(1);
    avanza;
    gira(3);
    divide(x);
    fin;
fin;


define-nueva-instruccion inicia-division como inicio
    avanza;
    avanza;
    gira(1);
    avanza;
    avanza;
    gira(2);
    divisor(0);
fin;

    inicia-ejecucion
    inicia-multiplicacion;
    gira(1);
    avanza;
    gira(1);
    inicia-division;
        apagate;
    termina-ejecucion
finalizar-programa
