Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze...

28
Laboratorio di Linguaggi lezione IX Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05

Transcript of Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze...

Page 1: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

Laboratorio di Linguaggi

lezione IX

Marco Tarini

Università dell’Insubria

Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

Corso di Laurea in Informatica

Anno Accademico 2004/05

Page 2: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Espressioni e operatori

operatori su numeri- + * / %

>> << & |

== >= <= > <

|| && !

!=

==!=

-

+

operatori relazionali

operatori logici (booleani)

unari

bin

ari

Page 3: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Operatori Logici

• In C la semantica degli operatori logici e' lazy

if ((x<5)&&(fscanf(f,"-%c",&c)) ) { ...}

Page 4: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Assegnamenti

• Assegnamento base

=

<left value> = <expr>

Page 5: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Left values: oggetti dotati di indirizzo

• Cosa e’ un “left value”– una variabile– una espressione di tipo puntatore...

deferenziata– un elemento di un vettore– un campo di una variabile di tipo struct

• Non sono left values:– qualunque altra espressione– (costanti, risultati di operazioni, etc)

• Test mentale:– posso metterla a sinistra di un assegnamento?

Page 6: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Left values: oggetti dotati di indirizzo

• Esempi:– quali sono left values?

v[3]

v[3+x]

5

const int N=5;int v[15];int x,y;int * p;Persona r;

p

*p

N

x

x/5

&x

*(p+10)

&p

(*p) + 10v[x]+3

5+x &x + 2

*((&x)+2)

r

r.nome

r.eta + 5

x + y

Page 7: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Left values:

• Solo un left-value puo' :– essere usato a sx di un assegnamento– subire l’operatore – subire operatori di modifica

• che mutano il valore

&

Page 8: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Operatori unari di modifica

operatori su numeri- + * / %

>> << & |

== >= <= > <

|| && !

!=

==!=

-

+

operatori relazionali

operatori logici (booleani)

unari

bin

ari

x+=3;

x>>=1;

x=x+3;

x = x >> 1;

-= += *= /= %=

>>= <<= &= |=

operatori di modifica(scorciatoie sintattiche)

Page 9: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Operatori unari di modifica

• incremento - decremento

x++ x--

++x --x

l'espressione vale il valore non ancora incrementato / decrementato

("prima usa il valore, poi incrementa / decrementa la variabile")

l'espressione vale il valore già incrementato / decrementato("prima incrementa / decrementa la variabile, poi usa il valore ")

Page 10: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Assegnamenti

• Assegnamento base

=

<left value> = <expr>

tipo T0 tipo T1

typecast automatico se T0 diverso da T1

(ma solo se esiste una conversione automatica).Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito!

Page 11: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Assegnamenti

• Assegnamento base

=

<left value> = <expr>

tipo T0 tipo T1

expr di tipo T0

typecast automatico se T0 diverso da T1

(ma solo se esiste una conversione automatica).Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito!

x = y = z = 10;

Page 12: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Esercizio

• Non esiste il tipo bool• Come si puo’ fare ad aggiungerlo?

– in modo che sia possibile scrivere, per esempio:

Bool b;int x;

int main(){ b = ( x == 0); if (b) { ... }; b = !b;}

Bool b0,b1,b2 = TRUE;

int main(){ ... b0 = b1 && b2; while (b0) { ... }}

Page 13: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Esercizio: alcune soluzioni• soluzione 1:

• soluzione 2:

• soluzione 3:

typedef enum {FALSE, TRUE} Bool;

typedef int Bool;const Bool TRUE = 1;const Bool FALSE = 0;

#define Bool int#define TRUE 1#define FALSE 0

Bool b;int x;

int main(){ b = ( x == 0); if (b) { ... }; b = !b;}

Bool b0,b1,b2 = TRUE;

int main(){ ... b0 = b1 && b2; while (b0) { ... }}

Page 14: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

file "bool.h"

E' gia' una micro-libreria !

typedef enum {FALSE, TRUE} Bool;

Bool b;int x;

int main(){ b = ( x == 0); if (b) { ... }; b = !b;}

Bool b0,b1,b2 = TRUE;

int main(){ ... b0 = b1 && b2; while (b0) { ... }}

#include "bool.h" #include "bool.h"

Page 15: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Inclusione files

#include "bool.h"

Due sintassi diverse per "includere" un file

#include <bool.h>

"inserisci un file che fa parte di questo progetto"

(il file verrà cercato nella directory corrente)

"inserisci unauna libreria esterna"

(il file verrà cercato nelle apposite "directories di libreria")

Page 16: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Inclusione files

Page 17: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Diamo una occhiata

Page 18: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Definizioni e dichiarazioni

int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}

tipo del risultato: intero(output della funzione)

lista dei parametri formali,ciascuno preceduto dal tipo(input della funzione)

corpo della funzione“cosa fa”un blocco delimitato da {}

comando “return”: restituzione del risultato, e uscita dalla funzioneci deve essere!

variabili locali

• qui, due• visibili solo nel corpo della funzione.

• dichiarate all’inizio!

nome (identificatore) della funzione: “potenza”

Page 19: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Definizioni e dichiarazioni

int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}

int potenza (int b, int e);

dichiarazione della funzione

o prototipo della funzione

- "tutto quello che serve sapere per usare la funzione (a scatola chiusa)"

definizione della funzione

o implementazione della funzione

- "le istruzioni dettagliate per eseguire la funzione"

Page 20: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Definizioni e dichiarazioni

• Esempioint potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}

int main(){ int x; x = potenza(5, 6); }

Page 21: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Definizioni e dichiarazioni

• Esempio: invertiamo l'ordine per capriccioint main(){ int x; x = potenza(5, 6); }

int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}

errore in compilazione:

identificatore

sconosciuto: "potenza"

Page 22: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Definizioni e dichiarazioni

• Esempioint potenza (int b , int e );

int main(){ int x; x = potenza(5, 6); }

int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}

(i nomi dei parametri formali si possono anche omettere)

Page 23: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

file "main.c"

file "potenze.c"

Progetti a piu' files

• Schema

#include "potenze.h"

int main(){ int x; x = potenza(5, 6); }

int potenza(int b,int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}

file "potenze.h"int potenza(int b,int e);

#include "potenze.h"

Page 24: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Struttura della compilazione

main.c

potenze.c

potenze.h

pre- process.

fileprecomp.

1 compiler

objectfile

main.o

pre- process.

fileprecomp.

3 compiler

objectfile

potenze.o

eseguibilefinale

exec.exe linker

Page 25: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Con DevC++

• Tasto destro sul progetto

Page 26: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Con DevC++

Page 27: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Con DevC++

Page 28: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.

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 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Con DevC++

Ripentendo per potenza.h si ottiene:nota: "compile" VS "build" (anche: "make")