Funzioni in C. Architetture multi-componente

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Funzioni in C. Architetture multi-componente"

Transcript

1 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 fornisce servizi ad altri componenti, e usa i servizi forniti da altri componenti. Quali modelli per costruire una architettura multi-componente? Quali astrazioni, quali modelli per costruire i singoli componenti? Fondamenti di Informatica 2 Quali protocolli di comunicazione fra componenti? 1

2 Modello cliente/servitore Un modello molto generale per impostare un architettura a componenti è il cosiddetto modello "cliente/servitore". ogni componente fornisce servizi ad altri componenti E UN SERVITORE per essi e usa i servizi forniti da altri componenti E UN CLIENTE di servizi altrui Fondamenti di Informatica 3 Modello cliente/servitore Servitore: Un qualunque ente computazionale capace di nascondere la propria organizzazione interna presentando ai clienti una precisa interfaccia per lo scambio di informazioni Cliente: qualunque ente in grado di invocare uno o più servitori per svolgere il proprio compito Cliente controllo e informazione Servitore Ambiente condiviso Fondamenti di Informatica 4 2

3 Modello cliente/servitore Un servitore può: servire molti clienti oppure costituire la risorsa privata di uno specifico cliente in particolare: può servire un cliente alla volta, in sequenza, oppure più clienti per volta, in parallelo trasformarsi a sua volta in cliente, invocando altri servitori o anche se stesso essere passivo o attivo Fondamenti di Informatica 5 Comunicazione cliente/servitore Lo scambio di informazioni tra un cliente e un servitore può avvenire in modo esplicito tramite le interfacce stabilite dal servitore in modo implicito tramite aree-dati accessibili ad entrambi, ossia l ambiente condiviso Fondamenti di Informatica 6 3

4 Funzioni e procedure Funzione: È l astrazione del concetto di operatore (funzione o predicato) su un tipo di dato (primitivo o definito dall utente) Calcola un valore può comparire ovunque una espressione accetti un valore Procedura: È una astrazione della nozione di istruzione può comparire ovunque possa comparire una istruzione Fondamenti di Informatica 7 Funzioni Una funzione èun componente software che cattura l idea matematica di funzione: f: A x B x x Q S molti possibili ingressi (che non vengono modificati) una sola uscita (il risultato) Una funzione: riceve dati di ingresso in corrispondenza ai parametri ha come corpo una espressione, la cui valutazione fornisce un risultato denota un valore tramite il suo nome Fondamenti di Informatica 8 4

5 Funzioni come servitori Una funzione è un servitore passivo che serve un cliente per volta che può trasformarsi in cliente invocando altre funzioni o se stessa Una funzione è un servitore dotato di nome che incapsula le istruzioni che realizzano un certo servizio Il cliente chiede al servitore di svolgere il servizio chiamando tale servitore (per nome) fornendogli le necessarie informazioni Nel caso di una funzione, cliente e servitore comunicano mediante l interfaccia della funzione Fondamenti di Informatica 9 Interfaccia di una funzione L interfaccia (o firma o signature o prototipo) di una funzione comprende nome della funzione lista dei parametri tipo del valore da essa denotato Esplicita il contratto di servizio fra cliente e servitore Cliente e servitore comunicano quindi mediante i parametri trasmessi dal cliente al servitore all atto della chiamata il valore restituito dal servitore al cliente Fondamenti di Informatica 10 5

6 Funzioni: esempio C int max (int x, int y ){ if (x>y) return x ; else return y; Il simbolo max denota il nome della funzione Le variabili intere x e y sono i parametri della funzione Il valore restituito è un intero int Fondamenti di Informatica 11 Comunicazione cliente/servitore Il cliente passa informazioni al servitore mediante una serie di parametri Parametri formali: sono specificati nella dichiarazione del servitore esplicitano il contratto fra servitore e cliente indicano che cosa il servitore si aspetta dal cliente Parametri attuali: sono trasmessi dal cliente all atto della chiamata devono corrispondere ai parametri formali in numero, posizione e tipo Fondamenti di Informatica 12 6

7 Funzioni: esempio parametri Parametri formali int max (int x, int y ){ if (x>y) return x ; else return main() y; { int z = 8; int m; m = max (z, 4); SERVITORE Definizione della funzione CLIENTE Chiamata della funzione Parametri attuali Fondamenti di Informatica 13 Comunicazione cliente/servitore Legame tra parametri attuali e parametri formali: effettuato al momento della chiamata, in modo dinamico Tale legame: vale solo per l invocazione corrente vale solo per la durata della funzione Fondamenti di Informatica 14 7

8 Esempio Parametri formali int max (int x, int y ){ if (x>y) return x ; else return y; main() { int z = 8; int m1, m2; m1 = max (z, 4); m2 = max (5, z); All atto di questa chiamata della funzione, si effettua un legame tra: x e z y e 4 Fondamenti di Informatica 15 Esempio Parametri formali int max (int x, int y ){ if (x>y) return x ; else return y; main() { int z = 8; int m1, m2; m1 = max (z, 4); m2 = max (5, z); All atto di questa chiamata della funzione, si effettua un legame tra: x e 5 y e z Fondamenti di Informatica 16 8

9 Information hiding La struttura interna (corpo) di una funzione è completamente inaccessibile dall esterno Così facendo si garantisce protezione dell informazione (information hiding) Una funzione è accessibile solo attraverso la sua interfaccia Fondamenti di Informatica 17 Definizione di funzione in C <definizione-di-funzione> ::= <tipovalore> <nome>(<parametri-formali>) { <corpo> La forma base è: return <espressione>; <parametri-formali> o una lista vuota: void o una lista di variabili (separate da virgole) visibili solo entro il corpo della funzione <tipovalore> deve coincidere con il tipo del valore restituito dalla funzione Fondamenti di Informatica 18 9

10 Definizione di funzione in C <definizione-di-funzione> ::= <tipovalore> <nome>(<parametri-formali>) { <corpo> La forma base è: return <espressione>; Nella parte corpo possono essere presenti definizioni e/o dichiarazioni locali (parte dichiarazioni) e un insieme di istruzioni (parte istruzioni) I dati riferiti nel corpo possono essere costanti, variabili, oppure parametri formali All'interno del corpo, i parametri formali vengono trattati come variabili Fondamenti di Informatica 19 Funzioni: nascita e morte All atto della chiamata, l esecuzione del cliente viene sospesa e il controllo passa al servitore Il servitore vive solo per il tempo necessario a svolgere il servizio Al termine, il servitore muore, e l esecuzione torna al cliente Fondamenti di Informatica 20 10

11 Chiamata di funzione La chiamata di funzione è un espressione della forma <nomefunzione> ( <parametri-attuali> ) dove: <parametri-attuali> ::= [ <espressione> ] {, <espressione> Fondamenti di Informatica 21 Funzioni: esempio Parametri formali int max (int x, int y ){ if (x>y) return x ; else return main() y; { int z = 8; int m; m = max (z, 4); SERVITORE Definizione della funzione CLIENTE Chiamata della funzione Parametri attuali Fondamenti di Informatica 22 11

12 Risultato di una funzione L istruzione return provoca la restituzione del controllo al cliente, unitamente al valore dell espressione che la segue Eventuali istruzioni successive alla return non saranno mai eseguite int max (int x, int y ){ if (x>y) return x ; else return y; Fondamenti di Informatica 23 Funzioni: esempio Parametri formali int max (int x, int y ){ if (x>y) return x ; else return y; main() { int z = 8; int m; m = max (z, 4); SERVITORE Definizione della funzione CLIENTE Chiamata della funzione Risultato Fondamenti di Informatica 24 12

13 Binding & environment return x; simbolo x devo sapere cosa denota il La conoscenza di che cosa un simbolo denota viene espressa da un legame (binding) tra il simbolo e uno o più attributi L insieme dei binding validi in (un certo punto di) un programma si chiama environment Fondamenti di Informatica 25 Esempio main() { int z = 8; int y, m; y = 5; m = max (z, y); In questo environment il simbolo z è legato al valore 8 tramite l inizializzazione, mentre il simbolo y è legato al valore 5. Pertanto i parametri di cui la funzione max ha bisogno per calcolare il risultato sono noti all atto dell invocazione Fondamenti di Informatica della funzione 26 13

14 Esempio main() { int z = 8; int y, m; m = max (z, y); In questo environment il simbolo z è legato al valore 8 tramite l inizializzazione, mentre il simbolo y non è legato ad alcun valore. Pertanto i parametri di cui la funzione max ha bisogno per calcolare il risultato non sono noti all atto dell invocazione della funzione e la funzione non può essere valutata correttamente Fondamenti di Informatica 27 Scope e scope-rules Tutte le occorrenze di un nome nel testo di un programma a cui si applica un dato binding si dicono essere entro la stessa portata o scope del binding Le regole in base a cui si stabilisce la portata di un binding si dicono regole di visibilità o scope rules Fondamenti di Informatica 28 14

15 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: main() { int z = 8; int m; m = max(2*z, 13); Valutazione del simbolo z nell environment corrente z vale 8 Fondamenti di Informatica 29 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: main() { int z = 8; int m; m = max(2*z, 13); Calcolo dell espressione 2*z nell environment corrente 2*z vale 16 Fondamenti di Informatica 30 15

16 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: main() { int z = 8; int m; m = max(2*z, 13); Invocazione della chiamata a max con parametri attuali 16 e 13 Il controllo passa al servitore Fondamenti di Informatica 31 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: Viene effettuato il legame dei parametri formali x e y con quelli attuali 16 e 13 Inizia l esecuzione del servitore main() { int z = 8; int m; m = max(2*z, 13); Fondamenti di Informatica 32 16

17 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: Viene valutata l istruzione condizionale (16>13) che nell environment corrente èvera Pertanto si sceglie la strada return x main() { int z = 8; int m; m = max(2*z, 13); Fondamenti di Informatica 33 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: Il valore 16 viene restituito al cliente Il servitore termina ed il controllo passa al cliente NOTA: i binding di x e y vengono distrutti main() { int z = 8; int m; m = max(2*z, 13); Fondamenti di Informatica 34 17

18 Esempio Il servitore int max (int x, int y ){ if (x>y) return x ; else return y; e un possibile cliente: main() { int z = 8; int m; m = max(2*z, 13); Il valore restituito (16) viene assegnato alla variabile m nell environment del cliente Fondamenti di Informatica 35 Riassumendo All atto dell invocazione di una funzione: si crea una nuova attivazione (istanza) del servitore si alloca la memoria per i parametri (e le eventuali variabili locali) si trasferiscono i parametri al servitore si trasferisce il controllo al servitore si esegue il codice della funzione Fondamenti di Informatica 36 18

19 Passaggio dei parametri In generale, un parametro può essere trasferito dal cliente al servitore: per valore o copia (by value) si trasferisce il valore del parametro attuale per riferimento (by reference) si trasferisce un riferimento al parametro attuale Fondamenti di Informatica 37 Passaggio per valore Si trasferisce una copia del valore del parametro attuale z 45 cliente Fondamenti di Informatica 38 19

20 Passaggio per valore Si trasferisce una copia del valore del parametro attuale Valore (copiato) di z z 45 copia 45 w cliente istanza del servitore servitore Ogni azione fatta su w è locale al servitore Fondamenti di Informatica 39 Passaggio per riferimento Si trasferisce un riferimento al parametro attuale z 45 cliente Fondamenti di Informatica 40 20

21 Passaggio per riferimento Si trasferisce un riferimento al parametro attuale Riferimento a z (indirizzo) z 45 cliente α riferimento α istanza del servitore servitore Fondamenti di Informatica 41 w Ogni azione fatta su w è in realtà fatta sulla variabile z del cliente Passaggio dei parametri in C In C, i parametri sono trasferiti sempre e solo per valore (by value) si trasferisce una copia del parametro attuale, non l originale tale copia è strettamente privata e locale a quel servitore il servitore potrebbe quindi alterare il valore ricevuto, senza che ciò abbia alcun impatto sul cliente Fondamenti di Informatica 42 21

22 Passaggio dei parametri in C In C, i parametri sono trasferiti sempre e solo per valore (by value) Conseguenza: è impossibile usare un parametro per trasferire informazioni verso il cliente per trasferire un informazione al cliente si sfrutta il valore di ritorno della funzione Fondamenti di Informatica 43 Passaggio dei parametri in C Limiti: consente di restituire al cliente solo valori di tipo (relativamente) semplice non consente di restituire collezioni di valori non consente di scrivere componenti software il cui scopo sia diverso dal calcolo di una espressione Fondamenti di Informatica 44 22

23 Passaggio dei parametri Molti linguaggi mettono a disposizione il passaggio per riferimento (by reference) non si trasferisce una copia del valore del parametro attuale si trasferisce un riferimento al parametro, in modo da dare al servitore accesso diretto al parametro in possesso del cliente il servitore accede e modifica direttamente il dato del cliente Fondamenti di Informatica 45 Passaggio dei parametri in C Il C non supporta direttamente il passaggio per riferimento è una grave mancanza il C lo fornisce indirettamente solo per alcuni tipi di dati quindi, occorre costruirselo quando serve. (vedremo più avanti come) Fondamenti di Informatica 46 23

24 Procedure Una procedura è un componente software che cattura l idea di macro-istruzione molti possibili parametri, che possono anche essere modificati mentre nelle funzioni normalmente non devono essere modificati nessun valore di uscita esplicito Fondamenti di Informatica 47 Procedure come servitori Come una funzione, una procedura è un servitore: passivo che serve un cliente per volta che può trasformarsi in cliente invocando se stessa o altre procedure In C, una procedura ha la stessa struttura di una funzione, salvo il tipo di ritorno che è void In realtà infatti, in C non esistono procedure ma solo funzioni Fondamenti di Informatica 48 24

25 Procedure: esempio void ScriviMsg(char s[]){ printf( Funzione ScriviMsg: %s, s); return; main(){ char saluto[]= Ciao a tutti ; ScriviMsg(saluto); ScriviMsg( Fine ); Fondamenti di Informatica 49 Procedure L istruzione return provoca solo la restituzione del controllo al cliente e non è seguita da una espressione da restituire quindi non è necessaria se la procedura termina spontaneamente a fine blocco Nel caso di una procedura, non esistendo valore di ritorno, cliente e servitore comunicano solo: mediante parametri mediante aree dati globali Occorre il passaggio per riferimento per fare cambiamenti permanenti ai dati del cliente Fondamenti di Informatica 50 25

26 Esempio Perché il passaggio per valore non basta? Problema: scrivere una procedura che scambi i valori di due variabili intere Specifica: Dette A e B le due variabili, ci si può appoggiare a una variabile ausiliaria T, e svolgere lo scambio in tre fasi Frammento di codice: int a,b,t; t = a; a = b; b = t; Fondamenti di Informatica 51 Esempio Supponendo di utilizzare, senza preoccuparsi, il passaggio per valore usato finora, la codifica potrebbe essere espressa come segue: void scambia(int a, int b) { int t; t = a; a = b; b = t; return; /* può essere omessa */ Fondamenti di Informatica 52 26

27 Esempio Il cliente invocherebbe quindi la procedura così: main(){ int y = 5, x = 33; scambia(x, y); /* ora dovrebbe essere x=5, y=33... MA NON È VERO */ Perché non funziona? Fondamenti di Informatica 53 Esempio: cosa è successo? La procedura ha effettivamente scambiato i valori di A e B al suo interno ma questa modifica non si è propagata al cliente, perché sono state scambiate le copie locali alla procedura, non gli originali al termine della procedura, le sue variabili locali sono state distrutte, quindi nulla è rimasto del lavoro svolto dalla procedura Fondamenti di Informatica 54 27

28 Esempio: cosa è successo? Ogni azione fatta su a e b è strettamente locale al servitore. Quindi a e b vengono scambiati, ma quando il servitore termina, tutto scompare di a e b Valori (copiati) x y copia a b cliente servitore Fondamenti di Informatica 55 Passaggio dei parametri in C Il C adotta sempre il passaggio per valore! È sicuro: le variabili del cliente e del servitore sono disaccoppiate ma non consente di scrivere componenti software il cui scopo sia diverso dal calcolo di una espressione Per superare questo limite occorre il passaggio per riferimento (by reference) Fondamenti di Informatica 56 28

29 Passaggio per riferimento Il passaggio per riferimento (by reference): non trasferisce una copia del valore del parametro attuale ma un riferimento al parametro, in modo da dare al servitore accesso diretto al parametro in possesso del cliente il servitore, quindi, accede direttamente al dato del cliente e può modificarlo Fondamenti di Informatica 57 Passaggio dei parametri in C Il C non supporta direttamente il passaggio per riferimento è una grave mancanza il C lo fornisce indirettamente solo per alcuni tipi di dati quindi, occorre costruirselo quando serve (adesso vediamo come) Fondamenti di Informatica 58 29

30 Passaggio per riferimento Si trasferisce un riferimento ai parametri attuali (cioè i loro indirizzi) x y 33 5 cliente Fondamenti di Informatica 59 Passaggio per riferimento Ogni azione fatta su a e b, in realtà è fatta su x e y nell environment del cliente Riferimenti a x e y (indirizzi) x y 33 5 α β riferimento riferimento α β a b cliente servitore Fondamenti di Informatica 60 30

31 Passaggio per riferimento Quindi, scambiando a e b, in realtà si scambiano x e y Riferimenti a x e y (indirizzi) x y 5 33 α β riferimento riferimento α β a b cliente servitore Fondamenti di Informatica 61 Realizzare il passaggio per riferimento in C Il C non fornisce direttamente un modo per attivare il passaggio per riferimento -> a volte occorre costruirselo È possibile costruirlo? Come? Poiché passare un parametro per riferimento comporta la capacità di manipolare indirizzi di variabili gestire il passaggio per riferimento implica la capacità di accedere, direttamente o indirettamente, agli indirizzi delle variabili Fondamenti di Informatica 62 31

32 Realizzare il passaggio per riferimento in C In particolare occorre essere capaci di: ricavare l indirizzo di una variabile dereferenziare un indirizzo di variabile, ossia recuperare il valore dato l indirizzo della variabile Nei linguaggi che offrono direttamente il passaggio per riferimento, questi passi sono effettuati in modo trasparente all utente In C il programmatore deve conoscere gli indirizzi delle variabili e quindi accedere alla macchina sottostante Fondamenti di Informatica 63 Indirizzamento e dereferencing Ricordiamoci che il C offre a tale scopo due operatori, che consentono di: ricavare l indirizzo di una variabile operatore estrazione di indirizzo & dereferenziare un indirizzo di variabile operatore di dereferenziamento * Fondamenti di Informatica 64 32

33 Indirizzamento e dereferencing: richiami Se x è una variabile, &x denota l indirizzo in memoria di tale variabile: &x α Se α è l indirizzo di una variabile, * α denota tale variabile: x *α Fondamenti di Informatica 65 Indirizzamento e dereferencing: richiami Livello di astrazione del linguaggio di alto livello Livello di astrazione della macchina fisica sottostante x α variabile cella di memoria Fondamenti di Informatica 66 33

34 Realizzare il passaggio per riferimento in C il cliente deve passare esplicitamente gli indirizzi il servitore deve prevedere esplicitamente dei puntatori come parametri formali void scambia(int* a, int* b) { int t; t = *a; *a = *b; *b = t; main(){ int y=5, x=33; scambia(&x, &y); Fondamenti di Informatica 67 Osservazione Quando un puntatore è usato per realizzare il passaggio per riferimento, la funzione non dovrebbe mai alterare il valore del puntatore Quindi, se a e b sono due puntatori: *a = *b SI a = b NO In generale una funzione può modificare un puntatore, ma non è opportuno che lo faccia se esso realizza un passaggio per riferimento Fondamenti di Informatica 68 34

35 Comunicazione tramite environment globale Una procedura può anche comunicare con il cliente mediante aree dati globali: ad esempio, variabili globali Le variabili globali in C: sono allocate nell area dati globale (fuori da ogni funzione) esistono prima della chiamata del main sono inizializzate automaticamente a 0 salvo diversa indicazione possono essere nascoste in una funzione da una variabile locale omonima sono visibili, previa dichiarazione extern, in tutti i file dell applicazione Fondamenti di Informatica 69 Esempio Esempio: Divisione intera x/y con calcolo di quoziente e resto. Occorre calcolare due valori che supponiamo di mettere in due variabili globali Variabili globali quoziente int quoziente, int resto; e resto visibili in tutti i blocchi void dividi(int x, int y) { resto = x % y; quoziente = x/y; main(){ dividi(33, 6); printf( %d%d, quoziente,resto); Il risultato è disponibile per il cliente nelle variabili globali quoziente e resto Fondamenti di Informatica 70 35

36 Esempio Esempio: Divisione intera x/y con calcolo di quoziente e resto. Con il passaggio dei parametri per indirizzo avremmo il seguente codice. Non ho più variabili globali void dividi(int x, int y, int *quoziente, int *resto) { *resto = x % y; *quoziente = x/y; main(){ int k=33, h=6, quoz, rest; int *pq= &quoz, *pr = &rest; dividi(k, h, pq, pr); printf( %d%d, quoz,rest); Il risultato è disponibile per il cliente nelle variabili quoz e rest di cui ho passato l indirizzo Fondamenti di Informatica 71 Progetto di una funzione Scegliere un nome significativo per la funzione La funzione deve ricevere qualche dato dalla funzione chiamante? Se sì, elencare ed identificare tutti i tipi di dato da passare alla funzione (lista dei parametri) Se no, la lista dei parametri è void La funzione deve restituire un valore alla funzione chiamante? Se sì, identificare il tipo di dato Se no, il tipo di ritorno della funzione è void La funzione deve restituire più di un valore alla funzione chiamante? Se sì, bisogna inserire nella lista dei parametri dei parametri passati esplicitamente per riferimento cioè dei puntatori Fondamenti di Informatica 72 36

37 Progetto di una funzione: lista dei parametri Parametri formali: argomenti dichiarati nella definizione di funzione Devono essere variabili: Non appena l ambiente della funzione chiamata viene attivato, i parametri formali vengono dichiarati (come variabili locali all ambiente della funzione) ed inizializzati al valore del corrispondente parametro attuale La corrispondenza tra parametri formali ed attuali è sia posizionale sia di tipo. Ovvero si presume che la lista dei parametri formali e la lista dei parametri attuali abbia lo stesso numero e tipo di elementi I nomi dei parametri attuali e formali non hanno importanza. Possono essere gli stessi o diversi. L importante è la posizione ed il valore che assume un parametro attuale al momento della chiamata Fondamenti di Informatica 73 Progetto di una funzione: lista dei parametri Parametri attuali: argomenti inseriti al momento della chiamata di funzione Possono essere espressioni (costanti, variabili, espressioni aritmetiche, ) di qualunque tipo, purchè compatibile con il corrispondente tipo del parametro formale Attenzione: in corrispondenza di un parametro passato per riferimento (puntatore) bisogna inserire un indirizzo di variabile Fondamenti di Informatica 74 37

38 #include <stdio.h> /*calcola il massimo fra a e b) */ int massimo (int a, int b) { if (a > b) return a; return b; /*stampa un intero*/ void print_int (int a) { printf( %d\, a); return; /*stampa stringa Ciao */ void dummy() {printf( Ciao ); main(){ int A, B; printf( Dammi A e B ); scanf(%d %d, &A, &B); print_int(massimo(a,b); dummy(); Fondamenti di Informatica 75 Alcune regole Tipo funzione la funzione può essere di un tipo semplice cioè: void, float, double, int, char o puntatore. Se all interno di un blocco viene utilizzata una funzione la definizione deve comparire prima del blocco che l utilizza #include <stdio.h> int massimo (int a, int b){ if (a > b) return a; return b; int sommamax (int a1, int a2, int a3, int a4) { return (massimo(a1, a2) + massimo(a3, a4); main(){ int A, B, C, D; scanf(%d %d %d %d, &A, &B, &C, &D); printf( %d\n, sommamax(a,b,c,d); Fondamenti di Informatica 76 38

39 #include <stdio.h> main() { int A, B; scanf(%d %d, &A, &B ); printf( %d\n, massimo(a,b); int massimo (int a, int b) { if(a > b) return a; return b; In questo caso il compilatore segnala un errore in corrispondenza della chiamata massimo(a,b) Fondamenti di Informatica 77 Definizione di un prototipo Descrive la proprietà della funzione senza definirne la realizzazione. Serve per anticipare le caratteristi-che di una funzione definita successivamente. <tipo> <nome_funzione> (<argomenti>) ; #include <stdio.h> int massimo (int a, int b); main(){ int A, B; scanf(%d %d, &A, &B ); printf( %d\n, massimo(a,b); int massimo (int a, int b){ if (a > b) return a; return b; Fondamenti di Informatica 78 39

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

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli

Una procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi " non c#è tipo di ritorno!

Una procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi  non c#è tipo di ritorno! 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 ) { = * 2; printf( %d, ); Una procedura è un componente

Dettagli

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri Funzioni (Passaggio dei parametri per riferimento) Passaggio dei parametri Per passaggio dei parametri si intende l associazione fra parametri attuali e parametri formali che avviene al momento della chiamata

Dettagli

Tempo di vita e scope delle variabili

Tempo di vita e scope delle variabili Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):

Dettagli

PROCEDURE. Una procedura permette di. void p(int x) { x = x * 2; printf( %d, x); }

PROCEDURE. Una procedura permette di. void p(int x) { x = x * 2; printf( %d, x); } 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) { x = x * 2; printf( %d, x); } 1 PROCEDURE

Dettagli

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3) Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di

Dettagli

Strategie di programmazione

Strategie di programmazione Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie

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

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

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

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

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

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

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

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Puntatori a funzioni 1 Funzioni che restituiscono puntatori Il valore di ritorno restituito da una funzione può essere di qualsiasi tipo, compreso il tipo puntatore.

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Fondamenti di Informatica T. Linguaggio C: le Funzioni

Fondamenti di Informatica T. Linguaggio C: le Funzioni Linguaggio C: le Funzioni Sottoprogrammi Spesso può essere utile avere la possibilità di costruire nuove istruzioni, o nuovi operatori che risolvano parti specifiche di un problema: Un sottoprogramma permette

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

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Capitolo 5 - Funzioni

Capitolo 5 - Funzioni Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

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

per costruire specifici componenti software

per costruire specifici componenti software VARIABILI LOCALI & Come è noto, in C le variabili possono essere: locali, se definite dentro a una funzione (inclusi i parametri) tempo di vita = l attivazione della funzione visibilità = entro la funzione

Dettagli

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;

Dettagli

Visibilità e tempo di vita delle variabili. (più sintesi di alcuni concetti della prima parte del corso)

Visibilità e tempo di vita delle variabili. (più sintesi di alcuni concetti della prima parte del corso) Visibilità e tempo di vita delle variabili (più sintesi di alcuni concetti della prima parte del corso) Struttura dei programmi C/C++ Un programma C/C++ deve essere contenuto in uno o più file (per ora

Dettagli

Il C nel C++: Funzioni

Il C nel C++: Funzioni Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma

Dettagli

I puntatori (richiamo)

I puntatori (richiamo) I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso

Dettagli

Introduzione ai puntatori in C Definizione

Introduzione ai puntatori in C Definizione Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il

Dettagli

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Unità Didattica 3 Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa

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

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

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Linguaggio C I puntatori

Linguaggio C I puntatori FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C I puntatori 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016

Dettagli

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

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali

Dettagli

Puntatori (in C) Emilio Di Giacomo

Puntatori (in C) Emilio Di Giacomo Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

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

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Verso i puntatori: Cosa è una variabile?

Verso i puntatori: Cosa è una variabile? Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per

Dettagli

14 - Metodi e Costruttori

14 - Metodi e Costruttori 14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

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

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma. Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti

Dettagli

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere: Metodi Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere: invocazione: esecuzione di un metodo assegnamento: cambia lo stato di un campo ripetizione:

Dettagli

Strutture Dati Dinamiche

Strutture Dati Dinamiche Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

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

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

Array e puntatori in C

Array e puntatori in C Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di

Dettagli

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013 Laboratorio Progettazione Web Le funzioni in PHP Angelica Lo Duca IIT-CNR angelica.loduca@iit.cnr.it 2012/2013 Funzioni Una funzione è una sequenza di istruzioni che implementano una specifica funzionalità

Dettagli

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR 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 http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

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

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

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime

Dettagli

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22 Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)

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

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

Java: Definire Classi e Creare Oggetti

Java: Definire Classi e Creare Oggetti Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 21 marzo 2014 Introduzione Programmare con gli Oggetti Un programma Java è costituito

Dettagli

Struttura dei programmi C

Struttura dei programmi C Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte

Dettagli

Istruzioni decisionali

Istruzioni decisionali Istruzioni decionali 1. if 2. if-else 3. switch 115 switch Struttura di scelta plurima che controlla se una espresone assume un valore all interno di un certo ineme di costanti e comporta di conseguenza

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Introduzione. Le funzioni in C. Funzioni. Cosa succede

Introduzione. Le funzioni in C. Funzioni. Cosa succede Introduzione Le funzioni in C DD Cap.5 pp.131-160 KP Cap.5 pp. 175-199 La maggior parte dei programmi scritti per risolvere problemi sono (molto!) più lunghi di quelli visti fin ora. Il modo migliore per

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

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti Lezione 6 Visibilità degli identificatori e tempo di vita degli oggetti Programmazione I Paolo Valente - 2009/2010 Ripasso dichiarazioni oggetti Finora abbiamo scritto le dichiarazioni di variabili e costanti

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Sottoprogrammi Parte 2 (a) Sintassi e Semantica versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina)

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Lezione 8. Sottoprogrammi

Lezione 8. Sottoprogrammi Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in

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

Informatica 3. LEZIONE 2: Sintassi e semantica

Informatica 3. LEZIONE 2: Sintassi e semantica Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli

Funzioni. (Dichiarazione, Prototipo, Chiamata) Concetto di funzione

Funzioni. (Dichiarazione, Prototipo, Chiamata) Concetto di funzione Funzioni (Dichiarazione, Prototipo, Chiamata) Concetto di funzione L astrazione di funzione è presente in tutti i linguaggi di programmazione di alto livello. Una funzione è un componente software che

Dettagli

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi MASTER Information Technology Excellence Road (I.T.E.R.) Programmare in C Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di Dati Valori Un insieme

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

Debug di un programma

Debug di un programma Debug di un programma Col termine Debug si intende una fase di sviluppo del software, nella quale si cerca di eliminare gli errori dal programma Due tipi di errori: Errori sintattici, rilevati sempre dal

Dettagli

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione Informatica 3 Informatica 3 LEZIONE 2: Sintassi e semantica Lezione 2- Modulo 1 Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4:

Dettagli

Puntatori. Fondamenti di Programmazione

Puntatori. Fondamenti di Programmazione Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale

Dettagli

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. Puntatori I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. NOTA: quando un programma viene mandato in esecuzione, ad esso viene assegnata un area di memoria di lavoro

Dettagli

La gestione dei caratteri in C

La gestione dei caratteri in C in C In C i caratteri sono gestiti mediante variabili di tipo char (interi a 8 bit) Ad ogni carattere corrisponde un codice numerico ASCII (American Standard Code for Information Interchange) Un esempio

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

La gestione della memoria dinamica Heap

La gestione della memoria dinamica Heap Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Tipi di dato semplici

Tipi di dato semplici Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma

Dettagli

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

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

Puntatori in C Lucidi della Pof.ssa Pazienza

Puntatori in C Lucidi della Pof.ssa Pazienza Puntatori in C Lucidi della Pof.ssa Pazienza http://www.uniroma2.it/didattica/foi2/ Puntatori L operatore di indirizzo & Indirizzi, puntatori Aritmetica dei puntatori L operatore di dereferenziazione *

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

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Uso di classi e oggetti Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Tipi di dati Tipi primitivi: interi Java fornisce otto tipi primitivi indipendenti dall implementazione

Dettagli

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile

Dettagli

Algoritmi e basi del C Struttura di un programma

Algoritmi e basi del C Struttura di un programma Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 17 Marzo 2015 Compitini Compitini di INFO: 24 Aprile 2015 4.15pm @ C.G.1 (Ed. 9) 21

Dettagli

Le funzioni in JavaScript. Modularizzazione

Le funzioni in JavaScript. Modularizzazione 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