Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo...

14
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012 7. Strutture di controllo 7. Strutture di controllo Ing. Ing. Simona Colucci Simona Colucci

Transcript of Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo...

Page 1: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

7. Strutture di controllo7. Strutture di controllo Ing. Ing. Simona ColucciSimona Colucci

Page 2: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

IndiceIndice

• Istruzioni di selezione– Sostituibili dal costrutto switch

• Istruzioni cicliche (di iterazione)– Sostituibili dal costrutto for e do-while

• Istruzioni di salto– Codificate con il go-to, non utilizzabile nella

programmazione strutturata

Page 3: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Programmazione strutturataProgrammazione strutturata

TEOREMA DI BOHM-JACOPINI:tutti i programmi possono essere scritti

con l’utilizzo delle sole strutture di controllo: sequenza, selezione e iterazione (senza l’uso

del salto goto)

Le strutture di controllo consentite sono quelle di selezione(if-else) e iterazione

(while)

Page 4: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Istruzioni di selezione:Istruzioni di selezione:il costrutto il costrutto switchswitch (1) (1)

Switch: – istruzione di selezione a più vie(se l’else non è uno solo)– consente la scelta di un’istruzione tra altre sulla base del valore

di una particolare variabile o espressione– Sintassi:1. switch(CarattereLetto)

{case 'A': case 'G': case 'H': printf ("Il carattere letto è A o G o H\n");

break;case 'F' : printf ("Il carattere letto è F\n");

break;}

2. switch(CarattereLetto){

case 'A': case 'G': case 'H': printf ("Il carattere letto è A o G o H\n");break;

case 'F' : printf ("Il carattere letto è F\n");break;

default: printf ("il carattere letto è sbagliato\n");

break;}

Page 5: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• L’istruzione break fa saltare le istruzioni dei successivi rami case e fa eseguire l’istruzione immediatamente successiva allo switch

• L’istruzione di default viene eseguita se la valutazione dell’espressione determina un valore che non appartiene a nessuno degli insiemi specificati nei vari case

• Buone regole per l’uso dello switch:– I valori delle espressioni nelle clausole case devono essere

costanti e tutti diversi tra loro– L’istruzione default assicura il trattamento completo dei diversi

casi– L’istruzione break nell’ultimo case non è strettamente necessaria

ma serve per eventuali estensioni del codice

Il costrutto switch (2)Il costrutto switch (2)

Page 6: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

switch (Dipendente.Qualifica){

case CapoProgetto: Dipendente.Retribuzione =

(Dipendente.Retribuzione * 11) / 10;

break;case Venditore: Dipendente.Retribuzione =

(Dipendente.Retribuzione * 12) / 10;

break;case Segretario: Dipendente.Retribuzione =

(Dipendente.Retribuzione * 12) / 10;

break;}

Il costrutto switch (3)Il costrutto switch (3)

Page 7: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

… /* Programma Melodia dal tuo nome */{ char C;

int resto;printf ("Inserisci il primo carattere del tuo nome\n");scanf (" %c", &C);while (C != '#'){

resto = C % 7;switch (resto){case 0: printf ("Il carattere %c corrisponde alla nota 'do'\n", C); break;case 1: printf ("Il carattere %c corrisponde alla nota 're'\n", C); break;…case 6: printf ("Il carattere %c corrisponde alla nota 'si'\n", C); break;}printf ("Inserisci il prossimo carattere del tuo nome – # termina il programma");scanf (" %c", &C);

}}

Il costrutto switch (4)Il costrutto switch (4)

Page 8: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Istruzioni cicliche: il ciclo forIstruzioni cicliche: il ciclo for

Nei cicli a conteggio:• Invece di:

VariabileDiConteggio = ValoreIniziale; while (VariabileDiConteggio <= ValoreFinale) {

[Sequenza di istruzioni da ripetere]; VariabileDiConteggio = VariabileDiConteggio + 1;

}

• Usare:

for ( VariabileDiConteggio = ValoreIniziale; VariabileDiConteggio <= ValoreFinale; VariabileDiConteggio = Variabile di Conteggio + 1)

{[Sequenza di istruzioni da ripetere];

}

Page 9: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Il ciclo for (2)Il ciclo for (2)

/* Programma InvertiSequenza */#include <stdio.h>#define LunghezzaSequenza 100  void main () {

int Contatore; int Memorizzazione[LunghezzaSequenza]; for (Contatore = 0; Contatore < LunghezzaSequenza; Contatore++)

scanf ("%d", &Memorizzazione[Contatore]); for (Contatore = LunghezzaSequenza – 1; Contatore >= 0; Contatore––)

printf ("%d", Memorizzazione[Contatore]); }

Due speciali operatori unari:– Operatore di autoincremento: ++– Operatore di autodecremento: - -

Page 10: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Il ciclo do-while (1)Il ciclo do-while (1)

• Invece di:

Contatore = 0; scanf (" %c", &Dato); Testo[Contatore] = Dato;while (Dato != '%' &&

Contatore < LunghezzaMassima)

{ Contatore = Contatore + 1; scanf (" %c", &Dato); Testo[Contatore] = Dato;

}if (Contatore ==

LunghezzaMassima && Dato != '%') printf ("La sequenza è troppo lunga");

• Usare:

Contatore = 0;

do

{

scanf (" %c", &Dato);

Testo[Contatore] = Dato;

Contatore = Contatore + 1;

} while (Dato != '%' && Contatore < LunghezzaMassima);

if (Contatore == LunghezzaMassima && Dato != '%')

printf ("La sequenza è troppo lunga");

Page 11: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Differenze con il while:– Il corpo del ciclo viene eseguito almeno una volta, anche

se la condizione non è verificata; nel while non viene eseguita necessariamente

– Il do-while è preferibile al while se la condizione è su una variabile da leggere nel ciclo stesso

• Rappresentazione

Il ciclo do-while (2)Il ciclo do-while (2)

Page 12: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

L’istruzione gotoL’istruzione goto

scanf ("%d"%d", &x, &y);if (y == 0)

goto error;printf ("%f\n", x/y);...error: printf ("y non può essere uguale a 0\n");

DA NON USARE NELLA PROGRAMMAZIONE STRUTTURATA

Page 13: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Le istruzioni break e continue (1)Le istruzioni break e continue (1)

• L’istruzione break provoca la fuoriuscita dal corpo di un ciclo o da un’istruzione di switch

/* Ciclo infinito */ while (true){

scanf ("%d%d", &x, &y);if (x == 0)

/* Esce dal ciclo di lettura se x è uguale a 0 */break;printf ("%f\n", x/y);

}/* break provoca l'esecuzione dell'istruzione che

segue questo commento */

Page 14: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• L’istruzione continue provoca l’interruzione della corrente iterazione del ciclo (solo while, do while o for) e il passaggio all’iterazione successiva

/* Codice che elabora tutti i caratteri eccetto le lettere minuscole e maiuscole */

 for (i = 0; i < NumDati; i++) {

scanf (" %c", &Dato); if ((Dato >= 'A' && Dato <= 'Z') || (Dato >= 'a' && Dato <= 'z'))

continue; /* Istruzioni che elaborano gli altri caratteri */

...  

/* continue trasferisce qui il controllo perché possa iniziare la prossima iterazione del ciclo. È importante notare che i++ viene eseguita anche

in questo caso */ }

Le istruzioni break e continue (2)Le istruzioni break e continue (2)