8 Linguaggio C - Strutture di Controllo
Transcript
8 Linguaggio C - Strutture di Controllo
Programmazione strutturata Programmazione strutturata (cosa significa?) Per programmazione strutturata si intende un tipo di programmazione che fa uso di particolari regole/criteri (chiamate “strutture”) per costruire i programmi in maniera “ordinata” Fondamenti di Informatica Programmazione strutturata (perchè?) La programmazione strutturata serve ad evitare la costruzione di programmi con istruzioni di tipo salto “goto” che rendono difficile la vita ai programmatori sia durante lo sviluppo che durante il debug o la manutenzione del software (“spaghetti code”) 8. Linguaggio C - Strutture di Controllo Corso di Laurea in Ingegneria Informatica e dell’Automazione A.A. 2012-2013 2° Semestre Prof. Giovanni Pascoschi Fondamenti di Informatica – A.A. 2012-2013 Programmazione strutturata 2 Teorema di Bohm-Jacopini Teorema di Bohm-Jacopini Qualsiasi applicazione/programma puo’ costruirsi tramite tre semplici “strutture di controllo”: sequenza selezione (o alternativa) iterazione (o ripetizione) Obiettivi della Programmazione strutturata rendere piu’ facile la lettura dei programmi (e quindi la loro modifica e manutenzione) Abolizione di salti incondizionati (goto) nel flusso di controllo Mattoni elementari di un programma informatico Queste tre tipologie di stutture di controllo costituiscono pertanto i mattoni elementari che possiamo sfruttare per implementare un qualsiasi programma software. La parte di esecuzione di un programma è ottenuta dalla combinazione di istruzioni elementari tramite regole di composizione (strutture di controllo) Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni a cura di Pascoschi Giovanni 3 Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 4 Sequenza in C Alternativa in C (a una via) #include <stdio.h> int main( ) { int x, y; printf( “Inserire due numeri \n”); scanf(“%d %d”, &x, &y); printf(“la somma = %d”, x+y); return 0; } Fondamenti di Informatica – A.A. 2012-2013 #include <stdio.h> int main( ) { int voto; printf( “Inserire il voto dell’esame \n”); scanf(“%d”, &voto); if (voto>=18){ printf( “Promosso \n”); } return 0; } a cura di Pascoschi Giovanni 5 Alternativa in C (a due vie) a cura di Pascoschi Giovanni 6 If annidati : il problema dell’else sospeso #include <stdio.h> int main() { int voto; printf( “Inserire il voto dell’esame \n”); scanf(“%d”, &voto); if (voto>=18){ printf(“Promosso \n”); } else { printf( “Bocciato \n”); printf( “Mi spiace \n”); } return 0; } Fondamenti di Informatica – A.A. 2012-2013 Fondamenti di Informatica – A.A. 2012-2013 … if (voto>=18) if(voto>27) printf( “Molto bene! \n”); else printf( “Insufficiente \n”); … Cosa appare sullo schermo? 1. voto=28 2. voto=15 3. voto=19 a cura di Pascoschi Giovanni 7 Fondamenti di Informatica – A.A. 2012-2013 Molto bene ………. Insufficiente a cura di Pascoschi Giovanni 8 Il problema dell’else sospeso Istruzione while() … if (voto>=18) { if(voto>27) { printf (“Molto bene! \n”); L’istruzione while() permette di implementare un ciclo di ripetizione pre-condizionale Sintassi: } } else { printf( “Insufficiente \n”); while(condizione) { istruzioni ………. } } … L’istruzione viene eseguita finche’ la condizione rimane vera Puo’ essere eseguita 0 o piu’ volte Suggerimento : Racchiudere comunque istruzione if e istruzione else tra parantesi graffe { } Fondamenti di Informatica – A.A. 2012-2013 9 a cura di Pascoschi Giovanni Istruzione while() : esempio 1 a cura di Pascoschi Giovanni 10 Istruzione while() : esempio 1 Una classe di 100 studenti ha sostenuto un test. Inserire i voti (compresi tra 0 e 30) e calcolare la media. Fondamenti di Informatica – A.A. 2012-2013 Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 11 #include <stdio.h> int main() { int totale=0, contatore=0, voto; double media; while(contatore<100) { printf( “Inserire il voto dell’esame \n”); scanf(“%d”,&voto); totale=totale+voto; contatore=contatore+1; } media=totale/100.0; printf(“La media è %f“, media); return 0; } Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 12 Istruzione while() : esempio 2 Istruzione while() : esempio 2 #include <stdio.h> int main() { int totale=0, contatore=0, voto; double media; printf(“Inserire il voto dell’esame o -1\n”); scanf(“%d”,&voto); while(voto !=-1) { totale=totale+voto; contatore=contatore+1; printf(“Inserire il voto dell’esame o -1\n)”; scanf(“%d”,&voto); } if (contatore>0) { media=(double) totale/contatore; printf(“La media è %f \n“,media); } else { printf(“Non è stato inserito alcun valore \n”); } return 0; } Una classe di studenti (N non noto) ha sostenuto un test. Inserire i voti (compresi tra 0 e 30) e calcolare la media. Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 13 Istruzione do…while() Fondamenti di Informatica – A.A. 2012-2013 N studenti non noto valore di guardia (“tappo”) a cura di Pascoschi Giovanni 14 a cura di Pascoschi Giovanni 16 Istruzione do…while() – esempio L’istruzione do…while() permette di implementare un ciclo di ripetizione post-condizionale Sintassi: do{ istruzioni ………. } while(condizione); #include <stdio.h> int main() { int counter = 1; do { printf(“%d”,counter); counter++; } while (counter <= 10 ); printf(“\n”); return 0; } L’istruzione viene eseguita finche’ la condizione rimane vera Puo’ essere eseguita 1 o piu’ volte Fondamenti di Informatica – A.A. 2012-2013 1 2 3 4 5 6 7 8 9 10 a cura di Pascoschi Giovanni 15 Fondamenti di Informatica – A.A. 2012-2013 Istruzione for Istruzione for – esempio Calcolo Massimo L’istruzione for permette di implementare un ripetizione enumerativo (con contatore) ciclo di Sintassi: for(iniz; condizione; modifica){ istruzioni ………. } L’istruzione viene eseguita finche’ la condizione rimane vera Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 17 Istruzione for – esempio 2 #include <stdio.h> int main() { int i,n, fattoriale=1; printf(“Inserire Numero: “); scanf(“%d”,& n); for (i =2; i<=n; i++) { fattoriale*=i; } printf(“%d ! = %d“,n,fattoriale); return 0; } Fondamenti di Informatica – A.A. 2012-2013 #include <stdio.h> int main( ) { int i; double next; double highest; for(i=0; i<100; i++) { printf("Please enter the temperature values:\n“); scanf(“%f”,&next); if(i == 0) highest = next; if(highest < next) highest = next; } printf("The highest temperature is %f \n“,highest); return 0; } Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 18 Istruzioni break & continue L’istruzione break usata in un ciclo di ripetizione permette di uscire immediatamente dal ciclo di ripetizione stesso L’istruzione continue in un ciclo di ripetizione permette di saltare le successive istruzioni presenti nel ciclo, permettendo di andare alla successiva iterazione 0!=1 a cura di Pascoschi Giovanni 19 Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 20 Istruzione break (esempio) Istruzione continue (esempio) #include <iostream> using namespace std; int main() { int count; for ( count = 1; count <= 10; count++ ) { if ( count == 5 ) break; printf(“%d ”,count); } printf("\nBroke out of loop at count = %d \n“,count); return 0; } #include <iostream> using namespace std; int main() { int count; for ( count = 1; count <= 10; count++ ) { if ( count == 5 ) continue; printf(“%d “,count); } printf("\nUsed continue to skip printing 5\n“); return 0; } 1234 Broke out of loop at count = 5 Fondamenti di Informatica – A.A. 2012-2013 1 2 3 4 6 7 8 9 10 Used continue to skip printing 5 a cura di Pascoschi Giovanni 21 Istruzione switch a cura di Pascoschi Giovanni 22 Riepilogo della lezione L’istruzione switch permette di implementare una struttura a scelta multipla Sintassi: switch(variabile){ case valore1: istruzioni1; break; case valore2: istruzioni2; break; ………. default: istruzioni; break; } Fondamenti di Informatica – A.A. 2012-2013 Fondamenti di Informatica – A.A. 2012-2013 Strutture di controllo C Programmazione strutturata Struttura sequenza Struttura alternativa Strutture di ripetizione (pre,post, enumerativa) Struttura di scelta multipla a cura di Pascoschi Giovanni 23 Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 24 Fine della lezione Domande? Fondamenti di Informatica – A.A. 2012-2013 a cura di Pascoschi Giovanni 25