• Non ci sono risultati.

Le classi di istruzioni in C++

N/A
N/A
Protected

Academic year: 2021

Condividi "Le classi di istruzioni in C++"

Copied!
27
0
0

Testo completo

(1)

Corso di Fondamenti di Informatica

Le classi di istruzioni in C++

(2)

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

(3)

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

}

(4)

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;

}

(5)

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;

}

Oppure

if ( espressione ) {

istruzione_1;

istruzione_2;

} else {

istruzione_3;

istruzione_4;

(6)

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;

}

(7)

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;

(8)

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;

else

y = 0;

z

Che valore assume y se x = -2 ?

z

Che valore assume y se x = -1 ?

z

Che valore assume y se x = 7 ?

y = 2;

if ( x < 0)

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

else

y = 0;

(9)

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>

(10)

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

(11)

Esercizi

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

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.

(12)

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;

else

x = x+1;

(13)

Esercizi

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

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

(14)

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;

}

(15)

■ 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

(16)

Esempio cin >> c

switch ( 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");

}

(17)

ATTENZIONE

■ Nel codice precedente c’è un errore !

■ Nel caso di c = ‘1’, l’output del programma sarà:

E’ una cifra

E’ una lettera minuscola E’ una lettera maiuscola E’ 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

(18)

Istruzione “while”

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

Sintassi:

while ( <expr> ) {

statement;

}

(19)

Esempio

a = 1;

while ( a <= 100) { total += a*a;

a += 1;

}

a = 1;

while ( a++ <= 100)

total += a*a;

(20)

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

}

(21)

Esempio

main()

{ int sum , i;

sum =0;

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

} }

(22)

Esempio

sum = 0;

i = 1;

for( ; i<= 10; ) {

sum= sum + i++;

}

sum = 0;

i = 1;

for ( ; ; ) {

if ( i > 10 ) break;

sum = sum + i++;

}

(23)

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.

(24)

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

(25)

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.

(26)

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;

}

(27)

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.

Riferimenti

Documenti correlati

C’è stato un genocidio, sotto molti aspetti, nella Cambogia di Pol Pot, dove sono stati uccisi i componenti di quello che era chiamato &#34;il popolo nuovo&#34;, semplicemente

[r]

3) Ora infila la linea dei numeri nei due tagli verticali. Dalla finestra centrale sarà visibile un solo numero.. Il numero precedente e successivo rimarranno coperti e tu

Il presente accordo entra in vigore alla data della firma delle Parti e durerà fino a quando le Informazioni Confidenziali non siano divenute note alla generalità degli operatori

In assenza di parentesi graffe, ogni else si associa al primo if che lo precede per il quale non sia ancora stato identificato un

Permette di ripetere l’esecuzione di un blocco di istruzioni finchè viene verificata una condizione logica valutata all’inizio del

SUBITO PRIMA = PRECEDENTE SUBITO DOPO = SUCCESSIVO COMPLETA CON I NUMERI MANCANTI:.. SCRIVI IL PRECEDENTE ED

I bits di informazione sono 3 (perché dimC=3), e 3 sono i bits di ridondanza che controllano gli errori: se avessimo trasmesso una parola di lunghezza 3 attraverso lo stesso