Esercizi in LOGO e Compiti Scritti

Transcript

Esercizi in LOGO e Compiti Scritti
ESERCIZI IN LOGO
&
COMPITI SCRITTI
ANNO ACCADEMICO 2002/2003
PROF. DOMENICO BENEVENTANO
MODALITÀ D’ESAME
L’esame consiste in una prova scritta formata da due parti:
La prima parte, da realizzare usando il programma MICROMONDI, consiste in esercizi del tipo
“Data una figura scrivere la procedura LOGO per ottenere tale figura”
La seconda parte, da realizzare senza usare il programma MICROMONDI, consiste in esercizi
del tipo
“Data una procedura LOGO disegnare la figura che si ottiene”
In queste dispsense prima vengono presentati alcuni esercizi, poi, a partire da pagina 10, ci sono
alcuni testi di esami scritti
1
Esercizio 1) Realizzare una procedura
per quadratocentro :lato
per disegnare un quadrato di un certo lato che ha come centro lo stato attuale della tartaruga
Soluzione:
Con l’istruzione ripeti 4 [av :lato de 90] siamo in grado di disegnare un quadrato partendo dall’angolo
inferiore sinistro, quindi si deve solo spostare opportunamente la tartaruga
per quadratocentro :lato
su
si 90 av :lato / 2
si 90 av :lato / 2
si 180
giu
ripeti 4 [av :lato de 90]
su
av :lato / 2 de 90
av :lato / 2 si 90
fine
Esercizio 2) Data la procedura
per quadratocentro :lato
della soluzione dell’esercizio 1), utilizzare tale procedura per scrivere le procedure
per rombocentro :latorombo
per disegnare un rombo con lato specificato dal parametro
per finestracentro :latofinestra
per disegnare una finestra con lato specificato dal parametro
Un rombo si ottiene ruotando un quadrato di 45 gradi verso destra o verso sinistra, quindi
per rombocentro :latorombo
de 45
quadratocentro :latorombo
si 45
fine
oppure
per rombocentro :latorombo
si 45
quadratocentro :latorombo
de 45
fine
Un finestra si può ottenere disegnando 4 quadrati;
Si disegna il primo quadrato (supponiamo di 100 / 2 ) e ci si sposta a destra di 100 / 2
2
quadratocentro 100 / 2
de 90
avanti 100 / 2
Ora si puo disegnare il secondo quadrato (anche se la tartaruga e’ diretta verso destra)
quadratocentro 100 / 2
de 90
avanti 100 / 2
Ora si puo’ disegnare il terzo quadrato
quadratocentro 100 / 2
de 90
avanti 100 / 2
Ed infine si puo’ disegnare il quarto quadrato, ottenendo la finestra
quadratocentro 100 / 2
de 90
avanti 100 / 2
Quindi una finestra con lato, latofinestra, si ottiene da 4 quadrati di lato latofinestra / 2
per finestracentro :latofinestra
ripeti 4 [quadratocentro :latofinestra / 2
de 90
avanti :latofinestra / 2
]
fine
3
Esercizio 3) Data la procedura dell’esercizio 1
per quadratocentro :lato
utilizzare tale procedura per scrivere la procedura
per duequadraticoncentrici :latoesterno
per disegnare due quadrati concentrici : il più esterno con lato pari al parametro latoesterno ed il secondo,
più interno, con lato pari alla metà
Soluzione:
La soluzione è semplice in quanto la procedura per quadratocentro :lato
dopo aver disegnato il primo quadrato lascia la tartaruga al centro e quindi si può disegnare l’altro quadrato
per duequadraticoncentrici :latoesterno
quadratocentro :latoesterno
quadratocentro :latoesterno / 2
fine
Si noti che nella procedura duequadraticoncentrici si sarebbe potuto utilizzare ancora un parametro con
nome lato (lo stesso nome utilizzato in quadratocentro
per duequadraticoncentrici :lato
quadratocentro :lato
quadratocentro :lato / 2
fine
Per una maggiore chiarezza e per non creare confusione è meglio comunque usare un parametro con nome
differente!
Esercizio 4) Data la procedura dell’esercizio 1
per quadratocentro :lato
utilizzare tale procedura per scrivere la procedura
per duequadraticoncentricipasso :latoesterno :passo
per disegnare due quadrati concentrici : il più esterno con lato pari al parametro latoesterno ed il secondo,
più interno, distanziato di un valore pari a :passo
Soluzione: Ricordiamo che quando la procedura per quadratocentro :lato viene chiamata possiamo
passare come parametro una qualsiasi espressione aritmetica quindi possiamo disegnare il secondo
quadrato interno tramite l’istruzione per quadratocentro :latoesterno - :passo
per duequadraticoncentricipasso :latoesterno :passo
quadratocentro :latoesterno
4
quadratocentro :latoesterno fine
:passo
Esercizio 5) Data la procedura dell’esercizio 1
per quadratocentro :lato
utilizzare tale procedura per scrivere la procedura
per trequadraticoncentricipasso :latoesterno :passo
per disegnare tre quadrati concentrici : il più esterno con lato pari al parametro latoesterno e gli altri
distanziati di un valore pari a :passo
Soluzione: Ricordiamo che quando la procedura per quadratocentro :lato viene chiamata per disegnare il
secondo quadrato, tramite l’istruzione per quadratocentro :latoesterno - :passo, il valore di :latoesterno
non cambia e quindi per disegnare il terzo quadrato dobbiamo fare
per quadratocentro :latoesterno - :passo - :passo
per trequadraticoncentricipasso :latoesterno :passo
quadratocentro :latoesterno
quadratocentro :latoesterno - :passo
quadratocentro :latoesterno - :passo - :passo
fine
Vediamo in che modo sia possibile passare ad una soluzione generica (un qualsiasi numero di lati
concentrici). Intuitivamente, occorre riportare in una istruzione ripeti l’istruzione
quadratocentro :latoesterno
Però con un lato da ealizzare variabile.
Quindi per prima cosa introduciamo una variabile all’interno della procedura, latoquadrato che di volta in
volta assume il valore del quadrato che si vuole disegnare
per trequadraticoncentricipasso2 :latoesterno :passo
assegna "latoquadrato :latoesterno
quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo
quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo
quadratocentro :latoquadrato
fine
In questo modo abbiamo individuato le istruzioni da ripetere e che quindi possono essere incluse nel
comando ripeti per essere effettuate tre volte
ripeti 3 [quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo]
Quindi
per trequadraticoncentricipasso3 :latoesterno :passo
5
assegna "latoquadrato :latoesterno
ripeti 3 [quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo]
fine
Vediamo più in dettaglio questa procedura, riportando esplicitamente le tre ripetizioni ottenute con il
comando ripeti:
assegna "latoquadrato :latoesterno
(*)
quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo
(A)
(B)
quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo
(C)
(D)
quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo
(E)
(F)
in (*) alla variabile “latoquadrato assegno il valore di :latoesternoi quindi il valore con il quale è stata
chiamata la procedura. Ad esempio, se si effettua la chiamata (nella finestra comandi)
trequadraticoncentricipasso3 100 10
in (*) “latoquadrato vale 100.
Quindi in (A) disegno il primo quadrato con lato pari a 100: infatti l’istruzione equivale a
quadratocentro 100
In (B) assegno a “latoquadrato il nuovo valore ottenuto dal vecchio valore (100) meno il passo (10), cioè
90. Quindi in (C) disegno il secondo quadrato con lato pari a 90 : infatti l’istruzione equivale a
quadratocentro 90
In (D) assegno a “latoquadrato il nuovo valore ottenuto dal vecchio valore (90) meno il passo (10), cioè 80.
Quindi in (E) disegno il secondo quadrato con lato pari a 80 : infatti l’istruzione equivale a
quadratocentro 80
Si noti che l’ultimo assegnamento in più , quello indicato con (F) non produce alcun effetto (dopo non si
usa più latoquadrato).
6
Esercizio 6) Prendendo spunto dalla procedura dell’esercizio 5
per trequadraticoncentricipasso3 :latoesterno :passo
scrivere una procedura
per quadraticoncentrici :quanti :latoesterno :passo
per disegnare :quanti quadrati concentrici : il più esterno con lato pari al parametro latoesterno e gli altri
distanziati di un valore pari a :passo
Soluzione: E’ sufficiente riscrivere la procedura trequadraticoncentricipasso3
introducendo anche il parametro :quanti e usando tale parametro nel
comando ripeti
per quadraticoncentrici :quanti :latoesterno :passo
assegna "latoquadrato :latoesterno
ripeti :quanti [quadratocentro :latoquadrato
assegna "latoquadrato :latoquadrato - :passo]
fine
Nota : si può non introdurre la variabile latoquadrato e modificare direttamente il parametro
:latoesterno (si consiglia però di usare la precedente versione perché’ più semplice):
per quadraticoncentrici :quanti :latoesterno :passo
ripeti :quanti [quadratocentro :latoesterno
assegna "latoesterno :latoesterno - :passo]
fine
Esercizio facoltativo – istruzione se) Si consideri la procedura
per quadraticoncentrici :quanti :latoesterno :passo
per disegnare :quanti quadrati concentrici : il più esterno con lato pari al parametro latoesterno e gli altri
distanziati di un valore pari a :passo. Quale controllo si può inserire per evitare disegni senza senso? Si
noti infatti che ripetendo l’istruzione
assegna "latoesterno :latoesterno - :passo
si può arrivare a disegnare un quadrato con lato negativo
quadratocentro -20
Soluzione:
per quadraticoncentrici :quanti :latoesterno :passo
se :quanti * :passo < :latoesterno
[ripeti :quanti [quadratocentro :latoesterno
assegna "latoesterno :latoesterno - :passo]]
fine
7
Esercizio 7) Data la procedura
per quadratocentro :lato
della soluzione dell’esercizio 1), riscrivere tale procedura utilizzando un’altra procedura per lo
spostamento sulle diagonali
Soluzione
per diagonale :quadrante :lato
su
se :quadrante = 1 [de 90 av :lato si 90 av :lato]
se :quadrante = 2 [de 90 av :lato de 90 av :lato si 180]
se :quadrante = 3 [si 90 av :lato si 90 av :lato si 180]
se :quadrante = 4 [si 90 av :lato de 90 av :lato]
fine
Quindi possiamo riscrivere la procedura quadratocentro utilizzando la procedura diagonale (per semplicità
in quadratocentro utilizziamo un nome diverso per il lato del quadrato)
per quadratocentro :latoquadr
quadrante 3 :latoquadr / 2
giu
ripeti 4 [av :lato de 90]
quadrante 1 :latoquadr / 2
fine
Esercizio 8) Usare la procedura
per diagonale :quadrante :lato
e la seguente procedura che disegna un quadrato partendo dall’angolo basso sinistro
per quadrato :latoquadrato
per (ri)scrivere la procedura
per quadraticoncentrici :quanti :latoesterno :passo
per disegnare :quanti quadrati concentrici : il più esterno con lato pari al parametro latoesterno e gli altri
distanziati di un valore pari a :passo
Soluzione: Si disegna il quadrato più esterno e poi ci si sposta sulla diagonale di un valore pari a passo
utilizzando la procedura diagonale
8
Data la procedura
per quadratocentro :lato :spessore
su
si 90 av :lato / 2
si 90 av :lato / 2
si 180
giu
daispessorelinea :spessore
ripeti 4 [av :lato de 90]
daispessorelinea 1
su
av :lato / 2 de 90
av :lato / 2 si 90
fine
Scrivere la procedura
per cornici :latoesterno
:numero
Esempio cornici 100 4
9
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !!!!
Matricola, Nome e Cognome :
NOTA: QUESTA PARTE VIENE SVOLTA SU MICROMONDI
Data la procedura
per triangolocentro :lato
su
indietro :lato / 2
giu
ripeti 3 [av :lato de 120]
su
av :lato / 2
fine
Esercizio 1) Utilizzare la procedura triangolocentro per scrivere la procedura
per procedura1 :L :N
che realizza il disegno in figura 1 (la tartaruga deve ritornare nel punto di partenza).
Si noti che :L è il lato del triangolo e :N è il numero di triangoli da fare.
Utilizzare l’istruzione RIPETI.
Esercizio 2) Utilizzare la procedura triangolocentro per scrivere la procedura
per procedura2 :L :N
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
Si noti che :L è il lato del triangolo e :N è il numero di triangoli da fare.
Il lato del triangolo interno deve decrescere di 10 ogni volta
Utilizzare l’istruzione RIPETI e ASSEGNA
Esercizio 3) Utilizzare la procedura triangolocentro per scrivere la procedura
per procedura3LEGGI
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
prendendo i valori del lato L e del passo P dalla tastiera tramite i comandi DOMANDA e
RISPOSTA
10
Figura 1
Figura 2
11
SOLUZIONE
per procedura1 :L :N
ripeti :N [triangolocentro :L
av :L
]
indietro :N * :L
fine
per procedura2 :L :N
ripeti :N [triangolocentro :L
assegna "L :L - 10
]
fine
per procedura3LEGGI
domanda [Lato iniziale L ?]
assegna "L risposta
domanda [Quanti triangoli N ?]
assegna "N risposta
ripeti :N [triangolocentro :L
assegna "L :L - 10
]
fine
12
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !!!!
Matricola, Nome e Cognome :
NOTA: QUESTA PARTE VIENE SVOLTA SENZA MICROMONDI
Esercizio 1) Date le procedure
PER PROCEDURA1 :LATO
GIU
SI 45
RIPETI 4 [AV :LATO DE 90]
DE 45
SU
FINE
PER PROCEDURA2 :N :L
RIPETI :N [PROCEDURA1 :L SI 90]
FINE
PER PROCEDURA3 :N :L
ASSEGNA "X :L
RIPETI :N [PROCEDURA1 :X ASSEGNA "X
FINE
:X
- 10]
1) Disegnare la figura che viene realizzato tramite il seguente comando
PROCEDURA1 100
2) Disegnare la figura che viene realizzato tramite il seguente comando
PROCEDURA2 4 50
3) Disegnare la figura che viene realizzato tramite il seguente comando
PROCEDURA3 4 100
4) (facoltativo) Riscrivere la PROCEDURA2 senza usare al suo interno PROCEDURA1.
13
SOLUZIONE
PROCEDURA1 100
PROCEDURA2 4 50
PER PROCEDURA2 :N :L
RIPETI :N [
GIU
SI 45
RIPETI 4 [AV :L DE 90]
DE 45
SU
SI 90]
FINE
PROCEDURA3 4 100
14
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !
Matricola, Nome e Cognome :
Data la procedura
per triangolo :lato
giu
ripeti 3 [av :lato de 120]
su
fine
Esercizio 1) Utilizzare la procedura triangolo per scrivere la procedura
per procedura1 :L
che realizza il disegno in figura 1 (la tartaruga deve ritornare nel punto di partenza).
Utilizzare l’istruzione RIPETI.
Esercizio 2) Utilizzare la procedura triangolo per scrivere la procedura
per procedura2 :L :P
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
Utilizzare l’istruzione RIPETI e ASSEGNA
Esercizio 3) Utilizzare la procedura triangolo per scrivere la procedura
per procedura3LEGGI
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
prendendo i valori del lato L e del passo P dalla tastiera tramite i comandi DOMANDA e
RISPOSTA
15
Figura 1
Figura 2
16
SOLUZIONE
Consideriamo ad esempio L=50: con ripeti 3
[triangolo 50 av 50] otteniamo
quindi basta far girare verso sinistra di 90 la tartaruga e ripetere ripeti 3
50]
[triangolo 50 av
Ora e’ chiara la soluzione:
per procedura1 :L
ripeti 4 [ ripeti 3
[triangolo :L
si 90
]
av :L ]
fine
17
per procedura2 :L :P
ripeti 3 [ triangolo :L
avanti :L
assegna "L :L - :P
]
fine
Oppure
per procedura2 :L :P
assegna "Lato :L
ripeti 3 [ triangolo :Lato
avanti :Lato
assegna "Lato :Lato - :P
]
fine
Si noti che per far tornare la tartaruga al punto di partenza, bisogna calcolarsi il totale degli spostamenti in
avanti e poi alla fine tornare indietro
per procedura2 :L :P
assegna "TotaleAv 0
ripeti 3 [ triangolo :L
avanti :L
assegna " TotaleAv :TotaleAv + :L
assegna "L :L - :P
]
indietro :TotaleAv
fine
18
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !!!
Matricola, Nome e Cognome :
Data la procedura
per quadratocentro :lato
su
si 90 av :lato / 2
si 90 av :lato / 2
si 180
giu
ripeti 4 [av :lato de 90]
su
av :lato / 2 de 90
av :lato / 2 si 90
fine
lato
Esercizio 1) Utilizzare la procedura quadratocentro per scrivere la procedura
per procedura1 :L
che realizza il disegno in figura 1 (la tartaruga deve ritornare nel punto di partenza).
Utilizzare l’istruzione RIPETI.
Esercizio 2) Utilizzare la procedura quadratocentro per scrivere la procedura
per procedura2 :L :P
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
Utilizzare l’istruzione RIPETI e ASSEGNA
Esercizio 3) Utilizzare la procedura quadratocentro per scrivere la procedura
per procedura3LEGGI
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
prendendo i valori del lato L e del passo P dalla tastiera tramite i comandi DOMANDA e
RISPOSTA
19
Figura 1
Figura 2
20
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !!!!
Matricola, Nome e Cognome :
Esercizio 1) Date le procedure
PER PROCEDURA1 :LATO
GIU
SI 45
RIPETI 4 [AV :LATO DE 90]
DE 45
SU
FINE
PER PROCEDURA2 :N :L
RIPETI :N [PROCEDURA1 :L SI 90]
FINE
PER PROCEDURA3 :N :L
ASSEGNA "X :L
RIPETI :N [PROCEDURA1 :X ASSEGNA "X
FINE
:X
- 10]
1) Disegnare la figura che viene realizzato tramite il seguente comando
PROCEDURA1 100
2) Disegnare la figura che viene realizzato tramite il seguente comando
PROCEDURA2 4 100
3) Disegnare la figura che viene realizzato tramite il seguente comando
PROCEDURA3 4 100
4) (facoltativo) Riscrivere la PROCEDURA2 senza usare al suo interno PROCEDURA1.
21
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !
Matricola, Nome e Cognome :
Data la procedura
per triangolo :lato
giu
ripeti 3 [av :lato de 120]
su
fine
Esercizio 1) Utilizzare la procedura triangolo per scrivere la procedura
per procedura1 :L
che realizza il disegno in figura 1 (la tartaruga deve ritornare nel punto di partenza).
Utilizzare l’istruzione RIPETI.
Esercizio 2) Utilizzare la procedura triangolo per scrivere la procedura
per procedura2 :L :P
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
Utilizzare l’istruzione RIPETI e ASSEGNA
Esercizio 3) Utilizzare la procedura triangolo per scrivere la procedura
per procedura3LEGGI
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
prendendo i valori del lato L e del passo P dalla tastiera tramite i comandi DOMANDA e
RISPOSTA
Figura 1
22
Figura 2
23
IMPORTANTE: COMPILARE E CONSEGNARE QUESTO FOGLIO !!!
Matricola, Nome e Cognome :
Data la procedura
per quadratocentro :lato
su
si 90 av :lato / 2
si 90 av :lato / 2
si 180
giu
ripeti 4 [av :lato de 90]
su
av :lato / 2 de 90
av :lato / 2 si 90
fine
lato
Esercizio 1) Utilizzare la procedura quadratocentro per scrivere la procedura
per procedura1 :L
che realizza il disegno in figura 1 (la tartaruga deve ritornare nel punto di partenza).
Utilizzare l’istruzione RIPETI.
Esercizio 2) Utilizzare la procedura quadratocentro per scrivere la procedura
per procedura2 :L :P
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
Utilizzare l’istruzione RIPETI e ASSEGNA
Esercizio 3) Utilizzare la procedura quadratocentro per scrivere la procedura
per procedura3LEGGI
che realizza il disegno in figura 2 (non è necessario che la tartaruga ritornari nel punto di partenza)
prendendo i valori del lato L e del passo P dalla tastiera tramite i comandi DOMANDA e
RISPOSTA
24
Figura 1
Figura 2
25
Disegnare le figure che vengono realizzate tramite con le seguenti procedure
PER PROCEDURA1 :X :Y
GIU
RIPETI :X [AV :Y DE 360 / :X]
SU
FINE
PER PROCEDURA2 :A :B
RIPETI 4 [PROCEDURA1 :B :A
FINE
DE 90]
PER PROCEDURA3 :Q :P :N
ASSEGNA "H :Q
RIPETI :N [RIPETI 4 [PROCEDURA1 :P :H
ASSEGNA "H :H - 10]
FINE
DE 90]
26