• Non ci sono risultati.

C espressioni condizionali

N/A
N/A
Protected

Academic year: 2021

Condividi "C espressioni condizionali"

Copied!
14
0
0

Testo completo

(1)

Esiste un particolare operatore, detto operatore condizionale, che rappresenta un’istruzione if … else …. estremamente compattata

?:

Supponiamo di voler inserire nella variabile intera x il più grande dei valori interi tra a e b:

if (a>b) x=a;

else

x=b;

Invece adoperando l’operatore condizionale ? scriveremo:

(a > b) ? x=a : x=b;

C espressioni condizionali

(2)

L‘operatore condizionale é l'unico operatore ternario:

condizione ? espressioneA : espressioneB ;

dove condizione é un'espressione logica. L'operazione restituisce il valore dell'espressioneA se la condizione e' true o il valore dell'espressioneB se la condizione e' false

Esempio: minimo = a < b ? a : b ;

(n % 2==0) ? Printf(”pari\n”) : printf(”dispari\n”);

C espressioni condizionali

(3)

C istruzione switch

L’istruzione switch offre un altro modo per implementare strutture di selezione con diverse alternative.

Es: confronto di una variabile con tutti i valori che può assumere

Occorre riprendere il concetto di tipo ordinale (valori interi)

Tipo per il quale è possibile definire il precedente (tranne il primo) ed il successivo (tranne l’ultimo) di ogni valore.

Alcuni tipi standard sono ordinali:

I tipi int, long int, char, bool sono ordinali

I tipi float, double non sono ordinali

(4)

C istruzione switch

L’istruzione switch offre un altro modo per implementare strutture di selezione con diverse alternative.

espressione può essere una variabile o una espressione di tipo ordinale (intero);

switch (espressione) { case risultato1:

istruzione1;

... break;

case risultato2;

istruzione2;

... break;

... case risultatoN:

istruzioneN;

... break;

default:

istruzioni di default;

} ...

la parola-chiave break evita

l’esecuzione dei blocchi case seguenti (viene eseguito il corpo di istruzioni

del caso con risultato voluto, ignorando i casi seguenti e il default)

sequenze di istruzioni che non devono essere delimitate da parentesi graffe

il caso default può essere omesso

e rappresenta il caso in cui l’espressione non corrisponde a nessuno dei risultati

la parola-chiave case deve essere seguita da una costante il cui valore (risultato1, …) è coerente con l’espressione;

(5)

C istruzione switch

L’istruzione switch è equivalente ad una sequenza di istruzioni if

… else annidati

Non introduciamo nello pseudocodice una istruzione corrispondente allo switch, ma lo esprimeremo sempre con istruzioni se … altrimenti annidate

switch (espressione) { case risultato1:

istruzione1;

...break;

case risultato2;

istruzione2;

...break;

...case risultatoN:

istruzioneN;

...break;

default:

istruzioni di default;

} ...

if (espr==ris1) { istruzioni1;

... }

else if (espr==ris2) { istruzioni1;

... } ...

else if (espr==risN) { istruzioniN;

...}

else {

istruzioni di default;

... }

equivalente

(6)

C istruzione switch

Attenzione alla istruzione break. La sua omissione permette la verifica dei rimanenti blocchi case e la conseguente esecuzione delle istruzioni

switch (espressione) { case risultato1:

istruzione1;

... ...

case risultato2;

istruzione2;

... break;

... case risultatoN:

istruzioneN;

... break;

default:

istruzioni di default;

} ...

istruzione1

no ...

istruzione2

... break

no

istruzioneN

... break

no

istr. default ...

espr?

espr?

espr?

risN ris2

ris1

(7)

C istruzione switch

Attenzione alla istruzione break. La sua omissione permette la verifica dei rimanenti blocchi case e la conseguente esecuzione delle istruzioni

switch (espressione) { case risultato1:

istruzione1;

... ...

case risultato2;

istruzione2;

... break;

... case risultatoN:

istruzioneN;

... break;

default:

istruzioni di default;

} ...

if (espr==ris1) { istruzioni1;

... }

if (espr==ris1 OR espr==ris2){

istruzioni1;

... } ...

else if (espr==risN) { istruzioniN;

...}

else {

istruzioni di default;

... }

equivalente

(8)

C istruzione switch

Esercizio:

Scrivere un programma che dato in input un voto da 0 a 10 stampi un giudizio secondo la tabella

Voto Giudizio

3-5 insufficiente 6 sufficiente 7-8 buono 9 ottimo 10 eccellente

leggi(voto)

if (voto>2 and voto<6):

stampa(“insufficiente”) else:

if (voto=6):

stampa(“sufficiente”) else:

if (voto=7 or voto=8):

stampa(“buono”) else:

if (voto=9):

stampa(“ottimo”) else:

if (voto=10):

stampa(“eccellente”) else:

stampa(“voto errato”)

Algoritmo

(9)

C istruzione switch

...int main () { int voto;

printf("Input voto: \n”);

scanf(“%d”,&voto);

switch (voto) { case 3:

case 4:

case 5:

printf("insufficiente\n”);

break;

case 6:

printf("sufficiente\n”);

break;

case 7:

case 8:

printf("buono\n”);

break;

case 9:

printf("ottimo\n”);

break;

case 10:

printf("eccellente\n”);

break;

default:

printf("voto errato\n”);

} return 0;

}

leggi(voto)

if (voto>2 and voto<6):

stampa(“insufficiente”) else:

if (voto=6):

stampa(“sufficiente”) else:

if (voto=7 or voto=8):

stampa(“buono”) else:

if (voto=9):

stampa(“ottimo”) else:

if (voto=10):

stampa(“eccellente”) else:

stampa(“voto errato”)

Algoritmo

(10)

C istruzione switch

Esercizi:

1. Il termometro: scrivere un programma che dato in input un numero (intero) che indica una temperatura in Co da 35 a 42, stampi i seguenti messaggi:

35 à debole, 36 à normale, 37àdecimi, 38 à febbre, 39-40 à febbre alta, 41-42 à febbre delirante

2. Scrivere un programma che riceve in input un numero n1 (1o operando), un carattere p che indica un operatore (‘+’, ‘-’, ‘*’, ‘/’), e un numero n2 (2o

operando), per eseguire l’operazione: n1 p n2

3. Calcolare in una frase qual è la vocale che occorre più volte.

4. Estendere il programma precedente in modo che il risultato dell’operazione sia il primo operando della successiva operazione (ridata in input insieme al nuovo 2o operando): (n1 p n2) p’ n3 …

(11)

C istruzioni iterative

L'istruzione ciclica do ... while:

do {

istruzione;

} while (condizione); ...

dove:

• condizione é un'espressione logica

• funziona come l'istruzione while, con la differenza che la

condizione é verificata alla fine di ogni iterazione e pertanto il ciclo é sempre eseguito almeno una volta

• Se la condizione é true il programma torna all'inizio del ciclo ed esegue una nuova iterazione, se é false, passa all'istruzione

successiva

• Le parentesi graffe sono obbligatorie, anche se il costrutto controlla una istruzione semplice

no

si cond?

istruzione ...

(12)

C istruzioni iterative

Esempio :

dato un array A contenente n elementi si vuole verificare se la somma dei suoi elementi è maggiore di un certo valore k.

sum=0;

i=0;

do{

sum=sum+A[i];

i++;

}

while ((i<n) && (sum<=k));

if (sum>k)

printf(”la somma è maggiore”);

else printf(”la somma non è maggiore”);

In definitiva utilizziamo

while ( ) ….. quando il corpo del ciclo può anche non essere mai eseguito;

do …. while ( ) quando il corpo del ciclo deve essere eseguito almeno una volta.

(13)

C istruzioni iterative

int x;

do{

printf(“Inserire numero positivo”);

scanf(“%d”,x);

} while(x <= 0);

(14)

C istruzioni iterative

Esercizi:

a) Scrivere un programma che propone le tabelline per un bambino delle elementari.

I due fattori da moltiplicare sono generati in modo random ed il computer deve controllare che l’utente risponda esattamente. Quando risponde esattamente, il programma deve generare a caso una delle seguenti risposte:

1) Bravo!! 2) Ottima risposta. 3) Continua così!! 4) Stai nettamente migliorando.

Nel caso di una risposta errata deve rispondere, sempre a caso, con una delle seguenti:

1) Errato. Riprova. 2) Non è la risposta esatta. 3) Fai più attenzione. Riprova 4) Non arrenderti. Prova ancora.

b) Scrivere un main che legge due numeri reali ed un carattere: se il carattere è ‘T’

chiama la prima procedura, se il carattere è ‘R’ chiama la seconda, se è ‘E’

chiama la terza, se è ‘N’ esce dal ciclo inviando un messaggio di saluto, altrimenti stampa: ‘carattere errato’.

Riferimenti

Documenti correlati

sua divisione in due cellule, tempo caratteristico della specie e delle condizioni colturali..

Una strada che connette due citt`a pu`o essere caratterizzata tramite il nome delle due citt`a connesse, il numero di chilometri ed il limite massimo di velocit`a imposto sulla

Infine, definire un metodo che restituisce una stringa che descrive un calciatore convocato nella squadra nazionale.

Un curriculum vitae (cv) pu`o essere caratterizzato dal nome della persona, il luogo e anno di nascita, il titolo di studio posseduto e l’elenco delle borse di studio

La presentazione della tesi di un laureando davanti ad una commissione di laurea pu`o essere descritta tramite il nome e la matricola del laureando, il titolo della tesi, il nome

La sessione di una conferenza pu`o essere caratterizzata dal nome della con- ferenza, dal numero di sessione, dal nome del coordinatore della sessione e dall’elenco delle

Inoltre, definire un metodo per modificare l’anno di pubblicazione ed il numero dell’edizione, un metodo equals che restituisce true se due libri sono uguali (altrimenti

{ reader.close(); } // questa istruzione viene eseguita // comunque prima di passare. // l’eccezione al