La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

14 marzo 2002 Avvisi:.

Presentazioni simili


Presentazione sul tema: "14 marzo 2002 Avvisi:."— Transcript della presentazione:

1 14 marzo 2002 Avvisi:

2 Ripetizione controllata da valore sentinella
Variazione al problema: Sviluppa il programma per il calcolo della media per un numero arbitrario di voti (diverso per ogni diversa esecuzione del programma) Numero di studenti sconosciuto a-priori Come fa il programma a sapere quando l’input termina? Valore sentinella ..anche valore dummy, valore flag Indica la “fine dei valori in input.” Loop finisce quando si immette il valore sentinella Sceglierlo sempre in modo che non puo’ essere confuso con un input regolare! (Esempio, in questo caso -1)

3 Formulazione algoritmo con processo “top-down”
Top-down, raffinamenti successivi Inizio con un pseudocodice che rappresenta il livello top: Determina la media della classe sull’esame Divido il livello top in parti sempre piu’ dettagliate Inizializza le variabili Input, somma e conta i risultati dell’esame. Calcola e stampa la media della classe

4 Formulazione algoritmo con processo “top-down”
Molti programmi possono dividersi in tre fasi: Inizializzazione: inizializza le variabili del programma Elaborazione: prende in input i dati e imposta le variabili del programma di conseguenza. Conclusione: calcolo e stampa dei risultati finali.

5 Raffinamento dell’algoritmo
Inizializza le variabili Inizializza totale a zero Inizializza contatore a zero Input, somma e conta i risultati dell’esame Scrivi il primo voto (eventualmente la sentinella) Finche’ non e’ data in input la sentinella Aggiungi tale voto al totale corrente Aggiungi uno al contatore voti Scrivi il voto successivo (eventualmente la sentinella) Calcola e stampa la media della classe Se il contatore non e’ uguale a zero Definisci la media uguale al totale diviso per il contatore Scrivi la media else Scrivi “No voto in input”

6 1. Inizializza le variabili 2. Riceve input da utente 2.1 Esegue Loop
1 /* Fig. 3.8: fig03_08.c 2 Calcolo della media di una classe con 3 ripetizione controllata da sentinella */ 4 #include <stdio.h> 5 6 int main() 7 { 8 float average; /* new!!! */ 9 int counter, grade, total; 10 11 /* inizializzazione */ 12 total = 0; 13 counter = 0; 14 15 /* esecuzione */ 16 printf( "Enter grade, -1 to end: " ); 17 scanf( "%d", &grade ); 18 19 while ( grade != -1 ) { total = total + grade; counter = counter + 1; printf( "Enter grade, -1 to end: " ); scanf( "%d", &grade ); 24 } 1. Inizializza le variabili 2. Riceve input da utente 2.1 Esegue Loop

7 3. Calcola la media 3.1 Scrive i risultati Output
25 26 /* fase finale */ 27 if ( counter != 0 ) { average = ( float ) total / counter; /*new*/ printf( "Class average is %.2f", average ); 30 } 31 else printf( "No grades were entered\n" ); 33 34 return 0; /* programma finisce ok */ 35 } 3. Calcola la media 3.1 Scrive i risultati Output Enter grade, -1 to end: 75 Enter grade, -1 to end: 94 Enter grade, -1 to end: 97 Enter grade, -1 to end: 88 Enter grade, -1 to end: 70 Enter grade, -1 to end: 64 Enter grade, -1 to end: 83 Enter grade, -1 to end: 89 Enter grade, -1 to end: -1 Class average is 82.50

8 Un nuovo tipo di dato… Numeri in virgola mobile: float
Specifica di conversione: %f , %.2f,… %f produce 6 cifre dopo la virgola, con %.xf se ne specificano x

9 Un nuovo operatore… Il compilatore C puo’ valutare solo espressioni con operandi tutti dello stesso tipo Operatore di conversione: CAST Operatore unario che opera una conversione temporanea di tipo della variabile a cui si riferisce average = (float) total / counter; La presenza di (float) crea una copia temporanea della variabile total del tipo float (conversione esplicita) Per efftuare la divisione il C crea una copia temporanea di tipo float anche della variabile (conversione implicita o promozione).

10 Formulazione algoritmo con processo “top-down”
Problema Un college ha una lista di risultati di un esame relativa a 10 studenti (1 = promosso, 2 = bocciato). Scrivere un programma che analizza i risultati. Se ci sono piu’ di 8 studenti promossi, print “Aumentare le tasse“ Notare che: Il programma deve esaminare 10 risultati di esame Uso loop controllato da contatore Possiamo usare due contatori: Uno per numero promossi , uno per numero bocciati Ogni risultato dell’esam1 oppure 2 e Se il numero non e’ 1, assumiamo che sia un 2

11 Formulazione algoritmo con processo “top-down”
Top level (Sommario) Analizza i risultati degli esami e decide se aumentare le tasse Primo raffinamento Inizializza le variabili Prende in input i risultati dell’esame e conta i promossi e i bocciati Scrive un sommario dei risultati dell’esame e decide se aumentare le tasse

12 Formulazione algoritmo con processo “top-down”
Secondo raffinamento Inizializza le variabili Inizializza i promossi a zero Inizializza i bocciati a zero Inizializza il contatore studenti a uno

13 Formulazione algoritmo con processo “top-down”
Prende in input i risultati dell’esame e conta i promossi e i bocciati Finche’ il contatore studenti e’ minore o uguale a dieci Prendi in input il risultato successivo Se il risultato e’ “promosso” Aggiungi uno ai promossi else Aggiungi uno ai bocciati Aggiungi uno al contatore studenti

14 Formulazione algoritmo con processo “top-down”
Scrive un sommario dei risultati dell’esame e decide se aumentare le tasse Scrive numero dei promossi Scrive numero dei bocciati Se ci sono piu’ di otto studenti promossi Scrive “Aumentare le tasse”

15 1. Inizializza le variabili
1 /* Fig. 3.10: fig03_10.c 2 Analisi dei risultati dell’esame */ 3 #include <stdio.h> 4 5 int main() 6 { 7 /* initializing variables in declarations */ 8 int passes = 0, failures = 0, student = 1, result; 9 10 /* process 10 students; counter-controlled loop */ 11 while ( student <= 10 ) { printf( "Enter result ( 1=pass,2=fail ): " ); scanf( "%d", &result ); 14 if ( result == 1 ) /* if/else nested in while */ passes = passes + 1; else failures = failures + 1; 19 student = student + 1; 21 } 22 23 printf( "Passed %d\n", passes ); 24 printf( "Failed %d\n", failures ); 25 26 if ( passes > 8 ) printf( “Aumentare le tasse\n" ); 28 29 return 0; /* finisce ok */ 30 } 1. Inizializza le variabili 2. Riceve input e conta i promossi/bocciati 3. Print risultati

16 Output Enter Result (1=pass,2=fail): 1 Enter Result (1=pass,2=fail): 2
Passed 6 Failed 4 Output

17 Operatori di Incremento e Decremento
Operatore Incremento (++) invece di c+=1 Operatore Decremento (--) invece di c-=1. Pre incremento/decremento Operatore prima della variabile (++c o --c) Prima cambia variabile, Poi calcola espressione Post incremento/decremento Operatore dopo la variabile (c++ o c--) Prima esegue espressione, Poi cambia variabile Se c = 5, allora printf( "%d", ++c); Scrive 6 printf( "%d", c++); Scrive 5 NOTA: Alla fine, c ha il valore 6 in entrambi i casi

18 Operatori di Incremento e Decremento
Quando la variabile non e’ in una espressione… Preincrementare e postincrementare ha lo stesso effetto. ++c; printf(“%d”,c); c++; e hanno lo stesso effetto

19 Regole di precedenza tra operatori:

20 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. Suggerimento (ovvio): usare un ciclo

21 Esercizi: Esercizio 3.33 Esercizio 3.34 Esempio
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 * * * * * * * * * * * * * * * *

22 Esercizi: 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.


Scaricare ppt "14 marzo 2002 Avvisi:."

Presentazioni simili


Annunci Google