#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
///esempio di utilizzo delle strutture in C++
///l'istanza è un array dinamico con la dimensione inserita in fase di runtime
///il programma dichiara una struttura di nome fiume, composta da 4 campi
///quindi la popola e la stampa a video, scopo del programma è quello di
///ricercare il fiume di lunghezza massima e stampare in output i suoi campi.
struct fiume ///si dichiara una struttura di nome fiume con 4 campi
{
string nome;
string nazione;
int lunghezza;
bool navigabile;
} ;
fiume *load(fiume *vt, int dim) ///procedura che popola la struttura
{///l'accesso alla struttura avviene tramite l'istanza
int i;
for(i=0; i<dim; i++)
{
cin.ignore(); ///ripulisce lo stream di input
cout<<"inserisci il nome del fiume: "<<endl;
getline(cin,vt[i].nome); ///nome e cognome
cout<<"inserisci la nazione: "<<endl; ///anche più nazioni contemporaneamente
getline(cin,vt[i].nazione);
cout<<"inserisci la lunghezza: "<<endl;
cin>>vt[i].lunghezza;
cout<<"se navigabile digita 1 altrimenti 0:"<<endl;
cin>>vt[i].navigabile;
cout<<endl;
}
return vt; ///valore di ritorno, l'array popolato
}
void print(fiume *vt, int dim) ///procedura per la stampa
{
int i;
for(i=0; i<dim; i++)
{
cout<<"il nome del fiume e': "<<vt[i].nome<<endl;
cout<<"scorre in: "<<vt[i].nazione<<endl;
cout<<"di lunghezza: "<<vt[i].lunghezza<<endl;
if(vt[i].navigabile==0)
{
cout<<"non navigabile"<<endl;
}
else
{
cout<<"navigabile"<<endl;
}
cout<<endl;
}
}
fiume search(fiume *vt, int dim)
{
int i, max;
fiume f;
///inizializzo per avere un riferimento iniziale
max=vt[0].lunghezza;
f=vt[0];
for(i=0; i<dim; i++) ///ricerca del fiume più lungo
{
if(vt[i].lunghezza>max)
{
f=vt[i];
}
}
return f; ///valore di ritorno, il fiume più lungo
}
int main()
{
int n;
cout<<"inserisci il numero di fiumi: "<<endl;
cin>>n;
while(n<2)
{
cout<<"errore, inserire un numero accettabile: "<<endl;
cin>>n;
}
cout<<endl;
fiume *v=new fiume [n]; ///spazio di memoria dinamico, un array che istanzia la struttura.
v=load(v,n); ///si invoca la procedura che popola la struttura
cout<<endl;
print(v,n); ///si invoca la procedura che stampa la struttura.
cout<<endl;
fiume mx;
mx=search(v,n); ///si invoca la funzione che ricerca il fiume più lungo
///stampiamo il fiume più lungo con i suoi campi
cout<<"il fiume di massima lunghezza e': "<<mx.nome<<endl;
cout<<"scorre in: "<<mx.nazione<<endl;
cout<<"di lunghezza: "<<mx.lunghezza<<endl;
if(mx.navigabile==0)
{
cout<<"non navigabile"<<endl;
}
else
{
cout<<"navigabile"<<endl;
}
cout<<endl;
delete [] v;
cout<<"Potere ai Tecnici"<<endl;
cout<<"P.C.++"<<endl;
cout<<endl;
system("PAUSE");
return 0;
}