Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2008-2009 CDL in Ingegneria Elettronica - A.A. 2008-2009 9. Funzioni e procedure Ing.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Introduzione al linguaggio C++
LINGUAGGIO DI PROGRAMMAZIONE C
Iterazione A. Ferrari.
Procedure e funzioni A. Ferrari.
LE FUNZIONI IN C Sommario 1 Introduzione 2 Moduli di programma in C
PHP.
Fondamenti di Informatica CDL in Ingegneria Meccanica (B) - A.A CDL in Ingegneria Meccanica (B) - A.A Funzioni e procedure Ing.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica CDL in Ingegneria Meccanica - A.A CDL in Ingegneria Meccanica - A.A Tipi di dati Ing. Simona Colucci.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture di controllo Ing.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Tipi di dati Ing. Simona Colucci.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
5. Codifica degli algoritmi in un linguaggio di alto livello
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Strutture di controllo Ing. Simona Colucci.
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Anno accademico Le classi di memorizzazione.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 15 Marzo 2013.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
La Programmazione Ricorsiva
Le funzioni.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Lo sviluppo top down Le funzioni
Esercizi su File.
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
/*Programma per la valutazione di un triangolo */
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Copyright © Istituto Italiano Edizioni Atlas
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
8. Funzioni e procedure Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
9. Funzioni e procedure Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Funzioni e procedure Ing. Simona Colucci

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Indice Necessità di sottoprogrammi(funzioni e procedure) Struttura completa di un programma in C Funzioni Procedure Comunicazione con i sottoprogrammi Sottoprogrammi predefiniti

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Il concetto di sottoprogramma (1) I sottoprogrammi implementano operazioni non predefinite sui tipi di dati Ai meccanismi di astrazione sui dati visti finora mancano infatti le operazioni: –Esempio (di tipi di dati definiti): typedef struct{ intNumFatture; DescrizioneFattureSequenza[MaxNumFatture]; } ElencoFatture; typedef struct{int NumCosti; DescrizionecostiSequenza[MaxNumCosti] } ElencoCosti; MaxNumFatture e MaxNumCosti costanti DescrizioneFatture e DescrizioneCosti tipi definiti (in precedenza):

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Il concetto di sottoprogramma (2) I sottoprogrammi racchiudono in maniera astratta le righe di codice necessarie ad eseguire unoperazione Vantaggi: –Scrivere direttamente il risultato RisultatoDiGestione = FatturatoTotale (ArchivioFatture) – SommaCosti (ArchivioCosti); è meglio che scrivere tutte le istruzioni necessarie ad ottenerlo FatturatoTotale = 0; for (Cont = 0; Cont < ArchivioFatture.NumFatture; Cont++) { FatturatoTotale = FatturatoTotale + ArchivioFatture.Sequenza[Cont].Importo; } SommaCosti= 0; for (Cont = 0; Cont < ArchivioCosti.NumCosti; Cont++) { SommaCosti = SommaCosti + ArchivioCosti.Sequenza[Cont].Importo; } RisultatoDiGestione = FatturatoTotale – SommaCosti; –Se loperazione deve essere ripetuta più volte lutilizzo dei sottoprogrammi è ancora più vantaggioso

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Il concetto di sottoprogramma (3) I sottoprogrammi sono lo strumento per realizzare astrazioni sulle operazioni Due tipi (concettualmente): –Funzioni: sottoprogrammi descrivibili come vere e proprie funzioni matematiche e possiedono un dominio ed un codominio –Procedure: sottoprogrammi che modificano lo stato di alcune variabili di programma Lutilizzo dei sottoprogrammi necessita di: –Definizione del sottoprogramma –Chiamata del sottoprogramma

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Struttura di un programma C Struttura completa: Direttive al preprocessore; parte dichiarativa globale contiene la dichiarazione di tutti gli elementi che sono condivisi dal programma principale e dai sottoprogrammi Programma principale(main) a sua volta costituito da parte dichiarativa ed esecutiva definizioni di sottoprogrammi funzioni o procedure a seguire il programma principale. Il main è un particolare sottoprogramma tra gli altri; Il main e ciascun sottoprogramma possono usare tutti e soli gli elementi che sono stati dichiarati nella loro propria parte dichiarativa, nonché quelli che sono stati dichiarati nella parte dichiarativa globale

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni: Definizione Struttura della definizione : testata (header); due parti, racchiuse fra parentesi graffe: la parte dichiarativa locale: definisce tutti gli oggetti necessari alla realizzazione delloperazione astratta, in particolare le variabili locali la parte esecutiva (detta corpo della funzione): –Istruzioni per lesecuzione delloperazione –Istruzione di return: serve a restituire il risultato della funzione, del tipo specificato nella testata e identificato tramite il nome della funzione

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni : Definizione La testata contiene: –tipo del risultato(codominio della funzione) Una funzione non può restituire array o funzioni ma può restituire un puntatore a qualsiasi tipo –identificatore del sottoprogramma –lista dei parametri (formali) cui la funzione viene applicata con il relativo tipo(dominio della funzione): Ogni parametro formale è un identificatore di tipo seguito da un identificatore Si chiamano formali perché non hanno valore proprio ma sono riferimenti simbolici agli argomenti delle funzioni

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni : Definizione Esempi di testate: int FatturatoTotale(ElencoFatture par) boolean Precede(StringaCaratteri par1, StringaCaratteri par2) boolean Esiste(int par1, SequenzaInteri par2) /* Stabilisce se il primo parametro, di tipo intero, appartiene all'insieme di interi contenuti nel secondo parametro: una sequenza di interi */ MatriceReali10Per10 *MatriceInversa(MatriceReali10Per10 *par)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni : Definizione Funzione completa: intFatturatoTotale (ElencoFatture parametro) { intTotale, Cont; Totale = 0; for (Cont = 0; Cont < parametro.NumFatture; Cont++) Totale = Totale + parametro.Sequenza[Cont].Importo; return Totale; }

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni : Definizione Funzione completa: intRadiceIntera (int par) { intcont; cont = 0; while (cont*cont <= par) cont = cont + 1; return (cont – 1); }

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni: Chiamata Consentono di utilizzare le operazioni implementate dalle funzioni Una funzione applicata a un valore dellargomento, appartenente al suo dominio, fornisce un valore appartenente al suo codominio Struttura della chiamata: –Identificatore della funzione –Lista dei parametri attuali, tra parentesi tonde: Sono i valori degli argomenti rispetto ai quali la funzione deve essere calcolata Corrispondono in numero, ordine e tipo ai parametri formali dichiarati

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Funzioni: chiamata Esempi: x = sin(y) – cos(PiGreco – alfa); x = cos(atan(y) – beta); x = sin(alfa); y = cos(alfa) – sin(beta); z = sin(PiGreco) + sin(gamma); RisultatoGestione =FatturatoTotale(ArchivioFatture) - SommaCosti(ArchivioCosti); Det1 = Determinante(Matrice1); Det2 = Determinante(MatriceInversa(Matrice2)); TotaleAssoluto = Sommatoria(Lista1) + Sommatoria(Lista2); ElencoOrdinato = Ordinamento(Elenco); OrdinatiAlfabeticamente = Precede(nome1, nome2);

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Allinterno di un programma C una funzione può essere chiamata purché risulti definita oppure dichiarata(definizione e dichiarazione non sono termini equivalenti) La dichiarazione di una funzione (prototipo): –si limita a richiamarne la testata –Utile quando la chiamata di una funzione precede, nel codice, la definizione della funzione, oppure le funzioni utilizzate da un programma sono definite in file propri del sistema C (e.g., le funzioni di libreria) –Aiuta il compilatore ed è buono stile di programmazione Prototipo delle funzioni

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Esecuzione delle funzioni e passaggio dei parametri /* Programma Contabilità (1) */ /* Parte direttiva */ #include #defineMaxNumFatture1000 /* Parte dichiarativa globale */ typedef charString [30]; typedef struct{StringIndirizzo; intAmmontare; DataDataFattura; }DescrizioneFatture; typedef struct{intNumFatture; DescrizioneFattureSequenza[MaxNumFatture]; }ElencoFatture;

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /* Programma Contabilità (2)*/ main() { ElencoFattureArchivioFatture1, ArchivioFatture2; intFatt1, Fatt2, Fatt; intFatturatoTotale(ElencoFatture parametro); /* Prototipo della funzione FatturatoTotale */.... Fatt1 = FatturatoTotale(ArchivioFatture1); Fatt2 = FatturatoTotale(ArchivioFatture2); Fatt = Fatt1 + Fatt2;.... } /* Fine del main del programma Contabilità */ Esecuzione delle funzioni e passaggio dei parametri

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /* Definizione della funzione FatturatoTotale */ int FatturatoTotale (ElencoFatture parametro) { intTotale, Cont; Totale = 0; for (Cont = 0; Cont < parametro.NumFatture; Cont++) Totale = Totale + parametro.Sequenza[Cont].Importo; return Totale; } Esecuzione delle funzioni e passaggio dei parametri

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Esecuzione di funzioni: macchine astratte master e slave ArchivioFatture1 ArchivioFatture2 Fatt1 Fatt2 Parametro Totale Cont FatturatoTotale MASTER: chiama la funzione passando i parametri attuali SLAVE: calcola il risultato dopo aver manipolato i parametri formali

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Esecuzione di funzioni: macchine astratte master e slave Le due macchine hanno ciascuna il proprio ambiente di esecuzione: –La macchina slave ha un ambiente locale di funzione caratterizzato da: Variabili locali Variabili corrispondenti ai parametri formali Variabile che contiene il valore da restituire (tramite listruzione return), che corrisponde allidentificatore della funzione nel modulo master –La macchina master ha un ambiente caratterizzato dalle variabili che utilizza il programma chiamante, tra cui quelle passate come parametri attuali

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Passaggio di parametri Listruzione: Fatt1 = FatturatoTotale(ArchivioFatture1); provoca il seguente flusso: –La macchina master chiama la macchina slave per il valore di FatturatoTotale passando i parametri ad essa:il passaggio dei parametri consiste nella copiatura dei parametri attuali nella cella dei parametri formali –Il controllo viene ceduto alla macchina slave, che procede con lesecuzione come un normale programma fino al return o alla chiusura di parentesi graffa –Il controllo viene restituito alla macchina master con la restituzione del valore della funzione

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Esecuzione delle funzioni e passaggio dei parametri x = sin(atan(y) – acos(z)); Equivale a : temp1 = atan(y); temp2 = acos(z); temp3 = temp1 – temp2 x = sin(temp3);

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Procedure Sono sottoprogrammi che non corrispondono a funzioni matematiche Le procedure non servono a produrre dei valori di un certo tipo ma a modificare lo stato del programma che ne chiede lesecuzione In C una procedura viene definita come una funzione che ha come tipo del risultato il tipo speciale void

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Procedure: esempio 1 typedef enum {VerdeSinistra, VerdeDestra} TipoStato; typedef struct{TipoStatoStato; intCodaSinistra; intCodaDestra; } TipoSemaforo; TipoSemaforoSemaforo; AggiornaSemaforo : Diminuisce di un valore costante il campo CodaSinistra o CodaDestra a seconda che lo stato del semaforo sia VerdeSinistra o VerdeDestra ; Legge dal terminale i valori NuoviArriviSinistri e NuoviArriviDestri e li somma, rispettivamente, a CodaSinistra e CodaDestra ; Dà al campo Stato il valore VerdeSinistra se CodaSinistra > Coda Destra e viceversa.

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Procedure : esempio 2 /*Programma Contabilità (1)*/ #include #defineMaxNumFatture typedef struct{Stringindirizzo; intammontare; DataDataFattura; } DescrizioneFatture; typedef struct{intNumFatture; DescrizioneFattureSequenza[MaxNumFatture]; } ElencoFatture; ElencoFattureArchivioFatture;

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /*Programma Contabilità (2)*/ main() { DataDataOdierna; DescrizioneFattureFattura1, Fattura2; voidInserisciFattura(DescrizioneFatture Fattura); booleanPrecede(DataNum1, DataNum2); … /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura1 */ InserisciFattura(Fattura1);... /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura2 */ if(Precede(Fattura2.DataEmissione, DataOdierna)) InserisciFattura(Fattura2);... } Procedure: esempio 2

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /*Programma Contabilità (3)*/ voidInserisciFattura(DescrizioneFatture Fattura) { if(ArchivioFatture.NumFatture == MaxNumFatture) printf("L'archivio è pieno.\n"); else { ArchivioFatture.NumFatture = ArchivioFatture.NumFatture + 1; ArchivioFatture.Sequenza[ArchivioFatture.NumFatture–1] = Fattura; } Procedure : esempio 2

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Ambiente globale ArchivioFatture Ambiente locale di InserisciFattura Ambiente di main di Programma Contabilità DataOdierna Fattura Fattura1 Fattura2... Esecuzione delle procedure

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Passaggio parametri per indirizzo (1) voidInserisciFattura(DescrizioneFattureFattura, ElencoFatture ArchivioFatture) /*In questa versione della procedura, sia la fattura da inserire sia l'archivio in cui inserirla sono dei parametri */ { if(ArchivioFatture.NumFatture == MaxNumFatture) printf("L'archivio è pieno."); else { ArchivioFatture.NumFatture = ArchivioFatture.NumFatture + 1; ArchivioFatture.Sequenza[ArchivioFatture.NumFatture–1] = Fattura; } /*Fine della procedura InserisciFattura */ InserisciFattura (Fattura1, ArchivioFatture5);Non funziona! Perché?

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Ind(x) = 2034 Parametri attualiParametri formali Passaggio per valore 243 Ind(y) = 1004 Passaggio per indirizzo yA Passaggio parametri per indirizzo (2)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A In C la modalità di passaggio dei parametri a un sottoprogramma è sempre quella di passaggio per valore. Per simulare il passaggio per indirizzo: utilizzare il costruttore puntatore per la definizione dei parametri formali della funzione; usare loperatore di dereferenziazione di puntatore (operatore * o –>) allinterno del corpo della funzione; passare al momento della chiamata della funzione come parametro attuale un indirizzo di variabile (usando loperatore &). Passaggio parametri per indirizzo (3)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /*Programma Contabilità (1)*/... main() { ElencoFattureArchivioFatture5; /* Qui ArchivioFatture5 è una variabile locale del main. */ DataDataOdierna; DescrizioneFattureFattura1, Fattura2; voidInserisciFattura (DescrizioneFattureFattura, ElencoFatture *PointToArchivioFatture); /* Prototipo della procedura InserisciFattura */ BooleanPrecede(Data Num1, DataNum2); /* Prototipo della funzione Precede */ Passaggio parametri per indirizzo (4)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /*Programma Contabilità (2)*/... /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura1 */ InserisciFattura(Fattura1, &ArchivioFatture5); /* Chiamata della procedura InserisciFattura: alla procedura viene passato il valore di Fattura1 e l'indirizzo di ArchivioFatture5 */... /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura2 */ if(Precede(Fattura2.DataEmissione, DataOdierna) InserisciFattura(Fattura2,&ArchivioFatture5); /* Nuova chiamata della procedura InserisciFattura: alla procedura viene passato il valore di Fattura2 e -nuovamente- l'indirizzo di Archivio Fatture5 (ma potrebbe essere un altro) */... } Passaggio parametri per indirizzo (5)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /*Programma Contabilità (3)*/... /* Definizione della procedura InserisciFattura */ voidInserisciFattura(DescrizioneFatture Fattura, ElencoFatture*PointToArchivioFatture) /* In questa versione della procedura, la fattura da inserire e l'indirizzo dell'archivio in cui inserirla sono dei parametri */ { if(PointToArchivioFatture–>NumFatture == MaxNumFatture) /* PointToArchivioFatture è una variabile che punta a una struttura avente un campo di nome NumFatture */ printf("L'archivio è pieno.\n"); else { PointToArchivioFatture–>NumFatture = PointToArchivioFatture–> NumFatture +1; PointToArchivioFatture–> Sequenza[PointToArchivioFatture–>NumFatture – 1] = Fattura; } Passaggio parametri per indirizzo (6)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A I blocchi Un blocco è composto da due parti racchiuse tra parentesi graffe: una parte dichiarativa (facoltativa); una sequenza di istruzioni. Diversi blocchi possono comparire internamente al main o alle funzioni che compongono un programma C. I blocchi possono risultare paralleli o annidati

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /* Programma ComplessoInStruttura */ #include /* Parte dichiarativa globale */ intg1, g2; charg3; intf1(intpar1, intpar2);... main () { inta, b; intf2(intpar3, intpar1);... /* blocco1 */ {chara, c;... /* blocco2 annidato nel blocco1 */ {floata;... } /* Fine blocco2 */ } /* Fine blocco1 */ } /* Fine main */ I blocchi annidati

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A intf1(intpar1, intpar2) { intd;... /* blocco3 */ { inte;... } /* Fine blocco3 */ /* blocco4 */ { intd;... } /* Fine blocco4 */ } /* Fine f1 */ I blocchi paralleli

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /* Definizione della funzione f2 */ intf2(intpar3, intpar4) { intf;... } /* Fine f2 */ I blocchi : funzioni

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Visibilità allinterno dei blocchi

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A La durata delle variabili variabili fisse o statiche (static): i loro valori vengono mantenuti anche allesterno del loro ambito di visibilità. variabili automatiche (auto): i loro valori non vengono mantenuti allesterno del proprio ambito di visibilità. Sono variabili fisse le variabili globali del programma

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A /* Definizione della funzione f1 */ intf1(intpar1, intpar2) { static intd; /* blocco3 */ {inte;... }/*Fine blocco3 */ /* blocco4 */ {intd;... } /* Fine blocco4 */ } /* Fine f1 */ La durata delle variabili: esempio

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Parametri di tipo array Lindirizzo di base dellarray viene passato per valore alla funzione. typedefdoubleTipoArray[MaxNumElem] Le tre testate di funzione riportate di seguito sono equivalenti: doublesum(TipoArraya, intn) /* n è la dimensione dell'array passato */ doublesum(double*a, intn) doublesum(doublea[ ], intn)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Parametri di tipo array doublemul(doublea[ ], intn) /* n è la dimensione dell'array passato */ { inti; doubleris; ris = 1.0; for (i=0; i < n; i=i+1) ris = ris * a[i]; return ris; } v array di 50 elementi: ChiamataValore calcolato e restituito mul(v, 50)v[0]*v[1]*... *v[49] mul(v, 30)v[0]*v[1]*... *v[29] mul(&v[5], 7)v[5]*v[6]*... *v[11] mul(v+5, 7)v[5]*v[6]*... *v[11]

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Parametri di tipo struttura Una struttura può essere passata per valore anche quando contiene un componente di tipo array.

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Effetti collaterali (1) int x ; /* Variabile globale */ intPrimoEsempio(intpar) { return(par + x) } Nel corso del seguente frammento di programma: x = 1; x = PrimoEsempio(1); La sua chiamata produce, la prima volta, il risultato 2, la seconda volta 3.

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A intSecondoEsempio(int*par) { *par = *par + 1; return*par; } y = SecondoEsempio(&z); Assegna alla variabile y il valore di z+1, ma anche z assume lo stesso valore. effetto collaterale (side effect) Effetti collaterali (2)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A int x ; /* Variabile globale */ intTerzoEsempio(intpar) { x = par + 2; return(par + 1); } Altro effetto collaterale: z = TerzoEsempio(4); Assegna a z il valore 5, ma anche il valore 6 a x. A Effetti collaterali (3)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Uso interscambiabile di procedure e funzioni intf(intpar1) {... returnrisultato; } Essa può essere trasformata nella procedura seguente: voidf(intpar1, int*par2) {... *par2 = risultato; } Successivamente, una chiamata come: y = f(x); verrà trasformata in: f(x, &y);

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A La standard library del C Sottoprogrammi di largo uso predefiniti: –Matematica –I/O –Grafica Librerie di sottoprogrammi: –Predefinite –Costruite dai programmatori applicativi Però luso di librerie diminuisce la portabilità a meno che anche le librerie (almeno le fondamentali) non siano standardizzate: la grande forza del C: la libreria standard

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A #include /* Programma Concatenazione di stringhe */ #include #define LunghezzaArray 50 main() { charPrimaStringa[LunghezzaArray], SecondaStringa[LunghezzaArray], StringaConc[2 * LunghezzaArray]; unsignedLunghezzaConc; scanf(%s, PrimaStringa); scanf(%s, SecondaStringa); if(strcmp(PrimaStringa, SecondaStringa) <= 0) { strcpy(StringaConc, PrimaStringa); strcat(StringaConc, SecondaStringa); } else { strcpy(StringaConc, SecondaStringa); strcat(StringaConc, PrimaStringa); } LunghezzaConc = strlen(StringaConc); printf(La stringa ottenuta concatenando le due stringhe lette è %s. Essa è lunga %d caratteri\n, StringaConc, LunghezzaConc); } Esempio

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A I file header Le funzioni della libreria sono disponibili in C come file di codice compilato È compito del programmatore inserire nel programma i prototipi delle funzioni che verranno usate La libreria C comprende alcuni file, chiamati header file, che contengono i prototipi di un insieme di funzioni di libreria #include e altre #include Il preprocessore copia il contenuto del file stdio.h nel programma, inserendo i prototipi delle funzioni che appartengono al gruppo di cui xxx.h è il file testata