I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH,...

252
1 I COMANDI IF , WHILE E FOR Cosimo Laneve

Transcript of I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH,...

Page 1: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

1

I COMANDI IF, WHILE E FOR

Cosimo Laneve

Page 2: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

2

ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3)

Page 3: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

2

ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3)

1. i comandi if-then-else e if-then

Page 4: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

2

ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3)

1. i comandi if-then-else e if-then

2. il comando while

Page 5: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

2

ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3)

1. i comandi if-then-else e if-then

2. il comando while

3. il comando for

Page 6: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

2

ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3)

1. i comandi if-then-else e if-then

2. il comando while

3. il comando for

4. esempi/esercizi

Page 7: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

3

CASO DI STUDIO: TIPOLOGIA DI CARATTERE

Page 8: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

3

CASO DI STUDIO: TIPOLOGIA DI CARATTERE

scrivere un programma che prende in input un carattere e stampa

“carattere numerico” se è una cifra“simbolo” altrimenti

Page 9: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

3

CASO DI STUDIO: TIPOLOGIA DI CARATTERE

scrivere un programma che prende in input un carattere e stampa

“carattere numerico” se è una cifra“simbolo” altrimenti

algoritmo:

Page 10: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

3

CASO DI STUDIO: TIPOLOGIA DI CARATTERE

scrivere un programma che prende in input un carattere e stampa

“carattere numerico” se è una cifra“simbolo” altrimenti

algoritmo: 1. prendere in input un carattere

Page 11: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

3

CASO DI STUDIO: TIPOLOGIA DI CARATTERE

scrivere un programma che prende in input un carattere e stampa

“carattere numerico” se è una cifra“simbolo” altrimenti

algoritmo: 1. prendere in input un carattere2. se il carattere è compreso tra '0' e '9' allora stampa

“carattere numerico”

Page 12: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

3

CASO DI STUDIO: TIPOLOGIA DI CARATTERE

scrivere un programma che prende in input un carattere e stampa

“carattere numerico” se è una cifra“simbolo” altrimenti

algoritmo: 1. prendere in input un carattere2. se il carattere è compreso tra '0' e '9' allora stampa

“carattere numerico”3. altrimenti stampa “simbolo”

Page 13: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

Page 14: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

permette di effettuare una scelta tra diversi comandi alternativi da eseguire

Page 15: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

permette di effettuare una scelta tra diversi comandi alternativi da eseguire• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

Page 16: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

permette di effettuare una scelta tra diversi comandi alternativi da eseguire• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

sintassi: if (condition) statementT else statementF

Page 17: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

permette di effettuare una scelta tra diversi comandi alternativi da eseguire• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

sintassi: if (condition) statementT else statementF

ramo then

Page 18: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

permette di effettuare una scelta tra diversi comandi alternativi da eseguire• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

sintassi: if (condition) statementT else statementF

ramo then ramo else

Page 19: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

4

COMANDI CONDIZIONALI/IF-THEN-ELSE

permette di effettuare una scelta tra diversi comandi alternativi da eseguire• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

sintassi: if (condition) statementT else statementF

esempio: if ((x >= '0') && (x <= ‘9'))

cout << "carattere numerico" ;

else cout << "simbolo" ;

ramo then ramo else

Page 20: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDI CONDIZIONALI/IF-THEN-ELSE

Page 21: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

semantica: if (condition) statementT else statementF

COMANDI CONDIZIONALI/IF-THEN-ELSE

Page 22: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

semantica: if (condition) statementT else statementF

1. valuta la condizione

COMANDI CONDIZIONALI/IF-THEN-ELSE

condition

Page 23: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

semantica: if (condition) statementT else statementF

1. valuta la condizione2. se il risultato è true esegue l’istruzione che segue la

condizione (ramo then)

COMANDI CONDIZIONALI/IF-THEN-ELSE

conditiontrue

statementT

Page 24: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

semantica: if (condition) statementT else statementF

1. valuta la condizione2. se il risultato è true esegue l’istruzione che segue la

condizione (ramo then)3. se il risultato è false esegue l’istruzione che segue la

parola else (ramo else)

COMANDI CONDIZIONALI/IF-THEN-ELSE

conditiontrue false

statementT statementF

Page 25: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

Page 26: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

operatori relazionali:< (minore di) > (maggiore di) <= (minore o uguale a) >= (maggiore o uguale a)

Page 27: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

operatori relazionali:< (minore di) > (maggiore di) <= (minore o uguale a) >= (maggiore o uguale a)

operatori di uguaglianza:== (uguale a) != (diverso da)

Page 28: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

operatori relazionali:< (minore di) > (maggiore di) <= (minore o uguale a) >= (maggiore o uguale a)

operatori di uguaglianza:== (uguale a) != (diverso da)

operatori logici: && (and) || (or) ! (not)

Page 29: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

operatori relazionali:< (minore di) > (maggiore di) <= (minore o uguale a) >= (maggiore o uguale a)

operatori di uguaglianza:== (uguale a) != (diverso da)

operatori logici: && (and) || (or) ! (not)

tabella di verità di &&

op1 op2 op1 && op2

false false falsefalse true falsetrue false falsetrue true true

Page 30: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

operatori relazionali:< (minore di) > (maggiore di) <= (minore o uguale a) >= (maggiore o uguale a)

operatori di uguaglianza:== (uguale a) != (diverso da)

operatori logici: && (and) || (or) ! (not)

tabella di verità di &&

op1 op2 op1 && op2

false false falsefalse true falsetrue false falsetrue true true

tabella di verità di ||

op1 op2 op1 || op2

false false falsefalse true truetrue false truetrue true true

Page 31: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI

operatori relazionali:< (minore di) > (maggiore di) <= (minore o uguale a) >= (maggiore o uguale a)

operatori di uguaglianza:== (uguale a) != (diverso da)

operatori logici: && (and) || (or) ! (not)

tabella di verità di &&

op1 op2 op1 && op2

false false falsefalse true falsetrue false falsetrue true true

tabella di verità di ||

op1 op2 op1 || op2

false false falsefalse true truetrue false truetrue true true

tabella di verità di !

op1 !op1

false truetrue false

Page 32: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - PROBLEMI

Page 33: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - PROBLEMI

• la seguente espressione esprime la condizione “x e' compreso tra min e max”?

min <= x <= max

Page 34: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - PROBLEMI

• la seguente espressione esprime la condizione “x e' compreso tra min e max”?

min <= x <= max

• la seguente espressione esprime la condizione “x e y sono maggiori di z”?

x && y > z

Page 35: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - PROBLEMI

• la seguente espressione esprime la condizione “x e' compreso tra min e max”?

min <= x <= max

• la seguente espressione esprime la condizione “x e y sono maggiori di z”?

x && y > z

• la seguente espressione esprime la condizione “x è uguale a 1.0 oppure a 3.0” ?

x == 1.0 || 3.0

Page 36: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - COMPLEMENTO

Page 37: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - COMPLEMENTO• il complemento (!) di una condizione formata da un solo

operatore relazionale (o di uguaglianza) può essere effettuato cambiando l’operatore:

- !(x==y) equivale a x!=y- !(x <= y) equivale a x > y

Page 38: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - COMPLEMENTO• il complemento (!) di una condizione formata da un solo

operatore relazionale (o di uguaglianza) può essere effettuato cambiando l’operatore:

- !(x==y) equivale a x!=y- !(x <= y) equivale a x > y

• il complemento di condizioni con && e || si ottiene usando le leggi di De Morgan:

- !(expr1 && expr2) equivale a !expr1 || !expr2- !(expr1 || expr2) equivale a !expr1 && !expr2

Page 39: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CONDIZIONI - COMPLEMENTO• il complemento (!) di una condizione formata da un solo

operatore relazionale (o di uguaglianza) può essere effettuato cambiando l’operatore:

- !(x==y) equivale a x!=y- !(x <= y) equivale a x > y

• il complemento di condizioni con && e || si ottiene usando le leggi di De Morgan:

- !(expr1 && expr2) equivale a !expr1 || !expr2- !(expr1 || expr2) equivale a !expr1 && !expr2

• l’operatore ! può rendere le espressioni difficili da comprendere: usarlo solamente quando è necessario!

Page 40: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

9

LA SEQUENZA DI COMANDI

Page 41: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

9

LA SEQUENZA DI COMANDIun comando è la combinazione di singoli comandi in un’unica struttura logica- assegnamento- sequenza- condizionale- iterazione

Page 42: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

9

LA SEQUENZA DI COMANDIun comando è la combinazione di singoli comandi in un’unica struttura logica- assegnamento- sequenza- condizionale- iterazione

sequenza di comandi: gruppo di istruzioni racchiuse tra graffe ed eseguite sequenzialmente

{ statement-1 ;statement-2 ;...statement-n ;

}

il controllo passa da statement-i a statement-(i+1) quando statement-i termina

Page 43: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

9

LA SEQUENZA DI COMANDIun comando è la combinazione di singoli comandi in un’unica struttura logica- assegnamento- sequenza- condizionale- iterazione

sequenza di comandi: gruppo di istruzioni racchiuse tra graffe ed eseguite sequenzialmente

{ statement-1 ;statement-2 ;...statement-n ;

}

il controllo passa da statement-i a statement-(i+1) quando statement-i termina

le parentesi graffe consentono il

raggruppamento

Page 44: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

10

SEQUENZA DI COMANDI E IF

Page 45: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

10

SEQUENZA DI COMANDI E IF

è possibile scrivereif (condition) {

statement1. . .statementm

} else { statement1 . . .statementn

}

Page 46: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

10

SEQUENZA DI COMANDI E IF

è possibile scrivereif (condition) {

statement1. . .statementm

} else { statement1 . . .statementn

}

il cui significato è:

Page 47: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

10

SEQUENZA DI COMANDI E IF

è possibile scrivereif (condition) {

statement1. . .statementm

} else { statement1 . . .statementn

}

il cui significato è:- se la condizione è vera allora esegui la sequenza di comandi

nel ramo then

Page 48: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

10

SEQUENZA DI COMANDI E IF

è possibile scrivereif (condition) {

statement1. . .statementm

} else { statement1 . . .statementn

}

il cui significato è:- se la condizione è vera allora esegui la sequenza di comandi

nel ramo then- altrimenti esegui la sequenza di comandi nel ramo else

Page 49: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

IF: ESERCIZI1. qual e' il complemento di

(x>y) && (ch=='a' || ch=='b') ?2. scrivere un programma che prende in input due interi e restituisce true se sono uguali e false altrimenti

3. scrivere un programma che prende in input tre numeri e un carattere a scelta tra '-' e '/' e stampa in output una tabella con la differenza o il rapporto dei numeri a due a due

esempio: se i valori in input sono 2, 7, 3, e ' - ' stampa 2 7 3

2 0 -5 -1

7 5 0 4

3 1 -4 0

Page 50: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

12

COMANDI CONDIZIONALI/IF-THEN

Page 51: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

12

COMANDI CONDIZIONALI/IF-THEN

permette di effettuare una scelta tra un comando da eseguire e non far nulla• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

Page 52: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

12

COMANDI CONDIZIONALI/IF-THEN

permette di effettuare una scelta tra un comando da eseguire e non far nulla• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

sintassi: if (condition) statementT

Page 53: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

12

COMANDI CONDIZIONALI/IF-THEN

permette di effettuare una scelta tra un comando da eseguire e non far nulla• la scelta viene fatta calcolando il valore di una espressione

booleana, detta condizione

sintassi: if (condition) statementT

esempio: if (x != 0) cout << 25/x ;

Page 54: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

13

COMANDI CONDIZIONALI/IF-THEN

Page 55: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

13

COMANDI CONDIZIONALI/IF-THEN

semantica: if (condition) statementT

Page 56: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

13

COMANDI CONDIZIONALI/IF-THEN

semantica: if (condition) statementT

1. valuta la condizione tra parentesi

condition

Page 57: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

13

COMANDI CONDIZIONALI/IF-THEN

semantica: if (condition) statementT

1. valuta la condizione tra parentesi2. se il risultato è true esegue l’istruzione che segue la

condizione (ramo then)

condition

statementT

true

Page 58: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

13

COMANDI CONDIZIONALI/IF-THEN

semantica: if (condition) statementT

1. valuta la condizione tra parentesi2. se il risultato è true esegue l’istruzione che segue la

condizione (ramo then)

condition

statementT

true

Page 59: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

13

COMANDI CONDIZIONALI/IF-THEN

semantica: if (condition) statementT

1. valuta la condizione tra parentesi2. se il risultato è true esegue l’istruzione che segue la

condizione (ramo then)3. se il risultato è false va all’istruzione successiva

condition

statementT

true false

Page 60: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

14

COMANDI CONDIZIONALI/IF ANNIDATI

Page 61: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

14

COMANDI CONDIZIONALI/IF ANNIDATI comando if in cui statement

T ( o statementF ) è a sua volta un’istruzione if

- è utilizzata per codificare decisioni con più di due alternative

Page 62: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

14

COMANDI CONDIZIONALI/IF ANNIDATI comando if in cui statement

T ( o statementF ) è a sua volta un’istruzione if

- è utilizzata per codificare decisioni con più di due alternative

formato standard: if (condition1 ) statement

1

else if (condition2 ) statement

2 . . .

else if (condition

n ) statement

n

else statemente

Page 63: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

14

COMANDI CONDIZIONALI/IF ANNIDATI comando if in cui statement

T ( o statementF ) è a sua volta un’istruzione if

- è utilizzata per codificare decisioni con più di due alternative

formato standard: if (condition1 ) statement

1

else if (condition2 ) statement

2 . . .

else if (condition

n ) statement

n

else statemente

semantica: le condizioni vengono testate in sequenza, finchè non si trova una condizione vera• se viene trovata una condizione vera, viene eseguita l’istruzione corrispondente e il resto

dell’if a più alternative viene saltato• se nessuna condizione è vera, viene eseguita l’istruzione statement

e

Page 64: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

14

COMANDI CONDIZIONALI/IF ANNIDATI comando if in cui statement

T ( o statementF ) è a sua volta un’istruzione if

- è utilizzata per codificare decisioni con più di due alternative

formato standard: if (condition1 ) statement

1

else if (condition2 ) statement

2 . . .

else if (condition

n ) statement

n

else statemente

semantica: le condizioni vengono testate in sequenza, finchè non si trova una condizione vera• se viene trovata una condizione vera, viene eseguita l’istruzione corrispondente e il resto

dell’if a più alternative viene saltato• se nessuna condizione è vera, viene eseguita l’istruzione statement

e

esempio: if (x > 0) num_pos = num_pos + 1; else if (x < 0) num_neg = num_neg + 1; else num_zero = num_zero + 1;

Page 65: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

15

IF ANNIDATI E SEQUENZE DI IF

Page 66: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

15

IF ANNIDATI E SEQUENZE DI IFsequenze di if:

if (x > 0) num_pos = num_pos + 1; if (x < 0) num_neg = num_neg + 1;

if (x == 0) num_zero = num_zero + 1;

Page 67: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

15

IF ANNIDATI E SEQUENZE DI IFsequenze di if:

if (x > 0) num_pos = num_pos + 1; if (x < 0) num_neg = num_neg + 1;

if (x == 0) num_zero = num_zero + 1;

• meno leggibile (è più difficile capire che verrà eseguito uno solo dei tre assegnamenti per ogni valore di x)

Page 68: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

15

IF ANNIDATI E SEQUENZE DI IFsequenze di if:

if (x > 0) num_pos = num_pos + 1; if (x < 0) num_neg = num_neg + 1;

if (x == 0) num_zero = num_zero + 1;

• meno leggibile (è più difficile capire che verrà eseguito uno solo dei tre assegnamenti per ogni valore di x)

• meno efficiente (se x è positivo, si eseguono tutti e tre i confronti)

Page 69: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

15

IF ANNIDATI E SEQUENZE DI IFsequenze di if:

if (x > 0) num_pos = num_pos + 1; if (x < 0) num_neg = num_neg + 1;

if (x == 0) num_zero = num_zero + 1;

• meno leggibile (è più difficile capire che verrà eseguito uno solo dei tre assegnamenti per ogni valore di x)

• meno efficiente (se x è positivo, si eseguono tutti e tre i confronti)

• la semantica è differente: i comandi possono modificare il valore di x

Page 70: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

IF: TRAPPOLE

Page 71: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

IF: TRAPPOLE• tipici errori di programmazione (non di compilazione) legati all'if:

if (x=0)...

Page 72: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

IF: TRAPPOLE• tipici errori di programmazione (non di compilazione) legati all'if:

if (x=0)...

• errori nelle condizioni come quelli visti in precedenzax<=y<=z

Page 73: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

IF: TRAPPOLE• tipici errori di programmazione (non di compilazione) legati all'if:

if (x=0)...

• errori nelle condizioni come quelli visti in precedenzax<=y<=z

• associatività dell'ifif (cond1) com1;

if (cond2) com2; else com3;

Page 74: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

IF: TRAPPOLE• tipici errori di programmazione (non di compilazione) legati all'if:

if (x=0)...

• errori nelle condizioni come quelli visti in precedenzax<=y<=z

• associatività dell'ifif (cond1) com1;

if (cond2) com2; else com3;

provate a inserire questo tipo di errori per vedere cosa succede al programma

Page 75: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

17

ESERCIZI1. scrivere un “firewall” che prende in input 5 caratteri e stampa

solamente le lettere minuscole

2. scrivere un programma che prende 3 interi e stampa 1 se uno dei tre è divisore degli altri due, 0 altrimenti (fare due versioni: una con l’if e una senza)

3. scrivere un programma che simula una calcolatrice tascabile con le operazioni “+”, “-”, “*”, “/” e “%”; cioè prende un intero, uno dei simboli precedenti, e un altro intero e calcola il risultato dell’operazione relativa

4. scrivere un programma che prende 3 interi e li stampa in maniera ordinata

5. scrivere un programma che prende 4 interi e stampa l’intero tra i tre più vicino al valor medio

Page 76: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

18

COMANDI ITERATIVI

Page 77: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

18

COMANDI ITERATIVI

un problema molto usuale negli algoritmi/programmi è la ripetizione della stessa operazione tante volte

Page 78: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

18

COMANDI ITERATIVI

un problema molto usuale negli algoritmi/programmi è la ripetizione della stessa operazione tante volte

esempio: stampare 10 volte “ciao”

Page 79: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

18

COMANDI ITERATIVI

un problema molto usuale negli algoritmi/programmi è la ripetizione della stessa operazione tante volte

esempio: stampare 10 volte “ciao” int main(){

cout << "ciao" << endl ; cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ; cout << "ciao" << endl ; cout << "ciao" << endl ;return(0) ;

}

Page 80: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

18

COMANDI ITERATIVI

un problema molto usuale negli algoritmi/programmi è la ripetizione della stessa operazione tante volte

esempio: stampare 10 volte “ciao” int main(){

cout << "ciao" << endl ; cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ;cout << "ciao" << endl ; cout << "ciao" << endl ; cout << "ciao" << endl ;return(0) ;

}

. . . e se volete stampare “ciao” 100 volte?

Page 81: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

Page 82: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

esempio: stampare 10 volte “ciao”

Page 83: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

esempio: stampare 10 volte “ciao”• usare i comandi iterativi

Page 84: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

esempio: stampare 10 volte “ciao”• usare i comandi iterativi

int main(){int conta ;conta = 10 ;

ripeti_finche` (conta > 0) {cout << "ciao" << endl ; conta = conta - 1 ;

}return(0) ;

}

Page 85: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

esempio: stampare 10 volte “ciao”• usare i comandi iterativi

int main(){int conta ;conta = 10 ;

ripeti_finche` (conta > 0) {cout << "ciao" << endl ; conta = conta - 1 ;

}return(0) ;

}

while

Page 86: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

esempio: stampare 10 volte “ciao”• usare i comandi iterativi

int main(){int conta ;conta = 10 ;

ripeti_finche` (conta > 0) {cout << "ciao" << endl ; conta = conta - 1 ;

}return(0) ;

}

. . . e se volete stampare “ciao” 100 volte?

while

Page 87: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

19

COMANDI ITERATIVI

esempio: stampare 10 volte “ciao”• usare i comandi iterativi

int main(){int conta ;conta = 10 ;

ripeti_finche` (conta > 0) {cout << "ciao" << endl ; conta = conta - 1 ;

}return(0) ;

}

. . . e se volete stampare “ciao” 100 volte?

conta = 100 ;

while

Page 88: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

20

COMANDI ITERATIVI/WHILE

Page 89: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

20

COMANDI ITERATIVI/WHILEil comando while consente di ripetere un gruppo di comandi, detto corpo del ciclo- la scelta viene fatta calcolando il valore di una espressione

booleana, detta guardia del ciclo

Page 90: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

20

COMANDI ITERATIVI/WHILEil comando while consente di ripetere un gruppo di comandi, detto corpo del ciclo- la scelta viene fatta calcolando il valore di una espressione

booleana, detta guardia del ciclo

sintassi: while (condition) statement

- condition è la struttura decisionale per controllare il numero di iterazioni (guardia del ciclo)

- statement è il gruppo di istruzioni che vengono ripetute (corpo del ciclo)

Page 91: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

20

COMANDI ITERATIVI/WHILEil comando while consente di ripetere un gruppo di comandi, detto corpo del ciclo- la scelta viene fatta calcolando il valore di una espressione

booleana, detta guardia del ciclo

sintassi: while (condition) statement

- condition è la struttura decisionale per controllare il numero di iterazioni (guardia del ciclo)

- statement è il gruppo di istruzioni che vengono ripetute (corpo del ciclo)

esempio: while (x >= y) { x = x-y ; quoziente = quoziente+1 ;}

Page 92: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

21

COMANDI ITERATIVI/WHILE

Page 93: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

21

COMANDI ITERATIVI/WHILEsemantica: while (condition) statement

Page 94: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

21

COMANDI ITERATIVI/WHILEsemantica: while (condition) statement

1. valuta la guardia del ciclo

condition

Page 95: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

21

COMANDI ITERATIVI/WHILEsemantica: while (condition) statement

1. valuta la guardia del ciclo2. se il risultato è true esegue il corpo del ciclo e ritorna al

punto 1

conditiontrue

statementT

Page 96: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

21

COMANDI ITERATIVI/WHILEsemantica: while (condition) statement

1. valuta la guardia del ciclo2. se il risultato è true esegue il corpo del ciclo e ritorna al

punto 13. se il risultato è false il comando while termina (e si

esegue quello successivo)

conditiontrue false

statementT

Page 97: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

22

COMANDI ITERATIVI/WHILE/WHEELER

Page 98: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

il primo programma eseguito su un calcolatore e memorizzato in memoria (David Wheeler, Cambridge, May 6, 1949) [ riscritto in C++ ]

22

COMANDI ITERATIVI/WHILE/WHEELER

Page 99: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

il primo programma eseguito su un calcolatore e memorizzato in memoria (David Wheeler, Cambridge, May 6, 1949) [ riscritto in C++ ]

// calcola e stampa la tabella dei quadrati di 0-99

int main(){int i = 0;while (i<100) {

cout << i << '\t' << i*i << '\n' ;i = i+1 ;

}return(0) ;

}

22

COMANDI ITERATIVI/WHILE/WHEELER

Page 100: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

23

COMANDI ITERATIVI/WHILE

Page 101: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

il programma di Wheeler, come quello della stampa di “ciao”, sono esempi di cicli controllati da contatore

23

COMANDI ITERATIVI/WHILE

Page 102: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

il programma di Wheeler, come quello della stampa di “ciao”, sono esempi di cicli controllati da contatore

ciclo il cui numero di iterazioni è conosciuto prima dell’inizio dell’esecuzione del ciclo

23

COMANDI ITERATIVI/WHILE

Page 103: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

il programma di Wheeler, come quello della stampa di “ciao”, sono esempi di cicli controllati da contatore

ciclo il cui numero di iterazioni è conosciuto prima dell’inizio dell’esecuzione del ciclo

la ripetizione del ciclo è gestita da una variabile di controllo, il cui valore rappresenta un contatore

23

COMANDI ITERATIVI/WHILE

Page 104: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

il programma di Wheeler, come quello della stampa di “ciao”, sono esempi di cicli controllati da contatore

ciclo il cui numero di iterazioni è conosciuto prima dell’inizio dell’esecuzione del ciclo

la ripetizione del ciclo è gestita da una variabile di controllo, il cui valore rappresenta un contatore

formato: 1. inizializza la variabile_di_controllo ad un valore iniziale2. la condizione diventa variabile_di_controllo < valore finale3. esegue il corpo e alla fine del corpo incrementa/

decrementa la variabile_di_controllo23

COMANDI ITERATIVI/WHILE

Page 105: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

24

COMANDI ITERATIVI/WHILE/ESEMPIO

Page 106: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

24

COMANDI ITERATIVI/WHILE/ESEMPIO

scrivere un programma che prende un intero n, prende altri n interi e stampa la loro somma

Page 107: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

24

COMANDI ITERATIVI/WHILE/ESEMPIO

scrivere un programma che prende un intero n, prende altri n interi e stampa la loro somma

int main(){int res, n , val;res = 0 ;cin >> n ;while (n>0) {

cin >> val ;res = res + val ; n = n-1 ;

}cout << res ;return(0) ;

}

Page 108: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

25

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

Page 109: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

25

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition è false la prima volta che viene testata, lo statement non viene mai eseguito

Page 110: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

25

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition è false la prima volta che viene testata, lo statement non viene mai eseguitoesempio: while (false) cout << "Hello" ;

cout << "Hello" ;

Page 111: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

25

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition è false la prima volta che viene testata, lo statement non viene mai eseguitoesempio: while (false) cout << "Hello" ;

cout << "Hello" ;

stampa una sola volta "Hello" quindi è equivalente a cout << "Hello" ;

Page 112: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

25

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition è false la prima volta che viene testata, lo statement non viene mai eseguitoesempio: while (false) cout << "Hello" ;

cout << "Hello" ;

stampa una sola volta "Hello" quindi è equivalente a cout << "Hello" ;

se il corpo del while è eseguito, il valore della condizione può cambiare (perchè cambiano le variabili che vi occorrono)

Page 113: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

25

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition è false la prima volta che viene testata, lo statement non viene mai eseguitoesempio: while (false) cout << "Hello" ;

cout << "Hello" ;

stampa una sola volta "Hello" quindi è equivalente a cout << "Hello" ;

se il corpo del while è eseguito, il valore della condizione può cambiare (perchè cambiano le variabili che vi occorrono)esempio:

while (x < 10) { cout << "Hello" ; x = x+1 ;}

Page 114: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

26

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

Page 115: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

26

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition rimane sempre true l’iterazione non termina (ciclo infinito)

Page 116: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

26

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition rimane sempre true l’iterazione non termina (ciclo infinito)esempio: while (true) cout << "Hello" ;stampa una sequenza infinita di "Hello"

Page 117: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

26

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition rimane sempre true l’iterazione non termina (ciclo infinito)esempio: while (true) cout << "Hello" ;stampa una sequenza infinita di "Hello"

ogni iterazione deve contenere una istruzione che invalida la guardia del while

esempio: stampare i numeri dispari minori di 12while (x != 12){

cout << x << endl;x = x + 2;

}

Page 118: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

26

COMANDI ITERATIVI/WHILE/OSSERVAZIONI

nel comando while (condition) statement

se la condition rimane sempre true l’iterazione non termina (ciclo infinito)esempio: while (true) cout << "Hello" ;stampa una sequenza infinita di "Hello"

ogni iterazione deve contenere una istruzione che invalida la guardia del while

esempio: stampare i numeri dispari minori di 12while (x != 12){

cout << x << endl;x = x + 2;

}

meglio usare la condizione while (x < 12)

Page 119: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

27

ESERCIZI

1. scrivere un programma che prende un intero n, e calcola la somma dei numeri minori di n,

2. scrivere un programma che prende un intero n, e calcola il fattoriale di n (!0 =1 ; !n = 1*2*…*n)

3. scrivere un programma che prende n e ritorna la parte intera della radice quadrata di n

4. scrivere un programma che prende n e ritorna la parte intera del logaritmo in base 2 di n

5. scrivere un programma che prende n e la precisione x e ritorna la radice quadrata di n con precisione x cifre decimali

Page 120: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI

Page 121: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

Page 122: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

Page 123: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

algoritmo: usare tre contenitori

Page 124: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

algoritmo: usare tre contenitori

n n+1 n+2

Page 125: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1algoritmo: usare tre contenitori

n n+1 n+2

1

= 0

Page 126: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1

algoritmo: usare tre contenitori

n n+1 n+2

1

= 1

1

= 0

Page 127: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2

algoritmo: usare tre contenitori

n n+1 n+2

1

= 1

1

= 0

2

= 2

Page 128: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2

algoritmo: usare tre contenitori

n n+1 n+2

1

= 1

1

= 0

2

= 2

Page 129: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2

algoritmo: usare tre contenitori

n n+1 n+2

1

= 1

2

= 2

1

= 1

Page 130: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

1

= 1

2

= 2

Page 131: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

1

= 1

2

= 2

Page 132: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3

algoritmo: usare tre contenitori

n n+1 n+2

1

= 1

2

= 2

3

= 3

Page 133: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3

algoritmo: usare tre contenitori

n n+1 n+2

1

= 1

2

= 2

3

= 3

Page 134: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

2

= 2

Page 135: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3

algoritmo: usare tre contenitori

n n+1 n+2

3

= 3

2

= 2

3

= 3

Page 136: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3

algoritmo: usare tre contenitori

n n+1 n+2

3

= 3

2

= 2

3

= 3

Page 137: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3f(4) = f(3) + f(2) = 5

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

5

= 5

Page 138: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3f(4) = f(3) + f(2) = 5

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

5

= 5

Page 139: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3f(4) = f(3) + f(2) = 5f(5) = f(4) + f(3) = 8

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

5

= 5

Page 140: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3f(4) = f(3) + f(2) = 5f(5) = f(4) + f(3) = 8f(6) = f(5) + f(4) = 13

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

5

= 5

Page 141: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3f(4) = f(3) + f(2) = 5f(5) = f(4) + f(3) = 8f(6) = f(5) + f(4) = 13f(7) = f(6) + f(5) = 21

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

5

= 5

Page 142: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

28

COMANDI ITERATIVI/WHILE/FIBONACCI la funzione di fibonacci è definita da:

f(0) = 1 f(1) = 1 f(n+2) = f(n+1) + f(n)

scrivere un programma che prende n e ritorna f(n)

f(0) = 1f(1) = 1f(2) = f(1) + f(0) = 2f(3) = f(2) + f(1) = 3f(4) = f(3) + f(2) = 5f(5) = f(4) + f(3) = 8f(6) = f(5) + f(4) = 13f(7) = f(6) + f(5) = 21. . .

algoritmo: usare tre contenitori

n n+1 n+2

2

= 2

3

= 3

5

= 5

Page 143: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

29

COMANDI ITERATIVI/WHILE/FIBONACCI

int main(){int x, n0, n1 , n2;cin >> x ; // x>=0n0 = 1 ;n1 = 1 ;n2 = 1 ;while (x-2 >= 0) {

n2 = n1 + n0 ; n0 = n1 ; n1 = n2 ;x = x-1 ;

}cout << n2 ;return(0) ;

}

Page 144: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

Page 145: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

Page 146: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

• variable = expression è l’assegnamento di inizializzazione della variabile di controllo

Page 147: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

• variable = expression è l’assegnamento di inizializzazione della variabile di controllo

• condition è la struttura decisionale per controllare il numero di iterazioni, detta guardia del ciclo for

Page 148: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

• variable = expression è l’assegnamento di inizializzazione della variabile di controllo

• condition è la struttura decisionale per controllare il numero di iterazioni, detta guardia del ciclo for

• statement ; variable = expression’ è il gruppo di istruzioni che vengono ripetute, detto corpo del ciclo for

Page 149: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

• variable = expression è l’assegnamento di inizializzazione della variabile di controllo

• condition è la struttura decisionale per controllare il numero di iterazioni, detta guardia del ciclo for

• statement ; variable = expression’ è il gruppo di istruzioni che vengono ripetute, detto corpo del ciclo for

esempio: stampare 10 volte “ciao”

Page 150: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

• variable = expression è l’assegnamento di inizializzazione della variabile di controllo

• condition è la struttura decisionale per controllare il numero di iterazioni, detta guardia del ciclo for

• statement ; variable = expression’ è il gruppo di istruzioni che vengono ripetute, detto corpo del ciclo for

esempio: stampare 10 volte “ciao”for (conta = 10 ; conta > 0 ; conta = conta-1)

cout << "ciao" << endl ;

Page 151: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

30

COMANDI ITERATIVI/FOR

sintassi: for (variable = expression ; condition ; variable = expression’)

statement

• variable = expression è l’assegnamento di inizializzazione della variabile di controllo

• condition è la struttura decisionale per controllare il numero di iterazioni, detta guardia del ciclo for

• statement ; variable = expression’ è il gruppo di istruzioni che vengono ripetute, detto corpo del ciclo for

esempio: stampare 10 volte “ciao”for (conta = 10 ; conta > 0 ; conta = conta-1)

cout << "ciao" << endl ;

una alternativa molto usata è type variable = expression

cioè dichiarazione+inizializzazione

Page 152: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

31

COMANDI ITERATIVI/FOR

Page 153: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

31

COMANDI ITERATIVI/FOR

semantica: for (variable = expression ; condition ; variable = expression’)

statement

Page 154: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

31

COMANDI ITERATIVI/FOR

semantica: for (variable = expression ; condition ; variable = expression’)

statement

condition

statement

true false

variable = expression

variable = expression’

Page 155: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

31

COMANDI ITERATIVI/FOR

semantica: for (variable = expression ; condition ; variable = expression’)

statement

nella sintassi di C++ non cisono variable = expression e variable = expression’ ma ci sono statement

condition

statement

true false

variable = expression

variable = expression’

Page 156: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

32

COMANDI ITERATIVI/FOR/WHEELER

il primo programma eseguito su un calcolatore e memorizzato in memoria (David Wheeler, Cambridge, May 6, 1949) [ riscritto in C++ con il comando for]

// calcola e stampa la tabella dei quadrati di 0-99int main(){

for (int i = 0; i<100 ; i = i+1 )cout << i << '\t' << i*i << '\n' ;return(0) ;

}

Page 157: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTI

Page 158: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

Page 159: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

1. inizializzazione della variabile di controllo del ciclo

Page 160: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

1. inizializzazione della variabile di controllo del ciclo2. test della condizione di ripetizione del ciclo

Page 161: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

1. inizializzazione della variabile di controllo del ciclo2. test della condizione di ripetizione del ciclo3. aggiornamento della variabile di controllo del ciclo

Page 162: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

1. inizializzazione della variabile di controllo del ciclo2. test della condizione di ripetizione del ciclo3. aggiornamento della variabile di controllo del ciclo

osservazione: un comando for può essere riscritto in un comando while:

Page 163: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

1. inizializzazione della variabile di controllo del ciclo2. test della condizione di ripetizione del ciclo3. aggiornamento della variabile di controllo del ciclo

osservazione: un comando for può essere riscritto in un comando while:for (variable = expression ; condition ; variable = expression’) statement

≡ variable = expression ; while (condition) { statement ;

variable = expression’ ; }

Page 164: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

33

COMANDI ITERATIVI/FOR/COMMENTIil comando for permette di raggruppare in un’unica posizione tutte e tre le componenti tipiche di una iterazione:

1. inizializzazione della variabile di controllo del ciclo2. test della condizione di ripetizione del ciclo3. aggiornamento della variabile di controllo del ciclo

osservazione: un comando for può essere riscritto in un comando while:for (variable = expression ; condition ; variable = expression’) statement

≡ variable = expression ; while (condition) { statement ;

variable = expression’ ; }

in C++ vale anche il viceversa: ogni comando while può essere riscritto in comando for

Page 165: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

34

COMANDI ITERATIVI/STILI

Page 166: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

34

COMANDI ITERATIVI/STILI

il comando for va utilizzato

Page 167: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

34

COMANDI ITERATIVI/STILI

il comando for va utilizzato• quando le fasi di inizializzazione e aggiornamento sono semplici (es.

azzeramento e incremento);esempio: assegnamento iniziale i = 0 e aggiornamento i = i + 1

Page 168: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

34

COMANDI ITERATIVI/STILI

il comando for va utilizzato• quando le fasi di inizializzazione e aggiornamento sono semplici (es.

azzeramento e incremento);esempio: assegnamento iniziale i = 0 e aggiornamento i = i + 1

• quando staticamente sono note il numero di iterazioni che il comando deve fare

Page 169: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

34

COMANDI ITERATIVI/STILI

il comando for va utilizzato• quando le fasi di inizializzazione e aggiornamento sono semplici (es.

azzeramento e incremento);esempio: assegnamento iniziale i = 0 e aggiornamento i = i + 1

• quando staticamente sono note il numero di iterazioni che il comando deve fare

osservazioni: (1) in altri linguaggi il for può avere assegnamenti iniziali e aggiornamenti solo “semplici”, il C++ consente più libertà

(2) storicamente il for poteva essere usato solo per cicli il cui numero di iterazioni era noto a priori, altrimenti si doveva usare il while (o il do-while)

for i = 1 to 10 do comando

Page 170: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

34

COMANDI ITERATIVI/STILI

il comando for va utilizzato• quando le fasi di inizializzazione e aggiornamento sono semplici (es.

azzeramento e incremento);esempio: assegnamento iniziale i = 0 e aggiornamento i = i + 1

• quando staticamente sono note il numero di iterazioni che il comando deve fare

osservazioni: (1) in altri linguaggi il for può avere assegnamenti iniziali e aggiornamenti solo “semplici”, il C++ consente più libertà

(2) storicamente il for poteva essere usato solo per cicli il cui numero di iterazioni era noto a priori, altrimenti si doveva usare il while (o il do-while)

for i = 1 to 10 do comando

rispettate questa convenzione, se no potreste indispettire gli informatici più tradizionalisti

Page 171: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDI ITERATIVI: ESEMPIO

35

Page 172: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

COMANDI ITERATIVI: ESEMPIO

35

Page 173: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

algoritmo:

COMANDI ITERATIVI: ESEMPIO

35

Page 174: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

algoritmo: 1. prendi un carattere in input

COMANDI ITERATIVI: ESEMPIO

35

Page 175: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

algoritmo: 1. prendi un carattere in input2. se è compreso tra ‘0’ e ‘9’ ritorna l’intero successivo

COMANDI ITERATIVI: ESEMPIO

35

Page 176: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

algoritmo: 1. prendi un carattere in input2. se è compreso tra ‘0’ e ‘9’ ritorna l’intero successivo3. altrimenti, se diverso da ‘q’ ritorna a 1

COMANDI ITERATIVI: ESEMPIO

35

Page 177: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

algoritmo: 1. prendi un carattere in input2. se è compreso tra ‘0’ e ‘9’ ritorna l’intero successivo3. altrimenti, se diverso da ‘q’ ritorna a 14. altrimenti (= ‘q’) termina

COMANDI ITERATIVI: ESEMPIO

35

Page 178: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

scrivere un programma che prende in input un carattere e se il carattere ‘0’, ‘1’, …, ‘9’ stampa l’intero successivo, se diverso da "q" (quit) non stampa niente, se "q" termina (il numero delle iterazioni del ciclo non è noto a priori)

algoritmo: 1. prendi un carattere in input2. se è compreso tra ‘0’ e ‘9’ ritorna l’intero successivo3. altrimenti, se diverso da ‘q’ ritorna a 14. altrimenti (= ‘q’) termina

COMANDI ITERATIVI: ESEMPIO

attenzione a questo passo! l’input è un char, l’output è un int

come calcolarlo?

35

Page 179: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

36

IMPLEMENTAZIONE 1 int main() {

char c ;cout << "carattere in input (q per terminare)?> " ;cin >> c ;while (c != 'q') {

if (c>='0' && c <='9') {if (c == '0') cout << "> " << 1 << "\n" ;else if (c == '1') cout << "> " << 2 << "\n" ;else if (c == '2') cout << "> " << 3 << "\n" ;else if (c == '3') cout << "> " << 4 << "\n" ;else if (c == '4') cout << "> " << 5 << "\n" ;else if (c == '5') cout << "> " << 6 << "\n" ;else if (c == '6') cout << "> " << 7 << "\n" ;else if (c == '7') cout << "> " << 8 << "\n" ;else if (c == '8') cout << "> " << 9 << "\n" ;else cout << "> " << 10 << "\n" ;}

else cout << "\n" << "carattere non cifra; \n" ;cout << "carattere in input (q per terminare)>" ;cin >> c ;

}return(0);

}

Page 180: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

36

IMPLEMENTAZIONE 1 int main() {

char c ;cout << "carattere in input (q per terminare)?> " ;cin >> c ;while (c != 'q') {

if (c>='0' && c <='9') {if (c == '0') cout << "> " << 1 << "\n" ;else if (c == '1') cout << "> " << 2 << "\n" ;else if (c == '2') cout << "> " << 3 << "\n" ;else if (c == '3') cout << "> " << 4 << "\n" ;else if (c == '4') cout << "> " << 5 << "\n" ;else if (c == '5') cout << "> " << 6 << "\n" ;else if (c == '6') cout << "> " << 7 << "\n" ;else if (c == '7') cout << "> " << 8 << "\n" ;else if (c == '8') cout << "> " << 9 << "\n" ;else cout << "> " << 10 << "\n" ;}

else cout << "\n" << "carattere non cifra; \n" ;cout << "carattere in input (q per terminare)>" ;cin >> c ;

}return(0);

}

troppe ripetizioni!

Page 181: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

37

IMPLEMENTAZIONE 2

int main(){char c ;cout << "carattere in input (q per terminare)?>" ; cin >> c ;while (c != 'q') {

if (c>='0' && c <='9') {cout << "> " << c - '0' + 1 << "\n" ;

}else cout << "\n" << "carattere non cifra; \n" ;cout << "carattere in input (q per terminare)>" ;cin >> c ;

}return(0);

}

Page 182: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

37

IMPLEMENTAZIONE 2

int main(){char c ;cout << "carattere in input (q per terminare)?>" ; cin >> c ;while (c != 'q') {

if (c>='0' && c <='9') {cout << "> " << c - '0' + 1 << "\n" ;

}else cout << "\n" << "carattere non cifra; \n" ;cout << "carattere in input (q per terminare)>" ;cin >> c ;

}return(0);

} l’espressione interessante èc - '0' + 1

Page 183: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDI ITERATIVI: ESERCIZI

1. scrivere un programma che prende in input un numero intero n e stampa n asterischi

2. scrivere un programma che chiede in input un numero: se è positivo lo stampa e termina, se è negativo o nullo lo rifiuta e ne chiede un altro.

3. scrivere un programma che interroga uno studente sulla divisibilità: prende in input un numero intero e chiede allo studente di inserire un divisore. Il programma termina solo quando lo studente inserisce un divisore corretto.

4. scrivere un programma che prende un intero e stampa la somma delle sue cifre

Page 184: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

Page 185: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

Page 186: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:

Page 187: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:- viene eseguito il comando e in seguito la condizione viene testata

Page 188: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:- viene eseguito il comando e in seguito la condizione viene testata- se è vera, il comando viene ripetuto

Page 189: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:- viene eseguito il comando e in seguito la condizione viene testata- se è vera, il comando viene ripetuto- se è falsa si esce dal ciclo e l’esecuzione continua con il comando

successivo al while

Page 190: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:- viene eseguito il comando e in seguito la condizione viene testata- se è vera, il comando viene ripetuto- se è falsa si esce dal ciclo e l’esecuzione continua con il comando

successivo al while- il comando viene chiamato corpo del do-while

Page 191: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:- viene eseguito il comando e in seguito la condizione viene testata- se è vera, il comando viene ripetuto- se è falsa si esce dal ciclo e l’esecuzione continua con il comando

successivo al while- il comando viene chiamato corpo del do-while

osservazione: il corpo del do-while viene eseguito almeno una volta anche nel caso in cui la condizione sia falsa

Page 192: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

COMANDO DO-WHILE

do comando while(condizione);

semantica:- viene eseguito il comando e in seguito la condizione viene testata- se è vera, il comando viene ripetuto- se è falsa si esce dal ciclo e l’esecuzione continua con il comando

successivo al while- il comando viene chiamato corpo del do-while

osservazione: il corpo del do-while viene eseguito almeno una volta anche nel caso in cui la condizione sia falsa

esercizi: provare a scrivere i programmi precedenti col do-while: quando i programmi sono più semplici?

Page 193: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

40

ESEMPIO

successore del carattere ‘0’, ‘1’, …, ‘9’ . . .

Page 194: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

40

ESEMPIO

successore del carattere ‘0’, ‘1’, …, ‘9’ . . .

int main(){char c ;cout << "carattere in input (q per terminare)?>" ; cin >> c ;while (c != 'q') {

if (c>='0' && c <='9') {cout << "> " << c - '0' + 1 << "\n" ;

}else cout << "\n" << "carattere non cifra; \n" ;cout << "carattere in input (q per terminare)>" ;cin >> c ;

}return(0);

}

Page 195: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

40

ESEMPIO

successore del carattere ‘0’, ‘1’, …, ‘9’ . . .

int main(){char c ;cout << "carattere in input (q per terminare)?>" ; cin >> c ;while (c != 'q') {

if (c>='0' && c <='9') {cout << "> " << c - '0' + 1 << "\n" ;

}else cout << "\n" << "carattere non cifra; \n" ;cout << "carattere in input (q per terminare)>" ;cin >> c ;

}return(0);

}

int main(){char c ;do {

cout << "carattere in input (q per terminare)?>" ;cin >> c ;if (c>='0' && c <='9') {

cout << "> " << c - '0' + 1 << "\n" ;} else cout << "\n" << "carattere non cifra; \n" ;

}while (c != 'q') ;return(0);

}

Page 196: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI

Page 197: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI

• spesso può essere utile usare un ciclo dentro l’altro

Page 198: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI

• spesso può essere utile usare un ciclo dentro l’altro- ad ogni iterazione del ciclo esterno corrispondono 0 o più

iterazioni del ciclo interno

Page 199: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI

• spesso può essere utile usare un ciclo dentro l’altro- ad ogni iterazione del ciclo esterno corrispondono 0 o più

iterazioni del ciclo interno

- fate attenzione a1. non mischiare le variabili di controllo dei 2 cicli2. ripristinare i valori di inizializzazione del ciclo interno ad ogni

iterazione del ciclo esterno

Page 200: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI

• spesso può essere utile usare un ciclo dentro l’altro- ad ogni iterazione del ciclo esterno corrispondono 0 o più

iterazioni del ciclo interno

- fate attenzione a1. non mischiare le variabili di controllo dei 2 cicli2. ripristinare i valori di inizializzazione del ciclo interno ad ogni

iterazione del ciclo esterno

- attenzione: il programma diventa poco leggibile: prendere in considerazione la possibilità di rimpiazzare il ciclo interno con una invocazione di funzione

Page 201: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI

• spesso può essere utile usare un ciclo dentro l’altro- ad ogni iterazione del ciclo esterno corrispondono 0 o più

iterazioni del ciclo interno

- fate attenzione a1. non mischiare le variabili di controllo dei 2 cicli2. ripristinare i valori di inizializzazione del ciclo interno ad ogni

iterazione del ciclo esterno

- attenzione: il programma diventa poco leggibile: prendere in considerazione la possibilità di rimpiazzare il ciclo interno con una invocazione di funzione

• si possono anche annidare più livelli di cicli

Page 202: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI: ESERCIZI

Page 203: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI: ESERCIZI

1. scrivere un programma che stampa un triangolo isoscele dell’altezza desiderata presa in input. Ad esempio, se l'altezza è 4 stampa:

Page 204: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI: ESERCIZI

1. scrivere un programma che stampa un triangolo isoscele dell’altezza desiderata presa in input. Ad esempio, se l'altezza è 4 stampa:

*

Page 205: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI: ESERCIZI

1. scrivere un programma che stampa un triangolo isoscele dell’altezza desiderata presa in input. Ad esempio, se l'altezza è 4 stampa:

* *** ***** *******

Page 206: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI ANNIDATI: ESERCIZI

1. scrivere un programma che stampa un triangolo isoscele dell’altezza desiderata presa in input. Ad esempio, se l'altezza è 4 stampa:

* *** ***** *******

2. scrivere un programma che chiede all'utente dei numeri interi e scrive se sono primi o non primi. Il programma termina quando l'utente inserisce il numero 0

Page 207: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

CICLI CHE NON TERMINANO

Il programma seguente termina?

int main(){ int i; cout << “Inserire un numero intero:”; cin >> i; while(i < 100){

cout << i << “\n”; i = i * 2;

} }

Page 208: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

44

METODI PER CONTROLLARE I CICLI

ci sono due metodi per controllare le iterazioni dei cicli

1. controlli definiti da contatori- è il tipo di controllo più semplice perchè prima che il

ciclo inizi si conoscono il numero di iterazioni- vedi programma di Wheeler

2. cicli controllati da flag - una variabile il cui cambiamento di valore indica che un

particolare evento è avvenuto è detta flag - vedi programma di incremento di un carattere

some event has taken place is a flag

Page 209: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

45

CONTROLLO DEI CICLI: CONTATORI

Page 210: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

45

CONTROLLO DEI CICLI: CONTATORI

prendi il seguente ciclo (Collatz 1937) while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

Page 211: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

45

CONTROLLO DEI CICLI: CONTATORI

prendi il seguente ciclo (Collatz 1937) while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

siamo sicuri che termina?

Page 212: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

45

CONTROLLO DEI CICLI: CONTATORI

prendi il seguente ciclo (Collatz 1937) while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

siamo sicuri che termina?• c’ è una congettura (di Collatz) secondo la quale, qualunque sia

il numero iniziale questo programma termina sempre

Page 213: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

45

CONTROLLO DEI CICLI: CONTATORI

prendi il seguente ciclo (Collatz 1937) while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

siamo sicuri che termina?• c’ è una congettura (di Collatz) secondo la quale, qualunque sia

il numero iniziale questo programma termina sempre• ma non è stata mai dimostrata

Page 214: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

46

CONTROLLO DEI CICLI: CONTATORI

Page 215: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

46

CONTROLLO DEI CICLI: CONTATORI

poichè

while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

potrebbe non terminare, conviene imporre la terminazione mediante un flag:

Page 216: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

46

CONTROLLO DEI CICLI: CONTATORI

poichè

while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

potrebbe non terminare, conviene imporre la terminazione mediante un flag:• utilizziamo una variabile flag inizializzata a un certo limite superiore

Page 217: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

46

CONTROLLO DEI CICLI: CONTATORI

poichè

while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

potrebbe non terminare, conviene imporre la terminazione mediante un flag:• utilizziamo una variabile flag inizializzata a un certo limite superiore • ad ogni iterazione decrementiamo flag

Page 218: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

46

CONTROLLO DEI CICLI: CONTATORI

poichè

while (n != 1){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ;

}

potrebbe non terminare, conviene imporre la terminazione mediante un flag:• utilizziamo una variabile flag inizializzata a un certo limite superiore • ad ogni iterazione decrementiamo flag• modifichiamo la guardia in

((n != 1) && (flag > 0))

Page 219: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

47

CONTROLLO DEI CICLI: CONTATORI

il ciclo di Collatz diventa

int flag = upper_bound ; while ((n != 1) && (flag > 0)){

if (n%2 == 0) n = n/2 ; else n = 3*n + 1 ; flag = flag - 1 ;

}

che termina sempre . . .

(farà al massimo upper_bound iterazioni)

Page 220: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

48

CONTROLLO DEI CICLI: FLAG

Page 221: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

48

CONTROLLO DEI CICLI: FLAG

programma che prende un numero e stampa “primo” o “non primo” a seconda se il numero è o meno primo

Page 222: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

48

CONTROLLO DEI CICLI: FLAG

programma che prende un numero e stampa “primo” o “non primo” a seconda se il numero è o meno primoint main() {

int n , i;bool flag ;cin >> n ;i = 2 ; flag = true ;while ((i < n) && flag) {

if (n % i == 0) { cout << "non primo"; flag = false; }i = i+1 ;

}if (flag) cout << "primo" ;return (0) ;

}

Page 223: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

48

CONTROLLO DEI CICLI: FLAG

programma che prende un numero e stampa “primo” o “non primo” a seconda se il numero è o meno primoint main() {

int n , i;bool flag ;cin >> n ;i = 2 ; flag = true ;while ((i < n) && flag) {

if (n % i == 0) { cout << "non primo"; flag = false; }i = i+1 ;

}if (flag) cout << "primo" ;return (0) ;

}

il flag consente di separare i due casi!

Page 224: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

49

DEBUG DI CICLI

gli errori comuni che riguardano i cicli sono1. gli errori “off-by-one’’ in cui il ciclo esegue una volta di più o

una volta di meno

2. i cicli infiniti, di solito dovuti a un errore progettuale della guardia del ciclo

Page 225: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

Page 226: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’

Page 227: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’• verifica la guardia: deve esserci “<“ oppure “<=“ ?

Page 228: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’• verifica la guardia: deve esserci “<“ oppure “<=“ ?

• verifica che l’inizializzazione della variabile di controllo sia fatta correttamente

Page 229: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’• verifica la guardia: deve esserci “<“ oppure “<=“ ?

• verifica che l’inizializzazione della variabile di controllo sia fatta correttamente

• il ciclo prende in considerazione il caso di 0 iterazioni?

Page 230: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’• verifica la guardia: deve esserci “<“ oppure “<=“ ?

• verifica che l’inizializzazione della variabile di controllo sia fatta correttamente

• il ciclo prende in considerazione il caso di 0 iterazioni?

per i cicli infiniti

Page 231: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’• verifica la guardia: deve esserci “<“ oppure “<=“ ?

• verifica che l’inizializzazione della variabile di controllo sia fatta correttamente

• il ciclo prende in considerazione il caso di 0 iterazioni?

per i cicli infiniti

• nelle guardie, verifica le diseguaglianze: deve esserci “<“ oppure “>“?

Page 232: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

50

DEBUG DI CICLI

per gli errori “off-by-one’’• verifica la guardia: deve esserci “<“ oppure “<=“ ?

• verifica che l’inizializzazione della variabile di controllo sia fatta correttamente

• il ciclo prende in considerazione il caso di 0 iterazioni?

per i cicli infiniti

• nelle guardie, verifica le diseguaglianze: deve esserci “<“ oppure “>“?

• nelle guardie, utilizza “<“ oppure “>“ piuttosto che “==“ (ricordare che i double sono approssimati . . .)

Page 233: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

51

ALTRI SUGGERIMENTI

verifica accuratamente che il bug sia nel ciclo

tracciare la variabile di controllo per verificare come cambia durante le iterazioni• ``tracciare’’ significa controllare i valori della variabile durante

l’esecuzione: molti supporti runtime forniscono tools per fare questa operazione (anche Eclipse)

• un modo semplice per tracciare una variabile è usare cout

Page 234: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

52

ESEMPIO DI DEBUG DI CICLI

Page 235: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

52

ESEMPIO DI DEBUG DI CICLI

questo ciclo dovrebbe memorizzare nella variabile result il prodotto dei naturali minori o uguali a 5

Page 236: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

52

ESEMPIO DI DEBUG DI CICLI

questo ciclo dovrebbe memorizzare nella variabile result il prodotto dei naturali minori o uguali a 5

int next = 2, result = 1; while (next < 5){ next = next + 1 ; result = result * next ;

}

Page 237: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

52

ESEMPIO DI DEBUG DI CICLI

questo ciclo dovrebbe memorizzare nella variabile result il prodotto dei naturali minori o uguali a 5

int next = 2, result = 1; while (next < 5){ next = next + 1 ; result = result * next ;

}

testiamolo aggiungendo un cout temporaneo per controllare le variabili (tracciare le variabili)

Page 238: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

53

ESEMPIO DI DEBUG DI CICLI

int next = 2, result = 1; while (next < 5){

next = next + 1 ;result = result * next ;cout << "next = " << next << endl ;cout << "result = " << result << endl ;

}

i comandi cout rivelano che result non è mai moltiplicato per 2

soluzione: sposta l’assegnamento next = next + 1 ;

Page 239: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

54

ESEMPIO DI DEBUG DI CICLI

Page 240: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

54

ESEMPIO DI DEBUG DI CICLI

int next = 2, result = 1; while (next < 5){

result = result * next ;next = next + 1 ;cout << "next = " << next << endl ;cout << "result = " << result << endl ;

}

Page 241: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

54

ESEMPIO DI DEBUG DI CICLI

int next = 2, result = 1; while (next < 5){

result = result * next ;next = next + 1 ;cout << "next = " << next << endl ;cout << "result = " << result << endl ;

}

c’ è ancora un problema . . .

Page 242: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

54

ESEMPIO DI DEBUG DI CICLI

int next = 2, result = 1; while (next < 5){

result = result * next ;next = next + 1 ;cout << "next = " << next << endl ;cout << "result = " << result << endl ;

}

c’ è ancora un problema . . .• se ri-testiamo il ciclo, ci accorgiamo che result non è mai

moltiplicato per 5

Page 243: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

54

ESEMPIO DI DEBUG DI CICLI

int next = 2, result = 1; while (next < 5){

result = result * next ;next = next + 1 ;cout << "next = " << next << endl ;cout << "result = " << result << endl ;

}

c’ è ancora un problema . . .• se ri-testiamo il ciclo, ci accorgiamo che result non è mai

moltiplicato per 5• occorre rimpiazzare la condizione (next < 5) con (next <= 5)

Page 244: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

Page 245: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

ogni volta che modificate un programma occorre ri-testarlo- il cambiamento in una parte di codice può causare problemi in

un’altra

Page 246: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

ogni volta che modificate un programma occorre ri-testarlo- il cambiamento in una parte di codice può causare problemi in

un’altra

ogni ciclo deve essere testato con input che consenta-no di verificare (almeno) i casi

Page 247: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

ogni volta che modificate un programma occorre ri-testarlo- il cambiamento in una parte di codice può causare problemi in

un’altra

ogni ciclo deve essere testato con input che consenta-no di verificare (almeno) i casi- zero iterazioni del corpo

Page 248: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

ogni volta che modificate un programma occorre ri-testarlo- il cambiamento in una parte di codice può causare problemi in

un’altra

ogni ciclo deve essere testato con input che consenta-no di verificare (almeno) i casi- zero iterazioni del corpo- una iterazione del corpo

Page 249: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

ogni volta che modificate un programma occorre ri-testarlo- il cambiamento in una parte di codice può causare problemi in

un’altra

ogni ciclo deve essere testato con input che consenta-no di verificare (almeno) i casi- zero iterazioni del corpo- una iterazione del corpo- un numero di iterazioni del corpo immediatamente inferiore al

massimo

Page 250: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

55

TEST DI CICLI: GUIDA

ogni volta che modificate un programma occorre ri-testarlo- il cambiamento in una parte di codice può causare problemi in

un’altra

ogni ciclo deve essere testato con input che consenta-no di verificare (almeno) i casi- zero iterazioni del corpo- una iterazione del corpo- un numero di iterazioni del corpo immediatamente inferiore al

massimo- il numero massimo di iterazioni

Page 251: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

56

RICOMINCIARE DACCAPO

alcune volte è meglio cestinare un programma con errori e rifarne uno ex-novo piuttosto che ripararlo• il nuovo programma sarà più leggibile• difficilmente il nuovo programma avrà tanti errori come il

primo• ci si mette meno tempo a sviluppare un nuovo programma

piuttosto che ripararne uno vecchio• in ogni modo, imparerete la lezione che la fase cruciale per

sviluppare codice è la progettazione

Page 252: I COMANDI IF WHILE E - cs.unibo.itlaneve/html/lez3-IF-WHILE-FOR.pdf · 2 ARGOMENTI (SAVITCH, SEZIONE 2.4, CAPITOLO 3) 1.i comandi if-then-else e if-then 2.il comando while 3.il comando

57

ESERCIZI1. il valore ex può essere approssimato dalla somma

1 + x + x2/2! + x3/3! + . . . + xn/n!

scrivere un programma che prende x, prende n e stampa l’approssimazione fino ad n di ex. Il programma stampa anche il valore exp(x) dove exp è la funzione definita nella libreria cmath. [SUGGERIMENTO: dichiarare n double per evitare overflow]

2. usando un ciclo while annidato scrivere un programma che prende n e stampa la seguente struttura di altezza n:

riscrivere il programma usando cicli for.