5. Codifica degli algoritmi in un linguaggio di alto livello

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F1 Primi programmi.
Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Introduzione al linguaggio C
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
PHP.
I linguaggi di programmazione
Algoritmi e Programmazione
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
Fondamenti di Informatica CDL in Ingegneria Meccanica - A.A CDL in Ingegneria Meccanica - A.A Tipi di dati Ing. Simona Colucci.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Tipi di dati Ing. Simona Colucci.
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Strutture di controllo Ing. Simona Colucci.
Anno accademico Il preprocessore del linguaggio C.
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
Programmazione Procedurale in Linguaggio C++
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Introduzione alla programmazione
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione lll
Il Linguaggio Macchina
Unità Didattica 2 I Linguaggi di Programmazione
Primi Elementi di Programmazione in C++
Strutture di controllo in C -- Flow Chart --
Introduzione alla programmazione con linguaggi di alto livello -- Introduzione al C -- Vito Perrone.
Dichiarazioni e tipi predefiniti nel linguaggio C
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
I File.
Il Linguaggio C.
Le funzioni.
Espressioni condizionali
Corso di PHP.
PROGRAMMAZIONE: linguaggi
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
CODIFICA Da flow-chart a C++.
Architettura del calcolatore
Lo sviluppo del software e i linguaggi di programmazione
Informatica Lezione 4 Scienze e tecniche psicologiche dello sviluppo e dell'educazione Anno accademico:
Complessità di un algoritmo
Lezione 3 Struttura lessicale del linguaggio
Dal problema all’ algoritmo
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
Algoritmi e basi del C Struttura di un programma
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Concetti Fondamentali sulla Programmazione
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Il software Claudia Raibulet
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
Informatica e Informatica di Base
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
4. Codifica degli algoritmi in un linguaggio di alto livello Informatica - CDL in Ingegneria Industriale- A.A Ing. Simona Colucci.
Transcript della presentazione:

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

Obiettivi della programmazione in linguaggi di alto livello 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 l’esecuzione di operazioni(requisito richiesto dalla macchina) Sintesi per la facilità di comprensione del programmatore(requisito richiesto dall’uomo) Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

La macchina astratta del (nucleo) del C Capace di comprendere ed eseguire programmi in C Astrazione della macchina di Von Neumann Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Astrazione delle interfacce con le periferiche: La macchina astratta del (nucleo) del C 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Elementi -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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Struttura 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 ‘;’ Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Le principali istruzioni del C 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”); Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Le principali istruzioni del C: Le 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) Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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;} Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Esempi in pseudo C /*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); } Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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

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

/*Programma per la valutazione di un triangolo */ Esempi in pseudo C /*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"); printf("I dati letti corrispondono a un triangolo scaleno"); printf("I dati letti non corrispondono ad alcun triangolo"); } Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Primo arricchimento della macchina astratta C Le variabili strutturate Primo arricchimento della macchina astratta C Consentono di trattare l’informazione aggregata Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Variabili strutturate: gli 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]); Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Esempi in pseudo C /* Programma InvertiSequenza */ main() { indice = 0; scanf(x); while (x != '%') sequenza[indice] = x; indice = indice + 1; } while (indice > 0) indice = indice - 1; printf(sequenza[indice]); Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Che cosa manca per poter “far girare i programmi” precedenti: 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

/* Programma SommaSequenza */ Un “vero” programma C /* Programma SommaSequenza */ #include <stdio.h> main() { int numero, somma; somma = 0; scanf("%d", &numero); while (numero != 0) somma = somma + numero; } printf("La somma dei numeri digitati è: %d\n", somma); Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Un programma C deve contenere, nell’ordine: La 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Tutto ciò che viene usato va dichiarato, in particolare: La parte dichiarativa 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! Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Una dichiarazione di variabile consiste in: La parte dichiarativa 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; Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

è equivalente a: La dichiarazione di costanti: La parte dichiarativa 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) Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Istruzione per l’output: Le istruzioni di I/O 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!"); Istruzione per l’output: printf (stringa di controllo, elementi da stampare); Stringa di controllo è una stringa che viene stampata in uscita e può contenere caratteri detti di conversione o di formato preceduti dal simbolo % e altri simboli particolari I caratteri di formato %d, %f, %c, %s provocano la stampa sullo Standard Output rispettivamente: di un numero intero decimale, di un numero reale (floating point), di un carattere, di una stringa di caratteri. Il simbolo \n nella stringa di controllo provoca un salto a nuova riga per la successiva scrittura. L’insieme degli elementi da stampare è una lista di variabili, di costanti o di espressioni composte con variabili e costanti Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Le istruzioni di I/O 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); Esempio 4.3: Se al momento dell’esecuzione dell’istruzione scanf l’utente inserisce i seguenti dati: ABC 3 7.345 La variabile c1 (di tipo char) assume il valore A. (&c1 va letto come indirizzo della variabile c1); La variabile c2 (di tipo char) assume valore B; La variabile c3 (di tipo char) assume valore C; La variabile i (di tipo int) assume valore 3; La variabile x (di tipo float) assume valore 7.345. Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

La direttiva #include 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

NB: niente dichiarazioni! Esempio in C /* PrimoProgrammaC */ #include <stdio.h> main() { printf("Questo è il mio primo programma in C\n"); } NB: niente dichiarazioni! Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Esempio in C /* 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? Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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) Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Verifica la correttezza sintattica Interpretazione Un Interprete è un programma che legge il programma sorgente e, per ogni istruzione Verifica la correttezza sintattica Effettua la traduzione nella corrispondente sequenza di istruzioni in linguaggio macchina 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Verifica la correttezza sintattica di ciascuna istruzione Compilazione Un Compilatore è un programma che legge il programma sorgente e lo traduce interamente in un programma scritto in linguaggio macchina(programma oggetto): Verifica la correttezza sintattica di ciascuna istruzione Il programma oggetto è generato solo in assenza di errori sintattici 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

L’ambiente di programmazione C Le fasi: Editazione Preelaborazione Compilazione Linking Caricamento Esecuzione Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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); scanf(“%d”,&n2); sum=n1+n2; } Nell’esempio il source file è somma.c Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Precompilazione del programma ed espansione delle macro: 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

La 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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 dall’allocazione del programma in memoria calcolati come se il programma fosse caricato a partire dall’indirizzo zero Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

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 l’esecuzione utilizzando il registro base che contiene l’indirizzo assoluto della cella di memoria a partire dalla quale è caricato il programma Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011

Esecuzione del programma L’esecuzione del programma eseguibile (in linguaggio macchina) è effettuata nella CPU. Fondamenti di Informatica CDL in Ingegneria Gestionale(B) - A.A. 2010-2011