# Informatica 2 Liceo Scientifico Scienze Applicate/Istruzioni di Ripetizione

Informatica 2 Liceo Scientifico Scienze Applicate
Copertina Tutti i moduli · Sviluppo
* Linguaggi di programmazioneInformatica 2 Liceo Scientifico Scienze Applicate/Linguaggi di programmazione
* Compilare un programmaInformatica 2 Liceo Scientifico Scienze Applicate/Compilare un programma
* CiaoMondoInformatica 2 Liceo Scientifico Scienze Applicate/CiaoMondo
* AreaRettangoloInformatica 2 Liceo Scientifico Scienze Applicate/AreaRettangolo
* AreaTrapezioInformatica 2 Liceo Scientifico Scienze Applicate/AreaTrapezio
** Compito1Informatica 2 Liceo Scientifico Scienze Applicate/Compito1
* Programmazione ImperativaInformatica 2 Liceo Scientifico Scienze Applicate/Programmazione Imperativa
* Diagrammi di FlussoInformatica 2 Liceo Scientifico Scienze Applicate/Diagrammi di Flusso
* Operatori AritmeticiInformatica 2 Liceo Scientifico Scienze Applicate/Operatori Aritmetici
* Istruzione ifInformatica 2 Liceo Scientifico Scienze Applicate/Istruzione if
** Esercizio Equazione 2^ gradoInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Equazione 2^ grado
** Esercizio Calcola lo ScontoInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Calcola lo Sconto
** Esercizio Calcola lo Sconto2Informatica 2 Liceo Scientifico Scienze Applicate/Esercizio Calcola lo Sconto2
* Operatori LogiciInformatica 2 Liceo Scientifico Scienze Applicate/Operatori Logici
** Esercizio x interno all'intervalloInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio x interno all'intervallo
** Esercizio x esterno all'intervalloInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio x esterno all'intervallo
* Istruzione switchInformatica 2 Liceo Scientifico Scienze Applicate/Istruzione switch
** Esercizio Scelta EquazioneInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Scelta Equazione
* Altre Istruzioni di Scelta o DiramazioneInformatica 2 Liceo Scientifico Scienze Applicate/Altre Istruzioni di Scelta o Diramazione
* Istruzioni di RipetizioneInformatica 2 Liceo Scientifico Scienze Applicate/Istruzioni di Ripetizione
** Es (do-while) Indovina il numeroInformatica 2 Liceo Scientifico Scienze Applicate/Es (do-while) Indovina il numero
** Es (while) La nonna è stancaInformatica 2 Liceo Scientifico Scienze Applicate/Es (while) La nonna è stanca
** Es (for) Somma di 5 numeriInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Somma di 5 numeri
** Es (for) Analisi sequenza datiInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Analisi sequenza dati
** Es (for) Sequenze NumericheInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Sequenze Numeriche
** Es (for) SupermarketInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Supermarket
** Es (while) Bisca ClandestinaInformatica 2 Liceo Scientifico Scienze Applicate/Es (while) Bisca Clandestina
* Compito2Informatica 2 Liceo Scientifico Scienze Applicate/Compito2
* I vettoriInformatica 2 Liceo Scientifico Scienze Applicate/I vettori
** Es Usiamo i vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es Usiamo i vettori
** Es2 Usiamo i vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es2 Usiamo i vettori
** Es3 Supermarket con vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es3 Supermarket con vettori
** Compito dic 2019Informatica 2 Liceo Scientifico Scienze Applicate/Compito dic 2019
** BubbleSortInformatica 2 Liceo Scientifico Scienze Applicate/BubbleSort
** Ricerca DicotomicaInformatica 2 Liceo Scientifico Scienze Applicate/Ricerca Dicotomica
* Matrici e ArrayInformatica 2 Liceo Scientifico Scienze Applicate/Matrici e Array
** Es matrici battaglia navaleInformatica 2 Liceo Scientifico Scienze Applicate/Es matrici battaglia navale
** Es matrici 1Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 1
** Es matrici 2Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 2
* PuntatoriInformatica 2 Liceo Scientifico Scienze Applicate/Puntatori
* StructInformatica 2 Liceo Scientifico Scienze Applicate/Struct
** Es Bubble Sort con StructInformatica 2 Liceo Scientifico Scienze Applicate/Es Bubble Sort con Struct
* FunzioniInformatica 2 Liceo Scientifico Scienze Applicate/Funzioni
* Funzioni Void e non VoidInformatica 2 Liceo Scientifico Scienze Applicate/Funzioni Void e non Void
** esercizi1 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi1 funzioni
** esercizi2 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi2 funzioni
** esercizi3 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi3 funzioni
* BacktrackingInformatica 2 Liceo Scientifico Scienze Applicate/Backtracking
* TemplateInformatica 2 Liceo Scientifico Scienze Applicate/Template
* FileInformatica 2 Liceo Scientifico Scienze Applicate/File
** File di TestoInformatica 2 Liceo Scientifico Scienze Applicate/File di Testo
** File BinariInformatica 2 Liceo Scientifico Scienze Applicate/File Binari
** File RecordsInformatica 2 Liceo Scientifico Scienze Applicate/File Records
** Es FilesInformatica 2 Liceo Scientifico Scienze Applicate/Es Files
* Esercizi VacanzeInformatica 2 Liceo Scientifico Scienze Applicate/Esercizi Vacanze
** Esercizi1Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi1
** Esercizi2Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi2
** Esercizi3Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi3
* Olimpiadi Informatica
** NobileChimicoInformatica 2 Liceo Scientifico Scienze Applicate/NobileChimico
** Sunnydale
** MappaAnticaInformatica 2 Liceo Scientifico Scienze Applicate/MappaAntica
Modifica il sommario
'Istruzioni cicliche/ripetizionè
Le istruzioni che nel linguaggio C permettono di ripetere un blocco di istruzioni sono 3 :
* istruzione FOR
* istruzione WHILE
* istruzione DO WHILE

## L'istruzione FOR

L'istruzione FOR si utilizza quando si conosce a priori per quante volte il blocco di istruzioni deve essere ripetuto.
Ad esempio lo possiamo usare in questi casi:
* mescola per 20 volte le carte,
* fai 50 passi lungo la linea,
* per ogni compagno della tua classe scrivi il nome sul registro,
* suona il campanello di tutte le case lungo la tua via.
La sintassi del comando è la seguente
Il diagramma di flusso è il seguente
Il comando viene eseguito in questo modo
L'istruzione for oltre a ripetere le istruzioni fra graffe, aggiorna una variabile detta contatore ad ogni ciclo (generalmente il contat re parte da zero e ad ogni ciclo viene incrementato di uno) facciamo un primo esempio (pensiamo che la variabile a valga inizialmente zero)
* il contatore è la variabile i che viene inizializzata con il valore 1
* la condizione di riptizione è invece che i<11
* l'istruzione per l'aggiornamento del contatore è invece i=i+1
* le istruzioni da ripetere sono quelle scritte fra grafe
il diagramma di flusso di questo esempio è il seguente
la prima cosa che avviene (1) è che il contatore i viene posto a 1 (di solito invece parte da zero) (il nome del contatore lo decidete voi, di solito per comodita' vengono usate le variabili i,J, K)
la seconda cosa che avviene (2) è la valutazione della condizione di ripetizione (i<11) visto che i attualmente vale 1 1<11 da come risultato vero si procede allora alla ripetizione del blocco di istruzioni
la terza cosa che avviene (3) è l'esecuzione del blocco istruzioni
l'esecuzione del blocco di istruzioni viene comunemente indicata come esecuzione del ciclo o iterazione, abbiamo appena fatto il primo ciclo o la prima iterazione
la quarta cosa che faccio (4) è l'aggiornamento del contatore i=i+1 la variabile i adesso vale 2 (l'aggiornamento del contatore di solito avviene con un incremento unitario ma potevo benissimo scrivere i=i+7; )
dopo l'esecuzione del punto (4) aggiornamentocontatore si ritorna alla valutazione della condizione di ripetizione(2) il passo (1) invece non viene piu' ripetuto
la quinta cosa che avviene (2) è la la valutazione della condizione di ripetizione (i<11) visto che i attualmente vale 2 2<11 da come risultato vero si procede allora alla ripetizione del blocco di istruzioni stiamo eseguendo il secondo ciclo
la sesta cosa che avviene (3) è l'esecuzione del blocco istruzioni
abbiamo appena fatto il secondo ciclo o seconda iterazione
la settima cosa che faccio (4) è l'aggiornamento del contatore i=i+1 la variabile i adesso vale 3
ora le cose si ripetono 3^ciclo 4^ciclo .... 10 ciclo (10<11)
sullo schermo sono apparse le scritte
ora dopo aver eseguito il decimo ciclo eseguo la (4) aggiornamento del contatore e i si porta a 11 passo alla valutazione della condizione (2) ma ora la condizione 11<11 non è vera e l'istruzione for termina (passando cosi' alle istruzioni successive)
Da questo esempio si deduce che abbiamo ripetuto per dieci volte il blocco di istruzione e che ad ogni ciclo abbiamo avuto a disposizione una variabile detta contatore che ha assunto via via i valori 1,2,3,4,5 etc fino a 10.
alla fine del decimo ciclo il contatore ha assunto il valore 11 e questo ha comportato che la condizione di ripetizione diventasse false provocando l'interruzione del ciclo.
L'istruzione for è estremamente flessibile e permette molte opzioni
ci possono essere piu' variabili contatore ad esempio posso scrivere
la lista dei contatori inizializzati usa come separatore la virgola a=0 , b=2 , c=3
anche le espressioni di aggiornamento dei contatori possono essere piu' di una ad esempio
posso avere anche una lista di condizioni di ripetizione , le diverse condizioni sono congiunte fra loro dall'operatore AND e quindi devono essere tutte verificate perché avvenga la ripetizione del ciclo
anche se io preferisco la piu' chiara
in questo caso l'operatore che unisce le diverse condizioni puo' essere anche un OR oppure posso negare una condizione
di solito invece di scrivere
si preferisce scrivere
l'aggiornamento del contatore puo' essere anche un decremento i=i-3
nel caso i=i-1 si preferisce scrivere i--
se le istruzioni da ripetere è una sola le parentesi graffe possono essere omesse
si puo' anche non scrivere l'inizializzazione del contatore
notate che il ; è rimasto
anche l'espressione di aggiornamento puo' essere omessa
se manca la condizione il ciclo (e in assenza di break o della famigerata istruzione goto) il ciclo for cicla indefinitivamente
realizza un ciclo infinito (e non è una cosa rara da trovare)
Ci sono 2 istruzioni particolari break e continue che inserite nel blocco di istruzioni da ripetere hanno dei riflessi importanti nel funzionamento del ciclo ( e piu' in generale per il break nelle diverse istruzioni cicliche)
il break se eseguito nelle istruzioni da ripetere provoca l'immediata terminazione del for (fouriuscita dal for) senza che i cicli successivi vengano eseguiti e neppure le istruzioni poste nel blocco di istruzioni da ripetere ma che si trovano dopo l'esecuzione del break.
l'istruzione continue non provoca l'interruzione del for ma l'immediato passaggio all'aggiornamento del contatore e la successiva verifica della condizione di ripetizione (detto brevemente il continue fa passare al ciclo successivo), le istruzioni che si dovessero trovare all'interno del blocco di istruzione da eseguire ma dopo l'esecuzione del continue non vengono eseguite.
facciamo alcuni esempi per capire la differenza (pensiamo che a valga zero prima del for)
esegue il blocco di istruzioni per 4 volte stampando
se lo modifico in
stampa
e il for termina (senza passare al ciclo successivo e neppure eseguire cout<<"i="<<i<<endl; e a=a+2;) perché viene eseguito il break eseguire il break termina prematuramente il for
se lo modifico in
stampa
cioè quando viene eseguito il continue il ciclo in esecuzione si blocca non eseguendo le istruzioni cout<<"i="<<i<<endl; e a=a+2;
passando all'aggiornamento del contatore e alla valutazione della condizione di ripetizione (per poi passare all'eventuale ciclo successivo)

## L'istruzione WHILE

L'istruzione WHILE è anche lei una istruzione di ripetizione , usata per ripetere un blocco di istruzioni in funzione di una condizione. Finché la condizionediripetizione è vera il blocco di istruzioni viene ripetuto.
Viene usata quando non conosco a priori il numero di ripetizioni e puo' anche verificarsi che il blocco di istruzioni non venga mai eseguito
la sintassi è
in questo caso il diagramma di flusso dice
la valutazione della condizione avviene prima dell'eventuale esecuzione del blocco di istruzioni da ripetere, si dice che la condizione è in testa, questo comporta che se la condizione e ' subito falsa il blocco di istruzioni da ripetere non sia mai eseguito
notiamo che non ha un contatore , ma se serve lo possiamo realizzare con una variabile e un po' di codice
in questo esempio il contatore va bene ma non mi piace la condizione perché essendo noto a priori il numero di ripetizioni era meglio usare il for
se però la condizione dipende da un dato scelto e inserito dall'utente (premi c per continuare t per terminare) allora il while va benissimo
se il blocco di istruzioni da ripetere è composto da una sola istruzione le graffe possono essere omesse

## L'istruzione DO WHILE

L'istruzione DO WHILE è anche lei una istruzione di ripetizione , usata per ripetere un blocco di istruzioni in funzione di una condizione. A differenza del while la condizione è posta in coda, cioè viene valutata dopo che il blocco di istruzione è stato ripetuto, sicuramente il blocco di istruzioni da ripetere viene allora eseguito la prima volta
Viene usata quando non conosco a priori il numero di ripetizioni, e il blocco di istruzioni viene eseguito almeno una volta
la sintassi è
in questo caso il diagramma di flusso dice
notiamo che non ha un contatore , ma se serve lo possiamo realizzare con una variabile e un po' di codice
il do while è un'unica istruzione non pensate di poter usare il do senza un while (cioè senza esplicitare la condizione di ripetizione)
è importante saper usare tutte e tre le istruzioni a secondo dei casi, non fate fare tutto il lavoro al for , anche se "ha le spalle larghe"