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