Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... ·...
Transcript of Corso di Fondamenti di Informaticawebuser.unicas.it/destefano/fi_ind_docs/06_Le classi di... ·...
![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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/1.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/2.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/3.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/4.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/5.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/6.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/7.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/8.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/9.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/10.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/11.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/12.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/13.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/14.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/15.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/16.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/17.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/18.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/19.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/20.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/21.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/22.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/23.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/24.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/25.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/26.jpg)
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.](https://reader030.fdocumenti.com/reader030/viewer/2022011907/5f472f65ccc7ab088a4aa822/html5/thumbnails/27.jpg)
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.