MORENO SARDELLA · CORSO BASE
← Tutte le lezioni
Lezione 5

LE FUNZIONI

Quando un programma cresce, conviene spezzarlo in pezzi più piccoli e riutilizzabili: le funzioni. Sono come le funzioni matematiche che già conosci.

01
L'idea

La funzione come black box

Una funzione è una scatola nera (black box): riceve dei dati in ingresso (i parametri), esegue al suo interno un compito e restituisce un risultato. A chi la usa non interessa come lavora dentro, ma solo cosa entra e cosa esce.

a = 3 b = 5 somma() ??? black box 8 parametri → risultato
I parametri entrano, il valore di ritorno esce: dentro la scatola, il "come" è nascosto.
02
Analogia

Come in matematica

In matematica scrivi f(x) = x²: dai un valore a x e ottieni f(x). Una funzione in C++ è esattamente questo: stesso input → stesso output, sempre.

Matematica

f(x) = x · x f(3) = 9 f(5) = 25

C++

int f(int x) { return x * x; } // f(3) vale 9, f(5) vale 25
x f(x) y = x²
La parabola di f(x) = x²: a ogni x corrisponde un solo valore.
03
Sintassi

Definire e richiamare

Una funzione ha un tipo di ritorno, un nome, dei parametri e un corpo con return. Si definisce prima del main e si richiama dove serve, anche più volte.

funzioni.cpp
// definizione
int quadrato(int n) {
    return n * n;        // restituisce il risultato
}

int main() {
    cout << quadrato(4);   // stampa 16 (richiamo)
    int r = quadrato(10);  // r = 100
    return 0;
}

Una funzione che non restituisce nulla ha tipo void (per esempio una che si limita a stampare). I parametri possono anche essere passati per riferimento (int &x) per modificare le variabili del chiamante: lo vedremo meglio con i puntatori.

Perché conviene — scrivere una funzione una volta sola evita di ripetere codice, rende il programma più leggibile e più facile da correggere: se c'è un errore, lo sistemi in un solo punto.
04
Esercizi

Gli esercizi

Base: funzioni che restituiscono un valore. Avanzati: funzioni con vettori, parametri per riferimento e ricorsione.

Funzioni — basescarica ↓
Funzioni — avanzatiscarica ↓
Soluzioni · Funzioni base
1 — Quadrato int quadrato(int n) { return n * n; }
2 — Somma int somma(int a, int b) { return a + b; }
3 — Massimo int massimo(int a, int b) { return (a > b) ? a : b; }
4 — Pari bool ePari(int n) { return n % 2 == 0; }
5 — Media float media(float a, float b, float c) { return (a + b + c) / 3; }
6 — Fattoriale int fattoriale(int n) { int f = 1; for (int i = 2; i <= n; i++) f *= i; return f; }
7 — Perimetro float perimetroRettangolo(float b, float h) { return 2 * (b + h); }
8 — Celsius in Fahrenheit float celsiusToFahrenheit(float c) { return c * 9 / 5 + 32; }
9 — E' primo bool ePrimo(int n) { if (n < 2) return false; for (int i = 2; i < n; i++) if (n % i == 0) return false; return true; }
10 — Potenza int potenza(int base, int esp) { int r = 1; for (int i = 0; i < esp; i++) r *= base; return r; }
Soluzioni · Funzioni avanzati
1 — Conta le cifre int contaCifre(int n) { if (n == 0) return 1; int c = 0; while (n > 0) { c++; n /= 10; } return c; }
2 — MCD int mcd(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; }
3 — Stampa tabellina void stampaTabellina(int n) { for (int i = 1; i <= 10; i++) cout << n*i << " "; }
4 — Massimo di un vettore int massimoVettore(int v[], const int N) { int m = v[0]; for (int i = 1; i < N; i++) if (v[i] > m) m = v[i]; return m; }
5 — Scambia (per riferimento) void scambia(int &a, int &b) { int t = a; a = b; b = t; }
6 — Riempi a caso void riempiCasuale(int v[], const int N, int mn, int mx) { for (int i = 0; i < N; i++) v[i] = rand() % (mx - mn + 1) + mn; }
7 — Fattoriale ricorsivo int fattoriale(int n) { if (n <= 1) return 1; return n * fattoriale(n - 1); }
8 — Fibonacci ricorsivo int fibonacci(int n) { if (n < 2) return n; return fibonacci(n - 1) + fibonacci(n - 2); }
9 — Somma di un vettore float sommaVettore(float v[], const int N) { float s = 0; for (int i = 0; i < N; i++) s += v[i]; return s; }
10 — Conta vocali int contaVocali(string s) { int c = 0; for (char ch : s) { ch = tolower(ch); if (ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u') c++; } return c; }