Istruzioni decisionali

Documenti analoghi
Istruzioni decisionali

Strutture di controllo

Programmare in C. Esempio: Algoritmo del Risveglio

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char

Informatica 2 modulo C Massimo Callisto De Donato

del Linguaggio C Istruzioni di iterazione

Istruzioni Condizionali in C

Programmazione C Massimo Callisto De Donato

Istruzioni di Controllo

Istruzioni. Una istruzione semplice è qualsiasi espressione seguita da un punto e virgola. Esempio x = 0; y = 1;/* due istruzioni */

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

INFORMATICA. Strutture condizionali

Istruzioni di Controllo in C. Emilio Di Giacomo

Laboratorio di informatica Ingegneria meccanica

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

Strutture di Controllo

ISTRUZIONI ISTRUZIONI SEMPLICI

Blocchi. a=10; { b=2; 2 C-strutture di controllo.tex: Versione 1.0, aa

Linguaggio C Strutture di controllo

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO

Esempi comparati while, do...while

Istruzioni di controllo

Istruzioni. Istruzioni semplici Istruzioni di controllo. Fondamenti di Informatica e laboratorio Istruzioni e Controllo del flusso

Strutture di Controllo

Strutture di Controllo

INFORMATICA. Strutture iterative

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Istruzioni iterative (o cicliche)

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

Concetti chiave. Istruzioni Iterative. Strutture di controllo iterative while do-while for Cicli annidati

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

Esecuzione condizionale. Esecuzione condizionale. Costrutto if. Costrutto if

3 Costrutti while, for e switch

Le strutture di controllo

3 Costrutti while, for e switch

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

if( (n > 0) && ( ( n%2!= 0 && n <= 50 ) ( n%2 == 0 && n >= 100 ) ) ){ printf("1\n"); }else{ printf("0\n"); }

Manualistica 3 Le strutture di controllo

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

IL COSTRUTTO ITERAZIONE

Istruzioni Condizionali

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

==,!=, >, <, >=, <= (a > 7), (b % 2 == 0), (x <= w) &&, (a > 7) && (b % 2 == 0)!(x >= 7) (a == 0)

Strutture di Controllo Iterative: Istruzioni While e Do

Istruzioni Condizionali

20/10/2014 M. Nappi/FIL 1

Scelte ed alternative. Esercizi risolti

Esercitazione 2. Corso di Fondamenti di Informatica

Strutture di Controllo Iterative: Istruzione FOR

I costrutti del C. Le Strutture del C. Il costrutto if else (I) Il costrutto if else (II) Condizionali. if-else (else if) switch Iterative

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

ISTRUZIONI ISTRUZIONI

Fondamenti di Informatica L-A

Programmazione in Java (I modulo)

Corso di Fondamenti di Programmazione canale E-O ... Un esempio per iniziare. printf) Altri cenni su printf() Esercizi 8. (printf(

ISTRUZIONI ISTRUZIONI SEMPLICI

Manualistica 3 Le strutture di controllo

TERZA ESPERIENZA DI LABORATORIO. Programmazione con controllo di flusso FOR e SWITCH

Unità 3 Istruzioni condizionali

Strutture di Controllo Condizionali e Operatori Logici e Relazionali

Informatica I INFORMATICA I PROGRAMMAZIONE

Il costrutto if else (I) Il costrutto if else (II)

Strutture di Controllo. if (<condizione>) statement; if (<condizione>) statement; Istruzioni condizionali. Istruzione condizionale if.

For e do. Parte 4. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Lab 04 (parte A) Programmazione Strutturata

Istruzioni Condizionali

Introduzione al Linguaggio C

prof. P. Mancarella Dip.to Informatica INFORMATICA 1 a.a. 07/08 pag. 170

Linguaggio C++ 5. Strutture cicliche

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

PROGRAMMAZIONE: Le strutture di controllo

For e do. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

SECONDA ESPERIENZA DI LABORATORIO. Programmazione con controllo di flusso IF e WHILE

Il linguaggio C La programmazione strutturata

Istruzioni. lettura di dati di input calcolo di risultati tramite espressioni stampa dei risultati

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

Laboratorio di Programmazione

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Fondamenti di Informatica T-1 Modulo 2

Strutture di Controllo Condizionali e Operatori Logici e Relazionali

I costrutti del C. Strutture condizionali Strutture iterative Introduzione alle funzioni

STRUTTURA DI UN ALGORITMO 1) LIBRERIE. 2) EVENTUALI COMMENTI // testo

Lab 03 Istruzioni Prima Parte"

Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Transcript:

Istruzioni decionali 1. if 2. if-else 3. switch 91 if-else Sintas if (espresone) istruzione_1 else istruzione_2 92 1

if-else else: : semantica Viene valutata espresone Se l espresone è vera (cioè assume valore diverso da zero) viene eseguita istruzione_1 Se l espresone è falsa (cioè assume valore nullo) viene eseguita istruzione_2 93 if-else else: : diagramma di flusso vero I0 E falso I0; if (E) I1; else I2; I3; la struttura introduce due posbili I1 I2 sequenze: 1. la sequenza (se E è vera): I0 I1 I3 2. la sequenza (se E è falsa): I3 I0 I2 I3 94 2

Esempio Stampa "Minore di 100" se il numero letto è minore di 100 Stampa "Maggiore o uguale a 100" se il numero letto è maggiore o uguale di 100 /* Utilizzo if-else */ #include <stdio.h> int i; printf("dammi un intero: "); scanf("%d", &i); if (i<100) printf("minore di 100\n"); else printf("maggiore o uguale a 100\n"); 95 if-else + istruzione composta #include <stdio.h> int i; int mag_100=0; int min_100=0; printf("dammi un intero: "); scanf("%d", &i); if (i<100) printf("minore di 100\n"); min_100=1; else printf("maggiore o uguale a 100\n"); mag_100=1; blocco blocco 96 3

Osservazione #include<stdio.h> int x; scanf("%d", &x); if (x==0) printf("pippo "); printf("pluto "); ; else errore printf("minnie"); 97 if annidati Le istruzioni che compaiono nell if non sono soggette ad alcuna restrizione, per cui possono essere anch esse if: if annidati 98 4

Ambiguità in caso di if annidati else è relativa al più vicino degli if che lo precedono che manchi dell else if (E1) if(e2) istr1 else istr2 equivalenti if (E1) if(e2) istr1 else istr2 diver if (E1) if(e2) istr1 else istr2 99 Esercizi su if-else 100 5

Esercizio Scrivere un programma che richiede in ingresso 2 valori interi e stampa il maggiore 101 Diagramma di flusso falso n1>n2 vero Maggiore è n2 Maggiore è n1 102 6

Soluzione #include <stdio.h> int n1, n2; printf("dammi 2 interi separati dallo spazio: \n"); scanf("%d", &n1); scanf("%d", &n2); if (n1>n2) printf("il maggiore è: %d", n1); else printf("il maggiore è: %d", n2); 103 Esercizio Scrivere un programma che richieda in ingresso un valore intero e stampa pari se il numero è pari, dispari altrimenti. Esempio 7 Il numero è dispari 90 Il numero è pari 104 7

Soluzione #include <stdio.h> int n; printf("dammi un intero: \n"); scanf("%d", &n); if (n%2==0) printf("il numero è pari"); else printf("il numero è dispari"); 105 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 degenere a==0 I grado delta < 0 determinante negativo 106 8

Soluzione #include <stdio.h> #include <math.h> float a, b, c, r1, r2, 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); 107 Soluzione (cont( cont.) if (a==0 && b==0) printf("equazione degenere\n"); else if (a==0) r1=-c/b; printf("equazione di I grado \n"); printf("radice = %f \n", r1); else delta = b*b - 4*a*c; if (delta<0) printf("determinante negativo\n"); else delta = sqrt(delta); r1 = (-b + delta) / (2*a); r2 = (-b - delta) / (2*a); printf("equazione di II grado\n"); printf("radici = %f e %f \n", r1, r2); // chiude il main 108 9

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 di4, secolo non multiplo di 400) 2000 bisestile (secolo multiplo di 400) 109 Soluzione #include<stdio.h> 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"); 110 10

Esercizio Scrivere un programma che richiede in ingresso tre valori interi e stampa il maggiore 111 falso n1>n2 vero falso n2>n3 vero falso n1>n3 vero Magg n3 Magg n2 Magg n3 Magg n1 n1<=n2 e n2<=n3 ----- ----- ----- ----> n1 n2 n3 n1>n2 e n1<=n3 ----- ----- ----- ----> n2 n1 n3 112 11

Soluzione Vuol dire che: n1<=n2 e n2<=n3 Vuol dire che: n1>n2 e n1<=n3 ----- ----- ----- ----> ----- ----- -----> ----- ----- ----- ----> n1 n2 n3 n2 n1 n3 #include <stdio.h> int n1, n2, n3; printf("dammi 3 interi separati dallo spazio: \n"); scanf("%d", &n1); scanf("%d", &n2); scanf("%d", &n3); if (n1>n2) if (n1>n3) printf("il maggiore è: %d", n1); else printf("il maggiore è: %d", n3); else if (n2>n3) printf("il maggiore è: %d", n2); else printf("il maggiore è: %d", n3); 113 oppure #include <stdio.h> int n1, n2, n3; printf("dammi 3 interi separati dallo spazio: \n"); scanf("%d", &n1); scanf("%d", &n2); scanf("%d", &n3); if ((n1>n2) && (n1>n3)) printf("il maggiore è: %d", n1); else if (n2>n3) printf("il maggiore è: %d", n2); else printf("il maggiore è: %d", n3); 114 12

oppure #include <stdio.h> int n1, n2, n3, max; printf("dammi 3 interi separati dallo spazio: \n"); scanf("%d", &n1); scanf("%d", &n2); scanf("%d", &n3); max=n1; if (n2 > max) max=n2; if (n3 > max) max=n3; printf("il maggiore è: %d", max); 115 Esercizio Scrivere un programma che richiede in input due date nel formato g,m,a e determina la più recente. Esempio 1 12 1998 10 12 1998 più recente 116 13

Istruzioni decionali 1. if 2. if-else 3. switch 117 switch Struttura di scelta plurima che controlla se una espresone assume un valore all interno di un certo ineme di costanti e comporta di conseguenza 118 14

switch I0 E c1 I1 I2 c2 In cn I default IU 119 switch: : ntas switch (espresone) case costante1: sequenza_di_istruzione1; break; case costante2: sequenza_di_istruzione2; break; case costanten: sequenza_di_istruzionen; break; default: sequenza_di_istruzionedefault; break; 120 15

switch: : semantica Valuta espresone break provoca l uscita immediata dallo switch 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 espresone è diverso da costante1,..., costanten ) esegui sequenza_di_istruzionedefault;break (opzionale) 121 Esempio #include<stdio.h> 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; 122 16

Osservazione Valori ammes come posbili scelte devono essere costanti 123 Esempio #include<stdio.h> SBAGLIATO int num; Valori non costanti 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"); 124 17

Osservazione break non è strettamente indispensabile. Se non è presente viene eseguita sequenzialmente ogni istruzione a partire dal case che è stato raggiunto 125 Esempio senza break #include<stdio.h> int num; scanf("%d", &num); switch (num) case 1: printf("*\n"); case 2: printf("**\n"); case 3: printf("***\n"); default: printf("!\n"); 126 18

Un altro esempio Possono esserci più etichette per una stessa #include<stdio.h> sequenza di istruzioni 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; 127 Esercizi su switch 128 19

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 immisone 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 inestente 129 Soluzione #include<stdio.h> 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 inestente"); break; 130 20

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 estente 131 Soluzione #include<stdio.h> 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 inestente"); break; 132 21

oppure #include<stdio.h> 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 inestente"); break; 133 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 decionali istruzioni cicliche 134 22

Istruzioni cicliche Consentono di realizzare cicli di elaborazione, osa 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 verificar in esecuzione di un evento assegnato 135 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 viene promosso (voto>=18) 136 23

Istruzioni cicliche for while do-while 137 Esempio Vogliamo visualizzare tre volte la scritta Ciao, mondo. il numero di volte per il quale viene ripetuta la esecuzione della sequenza è noto a priori: 3 printf("ciao, mondo.\n"); printf("ciao, mondo.\n"); printf("ciao, mondo.\n"); 138 24

Usando il for #include<stdio.h> int i; for (i=1; i<=3; i++) printf("ciao, mondo.\n"); i=1 i<=3 vero printf falso uscita ciclo Variabile contatore i++ 139 Sintas del for for (inizializzazione; condizione; incremento) istruzione 140 25

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 parente tonda aperta viene subito il punto e virgola 141 Semantica (cont( cont.) for (inizializzazione; condizione; incremento) istruzione condizione Viene valutata ogni volta prima di eseguire le istruzioni del ciclo Se condizione è vera esegue ancora istruzione Se condizione è falsa esce dal ciclo for passando all istruzione succesva 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 142 26

Semantica (cont( cont.) for (inizializzazione; condizione; incremento) istruzione incremento Viene eseguita alla fine di ogni ciclo Modificano ad esempio le variabili contatore (incremento o decremento) in generale: espresone Può anche non essere presente, ed allora dopo il secondo punto e virgola viene subito la parente tonda chiusa 143 Importante!! for (inizializzazione; condizione; incremento) istruzione inizializzazione: eseguita una volta sola condizione: valutata ogni volta prima di eseguire le istruzioni del ciclo incremento: eseguita alla fine di ogni ciclo più in generale è un espresone 144 27

1 2 3 4 5 6 7 8 9 10 Esempio int x; for (x=1; x<=10; x++) printf("%d\n",x); x=1 x<=10 vero printf x++ falso uscita ciclo x 1 2 3 4 5 6 7 8 9 10 11 x<=10 no 145 Esempio int x; for (x=10; x>=0; x-=2) printf("%d\n",x); 10 8 6 4 2 0 x 10 8 6 4 2 0-2 x>=0 no 146 28

Esempio: loop infinito int x; for ( ; ; ) printf("loop"); int x; for ( x=0; ; ) printf("loop"); int x; for ( x=0; x==0; ) printf("loop"); looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop looplooplooplooplooploop 147 Attenzione!!! Iterazione infinita for (i=5; i>=5; i++) Compilatore non segnala errore 148 29

Osservazioni Poiché la condizione viene valutata prima di ogni ciclo, il for permette anche di non eseguire nemmeno una volta il ciclo Esempio Non stampa nulla int x; for (x=9; x<6; x++) printf("%d\n", x); 149 Osservazioni (cont( cont.) Inizializzazione ed incremento, nella ntas del for, possono contenere più istruzioni, che dovranno essere separate da virgola. Esempio inizializzazione condizione int x, y; for (x=0, y=0; x+y<10; x++, y+=3) printf("%d\n", x+y); incremento 150 30

int x, y; for (x=0,y=0; x+y<10; x++,y+=3) printf("%d\n", x+y); Cosa stampa? 0 4 8 x 0 1 2 y 0 3 6 x+y<10 3 9 no 151 Esempio di uso del for Calcolare la somma di 5 numeri interi immes dall utente #include<stdio.h> 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); 152 31

Esempio (cont( cont.) Utile far apparire il numero d ordine d inserimento: #include<stdio.h> 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); 153 Esercizio #include<stdio.h> int i, n=3; for (i = 0; i < n; i++) printf("*"); ***!!! for (i = 0; i < n; i++) printf("!"); 154 32

Cosa stampa? #include<stdio.h> int x; for (x=1; x<=3; x++) printf("%d\n", x); x=x+2; 155 Soluzione 1 156 33

for annidati 157 Cosa stampa? #include <stdio.h> int a, b; for(a = 5; a <= 7; a++) for(b = 1; b <= 3; b++) printf("%d ", b); printf ("%d ", a); 158 34