Programmazione di Calcolatori

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

INFORMATICA Algoritmi fondamentali
Sottoprogrammi: funzioni e procedure
Introduzione al linguaggio C
PUNTATORI Introduzione
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Caratteri e stringhe di caratteri
Funzioni definite dall’utente
PROGRAMMI DI RICERCA E ORDINAMENTO
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Algebra Lineare Esercizi assegnati.
Le funzioni.
Programmazione modulare nel linguaggio C
TIPI DI DATO Un tipo di dato T è definito come: un dominio di valori, D un insieme di funzioni F 1,..,F n sul dominio D un insieme di predicati P 1,..,P.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione VI Un primo programma Programmazione di Calcolatori: Un primo programma 1.
Programmazione di Calcolatori
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Programmazione di Calcolatori
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXII I tipi di dato astratto Programmazione di Calcolatori: i tipi di dato astratto 1.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Programmazione di Calcolatori
Programmazione di Calcolatori
Programmazione di Calcolatori
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XI Gli operatori Programmazione di Calcolatori: gli operatori 1.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione X Ingresso/Uscita di Interi Programmazione di Calcolatori: Ingresso/Uscita 1.
Unità Didattica 3 Linguaggio C
Programmazione di Calcolatori
Programmazione di Calcolatori
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XVIII Le matrici Programmazione di Calcolatori: le matrici 1.
C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1.
Programmazione di Calcolatori
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Complessità di un algoritmo
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Array (ordinamento) CORDA – Informatica A. Ferrari.
C. Gaibisso Programmazione di Calcolatori Lezione II Cosa vuol dire scrivere un programma Programmazione di Calcolatori: Cosa vuol dire scrivere un programma.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Programmazione di Calcolatori Lezione XV La struttura di un programma Programmazione di Calcolatori: la struttura di un programma

L’idea … Obiettivo: Idea: una più efficace gestione del software ridurre i tempi di compilazione Idea: organizzare il codice in diversi file organizzare i file in una struttura di cartelle che ne rifletta l’organizzazione logica (es. manipolazione di stringhe, vettori, matrici, ecc.) mantenere nello stesso file definizioni di funzioni con compiti “omogenei” (es. funzioni di I/O di matrici, funzioni di ordinamento di vettori, ecc.) Programmazione di Calcolatori: la struttura di un programma

Definizioni e dichiarazioni Utilizzo delle funzioni: una funzione può essere chiamata all’interno 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 l’istante 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” Programmazione di Calcolatori: la struttura di un programma

Dichiarazione extern Sintassi: Esempio: intestazione della corrispondente definizione preceduta della parola chiave “extern”seguita 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; }; Programmazione di Calcolatori: la struttura di un programma

Definizioni e dichiarazioni // sorgente Lezione_XV\Es_1\main.c #include <stdio.h> // 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); 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 Programmazione di Calcolatori: la struttura di un programma

Definizioni e dichiarazioni Compilazione: Risultato: Problema: la funzione scambia() è chiamata all’interno del file main.c senza che sia stata definita o dichiarata all’interno dello stesso file Programmazione di Calcolatori: la struttura di un programma

Definizioni e dichiarazioni Soluzione: // sorgente Lezione_XV\Es_2\main.c #include <stdio.h> // chiamante per lo scambio di due variabili int main () { … }; // dichiarazione extern della funzione per lo scambio di // due variabili extern void scambia(int *, int *); Risultato: Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma Proposta: assegnare una cartella ad ogni tipo di dato interessato dall’elaborazione (vettori, matrici, stringhe, ecc.) All’interno di ogni cartella: prevedere un file, con estensione “.h”, contenenete le direttive per il preprocessore funzionali all’elaborazione del corripondente tipo di dato mantenere all’interno 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 Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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” Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma Esempio: Ordinare un vettore di n interi in ordine crescente: Selection Sort Algoritmo: per ogni posizione p degli elementi del vettore, ad esclusione dell’ultima: determinare il valore minimo nel vettore a partire dalla posizione p inclusa. Sia q la posizione di tale valore minimo scambiare il valore nella posizione p con quello nella posizione q Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma Ordinare, in ordine crescente, un vettore di n interi: Selection Sort Sottoproblemi: determinare la posizione del valore minimo nel vettore a partire da una posizione data scambiare i valori di due variabili intere Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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] 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 Determinare la posizione del valore minimo nel vettore a partire da una posizione data Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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 Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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 Ordinare, in ordine crescente, un vettore di n interi: Selection Sort Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma // sorgente: EsProposti\Lezione_XV\Esercizio_3.c // inclusione del file delle dichiarazioni extern per le funzioni standard di I/O #include <stdio.h> // 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 // scansione del vettore e restituzione del suo contenuto printf("\nVett[%d]: %d", pos, Vett[pos]); continua … Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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; Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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); Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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) Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma 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 all’interno 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 Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma Cartella vettori: vett_IO.c definizione delle funzioni che implementano l’I/O di vettori vett_IO.h dichiarazioni delle funzioni definite in vett_IO.c Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma // 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); Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma // 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); Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma // sorgente: EsProposti\Lezione_XV\Es_4\vettori\Vett_IO.c // inclusione del file delle dichiarazioni extern per le funzioni // standard di I/O #include <stdio.h> // 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); Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma Cartella utilities: scambia.c definizioni delle funzioni che implementano lo scambio di variabili scambia.h dichiarazioni delle funzioni definite in scambia.c Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma // 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 *); Programmazione di Calcolatori: la struttura di un programma

Struttura di un programma main(): // 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“ // ordinamento di vettori #include "vettori\ordina.h" // chiamante int main () { … int vettore[N]; … AcqVettInt(vettore, N); SelectionSort(vettore, N); ResVettInt(vettore, N); … }; Programmazione di Calcolatori: la struttura di un programma

Ridurre i tempi di compilazione All’interno di ogni cartella generare i file oggetto (estensione “.o”) per ogni sorgente (estensione “.c”) : Programmazione di Calcolatori: la struttura di un programma

Ridurre i tempi di compilazione Programmazione di Calcolatori: la struttura di un programma

Ridurre i tempi di compilazione Programmazione di Calcolatori: la struttura di un programma

Ridurre i tempi di compilazione Si genera l’eseguibile “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 l’eseguibile “linkando” tutti i file oggetto (anche quelli che non sono stati aggiornati) Programmazione di Calcolatori: la struttura di un programma