La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 CDL in Ingegneria Elettronica - A.A. 2006-2007 7. Strutture di controllo Ing.

Presentazioni simili


Presentazione sul tema: "Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 CDL in Ingegneria Elettronica - A.A. 2006-2007 7. Strutture di controllo Ing."— Transcript della presentazione:

1 Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 CDL in Ingegneria Elettronica - A.A. 2006-2007 7. Strutture di controllo Ing. Simona Colucci

2 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Indice 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

3 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Programmazione strutturata TEOREMA DI BOHM-JACOPINI: tutti i programmi possono essere scritti con lutilizzo delle sole strutture di controllo: sequenza, selezione e iterazione (senza luso del salto goto) Le strutture di controllo consentite sono quelle di selezione(if-else) e iterazione (while)

4 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Istruzioni di selezione: il costrutto switch (1) Switch: –istruzione di selezione a più vie(se lelse non è uno solo) –consente la scelta di unistruzione 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; }

5 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Listruzione break fa saltare le istruzioni dei successivi rami case e fa eseguire listruzione immediatamente successiva allo switch Listruzione di default viene eseguita se la valutazione dellespressione determina un valore che non appartiene a nessuno degli insiemi specificati nei vari case Buone regole per luso dello switch: –I valori delle espressioni nelle clausole case devono essere costanti e tutti diversi tra loro –Listruzione default assicura il trattamento completo dei diversi casi –Listruzione break nellultimo case non è strettamente necessaria ma serve per eventuali estensioni del codice Il costrutto switch (2)

6 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 switch(Dipendente.Qualifica) { caseCapoProgetto:Dipendente.Retribuzione = (Dipendente.Retribuzione * 11) / 10; break; caseVenditore:Dipendente.Retribuzione = (Dipendente.Retribuzione * 12) / 10; break; caseSegretario: Dipendente.Retribuzione = (Dipendente.Retribuzione * 12) / 10; break; } Il costrutto switch (3)

7 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 … /* Programma Melodia dal tuo nome */ {charC; intresto; 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)

8 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Istruzioni 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]; }

9 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Il ciclo for (2) /* Programma InvertiSequenza */ #include #defineLunghezzaSequenza100 void main () { intContatore; intMemorizzazione[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: - -

10 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Il ciclo for (3) /* Programma ContaCaratteri */ #include #defineDimVettoreFrequenze123 voidmain () { charDato, Cursore; intFrequenzaCaratteri[DimVettoreFrequenze]; /* Inizializzazione dell'array di conteggio FrequenzaCaratteri. Vengono prese in considerazione solo le lettere dell'alfabeto, poiché il programma viene applicato a un testo costituito da parole */ for(Cursore = 'A'; Cursore <= 'Z'; Cursore++) FrequenzaCaratteri[Cursore] = 0; for(Cursore = 'a'; Cursore <= 'z'; Cursore++) FrequenzaCaratteri[Cursore] = 0; scanf (" %c", &Dato); /* Inizia la lettura del testo */ …

11 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 … /* Inizia la lettura del testo */ while (Dato != '#') { /* Se il dato letto è uno spazio esso deve essere semplicemente ignorato */ if(!(Dato == ' ')) /* Si verifica che il dato letto sia una lettera dell'alfabeto e non altro carattere non ammesso */ if(Dato 'z' || (Dato > 'Z' && Dato < 'a')) printf ("Il testo contiene dei caratteri non ammessi"); else FrequenzaCaratteri[Dato] = FrequenzaCaratteri[Dato] + 1; scanf (" %c", &Dato); } … Il ciclo for (4)

12 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 … /* Stampa dei totali delle lettere maiuscole */ for (Cursore = 'A'; Cursore <= 'Z'; Cursore++) { printf ("Il numero di volte in cui il carattere %c compare nel testo è: %d\n", Cursore, FrequenzaCaratteri[Cursore]); } /* Stampa dei totali delle lettere minuscole */ for (Cursore = 'a'; Cursore <= 'z'; Cursore++) { printf ("Il numero di volte in cui il carattere %c compare nel testo è: %d\n", Cursore, FrequenzaCaratteri[Cursore]); } Il ciclo for (5)

13 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 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");

14 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 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)

15 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Listruzione 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

16 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Le istruzioni break e continue (1) Listruzione break provoca la fuoriuscita dal corpo di un ciclo o da unistruzione 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 */

17 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 Listruzione continue provoca linterruzione della corrente iterazione del ciclo (solo while, do while o for) e il passaggio alliterazione 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 = '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)


Scaricare ppt "Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2006-2007 CDL in Ingegneria Elettronica - A.A. 2006-2007 7. Strutture di controllo Ing."

Presentazioni simili


Annunci Google