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