20 marzo 2002 Avvisi Giovedi 28 marzo la

  • Slides: 25
Download presentation
20 marzo 2002 Avvisi: • Giovedi 28 marzo la lezione e’ sospesa. • Nuovo

20 marzo 2002 Avvisi: • Giovedi 28 marzo la lezione e’ sospesa. • Nuovo indirizzo di e-mail: labinfo 1@mat. uniroma 2. it Spedire messaggi e esercizi solo qui!!!

Qualche minuto di “laboratorio”… Analizziamo le soluzioni proposte da voi agli esercizi della volta

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

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

• 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

• 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 lati di un triangolo b c a Comuqnue

Esercizio 3. 44 a, b, c 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. a, b, c >=0 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

• 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’

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

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){

Iterazione controllata da contatore • Esempio: int counter =1; //inizializzazione while (counter <= 10){ //condizione di ripetizione printf( "%dn", 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 ( inizializzazione; condizione di

Struttura di iterazione for • Formato per il loop for ( inizializzazione; condizione di iterazione; incremento) istruzione Esempio: for( int counter = 1; counter <= 10; counter++ ) printf( "%dn", counter ); – Scrive i numeri interi da 1 a 10.

Struttura di iterazione for • I loop for si possono riscrivere come loop while

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 1. Possono essere una

Struttura for : Note e Osservazioni • Inizializzazione e incremento 1. Possono essere una lista separata da virgole for (int i = 0, j = 0; j + i <= 10; j++, i++) printf( "%dn", 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

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

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: fig 04_05. c 2 Summation with for */ 3

1 /* Fig. 4. 5: fig 04_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 %dn", 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

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 {

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

La struttura di iterazione do/while azioni true Condizione false

1 /* Fig. 4. 9: fig 04_09. c 2 Sommario Using the do/while repetition

1 /* Fig. 4. 9: fig 04_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

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

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

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: fig 04_07. c Counting letter grades */ #include <stdio. h> Sommario int main() { int grade; int a. Count = 0, b. Count = 0, c. Count = 0, d. Count = 0, f. Count = 0; 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': ++a. Count; break; /* grade was uppercase A */ /* or lowercase a */ case 'B': case 'b': ++b. Count; break; /* grade was uppercase B */ /* or lowercase b */ case 'C': case 'c': ++c. Count; break; /* grade was uppercase C */ /* or lowercase c */ case 'D': case 'd': ++d. Count; 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 ++f. Count; 36 break; /* or lowercase

33 34 case 'F': case 'f': 35 ++f. Count; 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( "n. Totals for each letter grade are: n" ); 49 printf( "A: %dn", a. Count ); 50 printf( "B: %dn", b. Count ); 51 printf( "C: %dn", c. Count ); 52 printf( "D: %dn", d. Count ); 53 printf( "F: %dn", f. Count ); 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

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