INFORMATICA. Strutture condizionali

Documenti analoghi
INFORMATICA. Strutture condizionali. Strutture condizionali. L istruzione if. L istruzione if

INFORMATICA. Strutture iterative

Strutture di controllo

Istruzioni di selezione (if/else/switch)

Linguaggio C Strutture di controllo

Esecuzione condizionale. Esecuzione condizionale. Costrutto if. Costrutto if

Informatica 2 modulo C Massimo Callisto De Donato

Programmazione C Massimo Callisto De Donato

Algoritmi e basi del C Struttura di un programma

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Algoritmi e basi del C Struttura di un programma

Istruzioni Condizionali in C

Manualistica 3 Le strutture di controllo

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

Esercitazione 2. Espressioni booleane Il comando if-else

Istruzioni decisionali

Strutture di Controllo Condizionali e Operatori Logici e Relazionali

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max

Strutture di Controllo

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

Istruzione if/else. Espressioni booleane

Costrutto if. Come utilizzare il costrutto condizionale if

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

IL COSTRUTTO SELEZIONE

Esempi comparati while, do...while

2 Operatori matematici e costrutto if

Istruzioni di controllo

ISTRUZIONI ISTRUZIONI SEMPLICI

Struttura dei programmi C

Switch. Unità 3. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Istruzioni Condizionali

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet

Struttura di un. Struttura dei programmi C

Università degli Studi di Milano

Manualistica 3 Le strutture di controllo

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

Laboratorio di Informatica

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

Laboratorio di Informatica I

Istruzioni Condizionali

PROGRAMMAZIONE: La selezione

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

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo

Informatica (A-K) 5. Algoritmi e pseudocodifica

Istruzioni condizionali di diramazione in Fortran 90

Elementi di Informatica A. A. 2016/2017

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Lezione 6 Introduzione al C++ Mauro Piccolo

C espressioni condizionali

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010

Strutture di Controllo

Strutture di controllo decisionali

Passaggio dei parametri

Strutture di Controllo

Laboratorio di Programmazione

Algoritmi e basi del C

Università degli Studi di Milano

C istruzione di assegnazione

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

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

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

PROGRAMMAZIONE: Le strutture di controllo

Strutture di Controllo Condizionali e Operatori Logici e Relazionali

Qualsiasi programma in C++ segue lo schema:

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

Istruzioni decisionali

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Marco D. Santambrogio Ver. aggiornata al 9 O/obre 2010

Lab 04 (parte A) Programmazione Strutturata

IL COSTRUTTO ITERAZIONE

Costrutti di Programmazione Strutturata. Informatica 1 / 22

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

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

Linguaggio C Informatica Grafica

Istruzioni del Linguaggio C

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Linguaggio C: Espressioni

Strutture di controllo in C

Programmazione strutturata

Come va usato il codice dei caratteri

Istruzioni di selezione in Java 1

7. Strutture di controllo

Scelte ed alternative

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

Parte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning

Laboratorio di Informatica I

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Rappresentazione degli algoritmi

PASCAL LA SELEZIONE: IF TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI. Informatica

ISTRUZIONI ISTRUZIONI SEMPLICI

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C. Strutture di controllo

Transcript:

INFORMATICA Strutture condizionali

Strutture condizionali Sono le istruzioni che rappresentano il ben noto costrutto IF THEN ELSE della programmazione strutturata. In C, come peraltro in tutti gli altri linguaggi, è disponibile in tre forme: - if (then) - if (then) else - switch (in altri linguaggi noto come CASE) Piero Demichelis 2

L istruzione if Permette di eseguire una istruzione, semplice o composta, in modo condizionato. Sintassi: if (espressione) istruzione ; espressione è di tipo logico (variabile o espressione logica o espressione relazionale con risultato logico) e deve essere sempre racchiusa tra parentesi tonde; istruzione può essere semplice o composta (nel qual caso va racchiusa tra parentesi graffe). Pertanto, più comunemente, la forma è: if ( espressione ) { istruzione semplice o composta ; } Piero Demichelis 3

L istruzione if Il significato è: valuta espressione e, se il risultato è vero, esegui istruzione, altrimenti ignorala e prosegui con l'istruzione immediatamente successiva all if. Il fatto che espressione debba fornire un risultato di tipo logico significa solo che deve fornire un risultato intero! Si ricordi che in C89 il tipo logico è simulato dal tipo intero. In definitiva dunque per espressione è accettabile qualsiasi cosa fornisca un risultato intero: sarà interpretata come falsa se il suo valore risulta 0, vera se il suo valore risulta diverso da 0. Piero Demichelis 4

L istruzione if Il fatto che la valutazione della condizione si riduca in definitiva a un test per vedere se vale 0 oppure un valore intero diverso da 0 comporta che, se a è una variabile dichiarata intera (int oppure long int), le seguenti istruzioni: - if ( a!= 0 ) {... - if ( a ) {... siano assolutamente equivalenti. Infatti qualsiasi valore di a diverso da 0 rende la condizione vera in entrambi i casi. Piero Demichelis 5

Istruzione if Questo costrutto realizza la struttura IF THEN della programmazione strutturata: l'unica differenza è l'assenza della parola chiave THEN qui sottintesa. Diagramma di flusso: V I espressione F istruzione O Piero Demichelis 6

Istruzione if: esempio Realizzare un programma che richieda da tastiera due numeri interi e visualizzi sul monitor il massimo dei due. Il problema si può risolvere con un semplice if: - Legge da tastiera i due numeri chiamandoli x e y; - Ipotizzo che x sia il più grande; - Se y è più grande di x allora scambio tra loro i valori di x e y; - Stampa il valore di x (che contiene sicuramente il valor massimo). Per scambiare tra loro i valori di x e y: - salvo il valore di x in una variabile di appoggio (provv x); - copio y in x (x y); - copio provv in y (y provv). Piero Demichelis 7

#include <stdio.h> main() { float x, y, provv; Istruzione if: esempio printf ( \nintroduci due numeri reali: "); scanf ("%f%f", &x, &y); if (y > x) { provv = x; x = y; /* scambia x e y tra loro */ y = provv; } printf ("\nil maggiore è %f il minore è %f", x, y); } Piero Demichelis 8

Osservazioni su if Attenzione a scrivere un istruzione di questo tipo: if ( a = 0 ) {... dove quasi certamente si intendeva porre la condizione di a uguale a zero. Purtroppo la sintassi per realizzare quell espressione relazionale è sbagliata (si doveva scrivere a == 0) ma l istruzione in se è formalmente corretta per cui il compilatore non genera errore (al più qualche compilatore segnala un warning). Piero Demichelis 9

Istruzione if... else Consente di eseguire una istruzione (semplice o composta) oppure un'altra istruzione (anch essa semplice o composta) a seconda del verificarsi o meno di una certa condizione. Sintassi: if (espressione) istruzione 1; else istruzione 2; espressione è una variabile logica o una espressione con risultato logico racchiusa tra parentesi tonde; istruzione 1 e istruzione 2 possono essere semplici o composte (ovvero un gruppo di istruzioni racchiuse tra parentesi graffe). Piero Demichelis 10

Istruzione if... else Più comunemente nei programmi si usa la forma estesa e più leggibile dell istruzione: if (espressione) { istruzione semplice o composta 1 ; } else { istruzione semplice o composta 2 ; } Piero Demichelis 11

Istruzione if... else Significato: valuta espressione e, se il risultato è vero, esegui istruzione 1 e ignora istruzione 2, altrimenti ignora istruzione 1 ed esegui istruzione 2. Questo costrutto realizza la struttura IF - THEN ELSE della programmazione strutturata: anche in questo caso se ne differenzia per l assenza della parola chiave THEN qui sottintesa. Poiché non esistono limitazioni a istruzione, queste possono contenere qualsiasi costrutto, compresi altri if (si parla allora di if annidati ). Piero Demichelis 12

Istruzione if... else Diagramma di flusso: V I espressione F istruzione 1 istruzione 2 O Piero Demichelis 13

Istruzione if... else: esempio 1 Realizzare un programma che richieda da tastiera due numeri interi e visualizzi sul monitor il massimo dei due. Il problema si risolve con un if... else (non considerando il caso x = y): - Legge da tastiera i due numeri chiamandoli x e y; - Se x è più grande di y allora visualizza x ; altrimenti visualizza y. Piero Demichelis 14

Istruzione if... else: esempio 1 #include <stdio.h> main() { float x, y; printf ( \nintroduci due numeri reali: "); scanf ("%f%f", &x, &y); if (x > y) printf ( \nil maggiore è: %f, x); else printf ( \nil maggiore è: %f, y); } Piero Demichelis 15

Istruzione if... else: esempio 2 Realizzare un programma che calcoli quoziente e resto di due numeri interi positivi letti da tastiera e segnali errore se uno dei due è negativo (attenzione alla divisione per zero!). Pseudocodice: - Legge i due numeri da tastiera e li chiama n1 e n2; - Se n1 e n2 sono entrambi positivi e n2 è diverso da 0: calcola il quoziente ( n1 / n2); calcola il resto (n1 % n2); visualizza quoziente e resto; altrimenti visualizza messaggio d errore. Piero Demichelis 16

#include <stdio.h> Istruzione if... else: esempio 2 main() { int n1, n2, quoz, resto; printf ("\nintrodurre due numeri interi: "); scanf ("%d%d", &n1, &n2); if ((n1 >= 0) && (n2 > 0)) { quoz = n1 / n2; resto = n1 % n2; /* oppure resto = n1 - (quoz * n2); */ printf ( \nquoziente= %d, resto= %d\n", quoz, resto); } else printf ( \nerrore nei dati"); } Piero Demichelis 17

Istruzione if... else: esempio 3 Leggere due valori A e B, e calcolarne la differenza in valore assoluto : D = A-B Soluzione #include <stdio.h> main() { int a, b, differenza; } printf ( \nintroduci i 2 valori (a e b): ); scanf ( %d%d, &a, &b); if (a >= b) differenza = a - b; else differenza = b - a; printf ( \nvalore assoluto: %d, differenza); Piero Demichelis 18

Istruzione if... else: osservazioni L'istruzione che precede l'else deve essere chiusa normalmente con il punto e virgola. L'else infatti fa parte della struttura if... else e non entra in gioco nell'analisi sintattica dell'istruzione che la precede, la quale deve avere quindi una chiusura regolare. Negli if annidati possono sorgere delle ambiguità. Ad esempio nel costrutto: if (espressione 1) if (espressione 2) istruzione 1; else istruzione 2; non è chiaro se l'else appartiene all'if più interno o più esterno. L'uso delle parentesi { e } può dirimere qualsiasi dubbio. Piero Demichelis 19

Istruzione if... else: osservazioni La precedente istruzione può essere riscritta come: if (espressione 1) { if (espressione 2) istruzione 1; else istruzione 2; } else appartenente all if interno oppure: if (espressione 1) { if (espressione 2) istruzione 1; } else istruzione 2; else appartenente all if esterno Piero Demichelis 20

Istruzione if... else: osservazioni Non conviene usare if annidati su troppi livelli: si introducono difficoltà in fase di test (debugging) e rallentamenti nell'esecuzione del programma. Inoltre sono da evitare istruzioni del tipo: if (dato1 == dato2) flag = VERO; else flag = FALSO; che possono essere sostituite più elegantemente dalle assegnazioni: flag = (dato 1 == dato2); Piero Demichelis 21

Esempio: equazione di II grado L applicazione classica della struttura if... else è la soluzione completa dell equazione di II grado. La soluzione è fornita da un costrutto if... else nel quale sono annidati altre strutture di tipo if... else e if che risolvono i vari rami secondari. La soluzione deve tener conto di tutti i possibili casi che possono determinarsi nella soluzione (equazione impossibile, indeterminata, di I grado, ecc.). Piero Demichelis 22

Equazione di II grado Legge i coefficienti a, b e c si a = 0? no si Equazione indeterminata c = 0? si no Equazione impossibile b = 0? delta = b*b 4*a*c no w = 2*a w1= -(b / w) Equazione di I grado: x= -(c / b) delta = 0? Radice reali: x 1 = w 1 + w 2 x 2 = w 1 - w 2 delta no w 2 = / w delta < 0? no si si Radice doppia x = w1 Radice complesse coniugate: x = w 1 j w 2 Piero Demichelis 23

Istruzione switch Quando la condizione da imporre non è intrinsecamente binaria ma si deve distinguere tra più casi ed eseguire le istruzioni approppriate per ogni singolo caso, l if annidato può non essere più conveniente per complessità, leggibilità e, qualche volta, anche per tempo di esecuzione (valutazione di n condizioni). Per questi casi c è l'istruzione switch. Piero Demichelis 24

Istruzione switch Diagramma di flusso: I caso 1 caso 2 espressione caso n caso 3 istr. 1 istr. 2 istr. 3... istr. n O Piero Demichelis 25

Istruzione switch Sintassi: switch (espressione) { case <costante 1>: <istruzione 1> break; case <costante 2>: <istruzione 2> break; }...... [ default: < istruzione default> ] Piero Demichelis 26

Istruzione switch - espressione : espressione a valore numerico di tipo int o char, ma non float o double. - <costante1>, <costante1>,... sono costanti dello stesso tipo dell'espressione - <istruzione 1>, <istruzione 2>,... sono sequenze di istruzioni (senza graffe!) Significato: - In base al valore di espressione, esegui le istruzioni del case corrispondente. - Nel caso nessun case venga intercettato, esegui le istruzioni corrispondenti al caso default (se esiste). Piero Demichelis 27

Istruzione switch: osservazioni I vari case devono rappresentare condizioni MUTUAMENTE ESCLUSIVE! I vari case vengono eseguiti in sequenza, uno dopo l altro: per evitarlo è necessario interrompere il flusso usando l istruzione break alla fine di ogni blocco di istruzioni (il flusso prosegue con la prima istruzione successiva alla switch). Se il blocco di default non è presente e nessun case viene soddisfatto, l esecuzione procede con la prima istruzione che segue la switch. Piero Demichelis 28

Istruzione switch: esempio main() { int x; printf ( \nintroduci un numero intero: ); scanf ( %d, &x); switch (x) { case 1: printf( \nhai introdotto 1 ); break; case 2: printf( \nhai introdotto 2 ); break; default: printf( \nhai introdotto un numero diverso da 1 e 2 ); } } Piero Demichelis 29

Osservazioni su switch I case possono essere indicati nell ordine che si desidera e non in ordine strettamente crescente o decrescente. main() { int x; printf ( \nintroduci un numero intero: ); scanf ( %d, &x); switch (x) { case 92: printf( \nhai introdotto 92 ); break; case -14: printf( \nhai introdotto -14 ); break; case 36: printf( \nhai introdotto 36 ); } } Piero Demichelis 30