La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XV La struttura di un programma Programmazione di Calcolatori: la struttura di un programma.

Presentazioni simili


Presentazione sul tema: "G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XV La struttura di un programma Programmazione di Calcolatori: la struttura di un programma."— Transcript della presentazione:

1

2 G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XV La struttura di un programma Programmazione di Calcolatori: la struttura di un programma 1

3 G. Amodeo, C. Gaibisso Lidea … Programmazione di Calcolatori: la struttura di un programma2 Obiettivo: a)una più efficace gestione del software b)ridurre i tempi di compilazione Idea: a)organizzare il codice in diversi file b)organizzare i file in una struttura di cartelle che ne rifletta lorganizzazione logica (es. manipolazione di stringhe, vettori, matrici, ecc.) c)mantenere nello stesso file definizioni di funzioni con compiti omogenei (es. funzioni di I/O di matrici, funzioni di ordinamento di vettori, ecc.)

4 G. Amodeo, C. Gaibisso Definizioni e dichiarazioni Programmazione di Calcolatori: la struttura di un programma3 Utilizzo delle funzioni: una funzione può essere chiamata allinterno di un file F se: -è definita in F precedentemente alla chiamata, o -è dichiarata in F precedentemente alla chiamata e definita altrove Definizione di una funzione: coincide con listante di creazione della funzione Dichiarazione di una funzione: informa il compilatore della esistenza di una definizione per la funzione esterna al file in cui è chiamata evidenziandone le caratteristiche

5 G. Amodeo, C. Gaibisso Dichiarazione extern Programmazione di Calcolatori: la struttura di un programma4 Sintassi: intestazione della corrispondente definizione preceduta della parola chiave externseguita da un ;, dalla quale vengono omessi i nomi dei parametri formali Esempio: // sorgente Lezione_XV\Es_1\scambia.c // funzione che scambia il contenuto di due variabili intere void scambia (int *var1, int *var2) { // definisce una variabile di appoggio int temp; // scambia le variabili di input utilizzando la variabile di appoggio temp = *var1; *var1 = *var2; *var2 = temp; };

6 G. Amodeo, C. Gaibisso Definizioni e dichiarazioni Programmazione di Calcolatori: la struttura di un programma5 // sorgente Lezione_XV\Es_1\main.c #include // chiamante per lo scambio di due variabili int main () { // definizione e acquisizione delle variabili int A, B; printf ("\nDammi il valore della I variabile: "); scanf ("%d", &A); printf ("\nDammi il valore della II variabile: "); scanf ("%d", &B); // visualizzazione delle variabili prima dello scambio printf("\nI variabile prima dello scambio: %d\n", A); printf("II variabile prima dello scambio: %d\n", B); // chiama la funzione che scambia le variabili scambia(&A, &B); // visualizzazione delle variabili prima dello scambio printf("\nI variabile dopo lo scambio: %d\n", A); printf("II variabile dopo lo scambio: %d\n", B); return(1); } Chiamo scambia() senza che, nel file, sia stata prima definita o dichiarata

7 G. Amodeo, C. Gaibisso Compilazione: Risultato: Problema: la funzione scambia() è chiamata allinterno del file main.c senza che sia stata definita o dichiarata allinterno dello stesso file Definizioni e dichiarazioni Programmazione di Calcolatori: la struttura di un programma6

8 G. Amodeo, C. Gaibisso Soluzione: Definizioni e dichiarazioni Programmazione di Calcolatori: la struttura di un programma7 // sorgente Lezione_XV\Es_2\main.c #include // chiamante per lo scambio di due variabili int main () { … }; Risultato: // dichiarazione extern della funzione per lo scambio di // due variabili extern void scambia(int *, int *);

9 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma8 Proposta: -assegnare una cartella ad ogni tipo di dato interessato dallelaborazione (vettori, matrici, stringhe, ecc.) Allinterno di ogni cartella: -prevedere un file, con estensione.h, contenenete le direttive per il preprocessore funzionali allelaborazione del corripondente tipo di dato -mantenere allinterno di uno stesso file, con estensione.c, definizioni di funzioni con compiti omogenei (es. funzioni di I/O, di ordinamento, di ricerca, ecc. ecc.) -prevedere per ogni file sorgente contenente definizioni di funzione, un file omonimo, di estensione.h, contenente una dichiarazione extern per ognuna di tali definizioni

10 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma9 Proposta: Infine, includere in testa ad ogni file: -le dichiarazioni extern delle funzioni chiamate al suo interno ma dichiarate altrove -le necessarie direttive per il preprocessore Attraverso la direttiva per il preprocessore: #include path\nome_file.h

11 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma10 Ordinare un vettore di N interi in ordine crescente: Selection Sort per ogni posizione P degli elementi del vettore, ad esclusione dellultima: 1.determinare il valore minimo nel vettore a partire dalla posizione P inclusa. Sia Q la posizione di tale valore minimo 2.scambiare il valore nella posizione P con quello nella posizione Q Algoritmo: Esempio:

12 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma11 Ordinare, in ordine crescente, un vettore di N interi: Selection Sort 1.determinare la posizione del valore minimo nel vettore a partire da una posizione data 2.scambiare i valori di due variabili intere Sottoproblemi:

13 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma12 Determinare la posizione del valore minimo nel vettore a partire da una posizione data curs curs+1 Start Nome:PosMinVett Variabili:int curs, pos, start int vett[ N ] curs start min = vett[start] pos start curs = N End true false pos vett[curs] < min pos curs min vett[curs] true false Descrizione variabili: curs:indice per la scansione del vettore vett[ ]:vettore interessato dal processamento start:posizione dalla quale ha inizio il processamento max:massimo valore individuato dalla posizione start alla posizione curs pos:posizione del valore memorizzato in max

14 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma13 Scambiare i valori di due variabili intere Start Nome: ScambiaInt Variabili: int A, B, aux End aux A A B B aux Descrizione variabili: A:memorizza il primo valore intero B:memorizza il secondo valore intero aux:variabile di appoggio

15 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma14 Ordinare, in ordine crescente, un vettore di N interi: Selection Sort Start Nome:Selection Sort Variabili:int curs, pos int vett[ N ] false curs = N -1 true curs 0 End curs curs+1 Applica PosMinVett a vett[ ] a partire dalla posizione curs e lascia il risultato in pos Applica ScambiaInt a vett[curs] e vett[pos] Descrizione variabili: curs:indice per la scansione del vettore vett[ ]:vettore interessato dal processamento pos:posizione del minimo elemento del vettore a partire dalla posizione curs

16 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma15 // sorgente: EsProposti\Lezione_XV\Esercizio_3.c // inclusione del file delle dichiarazioni extern per le funzioni standard di I/O #include // definizione della dimensione del vettore #define N 6 // funzione per l'acquisizione del contenuto di un vettore di interi void AcqVettInt(int Vett[], int dim) { // definisce la variabile per la scansione del vettore int pos; // scandisce il vettore, acquisendone il contenuto for (pos = 0; pos < dim; pos++) { printf("\nVett[%d]? ", pos); scanf("%d", &Vett[pos]); }; // funzione per la restituzione del contenuto di un vettore di interi void ResVettInt(int Vett[], int dim) { // definizione della variabile per la scansione del vettore int pos; // scansione del vettore e restituzione del suo contenuto for (pos = 0; pos < dim; pos++) printf("\nVett[%d]: %d", pos, Vett[pos]); }; continua …

17 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma16 continua … // funzione che determina la posizione del minimo elemento di un vettore int PosMinVett(int *Vett, int dim) { // definisce la variabile per la scansione del vettore int curs; // definisce e inizializza le variabili per il minimo e per la sua posizione int min = Vett[0]; int pos = 0; // scansione del vettore for (curs = 0; curs < dim; curs ++) // se necessario aggiorna il minimo e la sua posizione if(Vett[curs] < min) { min = Vett[curs]; pos = curs; }; // restituisce la posizione del minimo elemento return(pos); }; // funzione che scambia il contenuto di due variabili intere void ScambiaInt(int *A, int *B) { // definisce una variabili di appoggio int aux; // scambia il contenuto delle due variabili tramite la variabile di appoggio aux = *A; *A = *B; *B = aux; }; continua …

18 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma17 continua … // funzione di ordinamento void SelectionSort(int *Vett, int dim) { // definisce la variabile per la scansione del vettore int curs; // scandisce il vettore for (curs = 0; curs < dim-1; curs++) { // definisce la variabile per la posizione del minimo int pos; // determina la posizione del minimo a partire da quella corrente pos = PosMinVett(Vett+curs, dim-curs); // scambia il valore dell'elemento corrente con quello del minimo ScambiaInt(Vett+curs, Vett+curs+pos); }; // chiamante int main () { // definisce il vettore int vettore[N]; // inizializza, ordina e restituisce il contenuto del vettore AcqVettInt(vettore, N); SelectionSort(vettore, N); ResVettInt(vettore, N); return(1); };

19 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma18 Cartelle: -vettori: assegnata al tipo di dato vettori -utilities: contiene tutti i file necessari alla implementazione di funzionalità di interesse generale (indipendenti dal particolare tipo di dato)

20 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma19 Cartella vettori: -prepro.h direttive per il preprocessore da utilizzarsi nel processamento di vettori -cerca.c definizione delle funzioni che implementano ricerche di vario tipo allinterno di un vettore -cerca.h dichiarazione delle funzioni definite in cerca.c -ordina.c definizione delle funzioni che implementano diverse modalità di ordinamento di vettori -ordina.h dichiarazione delle funzioni definite in ordina.c

21 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma20 Cartella vettori: -vett_IO.c definizione delle funzioni che implementano lI/O di vettori -vett_IO.h dichiarazioni delle funzioni definite in vett_IO.c

22 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma21 // sorgente: EsProposti\Lezione_XV\Es_4\vettori\prepro.h // direttive per il preprocessore da utilizzarsi nel processamento di // vettori // definizione della dimensione del vettore #define N 6 // sorgente: EsProposti\Lezione_XV\Es_4\vettori\cerca.c // funzioni che implementano ricerche di vario tipo all'interno di un // vettore // funzione che determina la posizione del minimo elemento // all'interno di un vettore di interi int PosMinVett(int *Vett, int dim) { … }; // sorgente: EsProposti\Lezione_XV\Es_4\vettori\cerca.h // dichiarazioni extern per le funzioni che implementano ricerche di // vario tipo all'interno di un vettore // dichiarazione extern della funzione che determina la posizione del // minimo elemento all'interno di un vettore di interi extern int PosMinVett(int *, int);

23 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma22 // sorgente: EsProposti\Lezione_XV\Es_4\vettori\ordina.c // inclusione del file delle dichiarazioni extern per le funzioni che // implementano ricerche di vario tipo all'interno di un vettore #include "cerca.h // inclusione del file delle dichiarazioni extern delle utilities di // interesse generale #include "..\utilities\scambia.h" // funzioni che implementano diverse modalità di ordinamento di // vettori // funzione che implementa l'algoritmo di selection sort void SelectionSort(int *Vett, int dim) {…; PosMinVett(…); …; ScambiaInt(…); …}; // sorgente: EsProposti\Lezione_XV\Es_4\vettori\ordina.h // dichiarazioni extern delle funzioni che implementano diversi // algoritmi di ordinamento di vettori // dichiarazione extern della funzione che implementa l'algoritmo di // seelection sort extern void SelectionSort(int *, int);

24 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma23 // sorgente: EsProposti\Lezione_XV\Es_4\vettori\Vett_IO.c // inclusione del file delle dichiarazioni extern per le funzioni // standard di I/O #include // funzioni di I/O di vettori // funzione per l'acquisizione del contenuto di un vettore di interi void AcqVettInt(int Vett[], int dim) { …; printf(); scanf(); … }; // funzione per la restituzione del contenuto di un vettore di interi void ResVettInt(int Vett[], int dim) { …; printf(); … }; // sorgente: EsProposti\Lezione_XV\Es_4\vettori\vett_IO.h // dichiarazioni extern delle funzioni di I/O per un vettore // dichiarazione extern della funzione per l'acquisizione del // contenuto di un vettore di interi extern void AcqVettInt(int [], int); // dichiarazione extern della funzione per la restituzione // del contenuto di un vettore di interi extern void ResVettInt(int [], int);

25 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma24 Cartella utilities: -scambia.c definizioni delle funzioni che implementano lo scambio di variabili -scambia.h dichiarazioni delle funzioni definite in scambia.c

26 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma25 // sorgente: EsProposti\Lezione_XV\Es_4\utilities\scambia.c // funzioni per lo scambio di variabili // funzione che scambia il contenuto di due variabili intere void ScambiaInt(int *A, int *B) { … }; // sorgente: EsProposti\Lezione_XV\Es_4\utilities\scambia.h // file che contiene le dichiarazioni extern delle funzioni per lo // scambio di variabili // dichiarazione extern per la funzione che scambia il contenuto di // due variabili intere extern void ScambiaInt(int *, int *);

27 G. Amodeo, C. Gaibisso Struttura di un programma Programmazione di Calcolatori: la struttura di un programma26 // sorgente: EsProposti\Lezione_XV\Es_4\main.c // inclusione del file di direttive per il preprocessore da utilizzarsi nel // processamento di vettori #include "vettori\prepro.h" // inclusione del file delle dichiarazioni extern per le funzioni di // ingresso-uscita di vettori #include "vettori\vett_IO.h // inclusione del file delle dichiarazioni extern per le funzioni di // ordinamento di vettori #include "vettori\ordina.h" // chiamante int main () { … int vettore[N]; … AcqVettInt(vettore, N); SelectionSort(vettore, N); ResVettInt(vettore, N); … }; main():

28 G. Amodeo, C. Gaibisso Ridurre i tempi di compilazione Programmazione di Calcolatori: la struttura di un programma27 Allinterno di ogni cartella generare i file oggetto (estensione.o) per ogni sorgente (estensione.c) :

29 G. Amodeo, C. Gaibisso Ridurre i tempi di compilazione Programmazione di Calcolatori: la struttura di un programma28

30 G. Amodeo, C. Gaibisso Ridurre i tempi di compilazione Programmazione di Calcolatori: la struttura di un programma29

31 G. Amodeo, C. Gaibisso Ridurre i tempi di compilazione Programmazione di Calcolatori: la struttura di un programma30 Si genera leseguibile linkando il main() e tutti i file oggetto generati in precedenza: Nel caso in cui si modifichi un file: -si aggiornano i file oggetto generati per ognuno dei file sorgente il cui contenuto dipende da quello del file modificato -si genera leseguibile linkando tutti i file oggetto (anche quelli che non sono stati aggiornati)


Scaricare ppt "G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XV La struttura di un programma Programmazione di Calcolatori: la struttura di un programma."

Presentazioni simili


Annunci Google