Sottoprogrammi: motivazioni. Funzioni e procedure. Un esempio motivante. Un esempio motivante
|
|
- Gianfranco Nardi
- 4 anni fa
- Visualizzazioni
Transcript
1 Sottoprogrammi: motivazioni Funzioni e procedure Riusabilità (scrivere una sola volta del codice usato più volte) Astrazione (esprimere in modo sintetico operazioni complesse) Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it Informatica A - Cugola 2 Un esempio motivante #define MaxNumMov typedef struct { int giorno; int mese; int anno; Data; typedef struct { char causale[100]; Data data; Come float importo; calcolare il Movimento; totale delle typedef struct { entrate? int nummovimenti; Movimento dati[maxnummov]; ElencoMovimenti; ElencoMovimenti entrate; ElencoMovimenti uscite; float saldo; e il totale delle uscite? Un esempio motivante Potremmo scrivere: float totentrate, totuscite; totentrate = 0; for(i=0; i<entrate.nummovimenti; i++) { totentrate += entrate.dati[i].importo; totuscite = 0; for(i=0; i<uscite.nummovimenti; i++) { totentrate += uscite.dati[i].importo; saldo = totentrate totuscite; Informatica A - Cugola 3 Informatica A - Cugola 4
2 Un esempio motivante Ma ci piacerebbe di più scrivere: saldo = tot(entrate) tot(uscite); mettendo a fattor comune il codice simile Ma per fare questo dobbiamo definire un sottoprogramma che calcola tot Si tratta di un programma asservito al programma principale Il sottoprogramma deve essere prima di tutto definito e poi può essere invocato (chiamato) Struttura di un programma in presenza di sottoprogrammi [parte di direttive] [dichiarazione degli elementi condivisi da programma principale e sottoprogrammi (costanti, tipi, variabili, )] [definizioni di sottoprogrammi (main incluso)] Informatica A - Cugola 5 Informatica A - Cugola 6 Visibilità e tipi di sottoprogrammi Programma principale e sottoprogrammi possono usare Elementi dichiarati nella propria parte dichiarativa Elementi dichiarati nella parte dichiarativa globale I sottoprogrammi possono essere di due tipi Funzioni Restituiscono un valore al chiamante Procedure Svolgono un compito per il chiamante ma non restituiscono un valore specifico Un esempio di funzione intestazione corpo float tot(elencomovimenti mov) { float totale; totale = 0; for(i=0; i<mov.nummovimenti; i++) { totale += mov.dati[i].importo; return totale; Informatica A - Cugola 7 Informatica A - Cugola 8
3 Intestazione L intestazione o testata (header) della funzione contiene informazioni rilevanti per l uso corretto della medesima Tipo del risultato Rappresenta il codominio della funzione Nome della funzione Lista degli argomenti della funzione (parametri formali) tra parentesi tonde Rappresenta il dominio della funzione Ogni parametro formale è dichiarato indicandone il tipo (built-in o user-defined) e il nome Ricevono un valore nel momento in cui la funzione viene invocata Esempi di intestazioni float tot ( ElencoMovimenti mov ) tipo del risultato nome tipo parametro parametri formali nome Altri esempi: boolean contiene( ElencoMovimenti mov, Movimento m ) ElencoMovimenti estrai( ElencoMovimenti mov, int mese, int anno ) Informatica A - Cugola 9 Informatica A - Cugola 10 Corpo della funzione Simile al corpo del programma principale Composto da: Parte dichiarativa Contiene dichiarazioni locali Parte esecutiva Contiene il codice della funzione Esempio di corpo { parte dichiarativa float totale; totale = 0; for(i=0; i<mov.nummovimenti; i++) { totale += mov.dati[i].importo; return totale; parte esecutiva Informatica A - Cugola 11 Informatica A - Cugola 12
4 Dichiarazioni locali Tipi e variabili necessari per l esecuzione del sottoprogramma ma inutili al programma principale Stesse regole della parte dichiarativa del main Nuove dichiarazioni di tipi di costanti di altri sottoprogrammi (solo prototipi) L istruzione return Termina l esecuzione della funzione restituendo il controllo al chiamante Restituisce un valore al chiamante Visto dal chiamante il valore restituito è il valore dell espressione rappresentata dall invocazione della funzione Possono esserci più istruzioni return Ovviamente a ogni chiamata se ne esegue solo una Informatica A - Cugola 13 Informatica A - Cugola 14 Invocazione di funzioni Sintassi ispirata alla notazione matematica: nome_funzione(parametri_attuali); Parametri attuali: valori degli argomenti ai quali viene applicata la funzione Ogni parametro attuale è un espressione e può contenere altre chiamate di funzione Una chiamata di funzione sintatticamente definisce un espressione Una funzione, applicata ai suoi argomenti, fornisce un valore del suo codominio Esempi float t = tot ( mieimovimenti ); nome parametro attuale Altri esempi: saldo = tot(entrate) tot(uscite); if(contiene(mieimovimenti, m)) printf( ); movdic = estrai(mieimovimenti, 12, 2002); x = sin(y) cos(pigreco alfa); x = cos(atan(y) beta); Informatica A - Cugola 15 Informatica A - Cugola 16
5 Prototipi delle funzioni Una funzione può essere invocata solo se precedentemente definita o almeno dichiarata Definizione e dichiarazione non sono sinonimi Definizione : comprende intestazione + corpo) Dichiarazione (detta prototipo) : sola intestazione della funzione seguita dal ; Va posta nella parte dichiarativa globale o nella parte dichiarativa propria dei sottoprogrammi che chiamano la funzione (main incluso) Informatica A - Cugola 17 Mettiamo insieme il tutto #define MaxNumMov direttive typedef struct { int giorno; int mese; int anno; Data; typedef struct { char causale[100]; Data data; parte float importo; dichiarativa Movimento; globale typedef struct { int nummovimenti; Movimento dati[maxnummov]; ElencoMovimenti; float tot(elencomovimenti mov); dichiarazione funzione main() { ElencoMovimenti entrate; ElencoMovimenti uscite; /* lettura dati */ printf( Saldo : %f, tot(entrate)-tot(uscite)); float tot(elencomovimenti mov) { float totale; totale = 0; for(i=0; i<mov.nummovimenti; i++) { totale += mov.dati[i].importo; return totale; definizione di sottoprogrammi (incluso il sottoprogramma principale) Informatica A - Cugola 18 Funzioni: Esercizi Si scriva la funzione: boolean contiene(elencomovimenti mov, Movimento m) Si scriva la funzione: ElencoMovimenti estrai(elencomovimenti mov, int mese, int anno) Si scriva una funzione per calcolare la distanza in giorni tra due date Procedure A volte si vuole definire un sottoprogramma che non si comporta come una funzione, ma semplicemente realizza una operazione o esegue un azione senza restituire alcun valore al chiamante Esempi Aggiungere un movimento a un elenco di movimenti Stampare un elenco di movimenti Ordinare un array di interi... In questo caso usiamo delle procedure Sono definite esattamente come le funzioni ma nell intestazione il tipo del valore di ritorno è void Informatica A - Cugola 19 Informatica A - Cugola 20
6 Esempi di procedure void stampamov(movimento m) { printf( %d-%d-%d %s %f, m.data.giorno, m.data.mese, m.data.anno, m.causale, m.importo); void stampaelenco(elencomovimenti mov) { for(i=0; i<mov.nummovimenti; i++) { stampamov(mov.datio[i]); printf( \n ); Funzioni e procedure predefinite Standard library del C include sottoprogrammi di vasto uso non riscoprire continuamente l acqua calda I/ O, trigonometriche, esponenziali, logaritmiche, gestione stringhe, Informatica A - Cugola 21 Informatica A - Cugola 22 /* Programma Concatenazione di stringhe */ #include <stdio.h> #include <string.h> #define LunghezzaArray 50 main() { char PrimaStringa[LunghezzaArray], SecondaStringa[LunghezzaArray], StringaConc[2 * LunghezzaArray]; LunghezzaConc; unsigned scanf( %s, PrimaStringa); /* NB scanf assume caratteri!= spazio */ 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( Concatenazione stringhe lette: %s.\n lunga %d caratteri\n, StringaConc, LunghezzaConc); Informatica A - Cugola 23 Ambiente locale e globale Le variabili dichiarate localmente ad un sottoprogramma sono visibili solo in quel sottoprogramma Vengono allocate all istante dell invocazione e deallocate al termine dell esecuzione del sottoprogramma Per ogni invocazione si ha una nuova allocazione Lo stesso vale per i parametri formali E altresì possibile dichiarare delle variabili globali Dichiarate nella parte dichiarativa globale Accessibili tanto al main quanto a tutti gli altri sottoprogrammi Vengono allocate alla partenza del programma e deallocate solo al termine del programma Informatica A - Cugola 24
7 Ambiente globale e side effects Nell istante in cui un sottoprogramma modifica una variabile globale genera ciò che si chiama un effetto collaterale ( side effect ) Gli effetti collaterali riducono la leggibilità del codice In condizioni normali un sottoprogramma vede solo le variabili dichiarate localmente e il suo ambito d azione resta così chiaramente confinato (non vede variabili dichiarate in altri sottoprogrammi) Il chiamante sa che al termine della chiamata, a meno del valore restituito, lo stato complessivo del programma è invariato Lo stesso non è più vero in presenza di effetti collaterali Effetti collaterali: Un esempio void faiqualchecosa(); main() { i = 7; faiqualchecosa(); printf( %d, i); Cosa ci aspettiamo che venga stampato? Un 7? Dipende!!! Se faiqualcosa ha effetti collaterali void faiqualchecosa() { i = 12; In questo caso il main stampa il valore 12 Informatica A - Cugola 25 Informatica A - Cugola 26 Effetti collaterali: Un altro esempio int x; int calcola(int par); main() { x = 1; x = calcola(1); /* ora x vale 2 */ x = calcola(1); /* ora x vale 3 */ int calcola(int par) { return (par + x) Gli Gli effetti collaterali diminuiscono la la leggibilità del del codice Il passaggio parametri in dettaglio Al momento dell invocazione i parametri attuali sono passati al sottoprogramma per valore (o per copia) Il valore del parametro attuale è copiato, al momento dell invocazione, nel parametro formale Parametro attuale e parametro formale hanno vita distinta Esempio: void f(int i) { i = 10; Il valore di j è: 0 main() { int j = 0; f(j); printf( Il valore di j è: %d,j); Informatica A - Cugola 27 Informatica A - Cugola 28
8 Esercizio Si scriva un programma per gestire i risultati di un compito Il programma deve permettere l inserimento dei dati, la stampa dei risultati, il calcolo della media L inserimento dei dati deve essere possibile risultato per risultato Il programma deve presentare un menu iniziale con le diverse opzioni (aggiunta di un nuovo risultato, stampa dei risultati, stampa della media) Se necessario si faccia uso di variabili globali Il blocco Può comparire ovunque la sintassi preveda una istruzione Composto da due parti racchiuse tra graffe Una parte dichiarativa (facoltativa) Una sequenza di istruzioni Due blocchi possono essere: Annidati (uno è interno all altro) Paralleli (entrambi interni a un terzo ma non annidati tra di loro) Informatica A - Cugola 29 Informatica A - Cugola 30 int g1, g2; char g3; int f1(int par1, int par2 ); / * Prototipo di f1 * / main () { int a, b; int f2(int par3, int par1 ); / * Prototipo di f2 */ { char a, c; { float a; / * Fine blocco2 * / / * Fine blocco1 * / / * Finemain * / int f1(int par1, int par2) { int d; { int e; / * Fine blocco3 * / { int d; / * Fine blocco4 * / / * Fine f1 * / int f2(int par3, int par4) { int f; / * Fine f2 * / modello a contorni Informatica A - Cugola 31 Regole di visibilità Un elemento si dice visibile in un certo punto del codice se può essere usato e referenziato tramite l identificatore in quel punto del codice Elementi dichiarati nella parte dichiarativa globale del programma: Visibili da tutti sottoprogrammi (incluso main) e i blocchi dei sottoprogrammi Identificatori predefiniti del linguaggio si intendono dichiarati nella parte dichiarativa globale Elementi dichiarati nella parte dichiarativa di un sottoprogramma Visibili da istruzioni del suo corpo, inclusi i blocchi interni Elementi dichiarati nella parte dichiarativa di un blocco Visibili nelle istruzioni del blocco, inclusi i blocchi interni Informatica A - Cugola 32
9 Deroga alla regola La dichiarazione di un elemento in un sottoprogramma o in un blocco maschera eventuali entità omonime più esterne Lifetime delle variabili Va dalla creazione (allocazione della memoria) alla distruzione (rilascio della memoria deallocata) Variabili globali Vengono allocate alla partenza del programma e deallocate al termine Variabili dichiarate nella parte dichiarativa di un sottoprogramma (main incluso) Vengono allocate alla partenza del sottoprogramma e deallocate al termine dell esecuzione del medesimo Variabili dichiarate in un blocco Vengono allocate quando l esecuzione entra nel loro ambito di visibilità e deallocate quando si esce dall ambito di visibilità N.B. Veriabili dichiarate in sottoprogrammi o blocchi eseguiti più volte vengono riallocate di volta in volta in zone di memoria potenzialmente differenti Non vengono conservati i valori prodotti da precedenti esecuzioni Informatica A - Cugola 33 Informatica A - Cugola 34 Parametri passati per indirizzo Finora i sottoprogrammi hanno potuto Restituire un valore Modificare l ambiente globale Ricevere parametri per valore (senza aver modo di modificare i parametri attuali) Il passaggio per indirizzo costituisce un altro modo per far avvenire effetti sul chiamante attraverso la chiamata di sottoprogrammi Passaggio per indirizzo: Un esempio motivante Consideriamo la seguente definizione della funzione aggiungi void aggiungi(movimento m, ElencoMovimenti mov) { strcpy(mov.dati[mov.nummovimenti].causale, m.causale); mov.dati[mov.nummovimenti].data = m.data; mov.dati[mov.nummovimenti].importo = m.importo; mov.nummovimenti++; Cosa succede dopo l esecuzione del seguente frammento di codice? ElencoMovimenti mieimov; Movimento mo; scanf( %d-%d-%d %s %f, &m.data.giorno, &m.data.mese, &m.data.anno, m.causale, &m.importo); aggiungi(mo, mieimovimenti); Purtroppo non quello che vorremmo! La procedura aggiungi modifica il parametro formale mov ma non il parametro attuale mieimov Il parametro formale è solo una copia del parametro attuale Alla fine dell esecuzione della procedura il parametro formale mov modificato è addirittura deallocato Informatica A - Cugola 35 Informatica A - Cugola 36
10 Come ottenere una modifica del parametro attuale? 1. Il parametro formale viene definito di tipo puntatore al tipo del parametro attuale desiderato 2. Alla chiamata viene passato l indirizzo (usando &) del parametro attuale Deve essere una variabile, NON una generica espressione Di una espressione non è possibile estrarre l indirizzo 3. Nel corpo della funzione viene usato l operatore di dereferenziazione per accedere al parametro attuale desiderato mediante il suo indirizzo L esempio corretto attraverso l uso del passagio per indirizzo void aggiungi(movimento m, ElencoMovimenti *mov) { strcpy(mov->dati[mov->nummovimenti].causale, m.causale); mov->dati[mov->nummovimenti].data = m.data; mov->dati[mov->nummovimenti].importo = m.importo; mov->nummovimenti++; Informatica A - Cugola 37 Informatica A - Cugola 38 Procedure e funzioni Facile trasformare una funzione in procedura (risultato come parametro aggiuntivo) funzione int f(int par1) { return risultato; chiamata con istruzione y = f(x); diventa la procedura void f(int par1,int * par2) { * par2 = risultato; chiamata con istruzione f(x, &y); Parametri di tipo array Quando un array viene passato ad un sottoprogramma come parametro attuale Viene passato per valore l indirizzo di base dell array (indirizzo della prima componente) NB: gli elementi dell array NON vengono copiati nel parametro formale Di fatto è passato per indirizzo Il parametro formale della funzione viene trattato come un puntatore Informatica A - Cugola 39 Informatica A - Cugola 40
11 Esempi Forme equivalenti typedef double TipoArray[MaxN umelem] / * n è la porzione occupata dell' array*/ double sum(tipoarray a, int n) double sum(double *a, int n) double sum(double a[ ], int n) Esempio: Moltiplicare gli elementi di un array double mul (double a[ ], int n) { /* n porzione occupata dell'array passato * / double ris; ris = 1.0; for ( i = 0; i < n; i = i + 1 ) ris = ris * a[i]; return ris; Informatica A - Cugola 41 Informatica A - Cugola 42 Parametri di tipo struttura Si possono passare per valore o per indirizzo Un risultato può essere di tipo struttura N.B.: anche se contiene un campo array! Informatica A - Cugola 43 Valore vs. Indirizzo Per valore Parametri attuale e formale sono distinti Le funzionalità del sottoprogramma restano chiaramente confinate maggiore leggibilità NON permette di restituire un risultato al chiamante Il passaggio per valore richiede una copia del parametro che porta via tempo. Il passaggio per indirizzo è più efficente Per indirizzo Parametro attuale e formale di fatto coincidono Permette di restituire risultato al chiamante Si copia l indirizzo dimensione fissa NON occorre lunga copiatura Informatica A - Cugola 44
12 Passaggio per indirizzo: Esercizi Si realizzi la funzione scambia che presi due interi come parametro li scambia Si riscriva l esercizio relativo alla gestione dei risultati di un compito sfruttando il passaggio per indirizzo ed eliminando così le variabili globali Si scrivano le funzioni per gestire uno stack di interi. Si usi lo stack per invertire una sequenza di interi Informatica A - Cugola 45
Funzioni e Procedure in C. Funzioni e Procedure in C
Corso di Informatica A Vito Perrone 1 Motivazioni Indice Il concetto di sottoprogramma Struttura completa di un programma C Le funzioni Esecuzione delle funzioni e passaggio dei parametri Le procedure
Dettagliint main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;
Problema: CALCOLARE LA SOMMA DEI FATTORIALI DEI PRIMI 100 NUMERI NATURALI 0!+1!+2! + 99! #include int fattoriale(int); Calcolo fattoriale int main(){ int numero; /* numero di cui voglio calcolare
DettagliIl passaggio parametri per indirizzo
Il passaggio parametri per indirizzo Cominciamo con un esempio: supponiamo di voler eseguire diversi inserimenti di nuove fatture in diversi archivi. Proviamo con questa modifica della procedura InserisciFattura:
DettagliFunzioni e procedure
Funzioni e procedure Alcuni tipici errori a run-time La divisione per 0 L'uso di un indice di un array con valore al di fuori del suo campo di variabilità Int V1[100] permette al compilatore di segnalare
DettagliCarlo Ghezzi, Gian Pietro Picco
Funzioni Carlo Ghezzi, Gian Pietro Picco Dipartimento di Elettronica e Informazione Politecnico di M, Italy picco@elet.polimi.it http://www.elet.polimi.it/~picco Analogia con la matematica Come nella matematica,
DettagliOttenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
DettagliLABORATORIO di INFORMATICA
Università degli Studi di Cagliari Corso di Laurea Magistrale in Ingegneria per l Ambiente ed il Territorio LABORATORIO di INFORMATICA A.A. 2010/2011 Prof. Giorgio Giacinto FUNZIONI E PROCEDURE http://www.diee.unica.it/giacinto/lab
DettagliFUNZIONI E PROCEDURE IN C. Docente: Giorgio Giacinto AA 2009/2010. dall utente, sia predefiniti, il C consente di creare funzioni e procedure
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliVariabili e Funzioni. Informatica 1 / 19
Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:
DettagliLinguaggio C: le funzioni. Introduzione e sintassi
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Introduzione e sintassi La presente dispensa
DettagliLinguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
DettagliLinguaggio C: le funzioni. Introduzione e sintassi
ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni
DettagliScope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano
Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di
DettagliLaboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/05/08 Nota Questi lucidi sono tratti
DettagliIntroduzione. per astrarre delle operazioni complesse
Introduzione Perché i sottoprogrammi? per riutilizzare codice già scritto se si devono ripetere tante volte le stesse operazioni in punti diversi di un programma, è meglio fattorizzare il codice da ripetere
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014
Funzioni e Procedure Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 11 Marzo 2014 Obiettivi Funzioni Scope delle variabili 2 La calcolatrice! Problema Si scriva un programma in C
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014
Puntatori Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 11 Marzo 2014 Immagini Struttura dati: typedef struct{ int R; int G; int B; } pixel pixel img[0][24]; Ma quanto è grossa
Dettaglipassaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in
I Parametri di tipo vettore I Il meccanismo del passaggio per valore di un indirizzo consente il passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad
DettagliLe Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia
Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliEsercizi. FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo. Funzioni
Politecnico di Milano Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo Definizione: Funzioni tipo_ritornato nome (lista di parametri) istruzioni; Segnatura
DettagliEsercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
DettagliC funzioni à scope di variabili
C funzioni à scope di variabili Per questo motivo il parametro di una function può avere lo stesso nome del parametro effettivo del processo chiamante. Possiamo definire anche delle variabili globali e
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017
DettagliArray k-dimensionali
Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 4 Aprile 2013
Puntatori Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 4 Aprile 201 WAT? WAT Lab Troppi exe, ne volevo di meno Vacanze W A Giovedì 28, Venerdì 29 e Lunedì 1 ma anche Martedì 2
DettagliFUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice
Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni
DettagliIntroduzione al linguaggio C Funzioni
Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliPassaggio dei parametri
Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliLA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.
I lucidi sono una rielaborazione e integrazione di quelli messi a disposizione dei docenti nel sito relativo al testo: Informatica: arte e mestiere 2/ed Stefano Ceri, Dino Mandrioli, Licia Sbattella Copyright
DettagliFunzioni in C. Fondamenti di Informatica. Daniele Loiacono
Funzioni in C Fondamenti di Informatica Organizzare il codice q Consideriamo un frammento programma che calcola il massimo di una sequenza di interi letti da tastiera: int i,x,max; for(i=1;i
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 20 Aprile 2016
Puntatori Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 20 Aprile 2016 Come rappresento un pixel? Il pixel è Il colore Come ottengo il verde? Con il formato RGB R: 91 G: 191 B:
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliIntroduzione al C. Lez. 2. Funzioni e Puntatori
Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se è solo
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliEsercizio (o esempio?)
Esercizio (o esempio?) programma che legge un intero n e n double; li memorizza in un array dinamico esatto calcola e stampa minimo, massimo e media dei double #include 1) Lettura e memorizzazione
DettagliPassaggio dei parametri. Passaggio dei parametri
Per valore Il valore viene copiato dal mondo esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sul mondo esterno rimangono circoscritti all environment
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliIl linguaggio C. Istruzioni, funzioni, dati strutturati
Il linguaggio C Istruzioni, funzioni, dati strutturati Istruzioni Servono a dirigere il flusso di esecuzione di un programma controllano l ordine di esecuzione delle espressioni, quindi dei loro side effects
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
Dettagli- tipo - costruttori di tipo - typedef: alias per i nuovi tipi
Tecniche della Programmazione, lez.16 variazioni sul tema dei puntatori... typedef, struct e definizione di tipi strutturati... - tipo - costruttori di tipo - typedef: alias per i nuovi tipi - struct (Record),
DettagliIntroduzione al C. Lez. 2 Funzioni e Puntatori
Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se e solo
DettagliFondamenti di Informatica
Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di
DettagliCorso di Informatica Modulo T3 2 Ambiente locale e globale
Corso di Informatica Modulo T3 2 Ambiente locale e globale 1 Prerequisiti Struttura elementare della memoria Area dati e area programma Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità
DettagliIndirizzi e tipi puntatore a
Linguaggio C Indirizzi e tipi puntatore a Università degli Studi di Brescia Prof. Massimiliano Giacomin Indirizzo e tipo puntatore a TIPO Indirizzo NOME Valore Indirizzo 0101011110011001 1101011110011111
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliEsercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
DettagliLB5 FUNZIONI cap. 7 del testo
LB5 FUNZIONI cap. 7 del testo 1 necessità di strutturare i programmi main() {......... N...... O...............} main() {... } funz1 funz2 funz3 funz4 SI funz5 funz6 2 Funzioni Una funzione è un pezzo
Dettaglicout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;
Funzioni int n, ris; cout n; ris = n*2; cout
DettagliMETODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi
Fondamenti di Informatica METODI in Java Prof.Angela Bonifati 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile definire nuovi tipi di dati, tramite i metodi è possibile
DettagliPassaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet
Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment esterno Per riferimento
DettagliEsercizio 1: funzione con valore di ritorno di tipo puntatore
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliPuntatori e array. Violetta Lonati
Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array
DettagliEsercizio 1: media di numeri reali (uso funzioni e struct)
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
DettagliFunzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliRecord di Attivazione Cenni sulla ricorsione
MASTER Information Technology Excellence Road (I.T.E.R.) Cenni sulla ricorsione Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il modello a RUN-TIME
DettagliInformatica B Prof. Di Nitto, Morzenti Prova del 18 novembre 2004 Cognome e Nome... Numero Matricola... (in stampatello)
Informatica B Prof. Di Nitto, Morzenti Prova del 18 novembre 2004 Cognome e Nome... Numero Matricola... (in stampatello) Risolvere i seguenti esercizi, scrivendo le risposte ed eventuali tracce di soluzione
DettagliInformatica (A-K) 12. Linguaggio C -3
Introduzione alle funzioni in C Informatica (A-K) 12. Linguaggio C -3 int main() int i,n, fattoriale=1; printf( Inserire Numero: ); scanf( %d, &n); for (i =2; i
DettagliFondamenti di Informatica II 3. Funzioni in C++ (parte 1)
Introduzione alle funzioni in C++ Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Corso di Laurea in Ingegneria Informatica A.A. 2008-2009 2 Semestre Corso (A-M) int main() int n, fattoriale=1;
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliElementi di Informatica A. A. 2016/2017
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 4
DettagliLe funzioni: la dichiarazione
Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Le regole di visibilità (scope) Il passaggio degli argomenti per valore e riferimento La funzione main() Le funzioni: la dichiarazione
DettagliLe funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità
Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Le funzioni: la dichiarazione
DettagliProgrammazione (imperativa)
Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00
DettagliStrutture di controllo
Strutture di controllo abbiamo visto if-else e while domande da punto di vista teorico: 1. algoritmi NON codificabili con if-else e while? 2. strutture di controllo più potenti di quelle viste sinora?
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliProf. G. Ascia. Le funzioni. Fondamenti di Informatica
Le funzioni 1 La Forma Generale di Funzione La forma generale di funzione è la seguente: SpecificatoreTipo NomeFunzione(ElencoParametri) { CorpoDellaFunzione; Lo SpecificareTipo specifica il tipo dei dati
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 21 Marzo 2014
Funzioni e Procedure Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 21 Marzo 2014 Info di servizio 1 Vi siete dimostrati volenterosi, quindi teniamo la divisione proposta da voi
DettagliProgrammazione C. Funzioni e Procedure Call by value
Programmazione C Funzioni e Procedure Call by value !"#$%#&'(%')*+,*&--&.%+$"'!+)/ 0+1$!!"#$%&'()*"+,("-*".//$%01.0%",.00%"*0"2(0($.'("30." +%)#'(--*1.4 1.'("#($"+3*"+,*"'*"5(6("$*-%'6($("0%0"$*(-+(".5".//$%01.$'*"0(''."'%$%"2'%&.'*1.47"80")(1%5%"
DettagliFUNZIONI: IL MODELLO A RUN-TIME!
FUNZIONI: IL MODELLO A RUN-TIME! Ogni volta che viene invocata una funzione si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri e per le variabili locali
DettagliEsercizio 1: parole nel testo
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 6 Esercitazione: 11 novembre 2005 Esercizi di riepilogo in preparazione alla prima prova intermedia Problema (tratto da
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Sottoprogrammi Parte 8 Dettagli e Approfondimenti versione 2.3 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
DettagliESEMPIO PROCEDURE. return IN UNA PROCEDURA. Disegnare, per un dato n, la seguente figura * *** ***** ******* ********* ***********
Sottoprogrammi I sottoprogrammi possono servire per creare nuovi operatori: funzioni, che possono essere usati nelle espressioni, forniscono un valore di ritorno =4*potenza(2+y,3); nuove istruzioni: procedure,
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliUn programma deve essere scritto come collezione di tante piccole funzioni perché:
Un programma deve essere scritto come collezione di tante piccole funzioni perché: ƒè più facile scrivere correttamente una funzione breve che abbia un unico compito: in questo modo sia la scrittura che
DettagliEsercizi. Filtraggio
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)
DettagliLe funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità
Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Le funzioni Tutti i linguaggi
DettagliEsiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali
AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte
DettagliEsiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali
AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliCompendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione
DettagliSi possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).
Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,
DettagliAritmetica dei puntatori
Aritmetica dei puntatori Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 7 dicembre 2016 sizeof L operatore
Dettagli