IL COSTRUTTO ITERAZIONE – 2 -...

Post on 21-Feb-2019

244 views 0 download

Transcript of IL COSTRUTTO ITERAZIONE – 2 -...

IL COSTRUTTO ITERAZIONE – 2

Il costrutto iterativo e la potenza di calcolo

L’iterazione nella programmazione strutturata

Il costrutto iterativo (detto anche ciclo) 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:• il costrutto iterativo precondizionale;• il costrutto iterativo postcondizionale.

Tipologie di iterazione

● Iterazione definita: si conosce a priori quante volte l’azione elementare (o il blocco di istruzioni) verrà ripetuta. L’iterazione termina quando si è raggiunto il numero prefissato di ripetizioni.

● Iterazione condizionata: NON si conosce a priori quante volte l’azione elementare (o il blocco di istruzioni) verrà ripetuta. L’iterazione termina quando si verifica una certa condizione.

● Pre-condizionata: La condizione viene controllata prima delle istruzioni che quindi, potrebbero non essere mai eseguite.

● post-condizionata: La condizione viene controllata dopo le istruzioni, che quindi vengono eseguite almeno una volta.

Non si deve commette errore

veroC<3

C>=3

Ciclo Post condizionale Selezione

Non si deve commette errore

VeroC<3

Postcondizionale Precondizionale

C<3

Falso

Sintassi del libro - Precondizionato

Sintassi del libro - post

Attenzione

Quando usarli??

• Quando il blocco deve essere eseguito almeno una volta

• Quando il blocco uno potrebbe non essere mai eseguito

Il costrutto iterativo postcondizionale

L’iterazione nella programmazione strutturata

L’istruzione iterativa postcondizionale presenta notevoli differenze rispetto a quella precondizionale:

L’istruzione while

Nel linguaggio C il costrutto iterazione pre-condizionato si implementa tramite l’istruzione while, che ha la seguente sintassi:

while (condizione) istruzione o blocco;

ATTENZIONE: Non mettere mai il ; dopo le (), altrimenti l’istruzione o il blocco non saranno eseguiti.

Il controllo della condizione viene effettuato prima dell’inizio del ciclo.Se la condizione è vera si entra nel ciclo, altrimenti si esce

L’istruzione while

while (i<20) istruzione o blocco;

i<20 è una condizione, la cui verità viene controllata ad ogni iterazione. Se la condizione è vera si procede con le istruzioni, altrimenti si esce dal ciclo.

ATTENZIONE: In fase di scrittura del codice si deve sempre controllare che la condizione prima o poi venga soddisfatta, per evitare di cadere in cicli infiniti.

La condizione

La condizione può essere:

vUna variabile singola if aritmetico,

vUna proposizione elementare, costituita dal confronto, mediante operatori relazionali, tra due variabili o due espressioni,vvUna proposizione articolata, costituita dalla connessione di proposizioni elementari mediante connettivi logici.

Esempio

Simulare un registratore di cassa che calcoli l’importo finale di una spesa. Il costo dei singoli prodotti è inserito da tastiera e termina quando l’importo totale supera una cifra prefissata TOT.

float prezzo;float somma=0;while(somma<TOT)

{cin>>prezzo;somma=somma+prezzo;}

L’istruzione do while

Nel linguaggio C il costrutto iterazione post-condizionato si implementa tramite l’istruzione do while, che ha la seguente sintassi:

ATTENZIONE: Non mettere il ; dopo il do. E’ un errore di sintassi.

Il controllo della condizione è effettuato dopo l’inizio del ciclo.L’istruzione viene eseguita almeno una volta e poi viene

controllata la condizione.

doistruzione o blocco;

while (condizione);

L’istruzione do while

0 è una condizione ( if aritmetico), la cui verità viene controllata al termine della prima iterazione. Se la condizione è vera si procede

con le altre iterazioni, altrimenti si esce dal ciclo.

ATTENZIONE: In fase di scrittura del codice si deve sempre controllare che la condizione prima o poi venga soddisfatta, per evitare di cadere in cicli infiniti.

do{cout>>‘‘CIAO’’;}

while (0);

La condizione

La condizione può essere:

vUna variabile singola if aritmetico,

vUna proposizione elementare, costituita dal confronto, mediante operatori relazionali, tra due variabili o due espressioni,vvUna proposizione articolata, costituita dalla connessione di proposizioni elementari mediante connettivi logici.

Esempio

Eseguiamo il codice a video

do{cout>>‘‘CIAO’’;}

while (0);CIAO

Esempio

Inserire una sequenza di numeri interi. Terminare l’inserimento premendo 0.

int a;do

{cin>>a;}while(a);

Esempio

Eseguiamo il codice a

int a;do

{cin>>a};while(a);

0

Esempio

Inserire una sequenza di numeri interi. Terminare l’inserimento premendo 0. Calcolare la somma e la media della sequenza di numeri.

int a, somma, conta;float media;somma=conta=0;do

{cin>>a; somma=somma+a; conta++;}

while(a); media=(float)somma/conta;

Esempio

int a, somma, conta;float media;somma=conta=0;do

{cin>>a; somma=somma+a; conta++;}

while(a);

media=(float)somma/conta;

1 1 1

3 4 2

Eseguiamo il codice a somma conta

0 4 3

media 1,3

Esempio

int a, somma, conta;float media;somma=conta=0;do

{cin>>a; somma=somma+a; conta++;}

while(a);

media=(float)somma/(conta-1);

1 1 1

3 4 2

Aggiustiamo ed eseguiamo il codice: a somma conta

0 4 3

media 2

EsempioInserire una sequenza di numeri interi. Terminare l’inserimento premendo 0. Calcolare la somma e la media dei numeri maggiori di 5.

int a, somma, conta;float media;somma=conta=0;do

{cin>>a;if(a>5){somma=somma+a; conta++;}}

while(a); media=(float)somma/conta;

Esempio

int a, somma, conta;float media;somma=conta=0;do

{cin>>a;if(a>5){somma=somma+a; conta++;}}

while(a);

media=(float)somma/conta;

-1 0 0

3 0 0

Eseguiamo il codice a somma conta

0 0 0

media NaN

Esempio

int a, somma, conta;float media;somma=conta=0;do

{cin>>a;if(a>5){somma=somma+a; conta++;}

}while(a);

if(!conta)media=(float)somma/conta;

1 0 0

3 0 0

Aggiustiamo ed eseguiamo il codice: somma conta a

0 0 0

media

Esercizi1)Realizzare un algoritmo che,dati in input N numeri interi, ne determini la somma e il prodotto

2)Realizzare un algoritmo che data in input una soquenza di numeri chiusa da uno zero, determini la loro somma e la media

3)Realizzare un algoritmo che data in input una soquenza di numeri chiusa da uno zero, determini la loro somma e la media ma nel caso non sarà possibile inseire più di 50 numeri

Esercizi1)Realizzare un algoritmo che, data una sequenza di numeri, determini il massimo tra essi. Si esce dal ciclo quando si inserisce un numero negativo.

2)Realizzare un algoritmo che calcola la media dei voti di uno studente Non si sa a priori quanti voti verranno inseriti. Si inseriranno i voti finche l’utente non digita “S “come risposta alla domanda “ci sono altri voti”.

3)Dato un numero da tastiera, Somma tanti tre fino che non supera il numero dato. Visualizzare in output numero di questi 3

4)

Confronto 1● // costrutto do while● #include<iostream>● using namespace std;● int main(){● int num;● num=0;● do{● cout<<num<<" ";● num++;● }● while(num<10);● return 0; ● }

● // costrutto while● #include<iostream>● using namespace std;● int main(){● int num;● num=0;● while(num<10)● {● cout<<num<<" ";● num++;● }● return 0; ● }

● // costrutto for● #include<iostream>● using namespace std;● int main(){● int num;● for(num=0;num<10;num++)● {● cout<<num<<" ";● }● return 0; ● }

Confronto 2● // costrutto do while● #include<iostream>● using namespace std;● int main(){● int num;● char risp;● num=1;● do {● cout<<num<<endl;● num++;● cout<<"vuoi continuare (s/n)?";● cin>>risp;● }● while(risp!='n'); ● return 0; ● }

● // costrutto while prima versione● #include<iostream>● using namespace std;● int main(){● int num;● char risp;● num=1;● risp='s';● while(risp!='n')● {● cout<<num<<endl;● num++;● cout<<"vuoi continuare (s/n)? ";● cin>>risp;● }● return 0; ● }

● // costrutto while seconda versione● #include<iostream>● using namespace std;● int main(){● int num;● char risp;● num=1;● cout<<"vuoi iniziare (s/n)? ";● cin>>risp;● while(risp!='n')● {● cout<<num<<endl;● num++;● cout<<"vuoi continuare (s/n)? ";● cin>>risp;● }● return 0; ● }

Confronto - 3● // costrutto while 1● #include<iostream>● using namespace std;● int main(){● int voto,max;● max=-1000;● cout<<"inserire voto ";● cin>>voto;● while(voto>0)● {● if(max<voto)● {max=voto;} ● cout<<"inserire voto";● cin>>voto;● }● cout<<"il voto maggiore e'”;● cout<<max;● return 0; ● }

● // costrutto while 2● #include<iostream>● using namespace std;● int main(){● int voto,max;● cout<<"inserire voto ";● cin>>voto;● max=voto;● while(voto>0)● {● cout<<"inserire voto";● cin>>voto;● if(max<voto)● {max=voto;} ● }● cout<<"il voto maggiore e' “ ;

cout<<max;● return 0; ● }

● // costrutto do while 1● #include<iostream>● using namespace std;● int main(){● int voto,max;● max=-1000;● do{● cout<<"inserire voto";● cin>>voto;● if(max<voto)● {max=voto;} ● }● while(voto>0);● cout<<"il voto maggiore e'”;

cout<<max;● return 0; ● }

● // costrutto do while 2● #include<iostream>● using namespace std;● int main(){● int voto,max;● cout<<"inserire voto ";● cin>>voto;● max=voto;● do{● cout<<"inserire voto";● cin>>voto;● if(max<voto)● {max=voto;} ● }● while(voto>0);● cout<<"il voto maggiore e' “ ;

cout<<max;● return 0; ● }

Esercizi dal libro

•Pagina 341,342,343•N. 8, 18,•N. 26,27,31,32,34,36,37,•N. 41