La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

14 marzo 2002 Avvisi:. Ripetizione controllata da valore sentinella Variazione al problema: Sviluppa il programma per il calcolo della media per un numero.

Presentazioni simili


Presentazione sul tema: "14 marzo 2002 Avvisi:. Ripetizione controllata da valore sentinella Variazione al problema: Sviluppa il programma per il calcolo della media per un numero."— 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 linput 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 sullesame –Divido il livello top in parti sempre piu dettagliate Inizializza le variabili Input, somma e conta i risultati dellesame. 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 dellalgoritmo Inizializza le variabili Inizializza totale a zero Inizializza contatore a zero Input, somma e conta i risultati dellesame 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 . Sommario 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 5 6int main() 7{7{ 8 float average; /* new!!! */ 9 int counter, grade, total; /* inizializzazione */ 12 total = 0; 13 counter = 0; /* esecuzione */ 16 printf( "Enter grade, -1 to end: " ); 17 scanf( "%d", &grade ); while ( grade != -1 ) { 20 total = total + grade; 21 counter = counter + 1; 22 printf( "Enter grade, -1 to end: " ); 23 scanf( "%d", &grade ); 24 }

7 . Sommario 3. Calcola la media 3.1 Scrive i risultati Output /* fase finale */ 27 if ( counter != 0 ) { 28 average = ( float ) total / counter; /*new*/ 29 printf( "Class average is %.2f", average ); 30 } 31 else 32 printf( "No grades were entered\n" ); return 0; /* programma finisce ok */ 35} 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… 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). Il compilatore C puo valutare solo espressioni con operandi tutti dello stesso tipo

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 dellesam1 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 dellesame e conta i promossi e i bocciati Scrive un sommario dei risultati dellesame 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 dellesame 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 dellesame 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 . Sommario 1. Inizializza le variabili 2. Riceve input e conta i promossi/bocciati 3. Print risultati 1/* Fig. 3.10: fig03_10.c 2 Analisi dei risultati dellesame */ 3#include 4 5int main() 6{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 ) { 12 printf( "Enter result ( 1=pass,2=fail ): " ); 13 scanf( "%d", &result ); if ( result == 1 ) /* if/else nested in while */ 16 passes = passes + 1; 17 else 18 failures = failures + 1; student = student + 1; 21 } printf( "Passed %d\n", passes ); 24 printf( "Failed %d\n", failures ); if ( passes > 8 ) 27 printf( Aumentare le tasse\n" ); return 0; /* finisce ok */ 30}

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

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. hanno lo stesso effetto ++c; printf(%d,c); c++; printf(%d,c); e

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 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:. Ripetizione controllata da valore sentinella Variazione al problema: Sviluppa il programma per il calcolo della media per un numero."

Presentazioni simili


Annunci Google