Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... ·...

Post on 14-Jul-2020

2 views 0 download

Transcript of Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... ·...

Claudio De Stefano - Corso di Fondamenti di Informatica1

Corso di Fondamenti di Informatica

Le classi di istruzioni in C++

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.>

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 */

}

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;

}

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;

}

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;

}

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;}

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;

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>

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";

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.

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;

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.

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;

}

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

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");}

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

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;}

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;

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 >;

}

Claudio De Stefano - Corso di Fondamenti di Informatica

Esempio

main(){

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

sum += i;}

}

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++;

}

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.

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);

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.

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;}

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.