La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.

Copie: 1
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.

Presentazioni simili


Presentazione sul tema: "Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica."— Transcript della presentazione:

1 Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05

2 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 Laboratorio di Linguaggi docente: Marco Tarini e-mail: tarini@isti.cnr.it ricevimento: Martedì 14:30 - 17:30 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

3 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 Laboratorio di Linguaggi link utile: http://vcg.isti.cnr.it/~tarini/linguaggi/http://vcg.isti.cnr.it/~tarini/linguaggi/ –guida essensiale di alcuni emementi di C v = argomanto già trattato

4 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 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")

5 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 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

6 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 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

7 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 Caratteristiche del Linguaggio C Il C usa il Binding 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" bindind statico: il programma scrive "5" se bindind fosse dinamico, il programma scriverebbe "10" !

8 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 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 lequivalente i++ i=i+1 ma

9 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 C e Java a confronto... ma scordatevi... –la programmazione ad oggetti (le classi) in C niente metodi* ! –(* member functions che si applicano alloggetto 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...

10 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 Un programma in C Un programma è uninsieme di –funzioni, e –variabili. La funzione –funzione speciale, è linizio del programma –deve esistere main

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

12 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 Le funzioni int potenza (int b, int e) { int res=1, i; for (i=1; i<=e; i++) { res = res * b; } return res; }

13 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 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 funzione ci deve essere! variabili locali qui, due visibili solo nel corpo della funzione. dichiarate allinizio! nome (identificatore) della funzione: potenza

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

15 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 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);... }

16 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 Errori comuni di C... le variabili locali si possono definire solo allinizio di una funzione! { 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

17 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 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à)

18 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 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!

19 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 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

20 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 Commento sui Commenti Usetali ! /* funzione potenza: dati due numeri interi B e E restituisce 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... */ };

21 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 Strumento: Dev-CPP cioè software libero, non gratis (lo sapevate, vero?) un Ambiente Integrato di Sviluppo per C (e C++) Web: http://www.bloodshed.net/dev/devcpp.html,http://www.bloodshed.net/dev/devcpp.html Free Software (GNU General Public License). Linstallatore è scaricabile da: http://prdownloads.sourceforge.net/dev- cpp/devcpp4990setup.exehttp://prdownloads.sourceforge.net/dev- cpp/devcpp4990setup.exe

22 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 Come Usare Dev-CPP Installare, eseguire File New Project…

23 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 Come Usare Dev-CPP Installare, eseguire File New Project… Selezionare: 1) "Console Application" 2) "C Project" 3) Immette un nome per il progetto 4) ok!

24 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 Come Usare Dev-CPP Immettere il path per un maggior ordine, meglio creare una directory per il nuovo progetto. NOTA: a ricevimento se avete domande su un progetto potete portarmi una copia della directory creata (per esempio in un floppy)

25 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 Come Usare Dev-CPP Abbiamo un nuovo "progetto" premere questo piccolo "+"

26 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 Come Usare Dev-CPP Abbiamo un nuovo "progetto" unico file del progetto (per ora): "main.c" codice dentro "main.cpp"

27 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 Come Usare Dev-CPP Abbiamo un nuovo "progetto" questa piccola [*] significa che "main.c" non è ancora stato salvato... …salviamolo premendo su questa icona (ci verrà chisto che nome di file usare. Confermare pure il default)

28 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 Come Usare Dev-CPP Abbiamo un nuovo "progetto"

29 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 Come Usare Dev-CPP Abbiamo un nuovo "progetto": compiliamolo –"Execute Complile" oppure premere su questa icona …oppure Ctrl-F9

30 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 Come Usare Dev-CPP Abbiamo un nuovo "progetto": compiliamolo nessun errore! nessun "warining"!

31 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 Come Usare Dev-CPP Ora eseguiamo il progetto –"Execute Run" oppure premere su questa icona …oppure Ctrl-F10

32 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 Come Usare Dev-CPP Ora eseguiamo il progetto –Risultato dell'esecuzione

33 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 Come Usare Dev-CPP In seguito, per ritornare sullo stesso progetto… –"Execute Open Project or File…" …e selezionare il file ".dev" col nome corrispondente

34 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 Cosa fa il programma di prova? non molto… #include int main(int argc, char *argv[]) { system("PAUSE"); return 0; } press any key to continue utile per permettere di visualizzare loutput del programma prima che la finestra si chiuda dichiaria che verranno usate due librerie standard: standard Input Output e Standard Library

35 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 Cosa fa il programma di prova? #include int main(int argc, char *argv[]) { printf("Ciao Mondo!\n"); system("PAUSE"); return 0; } aggiungiam o ricompliamo & rieseguiamo –abbiamo ottenuto il nostro primo programma hello world

36 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 Cosa è successo esattamente quando abbiamo "complilato" il progetto? Source File "main.c" preprocessor file precomp. compiler object file "main.o" Solo operazioni sintattiche: –risoluzioni delle macro –inclusioni di files di header –codici alternativi per esempio, per le varie piattaforme La compilazione vera e propria in Cancora in C (quasi) linguaggio macchia

37 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 Cosa è successo esattamente quando abbiamo "complilato" il progetto? Source File 1 "main.c" Source File 2 "pippo.c" Source File 3 pluto.c" pre- process. file precomp. 1 compiler object file "main.o" pre- process. file precomp. 2 compiler object file "pippo.o" pre- process. file precomp. 3 compiler object file pluto.o" eseguibile finale "prova.exe" linker libreria A libreria B

38 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 Preprocessore Sostituzioni delle macro (costanti simboliche) –puramente sintattiche! #define LIMIT 10 int main() {... if (x < LIMIT) {... } else {... }... } # = istruzione per il preprocessore:d'ora in poi, quando scrivo LIMIT, fai finta che abbia scritto 10

39 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 Preprocessore Sostituzioni delle macro (costanti simboliche) –puramente sintattiche! #define LIMIT 10 int main() {... if (x < LIMIT) {... } else {... }... } preprocessor int main() {... if (x < 10) {... } else {... }... }

40 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 Preprocessore Sostituzioni delle macro (costanti simboliche) –puramente sintattiche! #define LIMIT x int main() {... if (LIMIT < 10) {... } else {... }... } preprocessor int main() {... if (x < 10) {... } else {... }... }

41 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 Preprocessore Costrutti condizionali –statici, fatti prima del compilatore! #define DEBUG 1 int fattoriale(int a) { int res=1; #if DEBUG printf("valore di a:%d \n",a); #endif while (a>1) { res*= (a--); } return res; } preprocessor int fattoriale(int a) { int res=1; printf("valore di a:%d \n",a); while (a>1) { res*= (a--); } return res; }

42 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 Preprocessore Costrutti condizionali –statici, fatti prima del compilatore! #define DEBUG 0 int fattoriale(int a) { int res=1; #if DEBUG printf("valore di a:%d \n",a); #endif while (a>1) { res*= (a--); } return res; } preprocessor int fattoriale(int a) { int res=1; while (a>1) { res*= (a--); } return res; }

43 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 Preprocessore Costrutti condizionali statici –perchè é una tale furbata? #define DEBUG 0 int fattoriale(int a) { int res=1; #if DEBUG printf("valore di a:%d \n",a); #endif while (a>1) { res*= (a--); } return res; } int DEBUG = 0; int fattoriale(int a) { int res=1; if (DEBUG) { printf("valore di a:%d \n",a); } while (a>1) { res*= (a--); } return res; } VS. la guardia viene controllata solo durante la compilazione risultato: programma efficiente! la guardia viene controllata solo durante ogni esecuzione! risultato: programma inefficiente!

44 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 Preprocessore Costrutti condizionali statici –due forme sintattiche equivalenti #define DEBUG 1 int fattoriale(int a) { int res=1; #if DEBUG printf("valore di a:%d \n",a); #endif while (a>1) { res*= (a--); } return res; } #define DEBUG int fattoriale(int a) { int res=1; #ifdef DEBUG printf("valore di a:%d \n",a); #endif while (a>1) { res*= (a--); } return res; } –si possono anche usare #ifndef DEBUG#undef DEBUG#if defined (DEBUG)

45 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 Preprocessore Costrutti condizionali statici –altro tipico uso: specializzazione del codice per architetture specifiche –(remember: niente macchine virtuali in C)... #if defined (HP9000) || defined(SUN) /* codice funzionante SOLO per le sun o per le HP9000 */... #else /* codice buono per le altre architettutre */... #endif... questo tipo di flags (SUN, HP9000...) sono definite nellambiente. Il compilatore lo sa. Non vanno specificate a mano nel codice

46 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 Lultima fatica del Preprocessore preprocessor const int LIRE_PER_EURO = 1955; int da_euri_a_lire (int euri) { return euri * LIRE_PER_EURO; } Inclusione file di header file cambi.h const int LIRE_PER_EURO = 1955; file main.c #include "cambi.h" int da_euri_a_lire (int euri) { return euri * LIRE_PER_EURO; }

47 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 Lultima fatica del Preprocessore preprocessor const int LIRE_PER_EURO = 1955; pernacchia :P prrrrrr $£!@&& int da_euri_a_lire (int euri) { return euri * LIRE_PER_EURO; } Inclusione file di header file cambi.h const int LIRE_PER_EURO = 1955; pernacchia :P prrrrrr $£!@&& file main.c #include "cambi.h" int da_euri_a_lire (int euri) { return euri * LIRE_PER_EURO; } pura, meccanica, manipolazione sintattica !


Scaricare ppt "Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica."

Presentazioni simili


Annunci Google