Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di...
-
Upload
norina-spano -
Category
Documents
-
view
222 -
download
0
Transcript of Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di...
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Corso di Fondamenti di Corso di Fondamenti di programmazioneprogrammazione
a.a.2009/2010a.a.2009/2010Prof.ssa Chiara PetrioliProf.ssa Chiara Petrioli
Corso di Laurea in InformaticaCorso di Laurea in InformaticaUniversità degli Studi “La Sapienza”Università degli Studi “La Sapienza”
(lezioni 4 e 5)(lezioni 4 e 5)for, do..while, switch, problemi con le operazioni sui reali, debugging & test
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Cicli controllati da contatoreCicli controllati da contatore
Abbiamo bisogno diAbbiamo bisogno di– definire una variabile di controllo (contatore delle definire una variabile di controllo (contatore delle
iterazioni)iterazioni)– inizializzare questa variabileinizializzare questa variabile eseguire il blocco di codiceeseguire il blocco di codice– Incrementare (o decrementare) la variabile di Incrementare (o decrementare) la variabile di
controllo ogni volta che viene eseguito il ciclocontrollo ogni volta che viene eseguito il ciclo
Abbiamo inoltre bisogno di una condizione di Abbiamo inoltre bisogno di una condizione di terminazione del ciclo che venga testata ad ogni terminazione del ciclo che venga testata ad ogni iterazione. Solo se la condizione è vera verrà iterazione. Solo se la condizione è vera verrà eseguita una nuova iterazione. eseguita una nuova iterazione.
Associando una locazione di memoria alla variabile
Nelle scorse lezioni abbiamo visto il costrutto while…
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Costrutto forCostrutto forfor (espressione 1; espressione 2; espressione 3)for (espressione 1; espressione 2; espressione 3)
BLOCCO DI CODICE;BLOCCO DI CODICE;
Es.Es.
for (contatore =1; contatore <= 10; contatore ++)for (contatore =1; contatore <= 10; contatore ++)
printf (“%d \n”, contatore); printf (“%d \n”, contatore);
/*stampa in linee successive i valori da 1 a 10 *//*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
all’inizio del main
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Costrutto forCostrutto forfor (espressione 1; espressione 2; espressione 3)for (espressione 1; espressione 2; espressione 3)
BLOCCO DI CODICE;BLOCCO DI CODICE;
Es.Es.
for (contatore =1; contatore <= 10; contatore ++)for (contatore =1; contatore <= 10; contatore ++)
printf (“%d \n”, contatore); printf (“%d \n”, contatore);
/*stampa in linee successive i valori da 1 a 10 *//*stampa in linee successive i valori da 1 a 10 */
Condizione di terminazionedel ciclo
Incremento della variabile di controllo
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Costrutto forCostrutto for
VERA
BLOCCO DI CODICE
espressione 2
FALSA
espressione 1
espressione 3
for (c =1; c <= 10; c++)for (c =1; c <= 10; c++)printf (“%d \n”, c);printf (“%d \n”, c);
Cosa fa questo codice?
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Confronto tra for e whileConfronto tra for e while
for (espressione 1; espressione 2; espressione 3)for (espressione 1; espressione 2; espressione 3)BLOCCO DI CODICE;BLOCCO DI CODICE;
espressione 1;espressione 1;while (espressione 2)while (espressione 2)
{{ BLOCCO DI CODICE;BLOCCO DI CODICE;espressione 3;espressione 3;
}}
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
For … alcuni esempiFor … alcuni esempi
Cicli annidatiCicli annidati
for (i=1; i<=DIM_LATO; i++)for (i=1; i<=DIM_LATO; i++)
{{
for (j=1; j <= DIM_LATO; j++)for (j=1; j <= DIM_LATO; j++)
printf (“*”);printf (“*”);
printf (“\n”);printf (“\n”);
}}
Cosa fa questociclo?
Stampa quadrati di asterischi. Ad esempio se DIM_LATOvale 4:
****************
ATTENZIONE ad -inizializzare correttamente la variabile di controllo-Ad usare l’operatore relazionale giusto (< oppure <= )-A scegliere correttamente il valore finale della variabile di controllo
IN MODO DA ESEGUIRE IL NUMERO DI UTERAZIONI CORRETTO
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Rappresentazione con diagramma Rappresentazione con diagramma di flussodi flusso
VERA
BLOCCO DI CODICE
espressione 2FALSA
espressione 1
espressione 3
CICLO FOR
VERA
espressione 2FALSA
espressione 1
espressione 3
VERA
BLOCCO DI CODICE
espressione 2
espressione 1
espressione 3
FALSA
ANNIDAMENTO DI2 CICLI FOR
E’ possibile rappresentareil comportamento di q.siasiprogramma con diagrammidi flussoPer problemi complessilo pseudocodice è tuttaviaun meccanismo piu’ efficaceper progettare il programma
Con il costrutto di sequenza,l’if ed il while è possibile progettare q.siasi programma
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Esempi di uso del for …Esempi di uso del for …
for (i=1; i <= 10; i++)for (i=1; i <= 10; i++)
printf(“%d \n”, i);printf(“%d \n”, i);
Cosa stampa in outputquesto blocco di
codice ?
12345678910
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Esempi di uso del for …Esempi di uso del for …
for (i=10; i > 0; i--)for (i=10; i > 0; i--)
printf(“%d \n”, i);printf(“%d \n”, i);
Cosa stampa in outputquesto blocco di
codice ?
10987654321
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Esempi di uso del for …Esempi di uso del for …
for (i=8; i >=2 ; i-=2)for (i=8; i >=2 ; i-=2)
printf(“%d \n”, i);printf(“%d \n”, i);
Cosa stampa in outputquesto blocco di
codice ?
8642
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsercizioEsercizio
Si scriva un programma che consenta di Si scriva un programma che consenta di stampare in output il tipo di figura riportata stampare in output il tipo di figura riportata qui di seguito. Il numero di righe di qui di seguito. Il numero di righe di ciascuna figura sarà inserito da input.ciascuna figura sarà inserito da input.
******************************
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzione#include <stdio.h>#include <stdio.h>int main()int main(){ {
int righe, i, j;int righe, i, j;
printf(“Inserisci il numero di righe \n”);printf(“Inserisci il numero di righe \n”);scanf (“%d”,&righe);scanf (“%d”,&righe);printf(“FIGURA A: \n”);printf(“FIGURA A: \n”);for (i=1; i<=righe; i++)for (i=1; i<=righe; i++){{
for (j=1; j<=i, j++);for (j=1; j<=i, j++);printf(“*”);printf(“*”);
printf (“\n”);printf (“\n”);}} return 0;return 0;
}}
Inserisci il numero di righeInserisci il numero di righe55FIGURA A:FIGURA A:***************
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsercizioEsercizio
Si scriva un programma che consenta di Si scriva un programma che consenta di stampare in output il tipo di figura riportata qui di stampare in output il tipo di figura riportata qui di seguito. Il numero di righe di ciascuna figura seguito. Il numero di righe di ciascuna figura sarà inserito da input.sarà inserito da input.
******************************************
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzione#include <stdio.h>#include <stdio.h>int main()int main(){ {
int righe, i, j;int righe, i, j;
printf(“Inserisci il numero di righe \n”);printf(“Inserisci il numero di righe \n”);scanf (“%d”,&righe);scanf (“%d”,&righe);printf(“FIGURA B: \n”);printf(“FIGURA B: \n”);for (i=0; i<righe; i++)for (i=0; i<righe; i++){{
for (j=1; j<=righe - i, j++);for (j=1; j<=righe - i, j++);printf(“*”);printf(“*”);
printf (“\n”);printf (“\n”);}} return 0;return 0;
}}
Inserisci il numero di righeInserisci il numero di righe55FIGURA B:FIGURA B:***************
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsercizioEsercizio
Si scriva un programma che consenta di Si scriva un programma che consenta di stampare in output il tipo di figura riportata stampare in output il tipo di figura riportata qui di seguito. Il numero di righe di qui di seguito. Il numero di righe di ciascuna figura sarà inserito da input.ciascuna figura sarà inserito da input.
********
******
****
**
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzione#include <stdio.h>#include <stdio.h>int main()int main(){ {
int righe, i, j;int righe, i, j;
printf(“Inserisci il numero di righe \n”);printf(“Inserisci il numero di righe \n”);scanf (“%d”,&righe);scanf (“%d”,&righe);printf(“FIGURA C: \n”);printf(“FIGURA C: \n”);for (i=1; i<=righe; i++)for (i=1; i<=righe; i++){{
for (j=1; j<=righe, j++);for (j=1; j<=righe, j++);if (j<i)if (j<i)
printf (“ ”); printf (“ ”); elseelse
printf(“*”);printf(“*”);printf (“\n”);printf (“\n”);}} return 0;return 0;
}}
Inserisci il numero di righeInserisci il numero di righe55FIGURA C:FIGURA C:***** **** *** ** *
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsercizioEsercizio
Una persona ‘investe’ 1000 euro in un Una persona ‘investe’ 1000 euro in un conto corrente che ha l’1.5 % di interesse. conto corrente che ha l’1.5 % di interesse. Si scriva un programma che prenda come Si scriva un programma che prenda come input un numero di anni n. Il programma input un numero di anni n. Il programma calcolerà e stamperà quanti soldi saranno calcolerà e stamperà quanti soldi saranno sul contocorrente dopo 1, 2, …, n anni sul contocorrente dopo 1, 2, …, n anni (sotto l’ipotesi che non vengano mai (sotto l’ipotesi che non vengano mai prelevati soldi dal contocorrente).prelevati soldi dal contocorrente).
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
GeneralizziamoGeneralizziamo
Una persona ‘investe’ Una persona ‘investe’ pp euro in un conto euro in un conto corrente che ha l’corrente che ha l’r r % di interesse. Si scriva % di interesse. Si scriva un programma che prenda come input un un programma che prenda come input un numero di anni numero di anni nn. Il programma calcolerà . Il programma calcolerà e stamperà quanti soldi saranno sul e stamperà quanti soldi saranno sul contocorrente dopo 1, 2, …, n anni (sotto contocorrente dopo 1, 2, …, n anni (sotto l’ipotesi che non vengano mai prelevati l’ipotesi che non vengano mai prelevati soldi dal conto corrente).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 annip* (1+r) n
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzione
PseudocodicePseudocodice– Inserisci da input i valori di Inserisci da input i valori di n, p, rn, p, r– Fino a quando non sono stati considerati tutti Fino a quando non sono stati considerati tutti
gli anni del piano di investimentogli anni del piano di investimento aggiorna e stampa il valore aggiorna e stampa il valore aa (soldi sul conto (soldi sul conto corrente) secondo la formula della slide corrente) secondo la formula della slide precedenteprecedente
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzione#include <stdio.h>#include <stdio.h>int main()int main(){ {
float p,r;float p,r;int n;int n;int i;int i;printf (“inserisci da input il numero di anni del piano di investimento \printf (“inserisci da input il numero di anni del piano di investimento \n”);n”);scanf (“%d”, &n);scanf (“%d”, &n);printf (“inserisci da input i valori di p e r \n”);printf (“inserisci da input i valori di p e r \n”);scanf (“%f”, &p);scanf (“%f”, &p);scanf (“%f”, &r); scanf (“%f”, &r); for (i=0; i<n; i++)for (i=0; i<n; i++){{
p=p*(1+r);p=p*(1+r);printf (“quantità di denaro accumulata printf (“quantità di denaro accumulata sul conto dopo %d anni: %f \n”, i, p);sul conto dopo %d anni: %f \n”, i, p);
}} return 0;return 0;
}}
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Soluzione 2Soluzione 2#include <stdio.h>#include <stdio.h>#include<math.h>#include<math.h>int main()int main(){ {
double p,r;double p,r;int n;int n;printf (“inserisci da input il numero di anni del piano di printf (“inserisci da input il numero di anni del piano di investimento \n”);investimento \n”);scanf (“%d”, &n);scanf (“%d”, &n);printf (“inserisci da input i valori di p e r \n”);printf (“inserisci da input i valori di p e r \n”);scanf (“%f”, &p);scanf (“%f”, &p);scanf (“%f”, &r); scanf (“%f”, &r); p=p*pow(1.0+r,n);p=p*pow(1.0+r,n);printf (“quantità di denaro accumulata sul conto printf (“quantità di denaro accumulata sul conto dopo %d anni: %f \n”, n, p);dopo %d anni: %f \n”, n, p);return 0;return 0;
}}
Interi:shortintlong
Reali:floatdouble
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SwitchSwitch
Un algoritmo può dover esaminare una Un algoritmo può dover esaminare una espressione ed a secondo del suo valore espressione ed a secondo del suo valore effettuare azioni diverse.effettuare azioni diverse.
Si può esprimere con una serie Si può esprimere con una serie di di ifif
In C esiste un costrutto In C esiste un costrutto apposito: apposito: switchswitch
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsercizioEsercizioSi scriva un programma che prenda in input due Si scriva un programma che prenda in input due interi ed un operatore. Il programma stampa in interi ed un operatore. Il programma stampa in output il valore dell’operazione sui due interi.output il valore dell’operazione sui due interi.
#include <stdio.h>#include <stdio.h>int main()int main(){{
int x,y;int x,y;char op;char op;printf (“inserisci i valori x e y \n”);printf (“inserisci i valori x e y \n”);scanf (“%d %d”, &x, &y)scanf (“%d %d”, &x, &y)printf (“inserisci il simbolo dell’operatore \n”);printf (“inserisci il simbolo dell’operatore \n”);scanf (“%c”,&op);scanf (“%c”,&op);
switch (op)switch (op){{
case ‘*’: printf (“%d \n”, x*y);case ‘*’: printf (“%d \n”, x*y); break;break;case ‘+’: printf (“%d \n”, x+y);case ‘+’: printf (“%d \n”, x+y); break;break;case ‘/’: printf (“%d \n”, x/y);case ‘/’: printf (“%d \n”, x/y); break;break;case ‘-’: printf (“%d \n”, x-y);case ‘-’: printf (“%d \n”, x-y); break;break;default: printf (“operatore non valido \n”);default: printf (“operatore non valido \n”);
}} return 0;return 0;
}}
Espressione di controllo(il valore di questa espressione-costante intera- e’ confrontata con le etichette dello switch)
etichetta
Si esce dallo switch
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Costrutto switchCostrutto switch
VERA
case a
FALSA
case b
case z
default
case a action break
VERA
case b action break
VERA
case z action break
FALSA
FALSA
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsercizioEsercizio
Si scriva un programma che prenda da Si scriva un programma che prenda da input una serie di voti di studenti (A,…,F), input una serie di voti di studenti (A,…,F), calcoli e stampi in input il numero di calcoli e stampi in input il numero di studenti che hanno preso A, B, C, …F.studenti che hanno preso A, B, C, …F.
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzione#include <stdio.h>#include <stdio.h>int main()int main(){ {
int voto;int voto;int aCount, bCount, cCount, dCount, eCount, fCount;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 printf (“inserisci da input i voti, terminando con EOFEOF \n”); \n”);while ((voto=getchar())!= EOF)while ((voto=getchar())!= EOF){{
switch (voto)switch (voto){{case ‘a’:case ‘a’:case ‘A’:aCount ++; break;case ‘A’:aCount ++; break;case ‘b’:case ‘b’:case ‘B’:bCount ++; break;case ‘B’:bCount ++; break;case ‘c’:case ‘c’:case ‘C’:cCount ++; break;case ‘C’:cCount ++; break;……
L’istruzione voto=getchar ()prende il prossimo carattereda input –tramite la funzionedella libreria di I/O getchar()-e lo memorizza nella variabile voto
L’istruzione di assegnamentoha un valore dato dal valoreassegnato alla variabile a sinistra del =
Controlla se l’ultimo carattereletto è il carattere di
End Of File
return ctrl D Unixctrl Z Windows
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Caratteri e interiCaratteri e interiI caratteri sono rappresentati con interi di un byteI caratteri sono rappresentati con interi di un byteCODICE CODICE ASCIIASCII
Possono quindi essere memorizzati in variabili interePossono quindi essere memorizzati in variabili interevoto =getchar ();voto =getchar ();
Un esempio: printf (“il carattere %c ha il valore %d”, x, x);
Se x vale ‘a’ viene stampatoa 97
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
SoluzioneSoluzionecase ‘d’:case ‘d’:case ‘D’:dCount ++; break;case ‘D’:dCount ++; break;case ‘e’:case ‘e’:case ‘E’:eCount ++; break;case ‘E’:eCount ++; break;case ‘f’:case ‘f’:case ‘F’:fCount ++; break;case ‘F’:fCount ++; break;}}
}} printf (“num. studenti voto A: %d”, aCount);printf (“num. studenti voto A: %d”, aCount);printf (“num. studenti voto B: %d”, bCount);printf (“num. studenti voto B: %d”, bCount);printf (“num. studenti voto C: %d”, cCount);printf (“num. studenti voto C: %d”, cCount);printf (“num. studenti voto D: %d”, dCount);printf (“num. studenti voto D: %d”, dCount);printf (“num. studenti voto E: %d”, eCount);printf (“num. studenti voto E: %d”, eCount);printf (“num. studenti voto F: %d”, fCount);printf (“num. studenti voto F: %d”, fCount);return 0;return 0;
}}
Inserisci da input i voti terminando con EOFAbCaENum student voto A: 2Num studenti voto B: 1…..
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Altri costrutti: do…whileAltri costrutti: do…while
dodo
{{
BLOCCO DI CODICE;BLOCCO DI CODICE;
} while (condizione):} while (condizione):
Il ciclo viene eseguito almeno una volta
VERA
BLOCCO DI CODICE
condizioneFALSA
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Break e continueBreak e continueL’istruzione break può essere usata per L’istruzione break può essere usata per alterare il flusso di controllo di qualsiasi alterare il flusso di controllo di qualsiasi costrutto costrutto
break in while, for, do…while, switchbreak in while, for, do…while, switch– causa l’uscita immediata dal corpo del while, causa l’uscita immediata dal corpo del while,
for, do…while, switch (uscita dal ciclo)for, do…while, switch (uscita dal ciclo)
continue in while, for, do…whilecontinue in while, for, do…while– salta le istruzioni successive del while, for, salta le istruzioni successive del while, for,
do..while e passa ad eseguire la prossima do..while e passa ad eseguire la prossima iterazione del cicloiterazione del ciclo
Possono aumentare l’efficienzaMA vanno contro la filosofia della
Programmazione strutturata e aggiungonoComplessità al programma
Cerchiamo di programmare pulito non li voglio vedere usare a meno
che sia necessario
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Operatori logiciOperatori logici
Fino ad ora abbiamo assunto di dover testare Fino ad ora abbiamo assunto di dover testare semplici condizioni esprimibili tramite operatori semplici condizioni esprimibili tramite operatori relazionali o di uguaglianzarelazionali o di uguaglianzaCosa succede se dobbiamo testare più condizioni Cosa succede se dobbiamo testare più condizioni prima di prendere una decisione…prima di prendere una decisione…1° possibilità: if, if… else annidati1° possibilità: if, if… else annidati2° possibilità: esprimere direttamente con una sola 2° possibilità: esprimere direttamente con una sola
espressione le condizioni che devono essere verificate espressione le condizioni che devono essere verificate perché venga effettuata una determinata azione perché venga effettuata una determinata azione l’espressione può essere espressa come combinazione, l’espressione può essere espressa come combinazione, tramite operatori logici, di condizioni semplici (che tramite operatori logici, di condizioni semplici (che abbiamo già imparato ad esprimere)abbiamo già imparato ad esprimere)
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
OR, AND, NOTOR, AND, NOTTabelle di veritàTabelle di verità
x yx y x AND yx AND y x OR y x OR y NOT xNOT x
in C: x &&y in C: x || y in C: !xin C: x &&y in C: x || y in C: !x
T TT T T T TT FF
T FT F F F TT FF
F TF T F F TT TT
F FF F F F FF TT
Op. binario Op binario Op unario
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
EsempiEsempi
if ((a>= inf_intervallo) && (a <=sup_intervallo))if ((a>= inf_intervallo) && (a <=sup_intervallo))printf (“il valore si trova nell’intervallo \n”);printf (“il valore si trova nell’intervallo \n”);
if ((superato_esonero_1 && superato_esonero_2) if ((superato_esonero_1 && superato_esonero_2) || superato_esame)|| superato_esame)printf (“ho passato l’esame di prog1 ! \n”);printf (“ho passato l’esame di prog1 ! \n”);
If (!(c==EOF))If (!(c==EOF)) if (c !=EOF)if (c !=EOF)
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Potenziali problemi Potenziali problemi confondere operatori di confondere operatori di
uguaglianza e assegnamentouguaglianza e assegnamento
Tipo di errore: if (x==4) Tipo di errore: if (x==4) if (x=4) if (x=4)
x = 17; x = 17; x == 17 x == 17
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Confondere operatori di uguaglianza e Confondere operatori di uguaglianza e assegnamentoassegnamento
1° caso: volevamo scrivere 1° caso: volevamo scrivere
if (x==4) if (x==4)
printf (“BLABLABLA”); printf (“BLABLABLA”);
ma abbiamo scritto ma abbiamo scritto
if (x=4)if (x=4)
printf (“BLABLABLA”); printf (“BLABLABLA”);
Indipendentemente dal valore di x il valore dell’istruzione diassegnamento è 4 (!=0, quindiTRUE)Viene sempre stampato BLABLA ERRORE
Soluzione: scrivere (4==x)
se dimentichiamo un ==(4=x) darà un errore
di compilazione
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Confondere operatori di uguaglianza e Confondere operatori di uguaglianza e assegnamentoassegnamento
2° caso: volevamo scrivere 2° caso: volevamo scrivere
x=17; x=17;
ma abbiamo scritto ma abbiamo scritto
x==17;x==17;
Nessun errore in fase di compilazione. Viene Nessun errore in fase di compilazione. Viene valutata l’espressione x==17. Tale espressione valutata l’espressione x==17. Tale espressione varrà true o false a seconda del valore di x: il varrà true o false a seconda del valore di x: il suo valore non è usato. La variabile x continua a suo valore non è usato. La variabile x continua a memorizzare il valore originale memorizzare il valore originale ERRATO ERRATO
Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010
Precedenza degli operatori (sintesi)Precedenza degli operatori (sintesi)