Programmazione in logo
This presentation is the property of its rightful owner.
Sponsored Links
1 / 18

PROGRAMMAZIONE IN LOGO PowerPoint PPT Presentation


  • 67 Views
  • Uploaded on
  • Presentation posted in: General

PROGRAMMAZIONE IN LOGO. 3 a e 4 a Lezione Programmare in scala e la ricorsione. Disegnare in scale differenti. Abbiamo imparato a disegnare dei poligoni di dimensioni diverse in funzione della richiesta dell’utente.

Download Presentation

PROGRAMMAZIONE IN LOGO

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programmazione in logo

PROGRAMMAZIONE IN LOGO

3a e 4a Lezione

Programmare in scala e la ricorsione


Disegnare in scale differenti

Disegnare in scale differenti

  • Abbiamo imparato a disegnare dei poligoni di dimensioni diverse in funzione della richiesta dell’utente.

  • Ora vi mostro un’altra possibilità dove l’oggetto si ridimensiona secondo una scala.

  • Digitate il seguente codice:

    to poligono :scala :nolati

    repeat :nolati [fd 100*:scala rt 360/:nolati]

    ht

    end

    Cosa succede?


Esercizio

Esercizio

Prova a generare i seguenti disegni a diverse scale,

se riesci scrivi un’unica procedura!


La ricorsione

La ricorsione

  • Una procedura è ricorsiva se invoca se stessa!

  • Primo esempio:

    to ballo

    rt 1

    ballo

    end

  • Cosa succede?????

  • Quali possono essere le potenzialità della ricorsione?


La ricorsione tratto da wikipedia

La ricorsione (tratto da Wikipedia)

  • Viene detto algoritmo ricorsivo un algoritmo espresso in termini di se stesso, ovvero in cui l'esecuzione dell'algoritmo su un insieme di dati comporta la semplificazione o suddivisione dell'insieme di dati e l'applicazione dello stesso algoritmo agli insiemi di dati semplificati.

  • Questo tipo di algoritmo risulta particolarmente utile per eseguire dei compiti ripetitivi su di un set di input variabili. L'algoritmo richiama se stesso generando una sequenza di chiamate che ha termine al verificarsi di una condizione particolare che viene chiamata condizione di terminazione, che in genere si ha con particolari valori di input.


La ricorsione1

La ricorsione

  • Provate a scrivere un programma che richiama la ricorsione.

to ballo2

repeat 5 [fd 150 rt 360/5]

ballo2

end


La ricorsione2

La ricorsione

Impariamo delle nuove primitive:

  • penpaint

    • Ritorna alla modalità classica di disegno

  • penerase

    • La tartaruga cancella tutto quello che incontra.

  • wait numero

    • Mette in pausa il programma per numero/60 secondi. (wait 120, mette in pausa per 2 s)


La ricorsione3

La ricorsione

to secondi

fd 200 wait 60

penerase

bk 200

penpaint

rt 6

secondi

end

Prima di scrivere questa procedura provate ad interpretare quello che accadrà durante l’esecuzione del programma.


La ricorsione4

La Ricorsione

  • Scrivete una ricorsione che simuli una lancetta dei minuti.


La ricorsione5

La ricorsione

  • La primitiva printvisualizza nell’area dello storico dei comandi (finestra in basso).

  • Questa primitiva aspetta un argomento, una lista o una parola:

    print 3

    print “ciao

    print [come stai?]

    Provate a scrivere questa procedura:

    to stampa :n

    print :n

    stampa :n+1

    endcosa succede?


Terminare la ricorsione

Terminare la ricorsione

  • Gli esempi precedenti vengono eseguiti all’infinito consumando tutta la memoria disponibile (RAM).

  • Normalmente è possibile terminare la ricorsione, come? Vediamo un esempio.

    to stampa1 :n

    if :n = 100 [stop]

    print :n

    stampa1 :n+1

    end


Terminare la ricorsione1

Terminare la ricorsione

  • Nella procedura precedente vi è una nuova primitiva : if condizione [primitiva]. Questa primitiva è molto importante, perché permette di cambiare gli eventi nella procedura. Facciamo un esempio, digitate nella linea di comando:

    if 2+1=3 [print [è vero]]

    # è vero

    if 2+2=5 [print [è vero]]

    # (nessuna risposta)


Ricorsione fiocco di neve di van koch

Ricorsione: Fiocco di Neve di Van Koch

  • Utilizzando la ricorsione è molto semplice generare in Logo alcune semplici curve chiamate frattali in matematica.

  • Questi sono i primi passi per creare la linea spezzata di Van Koch:

  • Come primo passo si disegna un segmento di una data lunghezza.

  • Il segmento viene diviso in tre parti uguali.

  • Un triangolo equilatero viene disegnato sul segmento centrale.

  • Infine il segmento centrale viene cancellato.


Programmazione in logo

4

3

2

1

  • Provate a scrivere in Logo questa prima parte del programma.

    Il risultato dovrebbe essere la seguente figura 2:

  • Adesso provate a disegnare la figura 3.


Programmazione in logo

  • Non tutte le vostre procedure permetteranno di trovare un algoritmo ricorsivo e quindi di continuare a spezzettare le linee sempre in tre parti uguali.

  • Come aiuto vi comunico le seguenti direttive:

  • Disegniamo il segmento di lunghezza L e corrispondente al passo n (Ln-1,L/3)

  • Ruotiamo a sinistra di 60°

  • Disegniamo Ln-1,L/3

  • Ruotiamo a destra di 120°

  • Disegniamo Ln-1,L/3

  • Ruotiamo a sinistra di 60°

  • Disegniamo Ln-1,L/3


Programmazione in logo

  • Provate a scrivere una procedura che simuli i passaggi descritti nella diapositiva no. 15.

  • La soluzione la riceverete nel documento intitolato “Il fiocco di neve”


Ricorsione con le parole

Ricorsione con le parole

Impariamo tre nuove primitive:

  • Emptyp: restituisce vero se la variabile stringa è vuota.

    printemptyp “# true

    printemptyp“logo# false

  • Last: restituisce una parola costituita dall’ultima lettera se arg1 è una parola o l’ultimo elemento se arg1 è un elenco.

    print last ciao # o

    print last [1 2 3 4]# 4

  • Butlast (bl): restituisce una parola privata dell’ultima lettera se arg1 è una parola o un elenco privato dell’ultimo elemento se arg1 è un elenco.

    printbutlast ciao# cia

    printbutlast [1 2 3 4]# 1 2 3


Ricorsione con le parole1

Ricorsione con le parole

  • Provate a scrivere una procedura ricorsiva che legga al contrario.

    La procedura viene invocata con:

    inverti “mauro# oruam


  • Login