Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà...

22
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2006/07

Transcript of Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà...

Page 1: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

Laboratorio di Linguaggi

lezione I: "Hello, world!"

Marco Tarini

Università dell’Insubria

Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese

Corso di Laurea in Informatica

Anno Accademico 2006/07

Page 2: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Laboratorio di Linguaggi

• docente: Marco Tarini e-mail: [email protected]

• ricevimento: Mercoledì dalle 16:00 – o anche su appuntamento

• libro di testo consigliato:Kelley Al, Pohl Ira:"C Didattica e Programmazione" ("A Book on C")quarta edizione - anche la terza va bene

Page 3: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Laboratorio di Linguaggi

• Pagina del corso: http://vcg.isti.cnr.it/~tarini/?55

– (oppure: google for "Marco Tarini" => "Teaching" => "Linguaggi-06")

Page 4: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Laboratorio di Linguaggi

• piccola guida pratica di C– guida essensiale di

alcuni emementi di C

v = argomanto già trattato

Page 5: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Linguaggio C: cenni storici

• 1972: nasce il C, – by Brian Kernighan & Dennis M.Richie, AT&T Bell Labs– scopo: poter riscrivere in un linguaggio a più alto livello il

codice del sistema operativo UNIX– evoluzione del B

• Anni 80: si sviluppa il C tradizionale

• 1983: comincia la definizione dello standard ANSI C, – (ANSI = American National Standards Institute)

• 1990: nascita ufficiale dello "ANSI C" – (o "ANSI ISO/C")

Page 6: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Un monito prima di iniziare

C (n.) A language that combines all the elegance and power of assembly language with all the readability and maintainability of assembly language.

The Hacker's Dictionary

Page 7: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Caratteristiche del Linguaggio C

• Linguaggio imperativo – con numerosi tipi di dato e strutture di controllo

• "Medio" livello– cioè più basso di Java!– gestione memoria diretta– gestione files diretta– puntatori…

• Focalizzato su efficienza e compattezza di codice• Linguaggio scarno, ma estendibile

– esistono molte librerie per operazioni non definite dal linguaggio…

• Possibile sviluppare progetti modulari– composti da più files sorgente (source files) compilabili

separatamente– molto utile per progetti complessi

Page 8: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Caratteristiche del Linguaggio C

• Il C è un linguaggio tipizzato– cioè: il tipo di ogni espressione è del tutto

noto al momento della compilazione

x = y + z ;

int int

int

Page 9: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Caratteristiche del Linguaggio C

• Il C usa lo scoping statico!

int a=5;

void proc(){ printf("%d",a);}

void main(){ int a=10; proc(); }

viene definita la variabile globale intera "a", (che vale 5)

viene definita un altra variabile locale intera "a", (che vale 10)

viene definita la procedura "proc" che…

…scrive il valore di a

viene invocata la procedura "proc"

scoping statico:il programma scrive "5"

se lo scoping fosse dinamico,il programma scriverebbe "10" !

Page 10: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

C e Java a confronto...

• i costrutti sono simili

int x=1, i;

for (i=1; i<=10; i=i+1) { x = x * i;}

int log2=0, x=100;

while (x>1) { x = x / 2; log2++;}

...if (x<0) x=-x;...

è più elegante dell’

l’equivalente

i++

i=i+1

ma

Page 11: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

C e Java a confronto...

• ma scordatevi...– la programmazione ad oggetti (le classi)

• in C niente metodi* !– (* member functions che si applicano all’oggetto che le

chiama)!

• solo funzioni globali• ...se volete pensatele come metodi statici

– macchine astratte (“java runtime environment”)• il C è molto, molto concreto• gestione diretta della macchina• puramente compilato, non compilato-poi-interpretato

– gestione delle eccezioni...

Page 12: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Un programma in C

• Un programma è un’insieme di – funzioni, e– variabili.

• La funzione – funzione speciale, è l’inizio del programma – deve esistere

main

Page 13: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Le variabili

• Dichiarazioni (semplici)

int x , y , z = 5, w;float ratio, ratio_bis ;

opzionalmente, le variabili possono essere inizializzate

qui, il valore iniziale di z è 5

tipo (delle variabili x, y, z, w):int (intero)

tipo (delle variabili ratio e ratio_bis):float (intero)

Page 14: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Le funzioni

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

Page 15: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Le funzioni

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 16: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Le procedure

void saluta_n_volte (int n){ int i; for (i=1; i<=n; i++) { printf("ciao "); }}

• Sono funzioni... ...solo, non restituiscono nessun valore

tipo del risultato: “void” (nessuno)

nota: niete comando “return” nel corpo.(ma si può usare “return”, senza valore, per uscire dalla funzione)

Page 17: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Chiamare le funzioni

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

int main(){ int base=10, milione; milione = potenza( base, 6); ...}

Page 18: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Errori comuni di C...

• le variabili locali si possono definire solo all’inizio di un blocco!

{ int x=1; for (int i=1; i<=10; i=i+1) { x = x * i; }}

{ int x=1, i; for (i=1; i<=10; i=i+1) { x = x * i; }}

{ int x=2, z, k=5; z = x+k; int h=4, w; w = w+h; }

{ int x=2, z,w, k=5, h=4; z = x+k; w = w+h; }

NO

SI

Page 19: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Errori comuni di C...

• Vietato annidare funzioni!– le funzioni in C sono tutte allo stesso livello

int funzione_uno (int b, int e){ int x, y;

int funzione_due( int a) { ... } ...}

–(ma, è vero, si può fare ad esempio in Pascal)

funzione annidata(nested function)

male, male...(non compilerà)

Page 20: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Passaggio di parametri

• Sempre per copia– mai per riferimento !– esempio...

void raddoppia (int x){ x = x*2;}

int main(){ int incassi = 5; raddoppia( incassi ); ...}

– ...di errore– nota: compila perfettamente!

Page 21: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Commenti

• Usare /* e */ per delimitare i commenti

int main(){ /* commento ansi C */ int x=10,y; while (x<6) { ... }; /* commento ansi C lungo due righe */ y = x / 2;

// tentativo di commento}

commento stile C++

facile che non vada bene per il vs compilatore C

non ANSI !non va bene a me

Page 22: Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.

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

Commento sui Commenti

• Usetali ! /* funzione potenza:dati due numeri interi B e Erestituisce B alla E */int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; }; return res;}

int main(){ int base=10, milione; /* modo scemo di calcolare un milione */ milione = potenza( base, 6); /*resto del codice ... */}