Date post: | 01-May-2015 |
Category: |
Documents |
Upload: | gianna-alfieri |
View: | 212 times |
Download: | 0 times |
Il LOGO
la programmazione è un gioco!
nessuna pretesa da ingegneria del sw
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
CiaoMondo!!
• label “ciaomondo!!
• Scegliere la grandezza, il colore della penna e scrivere
• repeat 36 [label "ciaomondo!! rt 10 setpencolor repcount]
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
Introduzione variabili
• E se devono essere tanti? E di grandezza qualunque?
• Studio delle figure poligonali e “geometria della tartaruga”.
• Vediamo qualche cammino.
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?
Generalità
• Le espressioni possono essere primitive o definite dall’utente.
• Possono avere 0, 1, più parametri
• Si usa la notazione infissa – Sum :x :y– ….
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.
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
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
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
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.
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
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
Esempi
• make first [gatto cane] first [Meo Lilli]• pr :gatto• ??• make "Meo "gatto• pr :meo• ??• make :meo "graffia• pr :gatto ( o pr thing :meo)• ??
Esempi
• for [red 0 255] [for [green 0 255] [setpixel (list :red :green 0) fd 1] bk 256 rt 90 fd 1 lt 90]
Strutture di controllo
• OPERAZIONE [una lista di comandi] [vari dati]
• show map [? * ? ] [ 5 6 7 ]
• [25 36 49]
Esempio
to vai ;sceglie un punto sullo schermo
pu setxy -250 + random 500 -150 + random 300 pd
rt random 360 ;sceglie l'inclinazione
end
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
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]
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
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
Funziona?
• to segui_traccia • setpc 0 • setpensize [ 1 1 ] • repeat 10000 [• ifelse or ( 4 = controlla ) ( 0 = controlla ) • [cammina] [ wait 5 cambia_direzione ] • ]• end
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
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