![Page 1: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/1.jpg)
Il LOGO
la programmazione è un gioco!
nessuna pretesa da ingegneria del sw
![Page 2: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/2.jpg)
Caratteristiche generali
• Linguaggio interpretato
• Scritto su linee. Ogni linea è una chiamata di funzione di tipo– Comando (con effetti ma senza valore) print,..– Operazione (con valore come output) sum,
list,..– Un sottoinsieme di operazioni è costituito dai predicati che assumono il valore true false
![Page 3: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/3.jpg)
CiaoMondo!!
• label “ciaomondo!!
• Scegliere la grandezza, il colore della penna e scrivere
• repeat 36 [label "ciaomondo!! rt 10 setpencolor repcount]
![Page 4: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/4.jpg)
Introduzione concetti: procedura
• TO BOX• REPEAT 4 [FD 100 RT 90]• END • E se vogliamo 2 quadrati?• TO BOXES• REPEAT 4 [FD 100 RT 90]• RT 90 PU FD 120 PD LT 90• REPEAT 4 [FD 100 RT 90]• END
![Page 5: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/5.jpg)
Introduzione variabili
• E se devono essere tanti? E di grandezza qualunque?
• Studio delle figure poligonali e “geometria della tartaruga”.
• Vediamo qualche cammino.
![Page 6: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/6.jpg)
Qualche cammino
• repeat 4 [fd 50 rt 90]
• repeat 5 [fd 50 rt 72]
• repeat 6 [fd 50 rt 60]
• repeat 5 [fd 50 rt 144]
• repeat 3 [fd 50 rt 120]
• Può la tartaruga decidere che il cammino si chiude?
![Page 7: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/7.jpg)
Generalità
• Le espressioni possono essere primitive o definite dall’utente.
• Possono avere 0, 1, più parametri
• Si usa la notazione infissa – Sum :x :y– ….
![Page 8: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/8.jpg)
I dati
• Possono essere– Parole– Liste– Vettori– I numeri sono casi particolari di parole.– Non c’è il sistema forte dei tipi: l’interprete lo
decide dal contesto.
![Page 9: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/9.jpg)
I dati
• due simboli particolari– : per indicare “il contenuto di ..”
• Si tratta di un uso molto utile per ricordare allo studente il concetto di variabile.
– Quotazione o “ • Si tratta di un simbolo che indica nessuna
valutazione.
• Il numero è un caso speciale di autovalutazione “2 2
![Page 10: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/10.jpg)
Assegnamento
• make “ x sum :y 3– ha due parametri. L’effetto sta nel porre nel
primo parametro la valutazione del secondo– Sum :y 3– dove si indica di effettuare la somma tra il
contenuto di y e il numero 3
• Il secondo parametro è passato per valore, il primo per indirizzo
![Page 11: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/11.jpg)
Assegnamento
• Indirizzamento indiretto– make "x 45
– make :x 3
– print :45
• Scoping– Le variabili non devono essere dichiarate e sono
globali. Possono essere dichiarate locali a una procedura e vale lo scoping dinamico.
– I parametri delle procedure creano variabili locali
![Page 12: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/12.jpg)
Liste
• Rispetto ai vettori sono espandibili – first, last, butfirst, butlast, member, item. – sentence fput, lput
• Coda con le operazioni queue, dequeue,
• Stack con le operazioni push and pop
• La ricorsione è il modo naturale di trattare con le liste.
![Page 13: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/13.jpg)
Strutture di controllo
• ifelse test [ do if true list ] [do if false list]
• repeat number [instruction list]
•
• Altre istruzioni iterative ma si raccomanda l’uso ricorsivo
![Page 14: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/14.jpg)
Esempi
• make "stati [italia francia spagna]• label :stati• Oppure• label thing “stati• label first :stati• pr first [italia francia spagna]• pr last [italia francia spagna]• pr butfirst [italia francia spagna]• show butfirst [italia francia spagna]• ct
![Page 15: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/15.jpg)
Esempi
• make first [gatto cane] first [Meo Lilli]• pr :gatto• ??• make "Meo "gatto• pr :meo• ??• make :meo "graffia• pr :gatto ( o pr thing :meo)• ??
![Page 16: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/16.jpg)
Esempi
• for [red 0 255] [for [green 0 255] [setpixel (list :red :green 0) fd 1] bk 256 rt 90 fd 1 lt 90]
![Page 17: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/17.jpg)
Strutture di controllo
• OPERAZIONE [una lista di comandi] [vari dati]
• show map [? * ? ] [ 5 6 7 ]
• [25 36 49]
![Page 18: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/18.jpg)
Esempio
to vai ;sceglie un punto sullo schermo
pu setxy -250 + random 500 -150 + random 300 pd
rt random 360 ;sceglie l'inclinazione
end
![Page 19: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/19.jpg)
Esempio
to galassia :num ;traccia ‘:num’ stelle
repeat :num [ vai star random 50 ] ;di ampiezza arbitraria
endto star :size repeat 5 [fd :size rt 144 ] end
![Page 20: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/20.jpg)
Indici dei Colori• 0 -> [ 0 0 0]• 1 -> [ 0 0 255]• 2 -> [ 0 255 0]• 3 -> [ 0 255 255]• 4 -> [255 0 0]• 5 -> [255 0 255]• 6 -> [255 255 0]• 7 -> [255 255 255]• 8 -> [155 96 59]• 9 -> [197 136 18]• 10 -> [100 162 64]• 11 -> [120 187 187]• 12 -> [255 149 119]• 13 -> [144 113 208]• 14 -> [255 163 0]• 15 -> [183 183 183]
![Page 21: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/21.jpg)
Altro esempio
to segna_percorsosetpc 4 setpensize [ 20 20 ] rt 60 fd 60 rt 40 fd 120 rt 100 fd 150 rt 90 fd 120 rt 65 fd 80 end Una "strada" su un burrone! Costringiamo dentro la tartaruga
![Page 22: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/22.jpg)
Metodologie interessanti
• to cambia_direzione • bk 1 rt 30• end
• to controlla• pu fd 1 • output pixel• end
• to cammina• bk 1 pd fd 1• end
![Page 23: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/23.jpg)
Funziona?
• to segui_traccia • setpc 0 • setpensize [ 1 1 ] • repeat 10000 [• ifelse or ( 4 = controlla ) ( 0 = controlla ) • [cammina] [ wait 5 cambia_direzione ] • ]• end
![Page 24: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/24.jpg)
Lezione appresa
• Scrivere bene i controlli• Anche la correzione non è soddisfacente.• Un po’ di fantasia non guasta!!
• windowcreate "uno "finestra "titolo 0 0 100 100 []• windowcreate "finestra "finestramia "titolo 25 25 50 25 []• staticcreate "finestramia "static1 [Heading=0] 25 25 50 25• repeat 72 [rt 5 staticupdate "static1 se [Heading=] heading
wait 60]• windowdelete “finestra
![Page 25: Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw](https://reader036.vdocuments.pub/reader036/viewer/2022070312/5542eb4c497959361e8b999f/html5/thumbnails/25.jpg)
Esempioto usofinestrelocal "wnx make "wnx 100 local "wny make "wny 90 local "marx make "marx 5 local "mary make "mary
20 local "sizx make "sizx 10 local "sizy make "sizy
10 windowcreate "main "earth [Saluto] 0 0 :wnx :wny
[] buttoncreate "earth "bm
"* :marx+:sizx*4 :mary+:sizy*1 :sizx :sizy [galassia 50]
staticcreate "earth "bw [Hello World] 25 50 50 25 staticcreate "earth "bt bf time 25 5 50 25 endwindowdelete "earth