L'iterazione determinata in Java
L'iterazione determinata è solo con pre-condizione e consiste in un blocco di istruzioni da
ripetere
un
determinato numero di volte, fino a quando la condizione, valutata prima delle istruzioni da
iterare, risulta vera.
Graficamente è rappresentata dallo schema che segue:
In Java, l'iterazione determinata è tradotta attraverso le istruzioni che seguono:
// il ciclo determinato for di Java accorpa
// l'eventuale dichiarazione della variabile contatore (int i),
// la sua inizializzazione (i = 0),
// il suo incremento (i++ o i = i + 1 o i += 1)
// e la condizione di iterazione (i < n)
for (int i = 0; i < n; i++) {
// sequenza di istruzioni
// da iterare n volte
}
Lo schema a blocchi ed il codice sopra corrispondono alla definizione classica di
iterazione determinata, ossia con valore iniziale del contatore uguale a zero (i = 0), valore
finale
uguale ad n-1 (condizione i < n) ed incremento della variabile contatore, ad
ogni iterazione, pari ad uno (i++).
Ovviamente, questo non è l'unico modo o l'unica logica in cui è possibile utilizzare una
iterazione determinata. Ci possono essere, infatti, numerose altre implementazioni
dell'iterazione determinata, che realizzano altre logiche di risoluzione di problemi differenti.
Di seguito riporto un paio di esempi di utilizzo, che risolvono due problemi tipici.
Esempio 1: Stampa della tabellina del 5
// Questo esempio di codice stampa la tabellina del 5
// in questo modo:
// 5 - 10 - 15 - 20 - 25 - 30 - 35 - 40 - 45 - 50 -
// Notare:
// - l'inizializzazione della variabile i al primo valore da stampare, ossia 5,
// - la condizione i <= 50, notare l'uso dell'operatore <= per includere
// l'ultimo valore della tabellina, in alternativa avremmo potuto scrivere i < 51
// - l'incremento di 5 ad ogni iterazione, i+=5
for (int i = 5; i <= 50; i+=5) {
System.out.print(i + " - ");
}
// se non volessimo stampare il trattino di separazione dopo
// l'ultimo numero, in quanto non ne seguono altri, potremmo
// aggiungere una condizione, come mostrato di seguito
for (int i = 5; i <= 50; i+=5) {
if (i != 50) { // se non sono giunto all'ultima iterazione
// stampo il numero seguito dal trattino di separazione
// e resto sulla stessa riga (usando print)
System.out.print(i + " - ");
} else {
// altrimenti, all'ultima iterazione, stampo solo il numero
// senza il trattino a seguire ed uso println per
// concludere la riga della tabellina ed andare a capo
// in modo che eventuali altre stampe successive
// avvengano sulla riga successiva
System.out.println(i);
}
}
Esempio 2: Stampa della sequenza di numeri da 10 a 1, in ordine
decrescente
// Questo esempio di codice stampa i numeri da 10 a 1
// in questo modo:
// 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 -
// Notare:
// - l'inizializzazione della variabile i al primo valore da stampare, ossia 10,
// - la condizione i > 0, notare l'uso dell'operatore maggiore (i > 0),
// in alternativa avremmo potuto anche scrivere i >= 1
// - il decremento della variabile ad ogni iterazione (i--)
for (int i = 10; i > 0; i--) {
System.out.print(i + " - ");
}
// anche questa volta, se non volessimo stampare il trattino di
// separazione dopo l'ultimo numero, per la stessa ragione
// dell'esempio precedente, potremmo aggiungere una condizione,
// come mostrato di seguito
for (int i = 10; i > 0; i--) {
if (i != 1) { // se non sono giunto all'ultima iterazione
// stampo il numero seguito dal trattino di separazione
// e resto sulla stessa riga (usando print)
System.out.print(i + " - ");
} else {
// altrimenti, all'ultima iterazione, stampo solo il numero
// senza il trattino a seguire ed uso println per
// concludere la riga della sequenza ed andare a capo
// in modo che eventuali altre stampe successive
// avvengano sulla riga successiva
System.out.println(i);
}
}
Esempio 3: Stampa della tabellina del 5 in ordine decrescente
// Questo esempio di codice stampa la tabellina del 5
// in ordine decrescente, come mostrato di seguito:
// 50 - 45 - 40 - 35 - 30 - 25 - 20 - 15 - 10 - 5 -
// Notare:
// - l'inizializzazione della variabile i al primo valore da stampare, ossia 50,
// - la condizione i >= 5, notare l'uso dell'operatore >= per includere
// l'ultimo valore della tabellina, in alternativa avremmo potuto scrivere i > 0
// - il decremento di 5 ad ogni iterazione, i-=5
for (int i = 50; i >= 5; i-=5) {
System.out.print(i + " - ");
}
// se non volessimo stampare il trattino di separazione dopo
// l'ultimo numero, in quanto non ne seguono altri, potremmo
// aggiungere una condizione, come mostrato di seguito
for (int i = 50; i >= 5; i-=5) {
if (i != 5) { // se non sono giunto all'ultima iterazione
// stampo il numero seguito dal trattino di separazione
// e resto sulla stessa riga (usando print)
System.out.print(i + " - ");
} else {
// altrimenti, all'ultima iterazione, stampo solo il numero
// senza il trattino a seguire ed uso println per
// concludere la riga della tabellina ed andare a capo
// in modo che eventuali altre stampe successive
// avvengano sulla riga successiva
System.out.println(i);
}
}
