La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011

Presentazioni simili


Presentazione sul tema: "1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011"— Transcript della presentazione:

1 1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011 http://agile.diee.unica.it Ing. Giuseppe Destefanis Diee, secondo piano Tel. 070-6755774 mail: giuseppe.destefanis@diee.unica.itgiuseppe.destefanis@diee.unica.it Web: http://giuseppedestefanis.wordpress.com

2 2 Un linguaggio è caratterizzato da:  SINTASSI - insieme di regole formali per la scrittura di programmi, che fissano le modalità per costruire frasi corrette nel linguaggio.  SEMANTICA - insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio  Scrivere un programma sintatticamente corretto non implica che il programma faccia quello per cui è stato scritto.

3 3 Sviluppo di un programma (compilazione) - editing: scrivere il testo e memorizzarlo su supporti di memoria permanenti; - compilazione: traduzione del codice sorgente in codice oggetto; - linking: integrazione dei vari moduli di un programma per creare un'unità eseguibile; - esecuzione: la cpu esegue il programma;

4 4 Compilatore: traduce il programma sorgente in programma oggetto;  ANALISI programma sorgente analisi lessicale analisi sintattica  TRADUZIONE generazione del codice ottimizzazione del codice Esempi: C, C++, Pascal

5 5

6 6 Sviluppo di un programma (approccio interpretato) - editing: scrivere il testo e memorizzarlo su supporti di memoria permanenti; - interpretazione: ogni istruzione viene convertita in linguaggio macchina e eseguita;  ANALISI programma sorgente  analisi lessicale  analisi sintattica  ESECUZIONE ESEMPIO: Basic

7 7 Il primo programma C #include int main() { printf(“Sono il primo programma\n”); return(0); }

8 8 Variabili Memoria: insieme di celle. Cella: in genere ha una grandezza di un byte (8 bit) Variabile: gruppo di celle consecutive che vengono considerate dal programmatore come un’unica cella informativa. Attributi di una variabile: - Indirizzo della prima cella - Valore (contenuto di tutte le celle) variabile valor e cella indirizzo valor e

9 9 Variabili (2) Variabili: – l’indirizzo non cambia; – il valore può subire modifiche Programmatore: – si riferisce a una variabile mediante un nome (identificatore); Variabile: – ha un tipo Tipo di una variabile: – insieme di valori (detti elementi o costanti del tipo);

10 10 Dichiarazioni e definizioni Costrutti che introducono nuove entità: – dichiarazioni; – definizioni. Dichiarazioni: – entità a cui il compilatore non associa locazioni di memoria o azioni eseguibile;

11 11 Definizioni: – entità a cui il compilatore associa locazioni di memoria o azioni eseguibili; – esempio: definizioni di variabili o di costanti Nomenclatura consentita in C: – spesso non è semplice né conveniente trattare separatamente dichiarazioni e definizioni; – con dichiarazione si può intendere sia una dichiarazione vera e propria, sia una definizione (le dichiarazioni comprendono le definizioni).

12 12 Esempio #include int main() { int a,b; /*dichiarazione di variabile*/ int c=3; /*dichiarazione e definizione*/ printf(“Sono il secondo programma\n”); return(0); }

13 13 Costanti  Se il valore associato ad un identificativo non è modificabile parliamo di costanti.

14 14 I tipi base Il C supporta due tipologie fondamentali di numeri:  numeri interi e i numeri a virgola mobile; I valori di un tipo intero sono numeri interi, mentre i valori dei tipi a virgola mobile possono avere anche una parte frazionaria.

15 15 Tipi interi

16 16 Tipi interi (2) #include int main() { int a,b; /*dichiarazione di variabile*/ int c=3; /*definizione e dichiarazione*/ return(0); }

17 17 Tipi floating point

18 18 Tipi floating point (2) #include int main() { double a,b; a=3.14; float c; c=5.15; return(0); }

19 19 Tipi char Il tipo char è il tipo di dato utilizzato per i caratteri. I valori del tipo char possono variare da macchina a macchina poichè esistono diversi tipi di set di caratteri (il più diffuso è quello ASCII: American Standard Code for Information). A una variabile di tipo char può essere assegnato un qualsiasi carattere: char ch; ch='a'; /* a minuscola */ ch='A'; /* A maiuscola */

20 20 Tipi definiti dall'utente I tipi enumerazione sono: - definiti dal programmatore; - costituiti da insiemi di costanti intere definite dal programmatore, ciascuna individuata da un identificatore e detta enumeratore; - utilizzati per variabili che assumono solo un numero limitato di valori; - utili per rappresentare informazioni non numeriche;

21 21 Tipi definiti dall'utente (2) #include int main() { enum Giorni{LUN,MAR,MER,GIO,VEN,SAB,DOM}; enum Giorni oggi=LUN; printf("%d",oggi); //stampa 0 return(0); }

22 22 Definizione di tipi  L'istruzione introdotta dalla parola-chiave typedef definisce un sinonimo di un tipo esistente.  Non crea un nuovo tipo, ma un nuovo identificatore di un tipo (nativo o astratto) precedentemente definito. typedef int interi; interi a; /* equivale a scrivere int a*/

23 23 Assegnamento (o assegnazione) Si può conferire un valore ad una variabile tramite un assegnamento: … int a,b; int c=4; a=c; b=a; const int x=3; …

24 24 Assegnamenti (2) #include int main{ int a,b,c; a=b=c=1; b=a*b; c=c+1=3; //ATTENZIONE! return(0); }

25 25 Left value e Right value  Left value: espressione che può apparire sul lato sinistro di un assegnamento;  Right value: espressione che può apparire sul lato destro di un espressione;

26 26 Operatori aritmetici

27 27 Operatori logici e di confronto I tipi aritmetici possono usare gli operatori di confronto: == uguale != diverso > maggiore >= maggiore o uguale < minore <= minore o uguale

28 28 Operatori logici e di confronto (2) ! operatore logico not && operatore logico and || operatore logico or Gli operatori logici, quando utilizzati in un'espressione, producono 0 oppure 1 come risultato.

29 29 #include int main() { int a=2, b=3, c; c=a>2&&b>3; printf(“%d”,c); //0 c=a>2||b==3; printf(“%d”,c); //1 return(0); }

30 30 #include int main() { int a=2, b=3, c; c=!(a>2&&b>3); printf(“%d”,c); //1 c=a>2||b==3; printf(“%d”,c); //1 return(0); }

31 31 Corto circuito #include int main() { int a=2, b=3, c; c=(a!=0)&&(4/a>1); printf("%d",c); c=(4/a>1)&&(a!=0); //ATTENZIONE! printf("%d",c); return(0); }

32 32 Incremento e decremento #include int main(){ int a=1, b=2; a+=1; //a=a+1; ++b; //b=b+1; a++; //a=a+1; }

33 33 Incremento e decremento (2) #include int main() { int a=2, c=0; printf("%d\n",c++); //stampa 0 printf("%d\n",c); //stampa 1 printf("%d\n",++a); //stampa 3 printf("%d\n",a); //stampa 3 return(0); }

34 34 Incremento e decremento (3) #include int main() { int a=2, c=2; printf("%d\n",c--); //stampa 2 printf("%d\n",c); //stampa 1 printf("%d\n",--a); //stampa 1 printf("%d\n",a); //stampa 1 return(0); }

35 35 Conversioni di tipo Conversioni implicite:  quando in un'espressione logica o aritmetica gli operandi non sono dello stesso tipo;  quando il tipo del lato destro di un'assegnazione non è lo stesso di quello del lato sinistro;

36 36 #include int main() { char c; short int s; int i; unsigned int i; long int l; unsigned long int ul; float fl; double d; long double ld; i=i+c; /* il valore di c viene convertito al tipo int i=i+s; /* il valore di s viene convertito al tipo int u=u+i; /* il valore di i viene convertito al tipo unsigned int l=l+u; /* il valore di u viene Convertito al tipo long int ul=ul+l; /* il valore di l viene convertito al tipo uns. Long int fl=fl+ul; /* il valore di ul viene convertito al tipo float; d=d+fl; /* il valore di fl viene convertito al tipo double; ld=ld+d; /* il valore di d viene convertito al tipo long double return(0); }

37 37 Conversioni di tipo (2) Attenzione: nella conversione da double a int si può avere una perdita di informazione a causa del troncamento della parte decimale. In alcuni casi nella conversione da int a double si può verificare una perdita di precisione per arrotondamento, poichè gli interi sono rappresentati in forma esatta ed i reali sono rappresentati in forma approssimata.

38 38 Cast esplicito Sebbene le conversioni esplicite siano convenienti, a volte si ha bisogno di un maggior grado di controllo sulla conversione di tipo. Un'espressione di cast ha la forma: (nome del tipo) espressione Il nome del tipo specifica il tipo nel quale verrà convertita l'espressione. … float f=3.14; int i; i=int(f); //cast …

39 39 Ordine di valutazione delle espressioni 1

40 40 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); }

41 41 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f;

42 42 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f;

43 43 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f; 3- a= b+= (c++) - d + ((--e) / -f);

44 44 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f; 3- a= b+= (c++) - d + ((--e) / -f); 4- a= b+= (((c++) - d) + ((--e) / (-f)));

45 45 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f; 3- a= b+= (c++) - d + ((--e) / -f); 4- a= b+= (((c++) - d) + ((--e) / (-f))); 5- (a= (b+= (((c++) - d) + ((--e) / (-f))));

46 46 printf() e specifiche di conversione La funzione printf() viene utilizzata per visualizzare a video il contenuto di una stringa.

47 47 printf() (2) #include int main(){ int a=3; printf(“%d%d”,a); //numero di specifiche superiori all'input return(0); }

48 48 printf() (2) #include int main(){ int a=3; printf(“%d%d”,a); //numero di specifiche superiori all'input return(0); } ---------------------------------------------------------- #include int main(){ int a=3,b=5; printf(“%d”,a,b); //numero di specifiche inferiori all'input return(0); }

49 49 scanf() La funzione scanf() viene utilizzata per leggere dallo standard input secondo un particolare formato. #include int main(){ int a; printf(“Inserisci un valore: \n”); scanf(“%d”,&a); return(0); }

50 50 L'istruzione if --------------------------------------- if (espressione) istruzione else istruzione --------------------------------------- #include int main(){ int num1,num2; scanf(“%d%d”,&num1,&num2); if(num1<num2) printf(“%d”,num1); else printf(“%d”,num2); }

51 51 L'istruzione if (2) #include int main(){ int num1,num2,max; scanf(“%d%d”,&num1,&num2); if(num1<num2) max=num1; else max=num2; return(0); }

52 52 #include int main() { int operazione, num1, num2, ris; printf("1: somma, 2: sottrazione, 3: moltiplicazione \n"); scanf("%d",&operazione); if(operazione==1){ printf("Inserisci i numeri:\n"); scanf("%d%d",&num1,&num2); ris=num1+num2; printf("Il risultato è: %d\n",ris); } else if(operazione==2){ printf("Inserisci i numeri:\n"); scanf("%d%d",&num1,&num2); ris=num1-num2; printf("Il risultato è: %d\n",ris);} else if(operazione==3){ printf("Inserisci i numeri:\n"); scanf("%d%d",&num1,&num2); ris=num1*num2; printf("Il risultato è: %d\n",ris);} if(operazione!=1 && operazione!=2 && operazione!=3) printf("Numero non valido!\n"); }

53 53 Espressione condizionale espressione1 ? espressione2 : espressione3 ----------------------------------------------------- #include int main(){ int a=2, b=3; int max; max=(a>b?a:b); printf(“Il massimo è: %d”,max); }

54 54 Switch e break #include int main() { int operazione, num1, num2, ris; printf("1: somma, 2: sottrazione, 3: moltiplicazione \n"); scanf("%d",&operazione); printf("Inserisci i due numeri: \n"); scanf("%d%d",&num1,&num2); switch(operazione){ case 1: printf("La somma è: %d\n",num1+num2); break; case 2: printf("La differenza è: %d\n",num1-num2); break; case 3: printf("Il prodotto è: %d\n",num1*num2); break; default: printf("Il numero inserito non è una scelta valida!\n"); }

55 55 I cicli Un ciclo consente l'esecuzione ripetitiva di altre istruzioni sotto il controllo di una condizione di terminazione.

56 56 L'istruzione while while (condizione) istruzione Valuto la condizione e se verificata eseguo il ciclo. #include int main() { int num, somma; somma=0; scanf("%d",&num); while(num!=0){ somma+=num; scanf("%d",&num); } printf("La somma finale è: %d\n",somma); }

57 57 L'istruzione do-while Eseguo il corpo del ciclo e poi valuto la condizione. A differenza del ciclo while eseguo il contenuto del ciclo almeno una volta. do istruzione while (espressione)

58 58 do-while (2) #include int main() { int num, somma; somma=0; scanf("%d",&num); do { somma+=num; scanf("%d",&num); } while(num!=0) printf("La somma finale è: %d\n",somma); }

59 59 L'istruzione for #include int main() { int num, fatt; fatt=1; scanf("%d",&num); for(int i=1; i<=num; i++){ fatt*=i; } printf("Il fattoriale vale: %d\n",fatt); return(0); }

60 60


Scaricare ppt "1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011"

Presentazioni simili


Annunci Google