Logo Logo è un linguaggio di programmazione essenzialmente didattico; È orientato alla creazione di grafica vettoriale, ma può essere usato per fare qualsiasi tipo di programma; MSWLogo è una versione che funziona in ambiente Microsoft. URL sito: http://www.softronix.com/logo.html (Setup Kit) 1
Programmare una tartaruga MIT, anni 50: primi linguaggi per programmare piccoli robot (dalla forma di tartaruga); Seymour Papert, anni 60: introduce un linguaggio per fare programmare i robot dai bambini. Nasce il Logo. La tartaruga è rappresentata in MSWLogo da un triangolo: 2
L interfaccia di MSWLogo Tartaruga in posizione iniziale (home) Area di lavoro 3
L interfaccia di Logo Storia comandi eseguiti Linea comandi Logo 4
I primi comandi Forward n (fd); (n è un numero) Back n (bk); (idem) Left a (lt); (a è un angolo espresso in gradi) Right a (rt); (idem) Home; ClearScreen (cs); 5
Disegnare un quadrato Suddivisione del problema in sottoproblemi: 1. Disegnare il primo lato di 100 pixel; 2. Disegnare il secondo lato di 100 pixel; 3. Disegnare il terzo lato di 100 pixel; 4. Disegnare il quarto lato di 100 pixel; 5. Tornare alla condizione di partenza. 6
Un primo esempio: un quadrato 7
Il programma per disegnare un quadrato 1/ 79 1/ 79 1/ 79 420 8
Esercizi 1. Costruire un quadrato partendo dal lato più a destra (suggerimento: la costruzione avverrebbe in senso antiorario); 2. Disegnare un rettangolo con la base lunga 100 pixel e l altezza lunga 25 pixel; 3. Disegnare un triangolo equilatero (i.e., ha tutti i lati uguali ma anche tutti gli angoli uguali a 60 gradi); 4. Disegnare un triangolo isoscele; 5. Disegnare un pentagono; 9
Osservazione rt 120 fd 100 180 60 = 120 fd 100 rt 120 fd 100 120 10
Altri comandi importanti PenUp (PU); PenDown (PD); PenErase (PE); PenPaint (PPT); SetPenColor (list Red Green Blue); Bye. 11
Due quadrati concentrici Esercizio: Disegnare i quadrati riportati in figura 12
Due quadrati concentrici Suddivisione del problema in sottoproblemi: 1. Disegnare il primo quadrato (lato di 100 pixel); 2. Posizionarsi per il secondo quadrato; 3. Cambiare colore (rosso); 4. Disegnare il secondo quadrato (lato di 50 pixel); 5. Tornare alla condizione di partenza. 13
Due quadrati concentrici Primo quadrato: fd 100 rt 90 fd 100 rt 90 fd 100 home 14
Due quadrati concentrici fd 25 pd pu fd 25 rt 90 cambiamo colore: setpencolor (list 255 0 0) 15
Altri Colori 16
Due quadrati concentrici Secondo quadrato: fd 50 lt 90 fd 50 lt 90 fd 50 lt 90 fd 50 lt 90 Ritorno a casa: pu home pd 17
Il programma per disegnare due quadrati fd 100 rt 90 fd 100 rt 90 fd 100 home pu fd 25 rt 90 fd 25 pd setpencolor (list 255 0 0) fd 50 lt 90 fd 50 lt 90 fd 50 lt 90 fd 50 lt 90 pu home pd 18
Cicli iterativi: Repeat Sintassi: Repeat n [ comando1 comando2 ] Semantica: per un numero n di volte, vengono eseguiti i comandi tra parentesi quadre. 19
Esempi di cicli Disegnare un triangolo equilatero: repeat 3 [ fd 100 rt 120 ] Disegnare un pentagono: repeat 5 [ fd 100 rt 72 ] Disegnare un rettangolo 100x25: repeat 2 [ fd 100 rt 90 fd 25 rt 90 ] 20
Esercizi Disegnare un cerchio (sembra assurdo, ma ); Capire il seguente programma e cosa disegna prima ancora di eseguirlo: repeat 2 [ fd 100 pu rt 90 fd 25 rt 90 pd ] rt 90 repeat 2 [ fd 25 pu lt 90 fd 100 lt 90 pd ] lt 90 21
Funzioni e procedure Buona programmazione: Semplificare la leggibilità del codice; Ridurre la complessità; Creare moduli per ogni sottoproblema; Per ogni modulo, scrivere: Una procedura, oppure Una funzione (se si vuole un risultato in output). 22
Funzioni e procedure Un programma viene ad essere suddiviso in: una procedura principale (main) richiamata appena si esegue il programma una serie di procedure secondarie (i moduli) richiamate per essere eseguite dalla procedura principale o da altre procedure secondarie 23
Procedura Per ogni procedura abbiamo: Un nome (ad esempio: quadrato) Un codice (ad esempio: repeat 4 [ fd 100 rt 90 ] ) Una procedura viene chiamata utilizzando il suo nome. Prima di poter chiamare una procedura, dobbiamo definirla. 24
Definire una procedura: il nome To nome_procedura Ad esempio: definiamo la funzione quadrato: 25
Definire una procedura: il codice Scrivere il codice nella finestra che appare: Ad esempio: repeat 4 [ fd 100 rt 90 ] Quando il codice è finito, battere End e poi cliccare su OK. 26
Modificare una procedura: l editor Edit nome_procedura Ad esempio: Edit quadrato 27
Chiamare una procedura Scrivere il nome Esempio: quadrato Definizione Chiamata Informazione di MSWLogo sulla definizione Risultato della chiamata Invocato Editor della procedura 28
Due quadrati concentrici II Suddivione del problema in sottoproblemi: 1. Disegnare il primo quadrato (lato di 100 pixel); 2. Posizionarsi per il secondo quadrato; 3. Cambiare colore (rosso); 4. Disegnare il secondo quadrato (lato di 50 pixel); 5. Tornare alla condizione di partenza. 29
Due quadrati concentrici II Suddivisione in moduli (procedura principale): 1. Quadrato1 2. Posizionamento 3. Cambia_in_rosso 4. Quadrato2 5. My_home 30
Definizione: quadrato1 to quadrato1 end repeat 4 [ fd 100 rt 90 ] 31
Definizione: quadrato2 to quadrato2 end repeat 4 [ fd 50 rt 90 ] 32
Definizione: posizionamento to posizionamento pu fd 25 rt 90 fd 25 lt 90 pd end 33
Definizione: cambia_in_rosso to cambia_in_rosso end setpencolor (list 255 0 0) 34
Definizione: my_home to my_home pu home pd setpencolor (list 0 0 0) end 35
Definizione: procedura principale to main quadrato1 posizionamento cambia_in_rosso quadrato2 my_home end 36
Esecuzione del programma Battere main nella Commander Window di Logo. 37
Ricapitolando: un passo avanti verso Possibilità di generalizzare un programma: se volessi disegnare un quadrato di 125 e uno interno di 75 mi basta modificare le procedure quadrato1 e quadrato2 Suddivisione in moduli (procedure) che risolvono in maniera indipendente i sottoproblemi In maniera indipendente, i.e., la modifica di una procedura non deve influire sulle altre A tal fine è bene fare riferimento alle coordinate assolute 38
Salvare e Caricare un programma Save nome_file.lgo Esempio: save due_quadrati.lgo Load nome_file.lgo Esempio: load due_quadrati.lgo Oppure: File > Save as File > Load 39
Esercizio Disegnare la casa riportata in figura. Ricordare di: 1. Suddividere il problema in sottoproblemi; 2. Scrivere una procedura per ogni modulo; 3. Scrivere una procedura principale; 40
Osservazione È consigliabile scrivere delle procedure che contengano sempre la chiamata alla procedura my_home all inizio ed alla fine. Esempio: to quadrato end my_home repeat 4 [ fd 100 rt 90 ] my_home 41