• Non ci sono risultati.

Istruzioni decisionali Istruzioni decisionali

N/A
N/A
Protected

Academic year: 2021

Condividi "Istruzioni decisionali Istruzioni decisionali"

Copied!
20
0
0

Testo completo

(1)

114

Istruzioni decisionali Istruzioni decisionali

1. if

2. if-else

3. switch

switch switch

Struttura di scelta plurima che controlla se

una espressione assume un valore all’interno

di un certo insieme di costanti e si comporta

di conseguenza

(2)

116

switch switch

I0

In

IU E

I2

I1 c1 c2 cn I default

switch

switch : sintassi : sintassi

switch (espressione){

case costante1: sequenza_di_istruzione1; break;

case costante2: sequenza_di_istruzione2; break;

case costanteN: sequenza_di_istruzioneN; break;

default: sequenza_di_istruzioneDefault; break;

}

(3)

118

switch

switch : semantica : semantica

Valuta espressione

se ha valore costante1 esegui sequenza_di_istruzione1; break se ha valore costante2 esegui sequenza_di_istruzione2; break

se ha valore costanteN esegui sequenza_di_istruzioneN;break

altrimenti (se il valore di espressione è

diverso da costante1 ,..., costanteN ) esegui sequenza_di_istruzioneDefault;break (opzionale)

break provoca l’uscita immediata dallo switch

Esempio Esempio

#include<stdio.h>

main() {

int num;

scanf("%d", &num);

switch (num) {

case 1: printf("*\n"); break;

case 2: printf("**\n"); break;

case 3: printf("***\n"); break;

default: printf("!\n"); break;

}

(4)

120

Osservazione Osservazione

Valori ammessi come possibili scelte devono essere costanti

Esempio Esempio

#include<stdio.h>

main() {int num;

int uno=1;

int due=2;

scanf("%d", &num);

switch (num) {

case uno: printf("pippo1\n"); break;

case due: printf("pippo2\n"); break;

default: printf("pippo_default\n");

} }

SBAGLIATO

Valori non costanti

(5)

122

Osservazione Osservazione

break non è strettamente indispensabile.

Se non è presente viene eseguita

sequenzialmente ogni istruzione a partire dal case che è stato raggiunto

Esempio senza

Esempio senza break break

#include<stdio.h>

main() {

int num;

scanf("%d", &num);

switch (num) {

case 1: printf("*\n");

case 2: printf("**\n");

case 3: printf("***\n");

default: printf("!\n");

}

(6)

124

Un altro esempio Un altro esempio

#include<stdio.h>

main() {char car;

scanf("%c", &car);

switch (car) {

case 'a': case 'e': case 'i':

case 'o': case 'u':

printf("Vocale minuscola\n"); break;

case 'A': case 'E': case 'I':

case 'O': case 'U':

printf("Vocale maiuscola\n"); break;

default: printf("Non e' vocale\n"); break;

} }

Possono esserci più etichette per una stessa sequenza di istruzioni

125

Esercizi Esercizi

… su switch

(7)

126

Esercizio Esercizio

Scrivere un programma che visualizza il seguente menu:

Menu di prova 1) Immettere dati 2) Visualizzare dati 3) Modificare dati Scelta:

quindi aspetta l’immissione di un carattere da parte dell’utente e visualizza una scritta corrispondente alla scelta effettuata, del tipo: In esecuzione l’opzione 1

Se la scelta non è tra quelle proposte (1,2,3) deve essere visualizzata la scritta Opzione inesistente

Soluzione Soluzione

#include<stdio.h>

main() {

int num;

printf("Menu di prova\n");

printf("1) Immettere dati\n");

printf("2) Visualizzare dati\n");

printf("3) Modificare dati\n");

printf("Scelta: ");

scanf("%d", &num);

switch (num) {

case 1: printf("In esecuzione l’opzione 1"); break;

case 2: printf("In esecuzione l’opzione 2"); break;

case 3: printf("In esecuzione l’opzione 3"); break;

default: printf("Opzione inesistente"); break;

}

(8)

128

Esercizio Esercizio

Scrivere un programma che riceve in ingresso un mese (numero intero) e stampa quanti giorni ha quel mese

4,6,9,11 Î 30

1,3,5,7,8,10,12 Î 31

2 Î 28

m ∉[1..12] Î non esistente

Soluzione Soluzione

#include<stdio.h>

main() {

int num;

printf("Dammi un mese (numero): ");

scanf("%d", &num);

switch (num) {

case 1: printf("31 giorni"); break;

case 2: printf("28 giorni"); break;

case 3: printf("31 giorni"); break;

case 4: printf("30 giorni"); break;

case 5: printf("31 giorni"); break;

case 6: printf("30 giorni"); break;

case 7: printf("31 giorni"); break;

case 8: printf("31 giorni"); break;

case 9: printf("30 giorni"); break;

case 10: printf("31 giorni"); break;

case 11: printf("30 giorni"); break;

case 12: printf("31 giorni"); break;

default: printf("Mese inesistente"); break;

}

(9)

130

oppure oppure

#include<stdio.h>

main() {

int num;

printf("Dammi un mese (numero): ");

scanf("%d", &num);

switch (num) {

case 4: case 6: case 9: case 11: printf("30 giorni");break case 1: case 3: case 5: case 7:

case 8: case 10: case 12: printf("31 giorni"); break;

case 2: printf("28 giorni"); break;

default: printf("Mese inesistente"); break;

} }

Strutture di controllo del flusso Strutture di controllo del flusso

Le strutture di controllo del flusso specificano l’ordine secondo il quale le operazioni devono essere effettuate

™ istruzione composta

™ istruzioni decisionali

™ istruzioni cicliche

(10)

132

Istruzioni cicliche Istruzioni cicliche

Consentono di realizzare cicli di elaborazione, ossia l’esecuzione ripetuta di una sequenza di istruzioni

il numero di volte per il quale viene ripetuta la esecuzione della sequenza è noto a priori

il numero di volte per il quale la sequenza viene ripetuta non è noto a priori, ma è condizionato dal verificarsi in esecuzione di un evento assegnato

Esempi Esempi

™ calcolare le paghe dei dipendenti di una azienda noto il numero N dei dipendenti, ripetere N volte la sequenza di calcolo della paga

™ superare l’esame di Elementi di Informatica

la sequenza sostenere l’esame va eseguita e

rieseguita fino a quando non si viene promosso

(voto>=18)

(11)

134

Istruzioni cicliche Istruzioni cicliche

™ for

™ while

™ do-while

Esempio Esempio

Vogliamo visualizzare tre volte la scritta Ciao, mondo.

printf("Ciao, mondo.\n");

printf("Ciao, mondo.\n");

printf("Ciao, mondo.\n");

il numero di volte per il quale viene

ripetuta la esecuzione della sequenza

è noto a priori: 3

(12)

136

Usando il Usando il for for

#include<stdio.h>

main() {

int i;

for (i=1; i<=3; i++)

printf("Ciao, mondo.\n");

}

i=1

uscita ciclo

i++

i<=3 vero

falso

printf

Variabile contatore

Sintassi del Sintassi del for for

for (inizializzazione; condizione; incremento) istruzione

(13)

138

for (inizializzazione; condizione; incremento) istruzione

inizializzazione inizializzazione

Viene eseguita una volta sola Serve per impostare le variabili

Può anche non essere presente, ed allora dopo la parentesi tonda aperta viene subito il punto e virgola

Semantica Semantica

Semantica (

Semantica (cont cont.) .)

for (inizializzazione; condizione; incremento) istruzione

condizione condizione

Viene valutata ogni volta prima di eseguire le istruzioni del ciclo Se condizione è vera si esegue ancora istruzione

Se condizione è falsa si esce dal ciclo for passando all’istruzione successiva del programma

Può anche non essere presente, ed allora lo spazio tra i due punti e virgola

rimane vuoto. Il compilatore valuta vera la condizione assente, quindi

continua ad eseguire istruzione Î realizza un loop infinito

(14)

140

Semantica (

Semantica (cont cont.) .)

for (inizializzazione; condizione; incremento) istruzione

incremento incremento

Viene eseguita alla fine di ogni ciclo

Modificano ad esempio le variabili contatore (incremento o decremento) in generale: espressione

Può anche non essere presente, ed allora dopo il secondo punto e virgola viene subito la parentesi tonda chiusa

Importante!!

Importante!!

for (inizializzazione; condizione; incremento) istruzione

inizializzazione

inizializzazione: : eseguita una volta sola condizione:

condizione: valutata ogni volta prima

di eseguire le istruzioni del ciclo incremento:

incremento: eseguita alla fine di ogni ciclo

più in generale è un’espressione

(15)

142

Esempio Esempio

{ int x;

for (x=1; x<=10; x++) printf("%d\n",x);

}

no 11

si 10

si 9

si 8

si 7

si 6

si 5

si 3

si 2

si 1

si 4

x<=10 x

x=1

uscita ciclo

x++

x<=10 vero

falso

printf

1

3 2

9 4 5 6 7 8

10

Esempio Esempio

{ int x;

for (x=10; x>=0; x-=2) printf("%d\n",x);

}

no -2

si 0

si 2

si 6

si 8

si 10

si 4

x>=0 x

10

6 8

4

2

0

(16)

144

Esempio:

Esempio: loop loop infinito infinito

{ int x;

for ( x=0; ; ) printf("loop");

} { int x;

for ( ; ; ) printf("loop");

}

{ int x;

for ( x=0; x==0; ) printf("loop");

}

looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop

Attenzione!!!

Attenzione!!!

Iterazione infinita

for (i=5; i>=5; i++) …

Compilatore non segnala errore

(17)

146

Osservazioni Osservazioni

Poiché la condizione viene valutata prima di ogni ciclo, il for permette anche di non eseguire nemmeno una volta il ciclo

Esempio Esempio

{

int x;

for (x=9; x<6; x++) printf("%d\n", x);

}

Non stampa nulla

incremento inizializzazione

condizione

Inizializzazione ed incremento, nella sintassi del for, possono contenere più istruzioni, che

dovranno essere separate da virgola.

Esempio Esempio {

int x, y;

for (x=0, y=0; x+y<10; x++, y+=3) printf("%d\n", x+y);

}

Osservazioni (

Osservazioni ( cont.) cont .)

(18)

148

{

int x, y;

for (x=0,y=0; x+y<10; x++,y+=3) printf("%d\n", x+y);

}

no 9

3

si 0

0

si 6

2

si x+y<10 3

1

y x

Cosa Cosa stampa?

stampa?

8 4 0

Esempio di uso del Esempio di uso del for for

Calcolare la somma di 5 numeri interi immessi dall’utente

#include<stdio.h>

main() {

int i, somma, numero;

somma=0;

for (i=1; i<=5; i++) {

printf ("Dammi il numero: ");

scanf("%d", &numero);

somma=somma + numero;

}

printf("Somma = %d\n", somma);

}

(19)

150

Esempio (

Esempio ( cont.) cont .)

Utile far apparire il numero d’ordine d’inserimento:

#include<stdio.h>

main() {

int i, somma, numero;

somma=0;

for (i=1; i<=5; i++) {

printf ("Dammi il numero %d: ", i);

scanf("%d", &numero);

somma=somma + numero;

}

printf("Somma = %d\n", somma);

}

Esercizio Esercizio

#include<stdio.h>

main() {

int i, n=3;

for (i = 0; i < n; i++) printf("*");

for (i = 0; i < n; i++) printf("!");

***!!!

(20)

152

Cosa stampa?

Cosa stampa?

#include<stdio.h>

main() {

int x;

for (x=1; x<=3; x++) {

printf("%d\n", x);

x=x+2;

} }

Soluzione Soluzione

1

Riferimenti

Documenti correlati

La sogliola si difende mimetizzandosi sul fondoF la seppia secerne un liquido nero che intorbida l’acquaF il pesce spada lotta con la sua lama affilata. Nel mio astuccio ci

Viene valutata ogni volta prima di eseguire le istruzioni del ciclo Se condizione è vera si esegue ancora istruzione. Se condizione è falsa si esce dal ciclo for

Possibili approcci ai processi decisionali individuali:.. Università di Macerata, Dipartimento di Economia e Diritto , a.a. Federico Niccolini Corso di Organizzazione Aziendale..

Il punto cruciale `e che bastano le domande relative a tabelle come quelle date (che coinvolgono solo due alternative e solo due stati di natura), assieme ad una ipotesi di

La “deferenza” del giudice può, in particolare, giustificarsi quando esi- sta a tutela dei diritti degli amministrati una solida complaints machinery, cioè un insieme di

Per fortuna l’informatore decide di aiutare ancora l’ispettore fornendogli indizi proprio attraverso il computer. Il numero

Finalmente arrivano informazioni sul complice della Signora Violet, l’abilissima ladra arrestata da Numerik.. Gli indizi sono contenuti in una busta chiusa: l’ispettore Numerik la

Nella RST i principi principi della Responsabilit Responsabilit à à Sociale Sociale d d ’ ’ Impresa Impresa vengono progressivamente declinati in un.. contesto più