Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoNorina Spano Modificato 10 anni fa
1
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso di Laurea in Informatica Università degli Studi La Sapienza (lezioni 4 e 5) for, do..while, switch, problemi con le operazioni sui reali, debugging & test
2
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Cicli controllati da contatore Abbiamo bisogno di – definire una variabile di controllo (contatore delle iterazioni) – inizializzare questa variabile eseguire il blocco di codice eseguire il blocco di codice –Incrementare (o decrementare) la variabile di controllo ogni volta che viene eseguito il ciclo Abbiamo inoltre bisogno di una condizione di terminazione del ciclo che venga testata ad ogni iterazione. Solo se la condizione è vera verrà eseguita una nuova iterazione. Associando una locazione di memoria alla variabile Nelle scorse lezioni abbiamo visto il costrutto while…
3
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Costrutto for for (espressione 1; espressione 2; espressione 3) BLOCCO DI CODICE; Es. for (contatore =1; contatore <= 10; contatore ++) printf (%d \n, contatore); /*stampa in linee successive i valori da 1 a 10 */ Nome della variabile di controllo Inizializzazione della variabile di controllo La variabile deve comunque essere definita allinizio del main
4
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Costrutto for for (espressione 1; espressione 2; espressione 3) BLOCCO DI CODICE; Es. for (contatore =1; contatore <= 10; contatore ++) printf (%d \n, contatore); /*stampa in linee successive i valori da 1 a 10 */ Condizione di terminazione del ciclo Incremento della variabile di controllo
5
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Costrutto for VERA BLOCCO DI CODICE espressione 2 FALSA espressione 1 espressione 3 for (c =1; c <= 10; c++) printf (%d \n, c); Cosa fa questo codice?
6
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Confronto tra for e while for (espressione 1; espressione 2; espressione 3) BLOCCO DI CODICE; espressione 1; while (espressione 2) { BLOCCO DI CODICE; espressione 3; }
7
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 For … alcuni esempi Cicli annidati for (i=1; i<=DIM_LATO; i++) { for (j=1; j <= DIM_LATO; j++) printf (*); printf (\n); } Cosa fa questo ciclo? Stampa quadrati di asterischi. Ad esempio se DIM_LATO vale 4: **** ATTENZIONE ad -inizializzare correttamente la variabile di controllo -Ad usare loperatore relazionale giusto (< oppure <= ) -A scegliere correttamente il valore finale della variabile di controllo IN MODO DA ESEGUIRE IL NUMERO DI UTERAZIONI CORRETTO
8
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Rappresentazione con diagramma di flusso VERA BLOCCO DI CODICE espressione 2 FALSA espressione 1 espressione 3 CICLO FOR VERA espressione 2 FALSA espressione 1 espressione 3 VERA BLOCCO DI CODICE espressione 2 espressione 1 espressione 3 FALSA ANNIDAMENTO DI 2 CICLI FOR E possibile rappresentare il comportamento di q.siasi programma con diagrammi di flusso Per problemi complessi lo pseudocodice è tuttavia un meccanismo piu efficace per progettare il programma Con il costrutto di sequenza, lif ed il while è possibile progettare q.siasi programma
9
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esempi di uso del for … for (i=1; i <= 10; i++) printf(%d \n, i); Cosa stampa in output questo blocco di codice ? 1 2 3 4 5 6 7 8 9 10
10
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esempi di uso del for … for (i=10; i > 0; i--) printf(%d \n, i); Cosa stampa in output questo blocco di codice ? 10 9 8 7 6 5 4 3 2 1
11
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esempi di uso del for … for (i=8; i >=2 ; i-=2) printf(%d \n, i); Cosa stampa in output questo blocco di codice ? 86428642
12
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esercizio Si scriva un programma che consenta di stampare in output il tipo di figura riportata qui di seguito. Il numero di righe di ciascuna figura sarà inserito da input. ***************
13
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010Soluzione #include #include int main() { int righe, i, j; printf(Inserisci il numero di righe \n); scanf (%d,&righe); printf(FIGURA A: \n); for (i=1; i<=righe; i++) { for (j=1; j<=i, j++); printf(*); printf (\n); } return 0; } Inserisci il numero di righe 5 FIGURA A: * ** *** **** *****
14
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esercizio Si scriva un programma che consenta di stampare in output il tipo di figura riportata qui di seguito. Il numero di righe di ciascuna figura sarà inserito da input. *********************
15
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010
16
Soluzione #include #include int main() { int righe, i, j; printf(Inserisci il numero di righe \n); scanf (%d,&righe); printf(FIGURA B: \n); for (i=0; i<righe; i++) { for (j=1; j<=righe - i, j++); printf(*); printf (\n); } return 0; } Inserisci il numero di righe 5 FIGURA B: ***** **** *** ** *
17
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esercizio Si scriva un programma che consenta di stampare in output il tipo di figura riportata qui di seguito. Il numero di righe di ciascuna figura sarà inserito da input. **** *** *** ** ** *
18
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010Soluzione #include #include int main() { int righe, i, j; printf(Inserisci il numero di righe \n); scanf (%d,&righe); printf(FIGURA C: \n); for (i=1; i<=righe; i++) { for (j=1; j<=righe, j++); if (j<i) printf ( ); elseprintf(*); printf (\n); } return 0; } Inserisci il numero di righe 5 FIGURA C: ***** **** *** ** *
19
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010
20
Esercizio Una persona investe 1000 euro in un conto corrente che ha l1.5 % di interesse. Si scriva un programma che prenda come input un numero di anni n. Il programma calcolerà e stamperà quanti soldi saranno sul contocorrente dopo 1, 2, …, n anni (sotto lipotesi che non vengano mai prelevati soldi dal contocorrente).
21
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Generalizziamo Una persona investe p euro in un conto corrente che ha lr % di interesse. Si scriva un programma che prenda come input un numero di anni n. Il programma calcolerà e stamperà quanti soldi saranno sul contocorrente dopo 1, 2, …, n anni (sotto lipotesi che non vengano mai prelevati soldi dal conto corrente). Dopo un anno la quanità disponibile sul conto è: p* (1+r) Dopo due anni è pari a: Quantita sul conto dopo un anno * (1+r) = p * (1+r) * (1+r) = p * (1+r) 2 FORMULA GENERALE. Dopo n anni p* (1+r) n
22
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Soluzione Pseudocodice – Inserisci da input i valori di n, p, r –Fino a quando non sono stati considerati tutti gli anni del piano di investimento aggiorna e stampa il valore a (soldi sul conto corrente) secondo la formula della slide precedente aggiorna e stampa il valore a (soldi sul conto corrente) secondo la formula della slide precedente
23
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010Soluzione #include #include int main() { float p,r; int n; int i; printf (inserisci da input il numero di anni del piano di investimento \n); scanf (%d, &n); printf (inserisci da input i valori di p e r \n); scanf (%f, &p); scanf (%f, &r); for (i=0; i<n; i++) {p=p*(1+r); printf (quantità di denaro accumulata sul conto dopo %d anni: %f \n, i, p); } return 0; }
24
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Soluzione 2 #include #include #include<math.h> int main() { double p,r; int n; printf (inserisci da input il numero di anni del piano di investimento \n); scanf (%d, &n); printf (inserisci da input i valori di p e r \n); scanf (%f, &p); scanf (%f, &r); p=p*pow(1.0+r,n); printf (quantità di denaro accumulata sul conto dopo %d anni: %f \n, n, p); return 0; } Interi: short int long Reali: float double
25
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Switch Un algoritmo può dover esaminare una espressione ed a secondo del suo valore effettuare azioni diverse. Si può esprimere con una serie di if In C esiste un costrutto apposito: switch
26
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esercizio Si scriva un programma che prenda in input due interi ed un operatore. Il programma stampa in output il valore delloperazione sui due interi. #include #include int main() { int x,y; char op; printf (inserisci i valori x e y \n); scanf (%d %d, &x, &y) printf (inserisci il simbolo delloperatore \n); scanf (%c,&op); switch (op) switch (op){ case *: printf (%d \n, x*y); break; break; case +: printf (%d \n, x+y); break; break; case /: printf (%d \n, x/y); break; break; case -: printf (%d \n, x-y); break; break; default: printf (operatore non valido \n); } return 0; } Espressione di controllo (il valore di questa espressione -costante intera- e confrontata con le etichette dello switch) etichetta Si esce dallo switch
27
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Costrutto switch VERA case a FALSA case b case z default case a actionbreak VERA case b actionbreak VERA case z actionbreak FALSA
28
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esercizio Si scriva un programma che prenda da input una serie di voti di studenti (A,…,F), calcoli e stampi in input il numero di studenti che hanno preso A, B, C, …F.
29
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010Soluzione #include #include int main() { int voto; int aCount, bCount, cCount, dCount, eCount, fCount; aCount= bCount= cCount= dCount= eCount= fCount=0; aCount= bCount= cCount= dCount= eCount= fCount=0; printf (inserisci da input i voti, terminando con EOF \n); while ((voto=getchar())!= EOF) { switch (voto) { case a: case A:aCount ++; break; case b: case B:bCount ++; break; case c: case C:cCount ++; break; …… Listruzione voto=getchar () prende il prossimo carattere da input –tramite la funzione della libreria di I/O getchar()- e lo memorizza nella variabile voto Listruzione di assegnamento ha un valore dato dal valore assegnato alla variabile a sinistra del = Controlla se lultimo carattere letto è il carattere di End Of File return ctrl D Unix ctrl Z Windows
30
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Caratteri e interi I caratteri sono rappresentati con interi di un byte CODICE ASCII Possono quindi essere memorizzati in variabili intere voto =getchar (); Un esempio: printf (il carattere %c ha il valore %d, x, x); Se x vale a viene stampato a 97
31
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010Soluzione case d: case D:dCount ++; break; case e: case E:eCount ++; break; case f: case F:fCount ++; break; }} printf (num. studenti voto A: %d, aCount); printf (num. studenti voto B: %d, bCount); printf (num. studenti voto C: %d, cCount); printf (num. studenti voto D: %d, dCount); printf (num. studenti voto E: %d, eCount); printf (num. studenti voto F: %d, fCount); return 0; } Inserisci da input i voti terminando con EOF A b C a E Num student voto A: 2 Num studenti voto B: 1 …..
32
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010
33
Altri costrutti: do…while do{ BLOCCO DI CODICE; } while (condizione): Il ciclo viene eseguito almeno una volta VERA BLOCCO DI CODICE condizione FALSA
34
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Break e continue Listruzione break può essere usata per alterare il flusso di controllo di qualsiasi costrutto break in while, for, do…while, switch break in while, for, do…while, switch – causa luscita immediata dal corpo del while, for, do…while, switch (uscita dal ciclo) continue in while, for, do…while – salta le istruzioni successive del while, for, do..while e passa ad eseguire la prossima iterazione del ciclo Possono aumentare lefficienza MA vanno contro la filosofia della Programmazione strutturata e aggiungono Complessità al programma Cerchiamo di programmare pulito non li voglio vedere usare a meno che sia necessario
35
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Operatori logici Fino ad ora abbiamo assunto di dover testare semplici condizioni esprimibili tramite operatori relazionali o di uguaglianza Cosa succede se dobbiamo testare più condizioni prima di prendere una decisione… 1° possibilità: if, if… else annidati 2° possibilità: esprimere direttamente con una sola espressione le condizioni che devono essere verificate perché venga effettuata una determinata azione lespressione può essere espressa come combinazione, tramite operatori logici, di condizioni semplici (che abbiamo già imparato ad esprimere)
36
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 OR, AND, NOT Tabelle di verità x yx AND y x OR y NOT x in C: x &&y in C: x || y in C: !x in C: x &&y in C: x || y in C: !x T T TTF T F FTF F T FTT F F FFT Op. binario Op binario Op unario
37
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Esempi if ((a>= inf_intervallo) && (a = inf_intervallo) && (a <=sup_intervallo)) printf (il valore si trova nellintervallo \n); if ((superato_esonero_1 && superato_esonero_2) || superato_esame) printf (ho passato lesame di prog1 ! \n); If (!(c==EOF)) if (c !=EOF)
38
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Potenziali problemi confondere operatori di uguaglianza e assegnamento Tipo di errore: if (x==4) if (x=4) x = 17; x == 17 x = 17; x == 17
39
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Confondere operatori di uguaglianza e assegnamento 1° caso: volevamo scrivere if (x==4) printf (BLABLABLA); ma abbiamo scritto if (x=4) printf (BLABLABLA); Indipendentemente dal valore di x il valore dellistruzione di assegnamento è 4 (!=0, quindi TRUE) Viene sempre stampato BLABLA ERRORE Soluzione: scrivere (4==x) se dimentichiamo un == (4=x) darà un errore di compilazione
40
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Confondere operatori di uguaglianza e assegnamento 2° caso: volevamo scrivere x=17; ma abbiamo scritto x==17; Nessun errore in fase di compilazione. Viene valutata lespressione x==17. Tale espressione varrà true o false a seconda del valore di x: il suo valore non è usato. La variabile x continua a memorizzare il valore originale ERRATO Nessun errore in fase di compilazione. Viene valutata lespressione x==17. Tale espressione varrà true o false a seconda del valore di x: il suo valore non è usato. La variabile x continua a memorizzare il valore originale ERRATO
41
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Precedenza degli operatori (sintesi)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.