Informatica 2 Liceo Scientifico Scienze Applicate/Istruzioni di Ripetizione: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m -a capo di troppo
Riga 1:
{{Informatica 2 Liceo Scientifico Scienze Applicate}}
'''Istruzioni cicliche/ripetizione'ripetizionè''
 
Le istruzioni che nel linguaggio C permettono di ripetere un blocco di istruzioni sono 3 :<br />
 
* istruzione FOR
Riga 9:
 
== L'istruzione FOR ==
L'istruzione FOR si utilizza quando si conosce a priori per quante volte il blocco di istruzioni deve essere ripetuto.<br />
 
Ad esempio lo possiamo usare in questi casi:<br />
 
* mescola per 20 volte le carte,
Riga 18:
* suona il campanello di tutte le case lungo la tua via.
 
La sintassi del comando e'è la seguente<br />
 
for ( inizializzazionecontatore; condizionediripetizione; aggiornamentocontatore)
Riga 27:
}
 
Il diagramma di flusso e'è il seguente<br />
[[File:Sintassi for.png|500px|sinistra|thumb|Sintassi for]]
 
Il comando viene eseguito in questo modo<br />
 
 
1) inizializzazionecontatore
2) verificacondizioneripetizione (se falsa l'istruzione for termina),se vera continuo con
3) esecuzione del blocco di istruzioni scritte fra graffe
Line 40 ⟶ 38:
 
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)<br />
facciamo un primo esempio (pensiamo che la variabile a valga inizialmente zero)<br />
 
for(i=1;i<11; i=i+1)
Line 49 ⟶ 47:
}
 
* il contatore e'è la variabile i che viene inizializzata con il valore 1
* la condizione di riptizione e'è invece che i<11
* l'istruzione per l'aggiornamento del contatore e'è invece i=i+1
* le istruzioni da ripetere sono quelle scritte fra grafe
 
il diagramma di flusso di questo esempio e'è il seguente<br />
[[File:Ciclo for esempio1.png|500px|sinistra|thumb|Esempio ciclo for]]<br />
 
la prima cosa che avviene (1) e'è 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)<br />
 
la seconda cosa che avviene (2) e'è 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<br />
 
la terza cosa che avviene (3) e'è l'esecuzione del blocco istruzioni
la prima cosa che avviene (1) e' 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)<br />
stampo la scritta il contatore vale epoi il valore del contatore cioe'cioè 1
 
la seconda cosa che avviene (2) e' 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<br />
 
la terza cosa che avviene (3) e' l'esecuzione del blocco istruzioni
stampo la scritta il contatore vale epoi il valore del contatore cioe' 1
incremento il valore di a (pensata inizialmente =0) del valore del contatore , a passa a uno
visualizzo la scritta a=1
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<br />
 
la quarta cosa che faccio (4) e' 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; )<br />
 
la quarta cosa che faccio (4) e'è 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; )<br />
dopo l'esecuzione del punto (4) aggiornamentocontatore si ritorna alla valutazione della condizione di ripetizione(2) il passo (1) invece non viene piu' ripetuto<br />
 
dopo l'esecuzione del punto (4) aggiornamentocontatore si ritorna alla valutazione della condizione di ripetizione(2) il passo (1) invece non viene piu' ripetuto<br />
 
la quinta cosa che avviene (2) e'è 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<br />
 
la sesta cosa che avviene (3) e'è l'esecuzione del blocco istruzioni
stampo la scritta il contatore vale e poi il valore del contatore cioe'cioè 2
incremento il valore di a ( a=a+i) del valore del contatore , a=1+2 e passa così a tre
visualizzo la scritta a=3
abbiamo appena fatto il secondo ciclo o seconda iterazione<br />
 
la settima cosa che faccio (4) e'è l'aggiornamento del contatore i=i+1 la variabile i adesso vale 3<br />
 
ora le cose si ripetono 3^ciclo 4^ciclo .... 10 ciclo (10<11)<br />
 
sullo schermo sono apparse le scritte <br />
ora le cose si ripetono 3^ciclo 4^ciclo .... 10 ciclo (10<11)<br />
 
 
sullo schermo sono apparse le scritte <br />
 
 
il contatore vale 1
Line 122 ⟶ 114:
 
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 e'è vera e l'istruzione for termina (passando cosi' alle istruzioni successive)<br />
 
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.<br />
 
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.<br />
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.<br />
 
L'istruzione for e'è estremamente flessibile e permette molte opzioni<br />
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.<br />
 
ci possono essere piu' variabili contatore ad esempio posso scrivere <br />
 
L'istruzione for e' estremamente flessibile e permette molte opzioni<br />
 
 
ci possono essere piu' variabili contatore ad esempio posso scrivere <br />
 
for(a=0,b=2; a<b ; a=a+1)
Line 140 ⟶ 129:
}
la lista dei contatori inizializzati usa come separatore la virgola a=0 , b=2 , c=3<br />
 
 
anche le espressioni di aggiornamento dei contatori possono essere piu' di una ad esempio<br />
 
anche le espressioni di aggiornamento dei contatori possono essere piu' di una ad esempio<br />
 
for(a=0,b=2; a<b ; a=a+3, b=b*2-1)
Line 151 ⟶ 138:
}
 
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 perche'perchè avvenga la ripetizione del ciclo<br />
 
for(i=0; i<10 , z<i*i ; i=i+1)
anche se io preferisco la piu' chiara <br />
 
for(i=0; (i<10)&&(z<i*i) ; i=i+1)
in questo caso l'operatore che unisce le diverse condizioni puo' essere anche un OR oppure posso negare una condizione<br />
 
 
di solito invece di scrivere<br />
i=i+1
si preferisce scrivere <br />
 
i++
 
l'aggiornamento del contatore puo' essere anche un decremento i=i-3<br />
 
nel caso i=i-1 si preferisce scrivere i--<br />
 
 
se le istruzioni da ripetere è una sola le parentesi graffe possono essere omesse<br />
 
se le istruzioni da ripetere è una sola le parentesi graffe possono essere omesse<br />
 
for(i=0;i<10;i++)
cout<<"Ciao Mondo"<<endl;
 
si puo' anche non scrivere l'inizializzazione del contatore <br />
 
 
Line 184 ⟶ 168:
cout<<"Ciao Mondo"<<endl;
 
notate che il ; e'è rimasto<br />
 
anche l'espressione di aggiornamento puo' essere omessa<br />
 
anche l'espressione di aggiornamento puo' essere omessa<br />
 
for(;i<10;)
Line 197 ⟶ 180:
cout<<"Ciao Mondo"<<endl;
 
se manca la condizione il ciclo (e in assenza di break o della famigerata istruzione goto) il ciclo for cicla indefinitivamente<br />
 
 
for(;;)
istruzionedaripetere
 
realizza un ciclo infinito (e non e'è una cosa rara da trovare)<br />
 
 
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)<br />
 
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.<br />
 
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.<br />
 
facciamo alcuni esempi per capire la differenza (pensiamo che a valga zero prima del for)<br />
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.<br />
 
facciamo alcuni esempi per capire la differenza (pensiamo che a valga zero prima del for)<br />
 
 
for(i=0;i<4;i++)
Line 223 ⟶ 203:
}
 
esegue il blocco di istruzioni per 4 volte stampando<br />
 
a=0
Line 237 ⟶ 217:
i=3
se lo modifico in <br />
 
 
Line 248 ⟶ 228:
}
 
stampa<br />
 
a=0
Line 258 ⟶ 238:
a=4
 
e il for termina (senza passare al ciclo successivo e neppure eseguire cout<<"i="<<i<<endl; e a=a+2;) perche'perchè viene eseguito il break
eseguire il break termina prematuramente il for <br />
 
se lo modifico in <br />
 
se lo modifico in <br />
 
for(i=0;i<4;i++)
Line 272 ⟶ 251:
}
 
stampa<br />
 
a=0
Line 285 ⟶ 264:
i=3
 
cioe'cioè quando viene eseguito il continue il ciclo in esecuzione si blocca non eseguendo le istruzioni cout<<"i="<<i<<endl; e a=a+2;<br />
 
passando all'aggiornamento del contatore e alla valutazione della condizione di ripetizione (per poi passare all'eventuale ciclo successivo)<br />
 
== L'istruzione WHILE ==
 
L'istruzione WHILE e'è anche lei una istruzione di ripetizione , usata per ripetere un blocco di istruzioni in funzione di una condizione.
Finche'Finchè la condizionediripetizione e'è vera il blocco di istruzioni viene ripetuto.<br />
 
Viene usata quando non conosco a priori il numero di ripetizioni e puo' anche verificarsi che il blocco di istruzioni non venga mai eseguito<br />
 
 
la sintassi e'<br />
 
la sintassi e'<br />è
 
while(condizionediripetizione)
Line 308 ⟶ 285:
 
[[File:Sintassi while.png|500px|sinistra|thumb|Sintassi while]]
in questo caso il diagramma di flusso dice <br />
 
1) valutiamo la condizione se non e'è verificata l'istruzione while termina altrimenti
2) si esegue il blocco di istruzioni e poi si ritorna a controllare la condizione(1) per eventuali ripetizioni
 
la valutazione della condizione avviene prima dell'eventuale esecuzione del blocco di istruzioni da ripetere, si dice che la condizione e'è in testa, questo comporta che se la condizione e ' subito falsa il blocco di istruzioni da ripetere non sia mai eseguito<br />
 
 
 
notiamo che non ha un contatore , ma se serve lo possiamo realizzare con una variabile e un po' di codice<br />
 
 
Line 330 ⟶ 305:
}
 
in questo esempio il contatore va bene ma non mi piace la condizione perche'perchè essendo noto a priori il numero di ripetizioni era meglio usare il for
<br /><br />
 
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<br />
 
se il blocco di istruzioni da ripetere e'è composto da una sola istruzione le graffe possono essere omesse<br />
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<br />
<br />
 
se il blocco di istruzioni da ripetere e' composto da una sola istruzione le graffe possono essere omesse<br />
 
 
== L'istruzione DO WHILE ==
L'istruzione DO WHILE e'è 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
a differenza del while la condizione e' posta in coda, cioe' viene valutata dopo che il blocco di istruzione e' stato ripetuto, sicuramente il blocco di istruzioni da ripetere viene allora eseguito la prima volta<br />
 
Viene usata quando non conosco a priori il numero di ripetizioni, e il blocco di istruzioni viene eseguito almeno una volta<br />
 
 
la sintassi e'<br />è
 
 
Line 360 ⟶ 331:
 
 
in questo caso il diagramma di flusso dice <br />
[[File:Sintassi do while.png|500px|sinistra|thumb|Sintassi do while]]
 
1) si esegue il blocco di istruzioni e poi si va a controllare la condizione(2)
2) valutiamo la condizione se non e'è verificata l'istruzione do-while termina altrimenti ritorniamo ala passo 1
 
notiamo che non ha un contatore , ma se serve lo possiamo realizzare con una variabile e un po' di codice<br />
 
notiamo che non ha un contatore , ma se serve lo possiamo realizzare con una variabile e un po' di codice<br />
il do while e' un'unica istruzione non pensate di poter usare il do senza un while (cioe' senza esplicitare la condizione di ripetizione)<br />
 
il do while e'è un'unica istruzione non pensate di poter usare il do senza un while (cioe'cioè senza esplicitare la condizione di ripetizione)<br />
 
e'è 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"<br />
[[Categoria:Informatica 2 Liceo Scientifico Scienze Applicate|Informatica Teorica]]
{{Avanzamento|100%|15 ottobre 2014}}