Funzioni con parametri

L’uso delle funzioni risponde all’esigenza fondamentale di costruire programmi ben organizzati e strutturati secondo la metodologia top-down.
Un’altra esigenza che viene risolta dalle funzioni è rappresentata dalla possibilità di poter utilizzare uno stesso gruppo di istruzioni in programmi diversi, proprio come accade con le funzioni predefinite. In questo caso conviene rendere parametrici i valori utilizzati dalle funzioni, in modo da ricevere come argomenti i valori passati dalla funzione main o da un’altra funzione chiamante.

ESEMPIO: Calcolo delle soluzioni di un’equazione di secondo grado

Viene ripreso l’esempio del paragrafo precedente per il calcolo delle soluzioni di un’equazione di secondo grado, introducendo i parametri nelle funzioni.

/* Equazioni2.c : soluzioni di un'equazione di secondo grado */
#include <stdio.h>
#include <math.h>

void RisolviPrimoGrado(float c2, float c3)
{
if ((c2==0) && (c3==0)) {
printf("Equazione indeterminata \n");
}
else
{
if (c2==0) printf("Equazione impossibile \n");
else printf("x = %8.2f \n", -c3/c2);
}
return;
} /* RisolviPrimoGrado */

float CalcolaDelta(float c1, float c2, float c3)
{
return c2*c2 - 4*c1*c3;
} /* CalcolaDelta */

void ScriviSoluzioni(float c1, float c2, float c3, float d)
{
float x1, x2;
if (d < 0)
{
printf("Non esistono soluzioni reali \n");
}
else
{
x1 = (-c2-sqrt(d)) / (2*c1);
x2 = (-c2+sqrt(d)) / (2*c1);
printf("x1 = %8.2f \n", x1);
printf("x2 = %8.2f \n", x2);
}
return;
} /* ScriviSoluzioni */

/* funzione principale */
int main(void)
{
float a, b, c; /* coefficienti equazione */
float delta; /* discriminante */
printf("Tre coefficienti: ");
scanf("%f %f %f", &a, &b, &c);
if (a != 0)
{
delta = CalcolaDelta(a, b, c);
ScriviSoluzioni(a, b, c, delta);
}
else
{
RisolviPrimoGrado(b, c);
}
return 0;
}

In questa versione del programma Equazioni, le variabili a, b, c, delta sono variabili interne al main, o come si dice più correttamente, variabili locali del main, mentre le funzioni operano sui parametri. Le variabili x1 e x2, che sono utilizzate solo all’interno della funzione per il calcolo delle soluzioni, sono variabili locali della funzione stessa.
Il vantaggio di questa modalità d’uso delle variabili consiste nel fatto che le funzioni così strutturate diventano moduli software che possono essere utilizzati trasportando senza modifiche il loro codice (con un semplice copia e incolla) in altri programmi che richiedano le stesse funzionalità.
L’operazione, con la quale il main (o un’altra funzione chiamante) invia i valori alla funzione, assegnandoli ai parametri, si chiama passaggio di parametri.
Le variabili indicate nell’intestazione della funzione (nell’esempio, le variabili c1, c2, c3, d) si chiamano parametri formali; le variabili che forniscono i valori ai parametri si chiamano parametri attuali.