PROGRAMMIAMO
C++ - Struct e funzioni
Passaggio di una struct a una funzione

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

 

Funzione che torna una struct

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:

 

 

link precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it