laboratorio di linguaggi lezione di ripasso costrutti marco tarini università dellinsubria facoltà...

17
Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08

Upload: anthony-murphy

Post on 26-Mar-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

Laboratorio di Linguaggi

lezione di ripasso costrutti

Marco Tarini

Università dell’Insubria

Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

Corso di Laurea in Informatica

Anno Accademico 2007/08

Page 2: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

Ripasso costrutti base:

Istruzioni di Controllo del Flusso

nozioni di sintassi e semantica(intuitivamente, non formalmente)

Page 3: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

if then else

• costrutto condizionale

if (<expression>) <statement1>else <statement2>

Come gia’ detto, esegue statement1 (il ramo then) sse l’espressione risulta diversa da zero

Page 4: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

<statement>

• Esempi di <statement>s:

y = x + 10;

{ y = x + 10; z = 4;};niente punto-e-virgola!

nota: punto e virgola...

Page 5: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

if then else

• costrutto condizionale

if (<expression>) <statement1>else <statement2>

if (x) y = x + 10; else y = 20;

if (x==2) {y = x + 10; ... } else y = 20;

Page 6: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

Lo sapevate che...

• In C, quasi tutti gli statement sono anche espressioni?

• Ad esempio, l’assegnamento

e’ anche un’espressione, che vale il valore assegnato (e ha anche il suo tipo)

• Cio’ consente di scrivere, per esempio:

(non solo e’ coinciso, ma e’ anche efficiente,come da filosofia C)

x = y

int x,y,z;x = y = z = 10 ;

Page 7: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

if then else: trappole

• errore di sintassi (non compila, innocuo)

• errore nella guardia (compila: errore “cattivo”. Cosa fa?)

• punto-e-virgola di troppo (compila: errore “cattivo”. Cosa fa?)

if (x=2) { y = x + 10; ... }

if (x==2) {y = x + 10; ... } else y = 20;

if (x==2); { y = x + 10; ... }

Page 8: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

for

• costrutto iterativo

for (<expr0>;<expr1>;<expr2>) <stat>

for (i=0,j=10;(j>20) &&(i<5); i++, j--){ vect[i]+=10; printf(“%d”, vect[i]);}

Page 9: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

while

• ciclo while

while (<expr0>) <stat>

while (i<N && a[i]< 1000) i = i + 1;

Page 10: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

do while

• ciclo do-while

do <stat> while (<expr0>)

do{ printf("Immettere un valore intero pari\n"); scanf("%d",&a); /* leggi il numero a da tastiera */}while(a%2);

Page 11: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

switch

• costrutto condizionale a più vie

switch (<expr0>) { case <const1>: <stat1> break; ... case <const2>: <stat2> break;}

switch (ch){ case 'a': cont_a++; break; case 'e': cont_e++; break; case 'i': cont_i++; break; case 'o': cont_o++; break; case 'u': cont_u++; break; default : cont_car++; }

Page 12: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

switch

• senza break: fall trought

switch (oggi){ case LUN: ... /* gestisci il caso LUN */ break; case MAR: ... /* gestisci il caso MAR */ break; case SAB: ... /* operazioni solo per il SAB */ /* FALL TROUGHT */ case DOM: ... /* gestisci per il SAB e la DOM */ break; default : ... /* gestisci gli altri casi */}

Page 13: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

labels e goto

• salti non strutturati– cattiva pratica di programmazione

• (porta a programmi spaghetti)

– perlomeno, non eleganti

<label>:

goto <label>;

Page 14: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

labels e goto

• ad esempio:

• equivalente a:

i=0; while (i <= NUM) printf("%d \n",++i); ...

            i=0;    INIZIO : if (i>NUM) goto FINE;             printf("%d \n",++i);             goto INIZIO;    FINE :   ...

Page 15: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

break e continue

• utilizzabili in tutti i cicli– for, while, do-while

• break = esci dal ciclo– (vai alla prima iterazione dopo il ciclo)

• continue = interrompi l’iterazone corrente

– vai all’inizio della prossima iterazione– (dove, per prima cosa, la guardia di uscita dal ciclo viene

testata)

Page 16: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

Fine ripassino

• Fine ripassino

Page 17: Laboratorio di Linguaggi lezione di ripasso costrutti Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i - 2 0 0 7 / 0 8 - U n i v e r s i t à d e l l ’ I n s u b r i a

:)

da http://xkcd.com