"Teaching" => "Linguaggi-07")"> "Teaching" => "Linguaggi-07")">
Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoRemo Sacco Modificato 11 anni fa
1
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08
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 7 / 0 8 - 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: Mercoledì 13:00 - 18: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 7 / 0 8 - 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/?57 http://vcg.isti.cnr.it/~tarini/?57 – (oppure: google for "Marco Tarini" => "Teaching" => "Linguaggi-07")
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 7 / 0 8 - 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
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 7 / 0 8 - 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")
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 7 / 0 8 - U n i v e r s i t à d e l l I n s u b r i a Perchè un corso di C ? Di certo, é un linguaggio di 20-30 anni fa! Obsoleto? Roba vecchia? Ma: Ancora un industry standard –diffusissimo –prob. il linguaggio meglio provvisto di librerie al mondo Indispensabile in alcuni contesti –es programmazione di sistemi operativi Molto propedeutico –basso livello (es. gestione diretta della memoria) –toccare con mano (es. ottimizzazioni) Bonus: C++ (quasi gratis, sapendo Java e C)
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 7 / 0 8 - 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
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 7 / 0 8 - 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… importante! 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
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 7 / 0 8 - 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
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 7 / 0 8 - 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
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 7 / 0 8 - 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...
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 7 / 0 8 - 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
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 7 / 0 8 - 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)
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 7 / 0 8 - 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 (come Java) 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" !
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 7 / 0 8 - 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; }
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 7 / 0 8 - 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
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 7 / 0 8 - 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)
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 7 / 0 8 - U n i v e r s i t à d e l l I n s u b r i a Chiamare (invocare) 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);... }
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 7 / 0 8 - 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 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
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 7 / 0 8 - 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à)
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 7 / 0 8 - 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!
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.