La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011 CDL in Ingegneria Gestionale(B) - A.A. 2010-2011 5. Codifica degli algoritmi.

Presentazioni simili


Presentazione sul tema: "Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011 CDL in Ingegneria Gestionale(B) - A.A. 2010-2011 5. Codifica degli algoritmi."— Transcript della presentazione:

1 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A CDL in Ingegneria Gestionale(B) - A.A Codifica degli algoritmi in un linguaggio di alto livello Ing. Simona Colucci

2 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Indice 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

3 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Obiettivi della programmazione in linguaggi 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 lesecuzione di operazioni(requisito richiesto dalla macchina) –Sintesi per la facilità di comprensione del programmatore(requisito richiesto dalluomo)

4 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Programmazione in linguaggi di alto livello Vantaggi: –Possibilità di riferirsi agli elementi del programma(celle di memoria, istruzioni, valori costanti) con identificatori (nomi simbolici) Es. a cella di memoria –Possibilità di esprimere le istruzioni e il controllo della sequenza della loro esecuzione in modo vicino al linguaggio naturale Es. (a+b)*(c+d) LOADA ADDB STORETEMP LOADC ADDD MULTTEMP

5 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A La macchina astratta del (nucleo) del C Capace di comprendere ed eseguire programmi in C Astrazione della macchina di Von Neumann

6 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A 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 C

7 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Elementi -e terminologia- essenziali Stringa: successione finita di caratteri, supposti immagazzinati in celle consecutive Variabili: celle di memoria, il cui contenuto può cambiare durante lesecuzione 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

8 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Struttura sintattica di un programma C Un programma C è composto da unintestazione seguita da una sequenza di istruzioni racchiusa tra i simboli { e } Lintestazione è costituita dallidentificatore 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 ;

9 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Le 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);

10 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Le principali istruzioni del C: Le 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)

11 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Istruzioni composte: selezione 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;}

12 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A /*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 C

13 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A /*ProgrammaCercaIlPrimoZero */ main() { uno = 1; scanf (dato); while (dato !=0) scanf(dato); printf(uno); } Esempi in pseudo C

14 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A /*ProgrammaSommaSequenza */ main() { somma = 0; scanf(numero); while (numero != 0) { somma = somma + numero; scanf(numero); } printf(somma); } Esempi in pseudo C

15 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A /*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 lunghezze dei 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"); else printf("I dati letti corrispondono a un triangolo scaleno"); else printf("I dati letti non corrispondono ad alcun triangolo"); } Esempi in pseudo C

16 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Le variabili strutturate Primo arricchimento della macchina astratta C Consentono di trattare linformazione aggregata

17 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Variabili 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 lidentificatore dellarray 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]);

18 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A /* 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 C

19 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Dallo 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

20 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Un vero programma C #include 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 */

21 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A La struttura dei programmi C Un programma C deve contenere, nellordine: Una parte contenente direttive per il compilatore: servono per linclusione delle librerie contenenti funzioni da utilizzare nelle parte esecutiva Lidentificatore 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

22 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A 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 dichiarativa

23 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A 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 floatx,y; inti,j; charsimb; La parte dichiarativa

24 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A La dichiarazione di costanti: constfloatPiGreco= 3.14; constfloatPiGreco= , e = 2.718; constintN = 100, M = 1000; constcharCAR1 = '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 dichiarativa

25 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Istruzione per loutput: 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 –Linsieme 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/O

26 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Istruzione per linput: 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 dalloperatore unario & Esempio: scanf("%c%c%c%d%f", &c1, &c2, &c3, &i, &x); Le istruzioni di I/O

27 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Ogni programma che utilizza al suo interno le funzioni printf e scanf deve dichiarare luso di tali funzioni nella parte direttiva che precede il programma principale: #include È una direttiva data a una parte del compilatore, chiamata preprocessore La direttiva #include

28 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Esempio in C /* PrimoProgrammaC */ #include main() { printf("Questo è il mio primo programma in C\n"); } NB: niente dichiarazioni!

29 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A /* Programma SommaDueInteri */ #include 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, leffetto dellesecuzione 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 C

30 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Interpretazione 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)

31 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A 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 Interpretazione

32 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Compilazione 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

33 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Interpretazione 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

34 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Lambiente di programmazione C Le fasi: 1.Editazione 2.Preelaborazione 3.Compilazione 4.Linking 5.Caricamento 6.Esecuzione

35 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Editazione Editazione del codice in un file: –Il file dovrà terminare con lestensione.c –Il programma che consente leditazione è detto editor –Il programma editato è memorizzato in un dispositivo di memoria secondaria e viene detto programma sorgente (source program) –Esempio: #include 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; } Nellesempio il source file è somma.c

36 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A 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 Prima della compilazione del programma ogni occorrenza di max è sostituita con il valore 40 La riga #include viene sostituita dal contenuto del file stdio.h. Ciò consente al programma di usare le funzioni di libreria Printf e Scanf

37 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A La libreria standard del C Principali componenti: definizioni comuni diagnostica gestione di caratteri localizzazione funzioni matematiche I/O utilità generiche gestione di stringhe

38 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Traduzione (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

39 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Traduzione: 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 dallallocazione del programma in memoria –calcolati come se il programma fosse caricato a partire dallindirizzo zero

40 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Linking Il linking è eseguito da un programma detto linker, che: –trasforma i vari moduli oggetto in un unico programma eseguibile –collega il programma dellutente a librerie di programmi di utilità disponibili nellambiente 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

41 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Indirizzi 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

42 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Caricamento in memoria Il caricamento in memoria centrale necessario allesecuzione è 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

43 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Il caricamento: rilocazione degli indirizzi 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 lesecuzione utilizzando il registro base che contiene lindirizzo assoluto della cella di memoria a partire dalla quale è caricato il programma

44 Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A Esecuzione del programma Lesecuzione del programma eseguibile (in linguaggio macchina) è effettuata nella CPU.


Scaricare ppt "Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011 CDL in Ingegneria Gestionale(B) - A.A. 2010-2011 5. Codifica degli algoritmi."

Presentazioni simili


Annunci Google