Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di...

41
Prof.ssa Chiara Petrioli -- Prof.ssa Chiara Petrioli -- Fondamenti di programmazio Fondamenti di programmazio ne 1, a.a. 2009/2010 ne 1, a.a. 2009/2010 Corso di Fondamenti di Corso di Fondamenti di programmazione programmazione a.a.2009/2010 a.a.2009/2010 Prof.ssa Chiara Petrioli Prof.ssa Chiara Petrioli Corso di Laurea in Corso di Laurea in Informatica Informatica Università degli Studi “La Università degli Studi “La Sapienza” Sapienza” (lezioni 4 e 5) (lezioni 4 e 5) for, do..while, switch, problemi con le operazioni sui reali, debugging & test

Transcript of Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di...

Page 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.

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

Page 2: 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.

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…

Page 3: 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.

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

Page 4: 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.

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

Page 5: 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.

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?

Page 6: 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.

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;

}}

Page 7: 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.

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

Page 8: 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.

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

Page 9: 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.

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

Page 10: 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.

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

Page 11: 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.

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

Page 12: 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.

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.

******************************

Page 13: 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.

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:***************

Page 14: 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.

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.

******************************************

Page 15: 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.

Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010

Page 16: 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.

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:***************

Page 17: 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.

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.

********

******

****

**

Page 18: 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.

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:***** **** *** ** *

Page 19: 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.

Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010

Page 20: 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.

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

Page 21: 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.

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

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

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

Page 23: 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.

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;

}}

Page 24: 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.

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

Page 25: 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.

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

Page 26: 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.

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

Page 27: 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.

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

Page 28: 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.

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.

Page 29: 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.

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

Page 30: 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.

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

Page 31: 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.

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…..

Page 32: 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.

Prof.ssa Chiara Petrioli -- Fondamenti diProf.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 programmazione 1, a.a. 2009/2010

Page 33: 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.

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

Page 34: 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.

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

Page 35: 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.

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)

Page 36: 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.

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

Page 37: 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.

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)

Page 38: 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.

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

Page 39: 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.

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

Page 40: 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.

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

Page 41: 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.

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)