Carlo Ghezzi, Gian Pietro Picco

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Carlo Ghezzi, Gian Pietro Picco"

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. 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

Dettagli

Funzioni e Procedure in C. Funzioni e Procedure in C

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

Dettagli

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;

int 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

Dettagli

Ottenere una modifica del parametro attuale

Ottenere 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)

Dettagli

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Scope 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

Dettagli

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

passaggio 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

Dettagli

Funzioni e procedure

Funzioni 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

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, 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,

Dettagli

Laboratorio 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 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

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, 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

Dettagli

Il passaggio parametri per indirizzo

Il 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:

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Linguaggio 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

Dettagli

Introduzione. per astrarre delle operazioni complesse

Introduzione. 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

Dettagli

Il linguaggio C. Puntatori e dintorni

Il 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;

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili 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:

Dettagli

LABORATORIO di INFORMATICA

LABORATORIO 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

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti 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

Dettagli

FUNZIONI E PROCEDURE IN C. Docente: Giorgio Giacinto AA 2009/2010. dall utente, sia predefiniti, il C consente di creare funzioni e procedure

FUNZIONI 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

Dettagli

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

FUNZIONI. 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

Dettagli

Il linguaggio C. Notate che...

Il 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

Dettagli

METODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi

METODI 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

Dettagli

ARRAY 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. 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

Dettagli

Passaggio dei parametri

Passaggio 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

Dettagli

definisce un vettore di 4 puntatori a carattere (allocata memoria per 4 puntatori)!

definisce 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

Dettagli

Introduzione al linguaggio C Funzioni

Introduzione 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

Dettagli

Introduzione al C. Lez. 2. Funzioni e Puntatori

Introduzione 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

Dettagli

Allocazione dinamica della memoria

Allocazione 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

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti 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

Dettagli

Tipi 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 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

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto 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

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non 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

Dettagli

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercizio 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

Dettagli

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Il 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

Dettagli

LB5 FUNZIONI cap. 7 del testo

LB5 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

Dettagli

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Funzioni 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

Dettagli

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014

DIPARTIMENTO 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

Dettagli

Passaggio dei parametri. Passaggio dei parametri

Passaggio 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

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI 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

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - 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

Dettagli

Corso di Informatica A.A

Corso 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

Dettagli

Il linguaggio C Funzioni e procedure

Il 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

Dettagli

Procedure. istruzioni. Spesso puo essere utile avere la possibilita di costruire delle nuove istruzioni che risolvano parti specifiche di un problema.

Procedure. 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

Dettagli

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet

Passaggio 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

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 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

Dettagli

Introduzione al C. Lez. 2 Funzioni e Puntatori

Introduzione 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

Dettagli

Esercizi. FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo. Funzioni

Esercizi. 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

Dettagli

In C i sottoprogrammi si realizzano attraverso le funzioni. Una funzione può essere vista come una scatola nera:

In 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

Dettagli

FUNZIONI: IL MODELLO A RUN-TIME

FUNZIONI: 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

Dettagli

Do...While() Break Continue Concetto di Funzione e Procedura METODI in Java

Do...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

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. 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

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi 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

Dettagli

Array k-dimensionali

Array 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

Dettagli

Funzioni in C. Fondamenti di Informatica. Daniele Loiacono

Funzioni 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

Dettagli

Istruzioni Condizionali

Istruzioni 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

Dettagli

FUNZIONI: IL MODELLO A RUN-TIME!

FUNZIONI: 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

Dettagli

Linguaggio 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. 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

Dettagli

Corso di Informatica Modulo T3 2 Ambiente locale e globale

Corso 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à

Dettagli

Parametri Formali di una Funzione e Record di Attivazione

Parametri 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

Dettagli

Record di Attivazione

Record 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

Dettagli

Il linguaggio C. Notate che...

Il 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

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 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

Dettagli

LE FUNZIONI PARTE II. Manuale linguaggio C

LE 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

Dettagli

Programmazione C. Funzioni e Procedure Call by value

Programmazione 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%"

Dettagli

Le funzioni: la dichiarazione

Le 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

Dettagli

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Le 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

Dettagli

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Fondamenti 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

Dettagli

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!

Programmare. 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

Dettagli

Le 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. 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

Dettagli

Linguaggio C: le funzioni. Introduzione e sintassi

Linguaggio 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

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Allocazione 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

Dettagli

Funzioni. Dott. R. Gori, Dott. A. Rama INFORMATICA 242AA a.a. 2011/12 pag. 1 Funzioni

Funzioni. 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

Dettagli

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Si 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,

Dettagli

Laboratorio di Informatica I

Laboratorio 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

Dettagli

Il linguaggio C funzioni e puntatori

Il 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

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione 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

Dettagli

Programmazione (imperativa)

Programmazione (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

Dettagli

Lezione 6: Array e puntatori

Lezione 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

Dettagli

Definizione di funzione. <tipo> <nome_funzione> (<lista_parametri>) { <definizioni di variabili> <istruzioni> }

Definizione 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 è

Dettagli

Variabili 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 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

Dettagli

C: primi elementi. Lezione 4

C: 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

Dettagli

Linguaggio C: le funzioni. Introduzione e sintassi

Linguaggio 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Laboratorio 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

Dettagli

Fondamenti di Informatica

Fondamenti 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

Dettagli

Lezione 8 Struct e qsort

Lezione 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

Dettagli

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Prof. 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

Dettagli

Funzioni in C. Architetture multi-componente

Funzioni 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

Dettagli

Fondamenti di Informatica 12. Linguaggio C -4

Fondamenti 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);

- 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

Dettagli

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014

DIPARTIMENTO 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

Dettagli

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA 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

Dettagli

Procedure. 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 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

Dettagli

Elementi DI INFORMATICA. Linguaggio C

Elementi 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:

Dettagli

void p(int x) { float y = x * sin(0.75); printf( %f, y); }

void 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