Operatore condizionale Operatore ternario Loperatore ternario una forma

  • Slides: 118
Download presentation
Operatore condizionale

Operatore condizionale

Operatore ternario L’operatore ternario è una forma compressa di if-else Sintassi espressione ? epressione

Operatore ternario L’operatore ternario è una forma compressa di if-else Sintassi espressione ? epressione 1 : espressione 2; Semantica Se espressione è vera viene valutata solo espressione 1 altrimenti viene valutata espressione 2

Esempio Assegnare il minimo tra i valori di y e z a x. if

Esempio Assegnare il minimo tra i valori di y e z a x. if ( y < z) x = y; else x = z; è equivalente a x = ( y < z) ? y : z;

Stile di programmazione • Evitare programmi prolissi • Non usare variabili più del necessario

Stile di programmazione • Evitare programmi prolissi • Non usare variabili più del necessario • Memorizzare i risultati di computazioni intermedie quando tali risultati sono riusati

Esempi Programma che calcola il rapporto tra la somma e la differenza di due

Esempi Programma che calcola il rapporto tra la somma e la differenza di due varabili e lo memorizza in r Prolisso Semplice somma = m+n; diff = m-n; r = somma/diff; r = (m+n)/(m-n);

Se un’espressione compare in più punti è meglio memorizzarla in una variabile piuttosto che

Se un’espressione compare in più punti è meglio memorizzarla in una variabile piuttosto che ricalcolarla s = (m+n)+5*(m+n); t = (m+n)/(m-n); … u = 3*(m+n); sum s = t = … u = = m+n; sum+5*sum; sum/(m-n); 3*sum;

while ((i<m-n+1) && (ris<max)) ris=ris*i; m e n non vengono alterati nel corpo del

while ((i<m-n+1) && (ris<max)) ris=ris*i; m e n non vengono alterati nel corpo del ciclo Evita di ricalcolare sempre l’espressione m-n+1 sup = m-n+1; while ((i<sup) && (ris<max)) ris=ris*i

Cosa stampa il seguente programma? #include<stdio. h> main() { int i, j, k; for

Cosa stampa il seguente programma? #include<stdio. h> main() { int i, j, k; for (i=1; i<=5; i++){ for (j=1; j<=3; j++){ for (k=1; k<=4; k++) printf("*"); printf("n"); } } }

Soluzione

Soluzione

Esercizio Scrivere un programma che legge numeri finché non viene inserito lo zero e

Esercizio Scrivere un programma che legge numeri finché non viene inserito lo zero e conta quanti numeri pari e dispari sono stati inseriti Esempio input 1 16 23 2 7 5 0 -> dispari=4 pari=2

Scomponiamo il problema • Leggere un numero num • Incrementare pari o dispari in

Scomponiamo il problema • Leggere un numero num • Incrementare pari o dispari in base al valore di num • Ripetere finché non leggo zero

Leggere un numero printf("Dammi un numero: "); scanf("%d", &num);

Leggere un numero printf("Dammi un numero: "); scanf("%d", &num);

Incrementare pari o dispari if (num%2==0) pari = pari+1; else dispari = dispari+1;

Incrementare pari o dispari if (num%2==0) pari = pari+1; else dispari = dispari+1;

Ciclo do{ printf("Dammi un numero: "); scanf("%d", &num); if (num%2==0) pari=pari+1; else dispari=dispari+1; }while

Ciclo do{ printf("Dammi un numero: "); scanf("%d", &num); if (num%2==0) pari=pari+1; else dispari=dispari+1; }while ( n u m ! = 0 );

Programma completo #include<stdio. h> main() { int num; int dispari=0, pari=-1; do{ printf("Dammi un

Programma completo #include<stdio. h> main() { int num; int dispari=0, pari=-1; do{ printf("Dammi un numero: "); scanf("%d", &num); if (num%2==0) pari=pari+1; else dispari=dispari+1; } while (num!=0); printf("Pari=%d e Dispari=%d", pari, dispari); }

Esercizio Scrivere un programma che riceve in input un naturale n ed un carattere

Esercizio Scrivere un programma che riceve in input un naturale n ed un carattere car e stampa un triangolo rettangolo di altezza e base n, utilizzando il simbolo car. Esempio n = 5 e car = & & && &&&&& n = 3 e car = $ $ $$ $$$

Scomponiamo il problema

Scomponiamo il problema

…ora dobbiamo stampare le righe

…ora dobbiamo stampare le righe

Programma completo #include<stdio. h> main() { int n, i, j; char car; printf("Dammi un

Programma completo #include<stdio. h> main() { int n, i, j; char car; printf("Dammi un numero ed un carattere: "); scanf("%d %c", &n, &car); for (i=1; i<=n; i++) { } } for (j=1; j<=i; j++) printf("%c", car); printf("n");

Fibonacci Il problema di Fibonacci, o problema dei conigli, consiste nel determinare quante coppie

Fibonacci Il problema di Fibonacci, o problema dei conigli, consiste nel determinare quante coppie di conigli ci saranno dopo N mesi, nelle seguenti ipotesi: 1. al mese 0 c'è una coppia di conigli neonati, 2. un coniglio diventa fertile dopo un mese dalla nascita, 3. ogni coppia di conigli fertile genera ogni mese una nuova coppia di conigli 4. non c'è mortalità di conigli Sviluppare un programma che risolve il problema di Fibonacci

Soluzione Sequenza 1, 1, 2, 3 , 5, 8, 13, 21, 34, 55, 89,

Soluzione Sequenza 1, 1, 2, 3 , 5, 8, 13, 21, 34, 55, 89, 144, … Ogni nuovo numero rappresenta la somma dei due numeri che lo precedono. fib(0) = 1 fib(1) = 1 fib(n) = fib(n-1) + fib(n-2)

Esercizio

Esercizio

Soluzione

Soluzione

Esercizio Scrivere un programma per il calcolo delle radici di un'equazione di secondo grado

Esercizio Scrivere un programma per il calcolo delle radici di un'equazione di secondo grado con coefficienti reali: a, b, c. ax 2 + bx + c = 0 a e b sono 0 -> a==0 -> delta < 0 -> degenere I grado determinante negativo

Soluzione #include <stdio. h> #include <math. h> main() { float a, b, c, r

Soluzione #include <stdio. h> #include <math. h> main() { float a, b, c, r 1, r 2, delta; printf("Questo progr risolve un'equazione di II grado: n"); printf("ax^2 + bx + c: n"); printf("Dammi il coefficiente a: n"); scanf("%f", &a); printf("Dammi il coefficiente b: n"); scanf("%f", &b); printf("Dammi il coefficiente c: n"); scanf("%f", &c);

if (a==0 && b==0) printf("equazione degeneren"); else if (a==0) { r 1=-c/b; printf("equazione di

if (a==0 && b==0) printf("equazione degeneren"); else if (a==0) { r 1=-c/b; printf("equazione di I grado n"); printf("radice = %f n", r 1); } else { delta = b*b - 4*a*c; if (delta<0) printf("determinante negativon"); else { delta = sqrt(delta); r 1 = (-b + delta) / (2*a); r 2 = (-b - delta) / (2*a); printf("equazione di II gradon"); printf("radici = %f e %f n", r 1, r 2); } } } // chiude il main

Esercizio In accordo alle regole del Calendario Gregoriano un anno è bisestile se è

Esercizio In accordo alle regole del Calendario Gregoriano un anno è bisestile se è un multiplo di 4 e non è un secolo, oppure un secolo multiplo di 400. Scrivere un programma che verifichi se l’anno inserito da tastiera è bisestile. Esempio 1992 bisestile (multiplo di 4) 1800 no (multiplo di 4, secolo non multiplo di 400) 2000 bisestile (secolo multiplo di 400)

Soluzione #include<stdio. h> main() { int anno; int ris; printf("Dammi l'anno: "); scanf("%d", &anno);

Soluzione #include<stdio. h> main() { int anno; int ris; printf("Dammi l'anno: "); scanf("%d", &anno); ris = ((anno %4 ==0) && (anno % 100 !=0)) || (anno %400 == 0); if (ris == 1) printf("Anno bisestile"); else printf("Anno NON bisestile"); }

Esercizio Scrivere un programma che richiede in ingresso tre valori interi e stampa il

Esercizio Scrivere un programma che richiede in ingresso tre valori interi e stampa il maggiore (o quello uguale)

Soluzione #include <stdio. h> main() { int n 1, n 2, n 3; printf("Dammi

Soluzione #include <stdio. h> main() { int n 1, n 2, n 3; printf("Dammi 3 interi separati dallo spazio: n"); scanf("%d", &n 1); scanf("%d", &n 2); scanf("%d", &n 3); if (n 1>n 2) if (n 1>n 3) printf("Il maggiore è: %d", n 1); else printf("Il maggiore è: %d", n 3); else if (n 2>n 3) printf("Il maggiore è: %d", n 2); else printf("Il maggiore è: %d", n 3); }

oppure #include <stdio. h> main() { int n 1, n 2, n 3, max;

oppure #include <stdio. h> main() { int n 1, n 2, n 3, max; printf("Dammi 3 interi separati dallo spazio: n"); scanf("%d", &n 1); scanf("%d", &n 2); scanf("%d", &n 3); max=n 1; if (n 2 > max) max=n 2; if (n 3 > max) max=n 3; printf("Il maggiore è: %d", max); }

Oppure #include <stdio. h> main() { int n 1, n 2, n 3; printf("Dammi

Oppure #include <stdio. h> main() { int n 1, n 2, n 3; printf("Dammi 3 interi separati dallo spazio: n"); scanf("%d", &n 1); scanf("%d", &n 2); scanf("%d", &n 3); if ((n 1>n 2) && (n 1>n 3)) printf("Il maggiore è: %d", n 1); else if (n 2>n 3) printf("Il maggiore è: %d", n 2); else printf("Il maggiore è: %d", n 3); }

Esercizio Scrivere un programma che richiede in input due date nel formato g, m,

Esercizio Scrivere un programma che richiede in input due date nel formato g, m, a e determina la più recente Esempio 1 12 10 12 1998 più recente

Strutture di controllo del flusso Le strutture di controllo del flusso specificano l’ordine secondo

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

Istruzione Cicliche

Istruzione Cicliche

Esempio • calcolare le paghe dei dipendenti di una azienda noto il numero N

Esempio • 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)

Istruzioni cicliche • for • while • do-while

Istruzioni cicliche • for • while • do-while

Esempio Vogliamo visualizzare tre volte la scritta Ciao, mondo. … printf("Ciao, mondo. n");

Esempio Vogliamo visualizzare tre volte la scritta Ciao, mondo. … printf("Ciao, mondo. n");

Usando il for #include<stdio. h> main() { CONTATORE int i; for (i=1; i<=3; i++)

Usando il for #include<stdio. h> main() { CONTATORE int i; for (i=1; i<=3; i++) printf("Ciao, mondo. n"); }

Sintassi del for (inizializzazione; condizione; incremento) istruzione

Sintassi del for (inizializzazione; condizione; incremento) istruzione

Semantica for (inizializzazione; condizione; incremento) istruzione inizializzazione • Viene eseguita una volta sola •

Semantica for (inizializzazione; condizione; incremento) istruzione 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 for (inizializzazione; condizione; incremento) istruzione condizione • Viene valutata ogni volta prima di

Semantica for (inizializzazione; condizione; incremento) istruzione 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

Semantica for (inizializzazione; condizione; incremento) istruzione incremento • Viene eseguita alla fine di ogni

Semantica for (inizializzazione; condizione; incremento) istruzione 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 for (inizializzazione; condizione; incremento) istruzione inizializzazione: condizione: incremento: eseguita una volta sola valutata

Importante for (inizializzazione; condizione; incremento) istruzione inizializzazione: condizione: incremento: eseguita una volta sola valutata ogni volta prima di eseguire le istruzioni del ciclo eseguita alla fine di ogni ciclo più in generale è un’espressione

Esempio

Esempio

Esempio

Esempio

Esempio: loop infinito

Esempio: loop infinito

Attenzione Iterazione infinita for (i=5; i>=5; i++) … Compilatore non segnala errore

Attenzione Iterazione infinita for (i=5; i>=5; i++) … Compilatore non segnala errore

Osservazioni Poiché la condizione viene valutata prima di ogni ciclo, il for permette anche

Osservazioni Poiché la condizione viene valutata prima di ogni ciclo, il for permette anche di non eseguire nemmeno una volta il ciclo Esempio { int x; for (x=9; x<6; x++) printf("%dn", x); } NON STAMPA NULLA

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

Osservazioni Inizializzazione ed incremento, nella sintassi del for, possono contenere più istruzioni, che dovranno essere separate da virgola. Esempio { int x, y; for (x=0, y=0; x+y<10; x++, y+=3) printf("%dn", x+y); } INIZIALIZZAZIONE CONDIZIONE INCREMENTO

Cosa stampa?

Cosa stampa?

Esempio di uso del for Calcolare la somma di 5 numeri interi immessi dall’utente

Esempio di uso del 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 = %dn", somma); }

Esempio Utile far apparire il numero d’ordine d’inserimento: #include<stdio. h> main() { int i,

Esempio 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 = %dn", somma); }

Esercizio #include<stdio. h> main() { int i, n=3; for (i = 0; i <

Esercizio #include<stdio. h> main() { int i, n=3; for (i = 0; i < n; i++) printf("*"); for (i = 0; i < n; i++) printf("!"); }

Cosa Stampa? #include<stdio. h> main() { int x; for (x=1; x<=3; x++) { printf("%dn",

Cosa Stampa? #include<stdio. h> main() { int x; for (x=1; x<=3; x++) { printf("%dn", x); x=x+2; } }

Cosa Stampa? #include <stdio. h> main() { int a, b; for(a = 5; a

Cosa Stampa? #include <stdio. h> main() { int a, b; for(a = 5; a <= 7; a++) { for(b = 1; b <= 3; b++) printf("%d ", b); printf ("%d ", a); } }

Soluzione for(a = 5; a <= 7; a++) { for(b = 1; b <=

Soluzione for(a = 5; a <= 7; a++) { for(b = 1; b <= 3; b++) printf("%d ", b); printf ("%d ", a); }

E questo programma? #include <stdio. h> main() { int a, b; for(a = 5;

E questo programma? #include <stdio. h> main() { int a, b; for(a = 5; a <= 7; a++) { for(b = 1; b <= 3; b++) { printf("%d ", b); printf ("%d ", a); } } }

Riassumendo L’indice del ciclo interno scorre più velocemente dell’indice del ciclo esterno: for(i =

Riassumendo L’indice del ciclo interno scorre più velocemente dell’indice del ciclo esterno: for(i = 1; i <= n; i++) { … for(j = 1; j <= m; j++) { … } L’indice j conta da 1 a m per ogni diverso valore dell’indice i

Esercizio Determinare il valore delle variabili w e z dopo l’esecuzione del seguente frammento:

Esercizio Determinare il valore delle variabili w e z dopo l’esecuzione del seguente frammento: { int i, j, w, z; w=0; z=0; for (i=1; i<=3; i++) { for (j=1; j<=3; j++) w=w+1; z=z+1; }

Soluzione w z i j vale 9 3 4 4

Soluzione w z i j vale 9 3 4 4

Un altro esempio di uso del for Scrivere una matrice di asterischi formata da

Un altro esempio di uso del for Scrivere una matrice di asterischi formata da r righe e c colonne, con r e c letti dall’esterno Esempio r=3 c=2 ** ** **

Scomponiamo il problema Stampare una riga con c * e andare a capo **

Scomponiamo il problema Stampare una riga con c * e andare a capo ** ** ** for (j = 0; j < c; j++) printf("*"); printf("n");

Ora stampiamo tutte le r righe for (i = 0; i < r; i++)

Ora stampiamo tutte le r righe for (i = 0; i < r; i++) { for (j = 0; j < c; j++) printf("*"); printf("n"); }

Programma completo #include<stdio. h> main() { int r, c, i , j ; scanf("%d

Programma completo #include<stdio. h> main() { int r, c, i , j ; scanf("%d %d", &r, &c); for (i = 0; i < r; i++) { for (j = 0; j < c; j++) printf("*"); printf("n"); } }

Quando usare for? Realizzare cicli basati su una variabile che si incrementa e diminuisce

Quando usare for? Realizzare cicli basati su una variabile che si incrementa e diminuisce di una certa quantità ogni volta che il ciclo viene eseguito. Quando la variabile raggiunge un determinato valore, l’esecuzione del ciclo viene interrotta

Istruzioni cicliche • for • while • do-while

Istruzioni cicliche • for • while • do-while

Struttura del while ( condizione ) { istruzioni } Le parentesi sono inutili se

Struttura del while ( condizione ) { istruzioni } Le parentesi sono inutili se l’istruzione da ripetere è una sola.

Example while ( children > 0 ) { children = children - 1 ;

Example while ( children > 0 ) { children = children - 1 ; cookies = cookies * 2 ; }

Another while Loop Example • Problem: Scrivere un programma che calcola la media dei

Another while Loop Example • Problem: Scrivere un programma che calcola la media dei voti per una classe di 10 studenti. • Quali sono gli input del programma? • I voti degli esami • Quali sono gli output? • La media dei voti

The Pseudocode <total> = 0 <grade_counter> = 1 While (<grade_counter> <= 10) Display “Enter

The Pseudocode <total> = 0 <grade_counter> = 1 While (<grade_counter> <= 10) Display “Enter a grade: ” Read <grade> <total> = <total> + <grade> <grade_counter> = <grade_counter> + 1 End_while <average> = <total> / 10 Display “Class average is: “, <average>

The C Code #include <stdio. h> int main ( ) { int counter, grade,

The C Code #include <stdio. h> int main ( ) { int counter, grade, total, average ; total = 0 ; counter = 1 ; while ( counter <= 10 ) { printf (“Enter a grade : “) ; scanf (“%d”, &grade) ; total = total + grade ; counter = counter + 1 ; } average = total / 10 ; printf (“Class average is: %dn”, average) ; return 0 ; }

Versatile? • Quanto è versatile questo programma? • Funziona solo con classi di 10

Versatile? • Quanto è versatile questo programma? • Funziona solo con classi di 10 studenti. • Ci piacerebbe che funzionasse con classi di n studenti. • Un modo migliore: • Chiedere all’utente quanti student ci sono

New Pseudocode <total> = 0 <grade_counter> = 1 Display “Enter the number of students:

New Pseudocode <total> = 0 <grade_counter> = 1 Display “Enter the number of students: “ Read <num_students> While (<grade_counter> <= <num_students>) Display “Enter a grade: ” Read <grade> <total> = <total> + <grade> <grade_counter> = <grade_counter> + 1 End_while <average> = <total> / <num_students> Display “Class average is: “, <average>

New C Code #include <stdio. h> int main ( ) { int num. Students,

New C Code #include <stdio. h> int main ( ) { int num. Students, counter, grade, total, average ; total = 0 ; counter = 1 ; printf (“Inserisci il numero di studenti: “) ; scanf (“%d”, &num. Students) ; while ( counter <= num. Students) { printf (“Enter a grade : “) ; scanf (“%d”, &grade) ; total = total + grade ; counter = counter + 1 ; } average = total / num. Students ; printf (“Class average is: %dn”, average) ; return 0 ; }

Perchè sforzarsi? • Perchè scrivere programmi? • così l’utente può realizzare dei task •

Perchè sforzarsi? • Perchè scrivere programmi? • così l’utente può realizzare dei task • Più il programma è versatile, più è difficile scriverlo. Ma è più usabile • Più è complesso il task più è difficile scriverlo, ma è ciò che vuole l’utente. • Bisogna sempre considerare l’utente prima.

Usare il valore sentinella • Ci serve un valore che ci informi come prosegue

Usare il valore sentinella • Ci serve un valore che ci informi come prosegue la computazione. Questo valore speciale è chiamato sentinel value. • Dobbiamo essere sicuri che il valore che scegliamo come sentinella non sia un valore lecito. Per esempio possiamo usare lo 0 che non è un valore ammesso come voto.

The Priming Read • Quando usiamo un valore sentinella per controllare un ciclo while,

The Priming Read • Quando usiamo un valore sentinella per controllare un ciclo while, dobbiamo prendere il primo valore dall’utente prima che inizi il cilco così da testarlo e da iniziare il ciclo. • Questa operazione è nota come una priming read.

New <total> Pseudocode =0 <grade_counter> = 1 Display “Enter a grade: “ Read <grade>

New <total> Pseudocode =0 <grade_counter> = 1 Display “Enter a grade: “ Read <grade> While ( <grade> != -1 ) <total> = <total> + <grade> <grade_counter> = <grade_counter> + 1 Display “Enter another grade: ” Read <grade> End_while <average> = <total> / <grade_counter> Display “Class average is: “, <average>

New C Code #include <stdio. h> int main ( ) { int counter, grade,

New C Code #include <stdio. h> int main ( ) { int counter, grade, total, average ; } total = 0 ; counter = 1 ; printf(“Enter a grade: “) ; scanf(“%d”, &grade) ; while (grade != -1) { total = total + grade ; counter = counter + 1 ; printf(“Enter another grade: “) ; scanf(“%d”, &grade) ; } average = total / counter ; printf (“Class average is: %dn”, average) ; return 0 ;

Final “Clean” C Code #include <stdio. h> int main ( ) { int counter

Final “Clean” C Code #include <stdio. h> int main ( ) { int counter ; /* counts number of grades entered */ int grade ; /* individual grade */ int total; /* total of all grades */ int average ; /* average grade */ /* Initializations */ total = 0 ; counter = 1 ;

Final “Clean” C Code (con’t) /* Get grades from user */ /* Compute grade

Final “Clean” C Code (con’t) /* Get grades from user */ /* Compute grade total and number of grades */ printf(“Enter a grade: “) ; scanf(“%d”, &grade) ; while (grade != -1) { total = total + grade ; counter = counter + 1 ; printf(“Enter another grade: “) ; scanf(“%d”, &grade) ; } /* Compute and display the average grade */ average = total / counter ; printf (“Class average is: %dn”, average) ; return 0 ;

Using a while Loop to Check User Input #include <stdio. h> int main (

Using a while Loop to Check User Input #include <stdio. h> int main ( ) { int number ; printf (“Enter a positive integer : “) ; scanf (“%d”, &number) ; while ( number <= 0 ) { printf (“n. That’s incorrect. Try again. n”) ; printf (“Enter a positive integer: “) ; scanf (“%d”, &number) ; } printf (“You entered: %dn”, number) ; return 0 ; }

Istruzioni Decisionali 1. if 2. if-else 3. switch

Istruzioni Decisionali 1. if 2. if-else 3. switch

Switch Struttura di scelta plurima che controlla se una espressione assume un valore all’interno

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

Switch

Switch

Switch: sintassi

Switch: sintassi

Switch: semantica • Valuta espressione • se ha valore costante 1 esegui sequenza_di_istruzione 1;

Switch: semantica • Valuta espressione • se ha valore costante 1 esegui sequenza_di_istruzione 1; break • se ha valore costante 2 esegui sequenza_di_istruzione 2; break • … • se ha valore costante. N esegui sequenza_di_istruzione. N; break • altrimenti (se il valore di espressione è • diverso da costante 1 , . . . , costante. N ) esegui • sequenza_di_istruzione. Default; break (opzionale)

Esempio #include<stdio. h> main() { int num; scanf("%d", &num); switch (num) { case 1:

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

Osservazione Valori ammessi come possibili scelte devono essere costanti

Osservazione Valori ammessi come possibili scelte devono essere costanti

Esempio #include<stdio. h> main() { int num; int uno=1; int due=2; scanf("%d", &num); switch

Esempio #include<stdio. h> main() { int num; int uno=1; int due=2; scanf("%d", &num); switch (num) { case uno: printf("pippo 1n"); break; case due: printf("pippo 2n"); break; default: printf("pippo_defaultn"); } } ERRORE: Valori non costanti

Osservazione break non è strettamente indispensabile. Se non è presente viene eseguita sequenzialmente ogni

Osservazione break non è strettamente indispensabile. Se non è presente viene eseguita sequenzialmente ogni istruzione a partire dal case che è stato raggiunto

Esempio senza break #include<stdio. h> main() { int num; scanf("%d", &num); switch (num) {

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

Un altro esempio #include<stdio. h> main() {char car; scanf("%c", &car); switch (car) { case

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 minuscolan"); break; case 'A': case 'E': case 'I': case 'O': case 'U': printf("Vocale maiuscolan"); break; default: printf("Non e' vocalen"); break; } }

Esercizio Scrivere un programma che visualizza il seguente menu: Menu di prova 1) Immettere

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 #include<stdio. h> main() { int num; printf("Menu di provan"); printf("1) Immettere datin"); printf("2)

Soluzione #include<stdio. h> main() { int num; printf("Menu di provan"); printf("1) Immettere datin"); printf("2) Visualizzare datin"); printf("3) Modificare datin"); printf("Scelta: "); scanf("%d", &num); switch (num) { case 1: printf("In esecuzione l’opzione case 2: printf("In esecuzione l’opzione case 3: printf("In esecuzione l’opzione default: printf("Opzione inesistente"); } } 1"); break; 2"); break; 3"); break;

Esercizio Scrivere un programma che riceve in ingresso un mese (numero intero) e stampa

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 #include<stdio. h> main() { int num; printf("Dammi un mese (numero): "); scanf("%d", &num);

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

…oppure #include<stdio. h> main() { int num; printf("Dammi un mese (numero): "); scanf("%d", &num);

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

break consente l’uscita immediata da una istruzione switch, while, for, do-while Esempio … for

break consente l’uscita immediata da una istruzione switch, while, for, do-while Esempio … for (i=1; ; i++){ if (i==4) break; printf("%dn", i); } printf("dopo il break");

Programma • Richiedere all’utente di inserire un numero fino a che non sia multiplo

Programma • Richiedere all’utente di inserire un numero fino a che non sia multiplo di tre.

Soluzione int numero; printf("inserisci un numero: "); scanf("%d", &numero); printf("n"); while (numero%3!=0){ printf ("il

Soluzione int numero; printf("inserisci un numero: "); scanf("%d", &numero); printf("n"); while (numero%3!=0){ printf ("il numero %d non è un multiplo di 3n", numero); printf("inserisci un numero: "); scanf("%d", &numero); } printf ("il numero %d è un multiplo di 3", numero); }

Esercizio • Inserire dei numeri fino a che la loro somma non raggiunge il

Esercizio • Inserire dei numeri fino a che la loro somma non raggiunge il valore 100

Soluzione int main() { int numero, somma; somma=0; printf("inserisci un numero: "); scanf("%d", &numero);

Soluzione int main() { int numero, somma; somma=0; printf("inserisci un numero: "); scanf("%d", &numero); printf("n"); while (somma<100){ somma+=numero; printf ("la somma è minore di 100n"); printf("inserisci un numero: "); scanf("%d", &numero); } printf ("la somma è maggiore di zero"); }

Esercizio • Inserire dei numeri fino a che la somma di quelli pari non

Esercizio • Inserire dei numeri fino a che la somma di quelli pari non raggiunga il valore 100.

Soluzione int main() { int numero, somma; printf("inserisci un numero: "); scanf("%d", &numero); printf("n");

Soluzione int main() { int numero, somma; printf("inserisci un numero: "); scanf("%d", &numero); printf("n"); if (numero%2==0) somma=numero; else somma=0; while (somma<100){ printf ("la somma dei numeri pari è %d ed è minore di 100n", somma); printf("inserisci un numero: "); scanf("%d", &numero); if (numero%2==0) somma+=numero; } printf ("la somma dei numeri pari è %d ed è maggiore di zero", somma); }

 • Inserire dei numeri fintanto che la somma sia minore o uguale a

• Inserire dei numeri fintanto che la somma sia minore o uguale a 100 e produrre la somma dei numeri pari e la somma dei numeri dispari.

Soluzione int main() { int numero, sommapari, sommadispari; printf("inserisci un numero: "); scanf("%d", &numero);

Soluzione int main() { int numero, sommapari, sommadispari; printf("inserisci un numero: "); scanf("%d", &numero); printf("n"); somma=numero; if (numero%2==0) sommapari=numero; else sommadispari=numero; while (somma<100){ printf ("la somma dei numeri è %d ed è minore di 100n", somma); printf("inserisci un numero: "); scanf("%d", &numero); if (numero%2==0) sommapari+=numero; else sommadispari+=numero; somma+=numero; } printf ("la somma dei numeri pari è %d n", sommapari); printf ("la somma dei numeri dispari è %d n", sommadispari); }

Esercizio • Inserire due numeri fino a che non si inseriscono due numeri uguali

Esercizio • Inserire due numeri fino a che non si inseriscono due numeri uguali consecutivi

Soluzione int i 1, i 2; printf("inserisci due numeri: "); scanf("%d%d", &i 1, &i

Soluzione int i 1, i 2; printf("inserisci due numeri: "); scanf("%d%d", &i 1, &i 2); printf("n"); int i=1; while (i 1!=i 2){ printf("%dn", i); printf("i 1: %dn", i 1); printf("i 2: %d", i 2); i 1=i 2; printf("ninserisci un numero: "); scanf("%d", &i 2); printf("ni 2: %d", i 2); i++; } printf ("hai inserito due volte il numero: %d", i 1); }

 • Richiedere numeri fino a quando non si inserisce un numero a tre

• Richiedere numeri fino a quando non si inserisce un numero a tre cifre.

int i; printf("inserisci un numero: "); scanf("%d", &i); printf("n"); while ((i/100)==0){ printf("ninserisci un numero:

int i; printf("inserisci un numero: "); scanf("%d", &i); printf("n"); while ((i/100)==0){ printf("ninserisci un numero: "); scanf("%d", &i); } printf ("hai inserito un numero a tre cifre decimali: %d", i); }

Continue continue, a differenza di break si applica ai cicli (while, for, do-while ),

Continue continue, a differenza di break si applica ai cicli (while, for, do-while ), ma non allo switch Interrompe l’esecuzione di un ciclo, ma anziché uscire dal ciclo definitivamente fa eseguire la successiva iterazione Non è molto usata

int i=0; while(i<=3) { i=i+1; printf("ciaon"); if (i<=3) continue; printf("istr 1 dopo continuen"); printf("istr

int i=0; while(i<=3) { i=i+1; printf("ciaon"); if (i<=3) continue; printf("istr 1 dopo continuen"); printf("istr 2 dopo continuen"); }

break e continue violano le norme della programmazione strutturata. Dato che l’effetto di queste

break e continue violano le norme della programmazione strutturata. Dato che l’effetto di queste istruzioni può essere ottenuto da tecniche di programmazione strutturata, evitiamo di usare break e continue