Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi...

44
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012 5. Codifica degli algoritmi 5. Codifica degli algoritmi in un linguaggio di alto livello in un linguaggio di alto livello Ing. Simona Colucci

Transcript of Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi...

Page 1: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2012

5. Codifica degli algoritmi5. Codifica degli algoritmiin un linguaggio di alto livello in un linguaggio di alto livello

Ing. Simona Colucci

Page 2: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

IndiceIndice

• Obiettivi della programmazione in linguaggi di alto livello

• La macchina astratta C• Struttura di un programma C• Istruzioni principali del C• Esempi di programmi in quasi C

Page 3: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Obiettivi della programmazione in Obiettivi della programmazione in linguaggi di alto livellolinguaggi di alto livello

• Colmare il gap tra i due requisiti fondamentali di un linguaggio per la descrizione di algoritmi:– Precisione ed assenza di ambiguità interpretativa per

l’esecuzione di operazioni(requisito richiesto dalla macchina)

– Sintesi per la facilità di comprensione del programmatore(requisito richiesto dall’uomo)

Page 4: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Programmazione in linguaggi di alto Programmazione in linguaggi di alto livellolivello

• Vantaggi:– Possibilità di riferirsi agli elementi del programma(celle

di memoria, istruzioni, valori costanti) con identificatori (nomi simbolici)

• Es. a cella di memoria 1001001100

– Possibilità di esprimere le istruzioni e il controllo della sequenza della loro esecuzione in modo vicino al linguaggio naturale

• Es. (a+b)*(c+d) LOAD A

ADD B

STORE TEMP

LOAD C

ADD D

MULT TEMP

Page 5: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

La macchina astratta del (nucleo) del CLa macchina astratta del (nucleo) del C

• Capace di comprendere ed eseguire programmi in C

• Astrazione della macchina di Von Neumann

Page 6: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Componenti:• CPU• Memoria centrale:

– divisa in celle elementari, contenenti un dato(valore numerico o carattere), di un numero di bit variabile

• Bus• Astrazione delle interfacce con le periferiche:

– Standard Input: • unica unità di ingresso• diviso in celle elementari, contenenti un dato (valore numerico o

carattere), di un numero di bit variabile– Standard Output:

• unica unità di uscita• diviso in celle elementari, contenenti un dato (valore numerico o

carattere), di un numero di bit variabile

La macchina astratta del (nucleo) del CLa macchina astratta del (nucleo) del C

Page 7: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Elementi -e terminologia- essenzialiElementi -e terminologia- essenziali

• Stringa: successione finita di caratteri, supposti immagazzinati in celle consecutive

• Variabili: celle di memoria, il cui contenuto può cambiare durante l’esecuzione del programma

• Identificatori simbolici: successione di lettere e cifre(o il simbolo”_”), con al primo posto una lettera – N.B. il C è CASE SENSITIVE

• Identificatori predefiniti e riservati: associati a priori ad elementi del linguaggio e non utilizzabili per le variabili

• Parole chiave: altre parole del linguaggio predefinite e riservate

Page 8: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Struttura sintattica di un programma CStruttura sintattica di un programma C

Un programma C è composto da un’intestazione seguita da una sequenza di istruzioni racchiusa tra i simboli { e }

• L’intestazione è costituita dall’identificatore predefinito main seguito da una coppia di parentesi ( ) (per il momento vuote)

• Le istruzioni sono frasi del linguaggio di programmazione; ognuna di esse termina con il simbolo ‘;’

Page 9: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Le principali istruzioni del CLe principali istruzioni del C

1. Istruzioni di sequenza:• Istruzioni di assegnamento

x = 23; w = 'a'; y = z; r3 = (alfa*43–xgg)*(delta–32*ijj); x = x+1;

• Istruzioni di ingresso e uscita • scanf(): identificatore predefinito di input; le parentesi

contengono informazioni relative alla variabile da leggere • printf(): identificatore predefinito di output; le parentesi

contengono informazioni relative alla variabile da scrivere printf((a-z)/10); temp = (a-z)/10; printf(temp); printf(‘a’); printf(“alfa”);

Page 10: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Le principali istruzioni del C:Le principali istruzioni del C:Le istruzioni composteLe istruzioni composte

• Istruzioni composte:– corrispondono ai costrutti visti nel capitolo 1– Comprendono selezione ed iterazione visti nel capitolo 3– producono effetti diversi a seconda del verificarsi o

meno di condizioni sul valore delle variabili– Condizione(espressione booleana):

• espressione su variabili booleane il cui valore può essere vero o falso

• Costruita tramite:– Operatori di relazione (==; !=; <;>;<=;>=)– Operatori logici (!;||;&&)

Es. di condizioni: x == 0 alfa > beta && x != 3 !((a + b)*3 > x || a < c)

Page 11: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Istruzioni composte: Istruzioni composte: selezione ed iterazioneselezione ed iterazione

2. Istruzioni di Selezione if(x == 0) z = 5; else y = z + w*y;

if(x == 0) {z = 5;} else {y = z + w*y;}if ((x+y)*(z-2) > (23+v)) {z = x + 1; y = 13 + x;}if ((x == y && z >3) || w != y) z = 5; else {y = z + w*y; x = z;}– Istruzioni di selezione scorrette: if (x == 0) else y = z; y = 34;

if (x == 0) a; else b + c;

3. Istruzioni di Iterazione (ciclo o loop)while (x >= 0) x = x – 1;while (z != y) {y = z – x; x = x*3;}

Page 12: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

/*Programma NumeroMaggiore – prima versione */main(){

scanf(x);scanf(y);if (x > y) z = x; else z = y;printf(z);

}

/*Programma NumeroMaggiore – seconda versione */main(){

scanf(x);scanf(y);if (x > y) printf(x); else printf(y);

}

Esempi in pseudo CEsempi in pseudo C

Page 13: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

/*ProgrammaCercaIlPrimoZero */main(){

uno = 1;scanf (dato);while (dato !=0) scanf(dato);printf(uno);

}

Esempi in pseudo CEsempi in pseudo C

Page 14: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

/*ProgrammaSommaSequenza */main() {

somma = 0;scanf(numero);while (numero != 0){

somma = somma + numero;scanf(numero);

}printf(somma);

}

Esempi in pseudo CEsempi in pseudo C

Page 15: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

/*Programma per la valutazione di un triangolo */main() {

/*Lettura dei dati di ingresso */scanf(X); scanf(Y); scanf(Z);

/* Verifica che i dati possano essere le lunghezzedei lati di un triangolo */

if ((X < Y + Z) && (Y < X + Z) && (Z < X + Y))/*Distinzione tra i vari tipi di triangolo */

if (X == Y && Y == Z)printf("I dati letti corrispondono a un triangolo equilatero");else

if (X == Y || Y == Z || X == Z)printf("I dati letti corrispondono a un triangolo isoscele");elseprintf("I dati letti corrispondono a un triangolo scaleno");

elseprintf("I dati letti non corrispondono ad alcun triangolo");

}

Esempi in pseudo CEsempi in pseudo C

Page 16: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Le variabili strutturateLe variabili strutturate

• Primo arricchimento della macchina astratta C• Consentono di trattare l’informazione aggregata

Page 17: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Variabili strutturate: gli arrayVariabili strutturate: gli array

Array: • sequenza di celle di memoria consecutive ed omogenee:• identificato come qualsiasi altra variabile• Composto da elementi che sono a loro volta variabili,

accessibili mediante un indice (in C il primo elemento di ogni array è sempre lo 0-esimo)

• Elemento indicato tra parentesi quadre dopo l’identificatore dell’array

Es.: scanf(s[2]); a[3] = s[1] + x; if (a[4] > s[1] + 3) s[2] = a[2] + a[1]; x = a[i]; a[i] = a[i+1];

a[i*x] = s[a[j+1]–3]*(y – a[y]);

Page 18: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

/* Programma InvertiSequenza */main() {

indice = 0;scanf(x);while (x != '%') {

sequenza[indice] = x;indice = indice + 1;scanf(x);

}while (indice > 0){

indice = indice - 1;printf(sequenza[indice]);

}}

Esempi in pseudo CEsempi in pseudo C

Page 19: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Dallo pseudo-C al CDallo pseudo-C al C

• Che cosa manca per poter “far girare i programmi” precedenti:– Le direttive al compilatore– La parte dichiarativa– L’ I/O formalizzato in C nella parte esecutiva

Page 20: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Un “vero” programma CUn “vero” programma C

#include <stdio.h>main() {

int numero, somma;somma = 0;scanf("%d", &numero);while (numero != 0){

somma = somma + numero;scanf("%d", &numero);

}printf("La somma dei numeri digitati è: %d\n",

somma);}

/* Programma SommaSequenza */

Page 21: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

La struttura dei programmi CLa struttura dei programmi C

• Un programma C deve contenere, nell’ordine:− Una parte contenente direttive per il compilatore:

servono per l’inclusione delle librerie contenenti funzioni da utilizzare nelle parte esecutiva

− L’identificatore predefinito main seguito dalle parentesi ()

− Due parti, racchiuse dalle parentesi {}:− la parte dichiarativa: elenca tutti gli elementi che

fanno parte del programma, con le loro principali caratteristiche

− la parte esecutiva: consiste in una successione di istruzioni

Page 22: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Tutto ciò che viene usato va dichiarato, in particolare:

− Dichiarazione delle costanti− Dichiarazione delle variabili

• Perché questa fatica … inutile?– Aiuta la diagnostica (ovvero segnalazione di

errori):x = alfa;alba = alfa + 1;

– Senza dichiarazione, alba è una nuova variabile!

• Principio importante:meglio un po’ più di fatica nello scrivere un programma che nel leggerlo -e capirlo!

La parte dichiarativaLa parte dichiarativa

Page 23: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Una dichiarazione di variabile consiste in:

− Uno specificatore di tipo, seguito da una lista di uno o più identificatori di variabili separati da una virgola

− Ogni dichiarazione termina con ‘;’

• Esempi float x,y;

int i,j; char simb;

La parte dichiarativaLa parte dichiarativa

Page 24: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• La dichiarazione di costanti:

const float PiGreco = 3.14;const float PiGreco = 3.1415, e = 2.718;const int N = 100, M = 1000;const char CAR1 = 'A', CAR2 = 'B';

• Un eventuale assegnamento a una costante sarebbe segnalato come errore dal compilatore.

• Esempio:

AreaCerchio = PiGreco*RaggioCerchio*RaggioCerchio; è equivalente a:

AreaCerchio = 3.14*RaggioCerchio*RaggioCerchio;(se si fa riferimento alla prima dichiarazione di

PiGreco)

La parte dichiarativaLa parte dichiarativa

Page 25: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Istruzione per l’output:

printf (stringa di controllo, elementi da stampare);

– Stringa di controllo, costituita da• caratteri semplici: di stampa immediata• caratteri di conversione: tramutati in speciali visualizzazioni• caratteri di formato: specificano il tipo delle variabili da stampare

– L’insieme degli elementi da stampare è una lista di variabili, di costanti o di espressioni composte con variabili e costanti

• Esempi:– printf ("Lo stipendio annuo dei dipendenti di categoria %d è

pari a L. %f", cat_dipend, stip_medio);– printf("%s\n%c%c\n\n%s\n", "Questo programma è stato

scritto da", iniz_nome, iniz_cognome, "Buon lavoro!");

Le istruzioni di I/OLe istruzioni di I/O

Page 26: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Istruzione per l’input:

scanf (stringa di controllo, elementi da leggere);

• La stringa di controllo contiene caratteri di formato, che specificano il tipo delle variabili da leggere

• Gli elementi da leggere sono indicati tramite i nomi delle variabili destinate a contenere la lettura preceduti dall’operatore unario &

• Esempio:scanf("%c%c%c%d%f", &c1, &c2, &c3, &i,

&x);

Le istruzioni di I/OLe istruzioni di I/O

Page 27: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Ogni programma che utilizza al suo interno le funzioni printf e scanf deve dichiarare l’uso di tali funzioni nella parte direttiva che precede il programma principale: #include <stdio.h>

• È una direttiva data a una parte del compilatore, chiamata preprocessore

La direttiva #includeLa direttiva #include

Page 28: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Esempio in CEsempio in C

/* PrimoProgrammaC */#include <stdio.h> main() {

printf("Questo è il mio primo programma in C\n"); }

• NB: niente dichiarazioni!

Page 29: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

/* Programma SommaDueInteri */#include <stdio.h> main() {

int a, b, somma;printf (“inserisci come valore dei due addendi due numeri interi\n”);scanf("%d%d", &a, &b); somma = a + b; printf("La somma di a+b è:\n%d \nArrivederci!\n", somma);

}

• Se vengono inseriti i dati 3 e 5, l’effetto dell’esecuzione del programma sullo Standard Output è il seguente:

La somma di a+b è: 8 Arrivederci!

• Se fossero stati omessi i primi due simboli \n nella stringa di controllo?

Esempio in CEsempio in C

Page 30: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Interpretazione e CompilazioneInterpretazione e Compilazione

Il programma di traduzione da un linguaggio di alto livello al linguaggio di macchina può:

• tradurre ed eseguire frase per frase (interprete)• tradurre tutte le frasi e solo successivamente

eseguire (assemblatore o compilatore)

Page 31: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

• Un Interprete è un programma che legge il programma sorgente e, per ogni istruzione

1. Verifica la correttezza sintattica

2. Effettua la traduzione nella corrispondente sequenza di istruzioni in linguaggio macchina

3. Esegue direttamente la sequenza di istruzioni in linguaggio macchina

• Svantaggio: istruzioni eseguite più volte (es. ciclo) vengono verificate e tradotte più volte

• Vantaggio: facile sviluppo e correzione dei programmi

InterpretazioneInterpretazione

Page 32: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

CompilazioneCompilazione

• Un Compilatore è un programma che legge il programma sorgente e lo traduce interamente in un programma scritto in linguaggio macchina(programma oggetto):

1. Verifica la correttezza sintattica di ciascuna istruzione

2. Il programma oggetto è generato solo in assenza di errori sintattici

3. La correttezza semantica è verificata solo in fase di esecuzione

• Svantaggio: difficile correzione dei programmi

• Vantaggio: istruzioni eseguite più volte (es. ciclo) vengono verificate e tradotte solo una volta

Page 33: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Interpretazione vs CompilazioneInterpretazione vs Compilazione

• Velocità di esecuzione:– Bassa per i linguaggi interpretati– Alta per i linguaggi compilati

• Facilità di messa a punto dei programmi:– Alta per linguaggi interpretati– Bassa per i linguaggi compilati

Page 34: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

L’ambiente di programmazione CL’ambiente di programmazione C

Le fasi:1. Editazione2. Preelaborazion

e3. Compilazione4. Linking5. Caricamento6. Esecuzione

Page 35: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

EditazioneEditazione

• Editazione del codice in un file:– Il file dovrà terminare con l’estensione .c– Il programma che consente l’editazione è detto editor– Il programma editato è memorizzato in un dispositivo di

memoria secondaria e viene detto programma sorgente (source program)

– Esempio:#include<stdio.h>void main(){ int n1,n2,sum;

printf(“inserire un numero intero”); scanf(“%d”,&n1);

printf(“inserire un numero intero”);scanf(“%d”,&n2);sum=n1+n2;

}

Nell’esempio il source file è somma.c

Page 36: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Preelaborazione Preelaborazione

• Precompilazione del programma ed espansione delle macro:– Il programma che esegue la precompilazione è detto

preprocessore e viene eseguito in maniera automatica prima che avvenga la compilazione

– Il preprocessore obbedisce a comandi detti direttive del preprocessore o macro che indicano che sul programma devono essere effettuate delle manipolazioni prima della compilazione:

• Inclusione di altri file in quello da compilare• Sostituzione di simboli speciali con un testo del programma

– Le linee per il preprocessore di macro iniziano con il simbolo #– Esempio:

#define max 40 #include<stdio.h>

• Prima della compilazione del programma ogni occorrenza di max è sostituita con il valore 40

• La riga #include<stdio.h> viene sostituita dal contenuto del file stdio.h. Ciò consente al programma di usare le funzioni di libreria Printf e Scanf

Page 37: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

La libreria standard del CLa libreria standard del C

Principali componenti:• <stdef.h> definizioni comuni• <assert.h> diagnostica• <ctype.h> gestione di caratteri• <local.h> localizzazione• <math.h> funzioni matematiche• <stdio.h> I/O• <stdlib.h> utilità generiche• <string.h> gestione di stringhe

Page 38: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Traduzione Traduzione (compilazione o interpretazione)(compilazione o interpretazione)

• Il traduttore (compilatore o interprete) trasforma le istruzioni del programma in istruzioni in linguaggio di macchina

• In particolare, il compilatore traduce il programma C nel codice in linguaggio macchina, detto codice oggetto

Page 39: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Traduzione: Codice oggettoTraduzione: Codice oggetto

• Un programma può essere suddiviso in parti separate, dette moduli.

• Ciascun modulo può essere compilato separatamente

• La compilazione separata dei vari moduli genera moduli oggetto separati

• Nel codice oggetto di ciascun modulo di programma solo i nomi delle variabili definite nel modulo (indirizzi simbolici) sono trasformati in indirizzi rilocabili:– espressi in forma logica, indipendente dall’allocazione del

programma in memoria– calcolati come se il programma fosse caricato a partire

dall’indirizzo zero

Page 40: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

LinkingLinking

• Il linking è eseguito da un programma detto linker, che:– trasforma i vari moduli oggetto in un unico programma eseguibile– collega il programma dell’utente a librerie di programmi di utilità

disponibili nell’ambiente di programmazione di ciascun linguaggio: • nelle librerie standard• nelle librerie definite dal programmatore

– risolve riferimenti a variabili definite esternamente a ciascun modulo trasformando i relativi indirizzi simbolici in indirizzi rilocabili

• Il linker tramite i collegamenti precedenti produce il codice eseguibile o programma eseguibile

Page 41: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Indirizzi di un programmaIndirizzi di un programma

• Indirizzi di un programma eseguibile:– in formato assoluto: calcolati a partire da una

specifica cella di memoria; si verifica se:• la memoria è partizionata staticamente e i programmi

vengono allocati alla memoria in modo rigido• tutta la memoria è assegnata ad un unico programma

utente

– in formato rilocabile: calcolati come se il programma debba essere caricato in memoria a partire dalla cella zero

Page 42: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Caricamento in memoria Caricamento in memoria

• Il caricamento in memoria centrale necessario all’esecuzione è effettuato da un programma detto loader

• Il loader preleva dal disco il programma eseguibile e lo trasferisce nella memoria gestendo gli indirizzi:– Se il programma ha già indirizzi assoluti il loader deve

caricare il programma in una specifica zona di memoria– Se il programma oggetto ha istruzioni in formato

rilocabile il loader effettua la rilocazione

Page 43: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Il caricamento: rilocazione degli Il caricamento: rilocazione degli indirizziindirizzi

• Tipi di rilocazione degli indirizzi:– Statica:

• avviene nel momento del caricamento in memoria modificando istruzione per istruzione gli indirizzi che compaiono nel programma in indirizzi assoluti

• Non richiede ulteriori elaborazioni in esecuzione sugli indirizzi caricati come assoluti

– Dinamica:• non comporta una modifica del codice, caricato in formato rilocabile• gli indirizzi assoluti sono calcolati durante l’esecuzione utilizzando il

registro base che contiene l’indirizzo assoluto della cella di memoria a partire dalla quale è caricato il programma

Page 44: Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 5. Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 2011-2012

Esecuzione del programmaEsecuzione del programma

• L’esecuzione del programma eseguibile (in linguaggio macchina) è effettuata nella CPU.