CAPITOLO 12 - ALGORITMI (MODELLI ITERAZIONE) IL COSTRUTTO ITERAZIONE Il costrutto iterazione (o iterativo) viene utilizzato quando un’istruzione (o un gruppo di istruzioni) deve essere eseguita, finché non si verifica una determinata condizione. Nella programmazione strutturata vengono utilizzati due costrutti iterativi, ma, prima di enunciarli dettagliatamente, facciamo qualche esempio per comprendere bene la loro utilità. Supponiamo di dover scrivere un algoritmo, che restituisca la somma di tre numeri A,B,C. Acquisiamo dall’esterno i valori di A, B, C, li sommiamo e visualizziamo il risultato. E se avessimo dovuto fare la somma di 100 numeri? Avremmo utilizzato 100 variabili? Avremmo realizzato l’algoritmo seguente? Certamente no!!! Per risolvere problemi di questo tipo, in cui un’azione o un gruppo di azioni devono essere ripetute un certo numero di volte, conviene utilizzare il costrutto iterazione. 1 CAPITOLO 12 - ALGORITMI (MODELLI ITERAZIONE) COSTRUTTO ITERAZIONE CON CONTROLLO IN TESTA (WHILE) MODALITA’ DI FUNZIONAMENTO: Durante la sua esecuzione si valuta la <condizione> e se è vera si eseguono le istruzioni del ciclo; una volta terminate, si ritorna a valutare la condizione del ciclo. Se la condizione è falsa ( e prima o poi dovrà succedere altrimenti si verifica un ciclo infinito) il ciclo termina e l’algoritmo passa all’istruzione immediatamente successiva presente nella strada del falso. MODELLO 1: “DATI N NUMERI….” (CICLO DEFINITO) Tutti gli esercizi che presentano la dicitura “Dati N numeri….” o che necessitano di eseguire un numero N finito di ripetizioni possono essere risolti con la seguente struttura ciclica: Tralasciando per il momento i blocchi evidenziati in rosso, contenenti istruzioni caratteristiche per la soluzione del problema dato (vedere la sezione Tipologia di problemi richiesti, più avanti in questo capitolo per le istruzioni da inserirvi), tutto il resto permette di richiedere all’utente il numero di numeri da inserire e, successivamente, procedere al loro effettivo inserimento. 2 CAPITOLO 12 - ALGORITMI (MODELLI ITERAZIONE) L’algoritmo si basa sul confronto tra il numero di cicli effettuati (utilizzo della variabile C come contatore) e il numero di cicli da effettuare (contenuto della variabile N ). Nell’algoritmo precedente la variabile C veniva inizialmente impostata a 1; a volte può essere utile iniziare il conteggio da zero, se ciò fosse necessario ricordarsi di modificare anche la condizione impostata nel ciclo passandola da (C<=N) a (C<N). MODELLO 2: “DATA UNA SEQUENZA DI NUMERI TERMINANTE CON ZERO….” (CICLO INDEFINITO) Tutti gli esercizi che presentano la dicitura “Dati una sequenza di numeri terminante con zero….” possono essere risolti con la seguente struttura ciclica: Questo algoritmo può funzionare solamente quando il numero 0 non fa parte dei numeri validi della sequenza (il numero zero diventa un numero di controllo). Come si può notare, infatti, tutte le volte che un numero viene inserito in input immediatamente dopo lo si confronta con lo zero: se il test da esito negativo il numero viene utilizzato nelle operazioni per la determinazione del risultato (numero valido) altrimenti ne provoca l’immediata fine (numero di controllo). Attenzione: Lo zero potrebbe essere sostituito con qualsiasi altro numero e l’algoritmo continuerebbe ad essere valido. Si pensi, ad esempio, ad un programma che, data una sequenza di temperature, debba calcolarne la media. In questo caso, la temperatura zero non sarebbe possibile 3 CAPITOLO 12 - ALGORITMI (MODELLI ITERAZIONE) inserirla perché provocherebbe il termine del ciclo ma essa stessa è una temperatura valida. In questo caso nasce la necessità di indentificare un altro numero come elemento di controllo al posto dello zero utilizzato in precedenza. Considerando che in natura non esiste una temperatura più bassa dello zero assoluto (-273°C) si potrebbe chiedere all’utente di inserire -999 per manifestare la sua volontà di terminare e non lo zero. (-999 diventerebbe un numero di controllo mentre zero diventerebbe un numero valido). Rispetto all’algoritmo “Dati N Numeri..” l’utente può decidere di terminare in qualsiasi momento la sequenza dei numeri semplicemente inserendo il numero di controllo; non conoscendo a priori quando l’utente vorrà terminare si dice che questo ciclo è un ciclo indefinito. MODELLO 3: “CHIEDENDO ALL’UTENTE LA VOLONTA’ DI CONTINUARE OPPURE NO….” (CICLO INDEFINITO) Tutti gli esercizi che presentano la dicitura “chiedendo all’utente la volontà di continuare oppure no ….” possono essere risolti con la seguente struttura ciclica: Questo algoritmo costituisce una valida alternativa al modello 2 quando non è possibile definire nella sequenza un numero di controllo ma sono tutti numeri validi. Ovviamente risulta più oneroso di input rispetto al precedente. 4 CAPITOLO 12 - ALGORITMI (MODELLI ITERAZIONE) COSTRUTTO ITERAZIONE ( CICLO FOR) MODALITA’ DI FUNZIONAMENTO: Il ciclo FOR consente di gestire in automatico una variabile che gli viene assegnata (nel nostro esempio i). La variabile assumerà tutti i valori compresi tra due valori specificati nell’istruzione (valore iniziale/ valore finale). Il valore della variabile passerà dal valore iniziale al valore finale con l’incremento di un passo. Il passo, se non specificato, vale 1. ATTENZIONE: QUESTO CICLO PUO’ ESSERE UTILIZZATO SOLO QUANDO GLI ESERCIZI PRESENTANO LA DICITURA “DATI N NUMERI….” (CICLO DEFINITO) 5 CAPITOLO 12 - ALGORITMI (MODELLI ITERAZIONE) TIPOLOGIA DI PROBLEMI RICHIESTI Solitamente i problemi che si possono incontrare in abbinamento ad una serie di numeri chiesti in input all’utente sono: Somma o Prodotto Conteggio Minimo o Massimo In generale, ad ogni risultato richiesto dal problema si assegna una variabile che dovrà avere un valore iniziale (Blocco1), sulla variabile si effettueranno delle operazioni (Blocco 2), e alla fine, visualizzando il contenuto della variabile, si visualizzerà il risultato del problema. Lo schema successivo schematizza, in modo dettagliato, i blocchi necessari per la soluzione delle varie problematiche che andranno sostituiti nei modelli visti nel paragrafo precedente. Variabile associata Blocco 1 Somma Prodotto Conteggio Minimo Max somma prod cont min max Blocco 2 Blocco 3 6