You are on page 1of 8

Sottoprogrammi, funzioni

Il sottoprogramma :
Un insieme di istruzioni alle quale si assegna un nome
Si definisce una volta
Usabili pi volte

Una funzione un sottoprogramma che


restituisce un risultato.
Una procedura un sottoprogramma che non
restituisce un risultato.
Nel linguaggio
C esistono soltanto funzioni.
Slide 1

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Funzioni in C
Nel linguaggio C esistono soltanto funzioni,
le procedure si indicano con una funzione
che ritorna void.
Si deve definire:
Il tipo del risultato
Il nome della funzione
Il tipo e il nome dei parametri forniti alla
funzione
Le istruzioni che la compongono

Slide 2

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Funzioni in C (2)
Sintassi delle funzioni:
[tipo] nome_funzione ([parametri_funzione])
{
/*istruzioni_funzione*/
. . .
return [valore];
}

Slide 3

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Funzioni in C (2)
Se una funzione non ha parametri si usa
indicare void tra le parentesi per indicarlo
Se una funzione non restituisce nessun
valore:
Si indica void per il tipo del valore restituito
Si puo usare return senza nessun valore
Si puo non usare return (la funzione finisce
quando terminano le sue istruzioni)

E possibile dichiarare le funzioni prima di


definirle:
[tipo] nome_funzione ([parametri_funzione]);
Slide 4

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Somma due numeri


Esercizio: Funzione per la somma di due
numeri reali.
#include <stdio.h>
double somma(double a,double b)
{
return a+b;
}
void main()
{
char buf[80];
double x,y;
if (gets(buf)!=NULL) sscanf(%f %f,&x,&y);
printf(\n\nLa somma e:,somma(x,y));
}
Slide 5

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Visibilit delle variabili


Le variabili sono visibili soltanto nel blocco
in cui sono state dichiarate
Si possono dichiarare delle variabili fuori
da tutti i blocchi, le quale diventano
variabili globali, essendo accessibili da
tutte le funzioni definite dopo la loro
dichiarazione

Slide 6

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Visibilit delle variabili (2)


Esempio:
int x;
void funzione1(int y,int o)
{int t,k;
...}
void main (void)
{int j,l;
...
}
Visibilit x: funzione1 e main
Visibilit t: funzione1
Visibilit j: main
Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Slide 7

Visibilit delle variabili (3)


Le variabili locali di una funzione vengono
fisicamente cancellate alla fine
dellesecuzione della funzione e vengono
ricreate al successivo appello della
funzione
I parametri possono essere considerati
come variabili locali
Si possono utilizzare delle variabili statiche
che non perdono il valore tra i diversi
appelli della funzione:
static int i;
Slide 8

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Passaggio dei parametri


I parametri delle funzioni nel linguaggio C
sono passati per valore tra il programma
chiamante e la funzione chiamata:
Si realizza una copia del valore che si vuole
passare in una zona di memoria accessibile
soltanto alla funzione
La funzione opera sulla copia, eventualmente
modificandola
Alla fine della funzione la copia viene distrutta
Nessun cambiamento viene effettuato sul
valore originale
Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Slide 9

Passaggio per valore (1)


Esempio 1:
void quadrato(int x)
{
x=x*x;
printf(\nIl valore di x: %d,x);
}
void main (void)
{int i=10;
printf(\nIl valore iniziale di i: %d,i);
quadrato(i);
printf(\nIl valore finale di i: %d,i);
}
Il valore iniziale di i: 5
Il valore di x: 25
Il valore finale di i: 5
Slide 10

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Passaggio per valore (2)


Esempio 2:
int quadrato(int x)
{
x=x*x;
printf(\nIl valore di x: %d,x);
}
void main (void)
{int i=10;
printf(\nIl valore iniziale di i: %d,i);
i=quadrato(i);
printf(\nIl valore finale di i: %d,i);
}
Il valore iniziale di i: 5
Il valore di x: 25
Il valore finale di i: 25
Slide 11

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Passaggio per valore (3)

Eccezione: per le variabili


multidimensionali (vettori e matrici) non si
realizza una copia della variabile, ma si
lavora direttamente sulla variabile

Slide 12

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Passaggio per referenza


Se il risultato di una funzione un solo
dato semplice, possibile restituirlo con
return.
Se i risultati sono tanti o sono dati
strutturati, necessario agire direttamente
sui parametri, per restituire alcuni dei
risultati nei parametri.
In questo caso necessario trasmettere
come parametro non la variabile ma un
riferimento (il suo indirizzo in memoria).
Slide 13

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Passaggio per referenza (2)


Si indica quando si definisce (dichiara) la
funzione indicando di fronte al nome del
parametro lasterisco *, rispettivamente
allappello si mette loperatore & per
ottenere lindirizzo di memoria della
variabile.
Si pu utilizzare soltanto con delle variabili
(perch hanno un indirizzo di memoria).
Dentro i calcoli della funzione si utilizza
*parametro invece del solo parametro
Slide 14

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Passaggio per referenza (3)


Esempio :
void quadrato(int *x)
{
*x=*x*(*x);
printf(\nIl valore di x: %d,*x);
}
void main (void)
{int i=10;
printf(\nIl valore iniziale di i: %d,i);
quadrato(&i);
printf(\nIl valore finale di i: %d,i);
}
Il valore iniziale di i: 5
Il valore di x: 25
Il valore finale di i: 25
Slide 15

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

Problemi
1. Scrivere una funzione che calcoli il
fattoriale di un numero.
2. Scrivere una funzione che calcoli Cnk in
due modi diversi (direttamente ed usando
la funzione dal problema 1).
3. Scrivere una funzione che determina se
un numero primo o meno.

Slide 16

Fondamenti Informatica II
Bota Florin Mircea bota@ol-tutor.polito.it

You might also like