La dimostrazione più palese del fatto che dichiarando una struttura si definisce un nuovo tipo di variabili è data dal fatto che è possibile passare una struct a una funzione. Si consideri come esempio il seguente programma, che riprende il problema del calcolo della differenza in minuti fra due orari usando una funzione:
#include <cstdlib>
#include <iostream>
using namespace std;
struct orario {
int ora;
int min;
};
int calcola_differenza(orario h1, orario h2);
int main(int argc, char *argv[])
{
int dif;
orario ora1, ora2;
cout<<"Fornisci l'orario iniziale (ore e minuti): ";
cin>>ora1.ora;
cin>>ora1.min;
cout<<"Fornisci l'orario finale (ore e minuti): ";
cin>>ora2.ora;
cin>>ora2.min;
dif = calcola_differenza(ora1,ora2);
cout<<"La differenza fra le "<<ora1.ora<<":"<<ora1.min<<" e le "<<ora2.ora<<":"<<ora2.min<<" e' "<<dif<<" minuti\n";
system("PAUSE");
return EXIT_SUCCESS;
}
int calcola_differenza(orario h1, orario h2)
{
int d;
d = (h2.ora*60+h2.min) - (h1.ora*60+h1.min);
return d;
}
Si osservi il prototipo della funzione calcola_differenza:
int calcola_differenza(orario h1, orario h2);
Esso ci dice che la funzione riceve come parametri due oggetti h1 e h2 di tipo orario e torna un valore int.
All'interno della funzione i parametri h1 e h2 sono usati per fare il calcolo della differenza fra i due orari e tornare il risultato al main:
int calcola_differenza(orario h1, orario h2)
{
int d;
d = (h2.ora*60+h2.min) - (h1.ora*60+h1.min);
return d;
}
Oltre a ricevere una struct come parametro, in C una funzione può anche tornare una struct. Si consideri a questo proposito la versione seguente del programma per la differenza fra orari. In questo caso la funzione calcola_differenza2 torna il risultato della differenza espresso in ore e in minuti:
#include <cstdlib>
#include <iostream>
using namespace std;
struct orario {
int ora;
int min;
};
orario calcola_differenza2(orario h1, orario h2);
int main(int argc, char *argv[])
{
orario ora1, ora2, dif;
cout<<"Fornisci l'orario iniziale (ore e minuti): ";
cin>>ora1.ora;
cin>>ora1.min;
cout<<"Fornisci l'orario finale (ore e minuti): ";
cin>>ora2.ora;
cin>>ora2.min;
dif = calcola_differenza2(ora1,ora2);
cout<<"La differenza fra le "<<ora1.ora<<":"<<ora1.min<<" e le "<<ora2.ora<<":"<<ora2.min;
cout<<" e' "<<dif.ora<<" ore e "<<dif.min<<" minuti\n";
system("PAUSE");
return EXIT_SUCCESS;
}
orario calcola_differenza2(orario h1, orario h2)
{
int d;
orario ris;
d = (h2.ora*60+h2.min) - (h1.ora*60+h1.min);
ris.ora = d/60;
ris.min = d%60;
return ris;
}
Questo è un esempio di esecuzione del programma:
Sito realizzato in base al template offerto da
http://www.graphixmania.it