20 marzo 2002
Avvisi:
• Giovedi 28 marzo la lezione e’ sospesa.
• Nuovo indirizzo di e-mail:
[email protected]
Spedire messaggi e esercizi solo qui!!!
Qualche minuto di “laboratorio”…
Analizziamo le soluzioni proposte
da voi agli esercizi della volta scorsa
Esercizi:
• Esercizio 1
Scrivere un programma che prenda in input 15 valori interi e
determini il minore e il maggiore tra questi. Il programma dovra’
utilizzare soltanto 3 variabili (oltre il contatore per il ciclo).
Vediamo le soluzioni che avete proposto….
• Esercizio 3.33
Scrivere un programma che prenda in input il lato di un quadrato
(valori consentiti tra 1 e 20) e quindi lo disegni utilizzando
asterischi.
• Esercizio 3.34
Come il precedente, pero’ il quadrato viene disegnato “vuoto”.
Esempio
Se il lato fosse 4, i programmi dovrebbero visualizzare:
****
****
Es.3.33
****
Es.3.34
*
*
****
*
*
****
****
Vediamo le soluzioni che avete proposto….
• Esercizio 3.44
Scrivere un programma che prenda in input tre valori di tipo
float e quindi determini e visualizzi se possono
rappresentare i lati di un triangolo.
Vediamo le soluzioni che avete proposto….
Esercizio 3.44
a, b, c
a,b,c >=0
lati di un triangolo
b
c
a
Comuqnue prendo un lato, questo deve
essere minore della somma degli altri due.
Il lato maggiore deve essere minore della
somma degli altri due.
c
b
a
a < b+c
b < a+c
c < a+b
a < b+c
b-c < a
c-b < a
Sia a>b e a>c
allora a < b+c
• Adesso sappiamo scrivere (e comprendere)
semplici programmi in C
• Cominciamo a introdurre piu’ dettagli….
Elementi fondamentali della iterazione
• Loop
– Gruppo di istruzioni da eseguire ripetutamente finche’
certe condizioni rimangono vere
• Iterazione controllata da contatore
– Iterazione definita – si conosce il numero di volte che
verra’ eseguita
– Variabile di controllo usata per contare il numero di
iterazioni
• Iterazione controllata da sentinella
– Iterazione indefinita
– Usata quando non si conosce il numero di iterazioni
– Il valore sentinella indica la “fine dei dati"
Iterazione controllata da contatore
• Richiede:
– nome della variabile di controllo (contatore del loop).
– valore iniziale di tale variabile.
– Condizione che testa il valore finale di tale variabile
(cioe’ se il loop deve continuare).
– incremento (o decremento) del quale la variable di
controllo e’ modificata ogni volta che si esegue il loop.
Iterazione controllata da contatore
• Esempio:
int counter =1;
//inizializzazione
while (counter <= 10){
//condizione di ripetizione
printf( "%d\n", counter );
++counter;
//incremento
}
–int counter = 1; il nome counter, dichiarato
–come intero, riserva uno spazio in memoria ed e’ ha il valore iniziale 1
Struttura di iterazione for
• Formato per il loop for
for ( inizializzazione; condizione di iterazione; incremento)
istruzione
Esempio:
for( int counter = 1; counter <= 10; counter++ )
printf( "%d\n", counter );
– Scrive i numeri interi da 1 a 10.
Struttura di iterazione for
• I loop for si possono riscrivere come loop while
for ( inizializzazione; condizione di iterazione; incremento)
istruzione
E’ (quasi) sempre equivalente a:
inizializzazione;
while (condizione di iterazione){
istruzione
incremento;
}
Struttura for : Note e Osservazioni
• Inizializzazione e incremento
–
Possono essere una lista separata da virgole
for (int i = 0, j = 0; j + i <= 10; j++, i++)
printf( "%d\n", j + i );
• Espressioni aritmetiche
– Inizializzazione, condizione di iterazione, e incremento
possono contenere espressioni aritmentiche.
Supp. che x=2 e y=10. Le seguenti istruzioni sono equivalenti:
for ( j = x; j <= 4 * x * y; j += y / x )
for ( j = 2; j <= 80; j += 5 )
Struttura for : Note e Osservazioni
• Se la condizione del loop e’ false all’inizio
– Il corpo del for non viene eseguito
– Il controllo presegue con l’istruzione dopo la struttura
for
• Nella condizione del loop usare preferibilmente il
<= o il >=
– Garantisce che il numero di iterazioni sia esattamente
quello che pensiamo….
Struttura for : Note e Osservazioni
• "Incremento" puo’ essere negativo (decremento)
• Variabile di controllo
– Spesso stampata o usata nel corpo for, a volte pero’ e’
usata solo per l’iterazione.
• Flowchart del for simile al while
1 /* Fig. 4.5: fig04_05.c
2
Summation with for */
3 #include <stdio.h>
4
5 int main()
6 {
7
int sum = 0, number;
8
9
for ( number = 2; number <= 100; number += 2 )
10
sum += number;
11
12
printf( "Sum is %d\n", sum );
13
14
return 0;
15 }
Sum is 2550
Sommario
Somma dei numeri pari
da 2 a 100
Output
La struttura di iterazione do/while
• La struttura di iterazione do/while
– Simile alla struttra while
– La condizione di iterazione e’ testata dopo il corpo del
loop da eseguire
• Tutte le azioni sono eseguite almeno una volta
• Formato:
do {
istruzione
} while ( condizione );
– E’ buona pratica mettere le parentesi anche se non sono
necessarie (per distinguerla dall’istruzione while)
La struttura di iterazione do/while
• Esempio
( Supponi
counter = 1)
do {
printf( "%d ", counter );
} while (++counter <= 10);
Scrive i numeri interi da 1 a 10
La struttura di iterazione do/while
azioni
true
Condizione
false
1 /* Fig. 4.9: fig04_09.c
2
Sommario
Using the do/while repetition structure */
3 #include <stdio.h>
4
5 int main()
6 {
7
Inizializza variabile
int counter = 1;
8
9
do {
10
printf( "%d
11
", counter );
Loop
Print
} while ( ++counter <= 10 );
12
13
return 0;
14 }
1
2
3
4
5
6
7
8
9
10
Output
La struttura di selezione multipla switch
• switch
– Utile quando una variabile (o un espressione) e’ testata per tutti i
possibili valori che puo’ assumere e devono essere compiute azioni
differenti
• Formato
– Serie di etichette case e un caso opzionale di default
switch ( value ){
case '1':
actions
case '2':
actions
default:
actions
}
– break;
provoca l’uscita dalla struttura
La struttura di selezione multipla switch
caso a
true
azioni caso a
break
Azioni caso b
break
Azioni caso z
break
false
caso b
true
false
.
.
.
caso z
false
Azioni default
true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* Fig. 4.7: fig04_07.c
Counting letter grades */
#include <stdio.h>
Sommario
int main()
{
int grade;
int aCount = 0, bCount = 0, cCount = 0,
dCount = 0, fCount = 0;
printf(
printf(
"Enter the letter grades.\n" );
"Enter the EOF character to end input.\n"
1. Inizializzazione
);
while ( ( grade = getchar() ) != EOF ) {
switch ( grade ) {
/* switch nested in while */
case 'A': case 'a':
++aCount;
break;
/* grade was uppercase A */
/* or lowercase a */
case 'B': case 'b':
++bCount;
break;
/* grade was uppercase B */
/* or lowercase b */
case 'C': case 'c':
++cCount;
break;
/* grade was uppercase C */
/* or lowercase c */
case 'D': case 'd':
++dCount;
break;
/* grade was uppercase D */
/* or lowercase d */
2. Input dei dati
2.1 switch loop per
aggiornare count
33
34
case 'F': case 'f':
35
++fCount;
36
break;
/* or lowercase f */
2.1
37
38
case '\n': case' ':
39
/* ignore these in input */
3. Print results
41
default:
/* catch all other characters */
42
printf( "Incorrect letter grade entered." );
43
printf( " Enter a new grade.\n" );
44
break;
45
}
}
47
48
printf( "\nTotals for each letter grade are:\n" );
49
printf( "A: %d\n", aCount );
50
printf( "B: %d\n", bCount );
51
printf( "C: %d\n", cCount );
52
printf( "D: %d\n", dCount );
53
printf( "F: %d\n", fCount );
54
55
56 }
Use switch loop
to update count
break;
40
46
Sommario
/* grade was uppercase F */
return 0;
Enter the letter grades.
Enter the EOF character to end input.
A
B
C
C
A
D
F
C
E
Incorrect letter grade entered. Enter a new grade.
D
A
B
Totals for each letter grade are:
A: 3
B: 2
C: 3
D: 2
F: 1
Sommario
Output
Scarica

versione power point