IL COSTRUTTO ITERAZIONE -...

31
IL COSTRUTTO ITERAZIONE

Transcript of IL COSTRUTTO ITERAZIONE -...

Page 1: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

IL COSTRUTTO ITERAZIONE

Page 2: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Ragioniamo su questo esercizio

• Dati tre numeri farne la somma

• Modifichiamo il programma perché permetta di fare la somma di 1000 numeri.

Page 3: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Il costrutto iterazione

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.

Page 4: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

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.

Page 5: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

Page 6: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Il costrutto iterativo definito

• La struttura iterativa definita è un costrutto permette di ripetere un blocco di istruzioni non in base al valore di verità di una condizione, ma in base al numero di volte che si vuole ripetere il blocco.

• la condizione di arresto è indicata dal valore massimo che può raggiungere una variabile, denominata indice, utilizzata come contatore

• Errato dire deriva da precondizionale

Page 7: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Sintassi libro

Page 8: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Il For

• Sintassi del libro

• For(<iniz_indice; cond_perman;[<incremento>])

Page 9: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

Nel linguaggio C il costrutto iterazione definito si

implementa tramite l’istruzione for, che ha la

seguente sintassi:

for (istruzione 1; condizione; istruzione 2)

istruzione o blocco;

Viene eseguita solo una

volta all’inizio del ciclo

ATTENZIONE: Non mettere mai il ; dopo le (), altrimenti

l’istruzione o il blocco non saranno eseguiti.

Se la condizione è

vera si entra nel ciclo,

altrimenti si esce

Viene eseguita ad ogni

iterazione e solo se

condizione è vera

Page 10: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

for (i=0; i<5; i++)

istruzione o blocco;

i è una variabile

contatore. Deve essere

precedentemente

dichiarata e viene qui

inizializzata a 0

i<5 è una

condizione, la cui

verità viene

controllata ad

ogni iterazione. Se

la condizione è

vera si procede

con le istruzioni,

altrimenti si esce

dal ciclo.

i++ è una

istruzione di

incremento del

contatore.

Si può scrivere

anche i=i+1

Page 11: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

La condizione

La condizione può essere:

Una variabile singola if aritmetico,

Una proposizione elementare, costituita dal confronto,

mediante operatori relazionali, tra due variabili o due

espressioni,

Una proposizione articolata, costituita dalla

connessione di proposizioni elementari mediante

connettivi logici.

Page 12: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

Visualizzare i primi 5 numeri naturali.

Cout<<‘‘1, 2, 3, 4, 5’’;

oppure

for (i=1; i<6; i++)

cout<<i<<", ";

Sembra più semplice ma

… se dovessimo

visualizzare i primi 50000

numeri naturali?

Page 13: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

Visualizzare i primi 3 numeri naturali.

Eseguiamo il codice i condizione a video

for (i=1; i<4; i++)

cout<<i<<", ";

1 V 1

2 V 2

3 V 3

4 F

Page 14: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

Con lo standard C99, la variabile i può essere

dichiarata anche dentro il for.

In questo caso i non può essere usata al di fuori del for.

for (int i=0; i<5; i++)

cout<<i<<", ";

for (int i=0; i<5; i++)

cout<<"ciao ";

cout<<i;

int i;

for (i=0; i<5; i++)

cout<<"ciao ";

cout<<i;

Page 15: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

for (istruzione 1; condizione; istruzione 2)

istruzione o blocco;

Ciascuno dei termini presenti tra () può teoricamente

essere omesso e sostituito da costrutti analoghi.

istruzione1

for (; condizione; istruzione 2)

istruzione o blocco;

int i=0;

for (; i<5; i++)

cout<<i<<", ";

Page 16: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

for (istruzione 1; condizione; istruzione 2)

istruzione o blocco;

Ciascuno dei termini presenti tra () può teoricamente

essere omesso e sostituito da costrutti analoghi.

for (istruzione1; condizione;)

{istruzione 2;

istruzione o blocco;}

for (i=0; i<5;)

{i++;

printf(“%d ”,i);}

Page 17: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

for (istruzione 1; condizione; istruzione 2)

istruzione o blocco;

Ciascuno dei termini presenti tra () può teoricamente

essere omesso e sostituito da costrutti analoghi.

for (istruzione1;; istruzione 2)

{istruzione o blocco;

condizione

break;}

for (i=0;; i++)

{cout<<i<<", ";if (i>=5)

break;}

Page 18: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

for (istruzione 1; condizione; istruzione 2)

istruzione o blocco;

Ciascuno dei termini presenti tra () può teoricamente

essere omesso e sostituito da costrutti analoghi.

for (;;) E’ un ciclo infinito perché la

condizione è sempre verificata

ATTENZIONE: Anche quando si omette un termine tra () è

indispensabile mettere il ; per soddisfare la sintassi del for.

Page 19: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

for (istruzione 1; condizione; istruzione 2)

istruzione o blocco;

Ciascuno dei termini presenti tra () può teoricamente

essere omesso e sostituito da costrutti analoghi …

… ma è bene lasciare tutto dentro il for …

… e soprattutto è bene evitare i cicli infiniti!

Page 20: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

char a;

for (a=‘A’; a<=‘Z’; a++)

cout<<a<<" ";

float n;

for (n=0; n<=1; n=n+0,1)

cout<<n<<" ";

Page 21: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

L’istruzione for

int n;

for (n=10; n>=0; n--)

cout<<n<<" ";

int n;

for (n=0; n<=10; n=n+2)

cout<<n<<" ";

Page 22: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

Eseguire la somma dei primi 50 numeri naturali.

int n;

int somma=0;

for (n=1; n<=50; n++)

somma=somma+n;

cout<<somma<<" ";

accumulatore

Page 23: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

Stampare i numeri pari fino a n, con n acquisito da tastiera.

int n, i;

cout<<"Inserisci n ";

cin>>n;

for (i=0; i<=n; i++)

if (! (i%2))

cout<<i<<" ";

Page 24: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

int n,i;

cout<<"Inserisci n ";

cin>>n;

for (i=0; i<=n; i=i+2)

cout<<i<<" ";

Stampare i numeri pari fino a n, con n acquisito da tastiera.

Page 25: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esercizi Libro

• Creare un programma che somma n numeri inseriti dall’utente

• dati in input due numeri interi n>0 e K>0, stampare i primi n multipli di K

• dati in input due numeri interi n>0 e

K>0,stampare la somma k+k2k3+…kn

• dati cinque numeri visulizzare il maggiore di essi

Page 26: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esercizi dalle fotocopie del libro

• Dal 2 al 7

• 10,11

• Dal13 al 17

• 20,21,25,39,40,44

Page 27: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Esempio

Stampare la seguente figura:

* * *

* * *

* * *

int i,j;

for (i=0; i<3; i++)

{for(j=0; j<3; j++)

cout<<‘‘*’’;

cout<<‘‘\n’’;}

Page 28: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Primo esercizio

• Crea un programma che disegni un albero

*

***

*****

||

Page 29: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Secondo

• Il corso di informatica è seguito da N alunni. L’esame consiste di una prova, scritta o orale. Il professore ha deciso di verificare in quale prova gli studenti hanno maggior successo. Scrivere un algoritmo che inseriti in input:

– il tipo di verifica

– il voto della verifica

• Visualizzi:

– la media dei voti negli scritti

– la media dei voti negli orali

– il tipo di prova nel quale gli alunni conseguono, in media, una valutazione maggiore.

Page 30: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Terzo

• In una videoteca, in una settimana, sono state acquistate N (acquisito in input) videocassette. Il gestore ha deciso di verificare quante videocassette sono state vendute la mattina e quante la sera

• Scrivere un algoritmo che inseriti in input:

– il periodo di vendita (cioè se di sera o di mattina)

– il costo della videocassetta,

• visualizzi:

– quante videocassette sono state vendute di mattina,

– quante videocassette sono state vendute di sera,

– il guadagno complessivo dell’intera giornata.

Page 31: IL COSTRUTTO ITERAZIONE - ascanu.altervista.orgascanu.altervista.org/wp-content/uploads/2016/11/i-cicli.pdf · Tipologie di iterazione •Iterazione definita: si conosce a priori

Miglioramento

• Migliorare il secondo esercizio calcolando la media delle vendite effettuate in un mese

• Migliorare il terzo esercizio prevedendo la gestione di più gestori del gas (non si sanno a priori il numero) e calcolare il gestore che ha fornito più energia ai clienti.