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/
Le istruzioni che nel linguaggio C permettono di ripetere un blocco di istruzioni sono 3 :
* 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.
Ad esempio lo possiamo usare in questi casi:
* mescola per 20 volte le carte,
Riga 18:
* suona il campanello di tutte le case lungo la tua via.
La sintassi del comando
for ( inizializzazionecontatore; condizionediripetizione; aggiornamentocontatore)
Riga 27:
}
Il diagramma di flusso
[[File:Sintassi for.png|500px|sinistra|thumb|Sintassi for]]
Il comando viene eseguito in questo modo
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)
facciamo un primo esempio (pensiamo che la variabile a valga inizialmente zero)
for(i=1;i<11; i=i+1)
Line 49 ⟶ 47:
}
* il contatore
* la condizione di riptizione
* l'istruzione per l'aggiornamento del contatore
* le istruzioni da ripetere sono quelle scritte fra grafe
il diagramma di flusso di questo esempio
[[File:Ciclo for esempio1.png|500px|sinistra|thumb|Esempio ciclo for]]
la prima cosa che avviene (1)
la seconda cosa che avviene (2)
▲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
▲ 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
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)
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
la quinta cosa che avviene (2)
la sesta cosa che avviene (3)
stampo la scritta il contatore vale e poi il valore del contatore
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
la settima cosa che faccio (4)
▲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
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.
▲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 />
▲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
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
for(i=0; i<10 , z<i*i ; i=i+1)
anche se io preferisco la piu' chiara
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
di solito invece di scrivere
i=i+1
si preferisce scrivere
i++
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<br />▼
for(i=0;i<10;i++)
cout<<"Ciao Mondo"<<endl;
si puo' anche non scrivere l'inizializzazione del contatore
Line 184 ⟶ 168:
cout<<"Ciao Mondo"<<endl;
notate che il ;
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
for(;;)
istruzionedaripetere
realizza un ciclo infinito (e non
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.
▲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
a=0
Line 237 ⟶ 217:
i=3
se lo modifico in
Line 248 ⟶ 228:
}
stampa
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;)
eseguire il break termina prematuramente il for
▲se lo modifico in <br />
for(i=0;i<4;i++)
Line 272 ⟶ 251:
}
stampa
a=0
Line 285 ⟶ 264:
i=3
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
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 e'<br />▼
while(condizionediripetizione)
Line 308 ⟶ 285:
[[File:Sintassi while.png|500px|sinistra|thumb|Sintassi while]]
in questo caso il diagramma di flusso dice
1) valutiamo la condizione se non
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
notiamo che non ha un contatore , ma se serve lo possiamo realizzare con una variabile e un po' di codice
Line 330 ⟶ 305:
}
in questo esempio il contatore va bene ma non mi piace la condizione
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
▲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 />
== L'istruzione DO WHILE ==
L'istruzione DO WHILE
Viene usata quando non conosco a priori il numero di ripetizioni, e il blocco di istruzioni viene eseguito almeno una volta
la sintassi
Line 360 ⟶ 331:
in questo caso il diagramma di flusso dice
[[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
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
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
[[Categoria:Informatica 2 Liceo Scientifico Scienze Applicate|Informatica Teorica]]
{{Avanzamento|100%|15 ottobre 2014}}
|