Piccolo manuale di LibreLogo/Ripetere cicli e loops: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Iamarf (discussione | contributi)
Iamarf (discussione | contributi)
Riga 54:
L = 50mm<nowiki>; lato del </nowiki>poligono
'''N = 5<nowiki>; </nowiki>Numero di lati'''
'''A = 360/N<nowiki>; angolo internodi deviazione</nowiki>'''
FORWARD L RIGHT A
FORWARD L RIGHT A
Riga 63:
|}
 
Sarà facile ora divertirsi a vedere come vengono poligoni con più lati. I calcoli li fa tutti il computer, si devono solo aggiungere istruzioni '''FORWARD L RIGHT A''', tante quanti sono il numero deii lati: 3 per il triangolo equilatero, 4 per il quadrato, 5 per il pentagono, 6 per l'esagono e così via. Fino a quando? Finché ci pare, la matematica non pone limiti all'immaginazione. Ma la realtà sì: presto, andando avanti in una simile sperimentazione, incorreresti in un problema. In realtà ce ne possiamo accorgere anche solo guardando le figure che abbiamo appena costruito. Cosa cambia, oltre al numero dei lati, passando dal poligono a 3 lati a quello a 4, e quindi a quello a 5? Prova a immaginare, oppure prova tu stesso in un documento nuovo, copiando il codice qui sopra e eseguendolo con diversi valori di N.
 
Vado a pagina nuova per lasciarti il tempo di pensare o provare.
Riga 76:
'''N = 10<nowiki>; </nowiki>Numero di lati'''
'''L = P/N<nowiki>; Lunghezza lato</nowiki>'''
'''A = 360/N<nowiki>; angolo internodi deviazione</nowiki>'''
FORWARD L RIGHT A
FORWARD L RIGHT A
Riga 90:
|}
 
Soddisfacente no? Anche perché così stiamo mettendo a frutto l'utilità delle variabili (pag. 26), che forse alla prima non ci era parsa così chiara. Qui il fatto è evidente: possiamo inserire i dati numerici indispensabili e poi far calcolare i parametri derivati attraverso formule che utilizzano variabili simboliche. Una bella generalizzazione! Ma non siamo soddisfatti, a dire il vero. Infatti, per conseguire il nostro obiettivo di un un programma che disegni un poligono regolare qualsiasi siamo costretti a fare una cosa “sporca”: ci tocca inserire a mano tante nuove istruzioni '''FORWARD L RIGHT A''' quanti sono i lati. Funziona, ma non è “elegante”, e l'eleganza in matematica, come nella ''computer science'', non di rado si traduce in chiarezza, in maggiore facilità di risolvere problemi successivi. E qual è qui il nostro problema? Quello di dover riscrivere, o copia-incollare, più volte la stessa identica istruzione: qualcosa che stride con la bell'idea di immaginare poligoni regolari qualsivoglia... e qui vengono i “cicli”.
 
In tutti i linguaggi di programmazione esistono costrutti che consentono di ripetere più volte una stessa sequenza di istruzioni. Anzi, in tutti i linguaggi esistono più modi per ripetere sequenze di istruzioni, anche in LibreLogo! Qui, il costrutto più semplice è il seguente:
Riga 101:
N = 10<nowiki>; </nowiki>Numero di lati
L = P/N<nowiki>; Lunghezza lato</nowiki>
A = 360/N<nowiki>; </nowiki>Angolo internodi deviazione
'''REPEAT N ['''
'''FORWARD L RIGHT A'''
Riga 108:
|}
 
Abbiamo introdotto la novità brutalmente, all'interno di un problema, approfittando del fatto che in questo problema ci siamo già entrati (sperabilmente), e quindi confidando che il vantaggio sia più chiaro. I cicli in LibreLogo si possono realizzare con l'istruzione '''REPEAT''', come nell'esempio precedente. Avremmo potuto anche scrivere '''REPEAT 10 [ FORWARD 20 RIGHT 36 ]''': tutte le istruzioni che compaiono fra parentesi vengono ripetute tante volte quanto indicato dal numero dopo '''REPEAT''', '''10''' in questo caso. Poiché “all'interno di un '''REPEAT'''” possono essere incluse anche motemolte istruzioni, queste possono essere anche incolonnate, scrivendo '''REPEAT [''' nella prima riga, ponendo le varie istruzioni da ripetere nelle righe sottostanti e scrivendo la parentesi quadra di chiusura ''']''' nell'ultima riga, come abbiamo fatto nell'esempio del decagono e nei successivi che seguono. In tutti questi esempi abbiamo anche usato le variabili, per indicare il numero di ripetizioni e gli argomenti degli spostamenti e dei mutamenti di direzione. Questo ci consente di sperimentare il codice con parametri diversi, molto facilmente, per esempio per costruire poligoni con più lati. Vediamo per esempio come viene con 20 lati...
 
{| class="wikitable"
Riga 117:
N = 20<nowiki>; </nowiki>Numero di lati
L = P/N<nowiki>; Lunghezza lato</nowiki>
A = 360/N<nowiki>; angolo internodi deviazione</nowiki>
'''REPEAT N ['''
'''FORWARD L RIGHT A'''
Riga 160:
<nowiki>; </nowiki>valore di questi numeri vedi pag. 29 e seg.
POSITION [380, 110+('''REPCOUNT'''-1)*70]
HEADING 0<nowiki>; </nowiki>punto in all'inizio di ogni pol.
PENDOWN<nowiki>; calo la penna</nowiki>
<nowiki>;</nowiki>Disegno il poligono