INFORMATICA Strutture condizionali

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Process synchronization
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Selezione A. Ferrari.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Selezione - approfondimento
Istruzioni condizionali e blocco
Algoritmi e Programmazione
esponente del radicando
(se a = 0 l’equazione bx + c = 0 è di primo grado)
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA Strutture iterative
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Ingresso interattivo (scanf(); %lf)
Iterazione enumerativa (for)
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Algebra di Boole ed elementi di logica
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 3 Ottobre 2013.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Istruzioni di selezione (If/else/switch)
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Dichiarazioni e tipi predefiniti nel linguaggio C
Le funzioni.
Espressioni condizionali
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Javascript 5 Selezione. Listruzione IF (in italiano SE) pone una scelta, ossia 'se vero' esegui in un modo oppure 'se falso' esegui in un altro modo.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 3 (Deitel) Lo sviluppo di programmi strutturati Indice degli argomenti Introduzione 3.2 -
Equazione di secondo grado.
CODIFICA Da flow-chart a C++.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Lezione 6 Strutture di controllo Il condizionale
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Parte 4 Elementi di Informatica di base
Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.
14 marzo 2002 Avvisi:.
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Anno accademico Le istruzioni di controllo in C.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Lz. 3 (13/14)Elementi di Programmazione1 Istruzioni (strutture) di controllo 1.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
Introduzione a Javascript
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Algoritmi e basi del C Struttura di un programma
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
Algoritmi e basi del C Struttura di un programma
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Transcript della presentazione:

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)

if (espressione) istruzione ; 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 ; }

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.

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.

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: I V F espressione istruzione O

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).

Istruzione if: esempio #include <stdio.h> main() { float x, y, provv; 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);

Osservazioni su if Attenzione a scrivere un’istruzione di questo tipo: 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).

if (espressione) istruzione 1; else istruzione 2; 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).

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 ;

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 ).

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

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.

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

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.

Istruzione if ... else: esempio 2 #include <stdio.h> 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");

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

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.

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

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

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.).

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

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.

Istruzione switch I O espressione Diagramma di flusso: caso 1 caso n ................. istr. n O

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

Istruzione switch Significato: 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).

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.

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“); default: printf(“\nHai introdotto un numero diverso da 1 e 2“); }

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“); case 36: printf(“\nHai introdotto 36“); } }