corso di fondamenti di informaticawebuser.unicas.it/destefano/fi_ind_docs/06_le classi di... ·...

27
Claudio De Stefano - Corso di Fondamenti di Informatica 1 Corso di Fondamenti di Informatica Le classi di istruzioni in C++

Upload: others

Post on 14-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica1

Corso di Fondamenti di Informatica

Le classi di istruzioni in C++

Page 2: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica2

Le classi di istruzioni in C++

■ SEQUENZIALI– Statement semplice– Statement composto

■ CONDIZIONALI– if < expr.> { } else { }– switch <expr.> { case < cost> : .. }

■ ITERATIVE– while <expr.> { }– for (..) { }– do { } while < expr.>

Page 3: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica3

Statement Semplici

■ Uno statement semplice può essere :– assegnamento– espressione– chiamata a funzione

Esempio:main(){

int x,y,z;x = - 456; /* assegnamento */x = x + 1; /* espressione */z = max(x,y); /* funzione */

}

Page 4: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica4

Statement Composti

■ Uno statement composto è una sequenza di statement sintatticamente equivalente ad uno semplice ed è delimitato da parentesi graffe { }

Esempio:{

a = b + 19;b = c * 23;c = c+1;

}

Page 5: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Costrutti Selettivi - “IF - ELSE”

■ Lo statement “if - else” è usato per prendere delle decisioni all’interno di un programma

Sintassi:

if ( espressione )istruzione;

if ( espressione ){

istruzione_1;istruzione_2;

}

Oppureif ( espressione ){

istruzione_1;istruzione_2;

}else{

istruzione_3;istruzione_4;

}

Page 6: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio■ L’espressione < expr> viene valutata:

se risulta essere TRUE o NON ZERO viene eseguito il set di istruzioni corrispondente.

Esempio:if ( x > 0 ) {

y = x;k = 0;

}else {

y = 10;k = -1;

}

Page 7: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

■ Equivalenza tra TRUE e NON ZERO:

if ( x ) /* if ( x!=0) */{

cout << “X e’ diverso da zero” << endl;}else {

cout << “X e’ uguale a zero” << endl;}

Page 8: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzioni if-else innestate■ L’istruzione if-else può anche essere usata in sequenza costituendo cioè una serie di if

innestati; ■ occorre comunque fare attenzione ad alcune cose. Ad esempio:

y = 2;if ( x < 0)

if ( x == -1)y = 1;

elsey = 0;

Che valore assume y se x = -2 ?Che valore assume y se x = -1 ?Che valore assume y se x = 7 ?

y = 2;if ( x < 0)

if ( x == -1)y = 1;

elsey = 0;

Page 9: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzione if, else-if, else-if, … , else

■ Quando occorre effettuare una scelta plurima è possibile utilizzare questo costrutto:

if (espressione)<istruzione/i>

else if (espressione)<istruzione/i>

else if (espressione)<istruzione/i>

…else

<istruzione/i>

Page 10: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

Questo codice riconosce il carattere digitato a video assumendo che i caratteri possibili si dividono in lettere, cifre e simboli.

cin >> c;if ( c >= '0' && c <= '9')

cout << "E' una cifra\n";else if ( c >= 'a' && c <= 'z' )

cout << "E' una lettera minuscola\n";else if ( c >= 'A' && c <= 'Z' )

cout << "E' una lettera maiuscola\n";else

cout << "E' un simbolo\n";

Page 11: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esercizi

1. Riscrivere il codice precedente utilizzando al posto delle istruzioni else-if una serie di ifinnestati

2. Ampliare il codice precedente prevedendo il riconoscimento anche dei segni di punteggiatura, delle parentesi e degli operatori aritmetici.

3. Scrivere una funzione che stampa il massimo tra due interi.

Page 12: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Operatore Ternario

■ L’operatore ternario è una forma compressa di if-else.

Sintassi:< expr > ? < expr1> : < expr2>;Se < expr> è vero viene valutato solo < expr1> altrimenti viene valutato <expr2>

■ Esempio:x = ( y > 0) ? y : x + 1;

è equivalente a

if ( y > 0) x = y;

elsex = x+1;

Page 13: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esercizi

1. Utilizzando l’operatore ternario riscrivere il programma che stampa il massimotra due interi in input.

2. Utilizzando l’operatore ternario scrivere un programma che converte il carattere di input da maiuscolo a minuscolo e viceversa.

Page 14: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzione switch

■ L’istruzione switch consente di trasferire l’elaborazione a uno o più statement composti in funzione della valutazione di una espressione.

■ Sintassi:

switch ( <expr>) {

case <cost_1>:statement;

case <cost_2>:statement;

case <cost_3>:statement;

default:statement;

}

Page 15: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

■ Questa istruzione consente di effettuare delle scelte plurime

■ Può essere usata solo quando le scelte dipendono dal valore assunto da una espressione

■ Occorre fare attenzione in quanto l’esecuzione delle istruzioni comincia a partire dall’istruzione corrispondente alla condizione trovata di

espressione = cost_x

e prosegue in maniera SEQUENZIALE fino all’ultima istruzione del costrutto switch.

■ Ciò garantisce una certa flessibilità, ed in particolare la possibilità di associare piùpossibilità ad un unica etichetta.

Istruzione switch

Page 16: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempiocin >> cswitch ( c ) {

case '0' :case '1' :.....case '9' :

printf("E' una cifra\n");case 'a' :......case 'z' :

printf("E' una lettera minuscola\n");case 'A' :......case 'Z' :

printf("E' una lettera maiuscola\n");default :

printf("E' un simbolo\n");}

Page 17: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

ATTENZIONE

■ Nel codice precedente c’è un errore !■ Nel caso di c = ‘1’, l’output del programma sarà:

E’ una cifraE’ una lettera minuscolaE’ una lettera maiuscolaE’ un simbolo

■ Questo accade in quanto le istruzioni eseguite sono quelle sequenziali a partire dal primo case soddisfatto.

■ Per evitare ciò occorre utilizzare l’istruzione break

che consente di forzare l’uscita dal costrutto switch non appena si verifica la condizione: espressione = cost_x

Page 18: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzione “while”

■ L’istruzione while permette di eseguire una serie di istruzioni fintanto che una condizione iniziale rimane TRUE.

Sintassi:while ( <expr> ) {

statement;}

Page 19: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

a = 1;while ( a <= 100) {

total += a*a;a += 1;}

a = 1;while ( a++ <= 100)

total += a*a;

Page 20: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzione “for”

■ L’istruzione for è molto simile al while precedente.

Sintassi:for ( < inizializza var>; <expr>; <upd var>) {

statement;}

Equivalente alla struttura seguente che utilizza while:

< inizializza variabili>;while ( <expr>) {

< statement >;< upd var >;

}

Page 21: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

main(){

int sum , i;sum =0;for ( i = 1 ; i <= 10; i++) {

sum += i;}

}

Page 22: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

sum = 0;i = 1;

for( ; i<= 10; ) {sum= sum + i++;}

sum = 0;i = 1;for ( ; ; ) {

if ( i > 10 ) break;sum = sum + i++;

}

Page 23: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzione “do-while”

■ L’istruzione do-while è simile alla while; l’espressione viene valutata alla fine e non all’inizio del ciclo.

■ Questo comporta che un ciclo do-while venga eseguito almeno una volta.

Sintassi:do{

statement;} while ( <expr>);

N.B : questo tipo di statement è comodo quando si desidera eseguire una serie di istruzioni almeno una volta.

Page 24: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

int lines = 0, words = 0;bool stop = false;do {

cin >> c;if (c == ‘\n’)

lines++;else if (c == ‘ ‘)

words++;else if (c == EOF)

stop = true;} while (stop);

Page 25: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Esercizi

1. Utilizzando un ciclo while e l’operatore CIN scrivere un programma che stampa la lunghezza della stringa di input.

2. Utilizzando un ciclo while ed un istruzione switch, scrivere un programma che conta il numero dei caratteri, delle parole, degli spazi bianchi, delle linee in input.

3. Scrivere un programma che riceve in ingresso cinque numeri rappresentanti dei gradi celsius terminati da un EOF e stampa in output i corrispondenti gradi Fahrenheit.

[1 gardo Fahr. = 1 grado Celsius * (9/5) + 32]

4. Utilizzando un ciclo for scrivere un programma che riceve in input due interi rappresentanti rispettivamente base ed esponente e ne calcola la potenza.

5. Scrivere lo stesso programma dell’esercizio 2 precedente utilizzando però un ciclo for.

Page 26: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

main(){

int p,base,n;

cout << "Dammi la base e l'esponente maggiore di zero \n");cin >> base;cin >> n;cout << "La potenza di " << base << " elevato a " << n << " e’: \n ";

for(p=1 ; n > 0 ; --n)p *= base;

cout << p << endl;}

Page 27: Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... · 2016-06-09 · Claudio De Stefano - Corso di Fondamenti di Informatica Esercizi 1

Claudio De Stefano - Corso di Fondamenti di Informatica

Istruzioni “break” e “continue”

■ break consente l’uscita immediata da una istruzione switch, while, for, do-while.■ continue forza il passaggio all’iterazione successiva nelle istruzioni while, for, do-while.