Carlo Ghezzi, Gian Pietro Picco
|
|
- Claudia Mauri
- 7 anni fa
- Visualizzazioni
Transcript
1 Funzioni Carlo Ghezzi, Gian Pietro Picco Dipartimento di Elettronica e Informazione Politecnico di M, Italy picco@elet.polimi.it
2 Analogia con la matematica Come nella matematica, con le funzioni C: Possiamo definire una funzione Esempio: la funzione min(x) min(x): un valore v dell'insieme X tale che per ogni elemento w di X risulta v <= w e poi successivamente impiegarla nei nostri ragionamenti tutte le volte che ci serve Ai fini della programmazione, i vantaggi sono: Astrazione esprimere in modo sintetico operazioni complesse Riusabilità scrivere una sola volta codice usato più volte
3 Un esempio motivante #define MAXNUMMOV 10000; typedef struct { int giorno; int mese; int anno; Data; typedef struct { char causale[100]; Data data; float importo; Movimento; typedef struct { int nummovimenti; Movimento dati[maxnummov]; ElencoMovimenti; ElencoMovimenti entrate; ElencoMovimenti uscite; float saldo; Come calcolare il totale delle entrate?...e il totale delle uscite?
4 Un esempio motivante Potremmo scrivere: int i; 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++) { totuscite += uscite.dati[i].importo; saldo = totentrate totuscite;
5 Sottoprogrammi 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) cioè attivato per calcolare i risultati richiesti 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, bensì void
6 Un esempio di funzione #include <stdio.h> float tot(elencomovimenti mov); main() {... saldo = tot(entrate) tot(uscite); float tot(elencomovimenti mov) { int i; float totale; totale = 0; for(i=0; i<mov.nummovimenti; i++) { totale += mov.dati[i].importo; return totale; valore di ritorno dichiarazione variabili locali dichiarazione di funzione definizione di funzione
7 Struttura di un programma Direttive al precompilatore (#include, #define, ) Dichiarazione elementi condivisi da tutto il programma (programma principale main e sottoprogrammi) costanti, tipi, variabili,... Definizioni di sottoprogrammi cominciando dal programma principale main main è di fatto una funzione particolare
8 Definizione delle funzioni: ecnico Definizione delle funzioni: sintassi La definizione di una funzione è composta da: Una testata (o header), che contiene informazioni rilevanti ai fini di un uso corretto della funzione e cioè: Tipo del risultato (il codominio della funzione) Identificatore del sottoprogramma Lista di dichiarazioni degli argomenti della funzione (il dominio della funzione) Un blocco, detto corpo (o body) della funzione A sua volta, il corpo della funzione è costituito da: Una parte dichiarativa, detta parte dichiarativa locale, che contiene le variabili necessarie all esecuzione Una parte esecutiva, che contiene le istruzioni che costituiscono il corpo vero e proprio
9 Esempio testata corpo tipo parametro argomenti di ritorno identificatore funzione (parametri formali) int power(int base, int n) { int i, p=1; for(i=1; i<=n; i++) p*=base; return p; parte dichiarativa locale parte esecutiva
10 Parametri formali e attuali Gli argomenti della funzione, elencati nella testata, vengono chiamati i parametri formali della funzione I parametri attuali sono invece quelli con i quali la funzione viene attivata All atto dell invocazione della funzione, i parametri formali vengono inizializzati con i valori dei parametri attuali Parametri formali int power(int m, int n); main() {... printf("%d %d %d\n", i, power(2,i), power(3,i)); Parametri attuali
11 Risultato della funzione Il tipo del risultato (o parametro di ritorno) può essere sia un tipo predefinito che definito dall utente, tuttavia: Non può essere un array Può essere una struct anche se questa contiene array! Può essere un puntatore a un qualsiasi tipo E quindi al primo elemento di un array
12 Esempi di testate int FatturatoTotale(ElencoFatture par); typedef enum {false, true boolean; typedef char string[20]; typedef int sequenzainteri[20]; typedef float matreali[10][10]; // valuta se la stringa par1 precede la stringa par2 boolean precede(string s1, string s2); // stabilisce se par1 appartiene alla sequenza // di interi par2 boolean esiste(int n, sequenzainteri seq); // restituisce (un puntatore a) la matrice inversa di // quella ricevuta (tramite puntatore) matreali* matinversa (matreali *mat);
13 Dichiarazioni locali Nella parte dichiarativa locale vengono dichiarate variabili necessarie all esecuzione del sottoprogramma ma inutili al programma principale Seguono le stesse regole della parte dichiarativa di un programma, pertanto è possibile inserire nuove dichiarazioni di tipi costanti altri sottoprogrammi
14 Corpo della funzione Oltre alla parte dichiarativa locale contiene la parte esecutiva del sottoprogramma, che è costruita con stesse regole del programma principale contiene una o più istruzioni o blocchi In aggiunta, la parte esecutiva di una funzione può contenere un istruzione return accompagnata da un espressione (es. return x+y;) Il valore dell espressione diventa il risultato restituito dalla funzione Visto dal chiamante, il valore restituito è il valore della funzione in corrispondenza dei parametri di ingresso Tale istruzione termina l esecuzione del sottoprogramma, e restituisce il controllo al chiamante Possono esserci più istruzioni return ovviamente a ogni chiamata se ne esegue solo una, a seconda del flusso di esecuzione o nessuna In questo caso il sottoprogramma termina quando raggiunge e il risultato della funzione è indefinito
15 Chiamata (invocazione) ecnico di funzione La sintassi è ispirata alla notazione matematica una funzione, applicata ai suoi argomenti, fornisce un valore del suo codominio La chiamata di funzione sintatticamente è un espressione id_funzione(lista dei parametri attuali) I parametri attuali sono i valori degli argomenti ai quali viene applicata la funzione Ogni parametro è un espressione e quindi può contenere a sua volta un altra chiamata di funzione
16 Esempi x = sin(y) cos(pi alfa); //pi = π x = cos(atan(y) beta); risultatodigestione = fatturatototale(archiviofatture) sommacosti(archiviocosti); ordalf = precede(nome1, nome2);
17 Prototipi di funzione Una funzione può essere chiamata solo se precedentemente definita o dichiarata vincolo necessario per controllo di correttezza da parte del compilatore Definizione e dichiarazione non sono sinonimi La definizione comprende sia la testata che il corpo La dichiarazione (o prototipo) di funzione comprende soltanto la testata va posta nella parte dichiarativa globale o in quella della funzione che la chiama
18 Esempio int search (Tabella t, int k) { #include <stdio.h> int n; n; int result = -1; #define SIZE 100 for (n = 0; n < t.actualsize; n++) //Dichiarazioni globali if (t.contents[n]==k) typedef int array[size]; return result n; = n; typedef struct { return -1; result; int actualsize; array contents; Tabella; int search(tabella t, int k); //dichiarazione di funzione main() { //programma principale int i, pos, val; Tabella mytab; printf("dimensione della tabella (< %d): ", SIZE); scanf("%d", &mytab.actualsize); // no controllo for(i = 0; i < mytab.actualsize; i++) { printf("dammi un valore della tabella "); scanf("%d", &mytab.contents[i]); printf("dammi un valore da cercare in tabella "); scanf("%d", &val); pos = search(mytab, val); if (pos!=-1) printf("trovato in posizione %d\n", pos); else printf("valore non trovato in tabella!\n");
19 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
20 Modello di esecuzione Immaginiamo che esista una macchina dedicata ad eseguire il main e che, all invocazione di una funzione, ne venga creata un altra ad essa dedicata E così per ogni invocazione di funzione Tale macchina dedicata alla funzione ha una memoria ambiente) (ambiente che contiene: le variabili locali i parametri (che vengono trattate come variabili locali inizializzate all atto della chiamata) il risultato e viene distrutta alla terminazione della funzione Vedremo poi che in realtà una sola macchina può simulare questo comportamento
21 Esempio Effetto dell invocazione pos = search(mytab,val); mytab actualsize content t actualsize content val pos k n i Ambiente di main Ambiente di search Il passaggio dei parametri avviene per copia per copia da un ambiente all altro Vedremo che non sarà sempre necessariamente così
22 Un caso più complesso Nell invocazione x = sin(atan(y) acos(z)); l effetto complessivo è equivalente a: temp1 = atan(y); temp2 = acos(z); x = sin(temp1 temp2); catena di macchine dedicate
23 Come realizzare le ecnico macchine dedicate In pratica, la CPU e la memoria sono uniche Gli ambienti devono essere gestiti da una sola macchina, utilizzando la memoria del sistema Soluzione: gestione della memoria a pila (stack) Struttura dati LIFO (Last In First Out) L invocazione di una funzione comporta l allocazione di nuova memoria In cima allo stack La stessa macchina esegue il sottoprogramma Utilizzando i dati presenti nella pila Quando termina l esecuzione del sottoprogramma la memoria del suo ambiente può essere recuperata L ambiente puo essere rimosso dalla pila int x=0; int f1(int p){ return p+x; void f2(){ printf( %d,f1(x)); main(){ f2(); Ambiente globale Ambiente main f1() Ambiente f2() f1() Ambiente f1()
24 Il blocco Può comparire ovunque la sintassi consenta un 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 blocco, ma non annidati tra loro
25 Esempio int g1, g2; char g3; int f1(int par1, int par2); main(){ int a, b; int f2(int par3, int par1); if(a==0){ char a, c;... while(a==0){ float a;... /* Fine blocco2 */ /* Fine blocco1 */ /* Fine main */ int f1(int par1, int par2) { int d; { int e; g1, g2, g3 a, b a, c a par1, par2, d e main blocco1 blocco2 f1 blocco3... /* Fine blocco3 */ if(d==0){ int d;... /* Fine blocco4 */ /* Fine f1 */ int f2(int par3, int par4) { int f;... /* Fine f2 */ d par3, par4, f blocco4 f2
26 Ambiti di visibilità Con il termine visibile intendiamo che un elemento (variabile, funzione, ): può essere visto, cioè usato e referenziato tramite il suo identificatore valutato in un espressione usato nella parte sinistra di un assegnamento... Regole di visibilità: Gli elementi dichiarati nella parte dichiarativa globale: Sono visibili da tutte le funzioni (incluso main e procedure) e i blocchi del programma Gli identificatori predefiniti del linguaggio si intendono dichiarati nella parte dichiarativa globale Gli elementi dichiarati nella parte dichiarativa locale a una funzione Sono visibili dalle istruzioni del suo corpo, inclusi i blocchi Gli elementi dichiarati nella parte dichiarativa locale a un blocco Sono visibili dalle istruzioni del blocco (es. anche dai eventuali blocchi interni) Deroga (mascheramento): la dichiarazione di un elemento in una funzione o blocco maschera eventuali entità omonime più esterne
27 Vita delle variabili Va dalla creazione (allocazione della memoria) alla distruzione (rilascio della memoria deallocata) Esistono due classi di variabili: Statiche allocate una sola volta e distrutte al termine dell esecuzione del programma lo sono quelle globali fungono da canali di comunicazione tra funzioni Esistono anche variabili di funzione o blocco dichiarabili static ignoreremo in questo corso Dinamiche Vengono create e distrutte dinamicamente implicitamente dal sistema automatiche) (automatiche o esplicitamente dal programmatore, con appositi costrutti
28 Variabili automatiche Le variabili automatiche sono: create quando il flusso di esecuzione entra nel loro ambito di visibilità distrutte all uscita da tale ambito dichiarate nelle funzioni (inclusi parametri) e nei blocchi Nota: le variabili automatiche appartenenti a blocchi o funzioni eseguiti più volte: Sono allocate di volta in volta in celle differenti non vengono conservati i valori prodotti da precedenti esecuzioni della funzione o blocco
29 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 ritornare un risultato) Esempi: stampare un elenco di fatture ordinare un array di interi leggere gli elementi di una tabella Per fare ciò, si può definire una funzione che ritorna il tipo predefinito void La dichiarazione void del tipo del risultato può essere trascurata in questo caso
30 Esempio int search (Tabella t, int k) { void int display(tabella n; int result t) = {-1; #include <stdio.h> intfor(n j; = 0; n < t.actualsize; n++) #define SIZE 100 printf("ecco if (t.contents[n]==k) la tabella letta:\n"); //Dichiarazioni globali for(j = 0; result j < t.actualsize; = n; j++) typedef int array[size]; printf("%d return result; ", t.contents[j]); typedef struct { printf("\n"); int actualsize; array contents; Tabella; Tabella mytab; void display(tabella t); int search(tabella t, int k); main() { int i, pos, val; printf("dimensione della tabella (< %d): ", SIZE); scanf("%d", &mytab.actualsize); // no controllo for(i = 0; i < mytab.actualsize; i++) { printf("dammi un valore della tabella "); scanf("%d", &mytab.contents[i]); display(mytab); printf("dammi un valore da cercare in tabella "); scanf("%d", &val); pos = search(mytab, val); if (pos!=-1) printf("trovato in posizione %d\n", pos); else printf("valore non trovato in tabella!\n");
31 Ambiente globale e side effects Esiste un ambiente globale, cioè esterno a tutte le macchine che rappresentano le funzioni Nel nostro caso, contiene mytab Le macchine di main, display e search possono accedere a tale ambiente globale Se lo modificano, possono generare un effetto collaterale (side effect) In questo caso, l effetto dell esecuzione di una funzione non è più confinato all interno del suo ambiente, ma può interessare variabili che vengono utilizzate da altre funzioni Ma come si può modificare un parametro (visto che ne viene fatta una copia nell ambiente del chiamato)?
32 Inserimento in tabella (errato) void insert (Tabella t, int el) { if(t.actualsize < SIZE) { t.actualsize++; t.contents[actualsize-1] = el; Che succede nel caso della chiamata: insert(mytab,27);?
33 rametri ecnico Passaggio parametri per indirizzo Finora i sottoprogrammi hanno potuto restituire un valore modificare l ambiente globale a loro volta passare parametri per valore Il passaggio per indirizzo costituisce un altro modo per far ottenere degli effetti sul programma chiamante attraverso la chiamata di funzione
34 Ottenere modifiche del ecnico Ottenere modifiche del parametro attuale 1. Parametro formale definito di tipo puntatore al tipo del parametro attuale desiderato 2. All'atto della chiamata viene passato per indirizzo (usando &) il parametro attuale deve essere una variabile, non una generica espressione 3. Nel corpo della funzione viene usato l'operatore di dereferenziazione * per accedere al parametro attuale desiderato mediante il suo indirizzo
35 Inserimento in tabella (corretto)... //Definizione della procedura insert void insert (Tabella *t, int el) { if(t->actualsize < SIZE) { t->actualsize++; t->contents[actualsize-1] = el;... int elem = 27;... //invocazione insert(&mytab, elem);...
36 Modello di esecuzione mytab actualsize t content elem el Ambiente di main Ambiente di insert
37 Esempio: ecnico scambio dei valori di due interi void swap (int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp;... int a=10, b=20;... //invocazione swap(&a,&b); Effetto collaterale: Effetto collaterale: il valore dei parametri cambia in seguito all invocazione della funzione Ciò non accade con le funzioni matematiche
38 Effetti collaterali Una funzione C, a differenza delle funzioni matematiche, può non limitarsi a calcolare un valore nel suo codominio Infatti: può modificare l ambiente globale può modificare i parametri di ingresso, se passati per indirizzo Gli effetti collaterali rendono il programma meno comprensibile!!!
39 Esempi int x = 1;... int fun(int par) { return (par + x);... x = fun(1); x = fun(1); /* ora x vale 2 */ /* ora x vale 3 */ int fun(int *par){ *par++; return *par;... int y, z=0; y = fun(&z); /* modifica z */
40 Array come parametrip Gli array vengono trattati in modo particolare quando vengono usati come parametro attuale: viene passato per valore l indirizzo di base dell array, cioè l indirizzo del primo elemento Nota: gli elementi dell array non vengono copiati Nota: nel parametro formale Il parametro formale viene quindi trattato come un puntatore al primo elemento dell array e quindi in pratica l array è passato per indirizzo
41 Esempi Date le seguenti istruzioni: typedef double TipoArray[100]; TipoArray pippo; double ris;... ris = sum(pippo); le seguenti forme di header sono equivalenti: double sum(tipoarray a); double sum(double *a); double sum(double a[]);
42 Esempio /* Moltiplica gli elementi di un vettore di reali; n rappresenta la posizione dell ultimo elemento da moltiplicare */ double mul(double a[], int n) { int i; double ris = 1.0; for(i = 0; i < n; i ++) ris *= a[i]; return ris;
43 Esempio Algoritmo di bubblesort per l ordinamento di un array: void bubblesort (int a[], size) { for (i=0; i<size-1; i++) //porta in posizione i il minimo in i..size-1 for (j=size-1; j>i; j--) if(a[j] < a[j-1]) swap(&a[j], &a[j-1]);
44 struct come parametri Si possono passare sia per valore che per indirizzo Il risultato di una funzione può essere di tipo struttura Nota: anche se contiene un campo array viene fatta copia sia all atto della chiamata che all atto del passaggio del risultato
45 Esempio #include <stdio.h> typedef struct { int tab[3]; boh; void fun(boh y, int x[]); main() { boh a, b; int j; for(j=0; j<3; j++) a.tab[j] = j; b = a; a.tab[0] = 3; Output: printf("%d %d %d\n", a.tab[0], a.tab[1], a.tab[2]); printf("%d %d %d\n", b.tab[0], b.tab[1], b.tab[2]); fun(b, b.tab); printf("%d %d %d\n", a.tab[0], a.tab[1], a.tab[2]); printf("%d %d %d\n", b.tab[0], b.tab[1], b.tab[2]); void fun(boh y, int x[]){ y.tab[0] = 10; x[2] = 100; printf("%d %d %d\n", y.tab[0], y.tab[1], y.tab[2]); printf("%d %d %d\n", x[0], x[1], x[2]);
46 Passaggio parametri: pro e contro Per valore copia inefficiente se parametro ingombrante parametro attuale e formale occupano zone distinte di memoria non permette di restituire un risultato al chiamante Per indirizzo si copia solo l'indirizzo parametro attuale e formale fanno riferimento alle stesse celle di memoria permette di restituire risultati al chiamante tipo proprietà Tempo e spazio necessari Rischio effetti collaterali Restituzione valore al chiamante per valore alti no no per indirizzo bassi si si
47 Procedure e funzioni È facile trasformare funzione in procedura, rappresentando il risultato come un parametro aggiuntivo, passato per indirizzo Ad esempio, la funzione int f(int p1) {... return risultato;... y = f(x); diventa una procedura void f(int p1, int *p2) {... *p2 = risultato;... f(x,&y);
Sottoprogrammi: motivazioni. Funzioni e procedure. Un esempio motivante. Un esempio motivante
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
DettagliFunzioni 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
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)
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
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
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
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,
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
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
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:
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
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
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;
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:
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
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
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
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
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
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
DettagliARRAY DI PUNTATORI. ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
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
Dettaglidefinisce un vettore di 4 puntatori a carattere (allocata memoria per 4 puntatori)!
" Non ci sono vincoli sul tipo degli elementi di un vettore " Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere (allocata
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
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
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliFondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
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
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
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
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
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
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
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
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
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
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
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
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
DettagliIl linguaggio C Funzioni e procedure
Il linguaggio C Funzioni e procedure modello cliente-servitore risultato Ambiente condiviso cliente servitore richiesta di servizio Sottoprogrammi Spesso può essere utile avere la possibilità di costruire
DettagliProcedure. istruzioni. Spesso puo essere utile avere la possibilita di costruire delle nuove istruzioni che risolvano parti specifiche di un problema.
Astrazioni funzionali: Procedure Funzioni e istruzioni semplici strutturate predefinite assegnamento input output break continue goto definite dall utente astrazioni funzionali: - funzioni - procedure
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 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
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
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
DettagliIn C i sottoprogrammi si realizzano attraverso le funzioni. Una funzione può essere vista come una scatola nera:
Modularizzazione Quando abbiamo a che fare con un problema complesso spesso lo suddividiamo in problemi più semplici che risolviamo separatamente, per poi combinare insieme le soluzioni dei sottoproblemi
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 si
DettagliDo...While() Break Continue Concetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Do...While() Break Continue Concetto di Funzione e Procedura METODI in Java Prof.Angela Bonifati 1 Istruzione while int vet1[] = new int[20]; int vet2[] = new int[20]; for(int
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
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
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
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
DettagliIstruzioni Condizionali
Istruzioni Condizionali Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it
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
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
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à
DettagliParametri Formali di una Funzione e Record di Attivazione
Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali
DettagliRecord di Attivazione
Record di Attivazione La macchina virtuale Record di attivazione di funzioni e procedure Record di attivazione 1 LA MACCHINA VIRTUALE DEL C MODELLO A TEMPO DI ESECUZIONE Aree di memoria: Area del codice
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 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
DettagliLE FUNZIONI PARTE II. Manuale linguaggio C
LE FUNZIONI PARTE II Manuale linguaggio C Principio di funzionamento int main(void) int x,y; /* leggi un numero compreso tra 50 e 100 e memorizzalo in x */ /* leggi un numero compreso tra 1 e 10 e memorizzalo
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%"
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
DettagliFondamenti di Informatica T. Linguaggio C: Stack e Ricorsione
Linguaggio C: Stack e Ricorsione 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
DettagliProgrammare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!
Programmare Hello1.c #include printf( \n Hello World! \n ); >> cc Hello1.c >> a.out Hello World! >> Hello1.c = file sorgente per scriverlo occorre un editor cc = compilatore per altri linguaggi
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
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
DettagliAllocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
DettagliFunzioni. Dott. R. Gori, Dott. A. Rama INFORMATICA 242AA a.a. 2011/12 pag. 1 Funzioni
Modularizzazione Quando abbiamo a che fare con un problema complesso spesso lo suddividiamo in problemi più semplici che risolviamo separatamente, per poi combinare insieme le soluzioni dei sottoproblemi
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
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,
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci
DettagliIl linguaggio C funzioni e puntatori
Salvatore Cuomo Il linguaggio C funzioni e puntatori Lezione n. 8 Parole chiave: Linguaggio C, procedure, funzioni. Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email
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
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
DettagliLezione 6: Array e puntatori
Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci
DettagliDefinizione di funzione. <tipo> <nome_funzione> (<lista_parametri>) { <definizioni di variabili> <istruzioni> }
Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è
DettagliVariabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free
Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in
DettagliC: primi elementi. Lezione 4
C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX
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
DettagliLaboratorio di Algoritmi e Strutture Dati. Esercizi
Laboratorio di Algoritmi e Strutture Dati Esercizi Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro 1 Operatori Indispensabili Ogni Classe che
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
DettagliLezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
DettagliProf. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Modularizzazione Quando abbiamo a che fare con un problema complesso spesso lo suddividiamo in problemi più semplici che risolviamo separatamente, per poi combinare insieme le soluzioni dei sottoproblemi
DettagliFunzioni in C. Architetture multi-componente
Funzioni in C Architetture multi-componente In generale, una applicazione informatica complessa è organizzata come insieme di componenti software che cooperano per raggiungere un fine comune. Ogni componente
DettagliFondamenti di Informatica 12. Linguaggio C -4
Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Fondamenti di Informatica 12. Linguaggio C -4 Strutture Dati
Dettagli- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);
Appello 12.09.2007-1- punti 15 (4+6+5) a) ctunes è un programma per la gestione di archivi musicali; serve per raccogliere informazioni riguardanti tutti i file musicali presenti su un computer e per creare
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
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
DettagliProcedure. Una procedura permette di dare un nome a una istruzione rendendola parametrica non denota un valore, quindi non c è tipo di ritorno void
Procedure Una procedura permette di dare un nome a una istruzione rendendola parametrica non denota un valore, quindi non c è tipo di ritorno void void p(int x) { float y = x * sin(0.75); In C, una procedura
DettagliElementi DI INFORMATICA. Linguaggio C
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Elementi DI INFORMATICA http://agile.diee.unica.it A.A. 2015/2016 Ing. Marco Ortu Diee, secondo piano Tel. 070-6755774 mail:
Dettaglivoid p(int x) { float y = x * sin(0.75); printf( %f, y); }
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return 2 + 3 * sin(0.75); } float f1(int x) { return 2 + x * sin(0.75); } E PROCEDURE Una procedura
Dettagli