Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo...
-
Upload
angioletta-giovannini -
Category
Documents
-
view
215 -
download
0
Transcript of Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 7. Strutture di controllo...
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
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
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)
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;}
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)
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)
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)
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];
}
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: - -
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");
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)
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
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 */
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)