#include <string>
#include <cstdlib>
#include <iostream>
using namespace std;
///esempio di utilizzo delle strutture in C++
///il codice dichiara una struttura di nome monte, costituita dai campi: nome,
///nazione, altezza, vulcano, l'istanza della struttura è un array dinamico, che rappresenta
///le montagne considerate, la dimensione è inserita in fase di runtime.
///quindi si popola la struttura. scopo del programma è quello di
///ordinare la struttura per altezza delle montagne, a decrescere. in output si stampa la struttura.
struct monte ///struttura di nome monte
{///elenco dei campi
string nome;
string nazione;
int altezza;
bool vulcano;
} ;
monte *load(monte *vt, int dim) ///procedura che popola la struttura
{
int i;
for(i=0; i<dim; i++)
{
cin.ignore(); ///si ripulisce lo stream di input
cout<<"inserisci il nome: "<<endl;
getline(cin,vt[i].nome);
cout<<"inserisci la nazione: "<<endl;
cin>>vt[i].nazione;
cout<<"inserisci l'altezza: "<<endl;
cin>>vt[i].altezza;
cout<<"se vulcano digita: 1, altrimenti 0: "<<endl;
cin>>vt[i].vulcano;
cout<<endl;
}
return vt; ///valore di ritorno, la struttura popolata
}
void print(monte *vt, int dim) ///procedura che stampa la struttura
{
int i;
for(i=0; i<dim; i++)
{
cout<<"il nome della montagna e': "<<endl;
cout<<vt[i].nome<<endl;
cout<<"si trova: "<<vt[i].nazione<<endl;
cout<<"la sua altezza e': "<<vt[i].altezza<<endl;
if(vt[i].vulcano==1)
{
cout<<"e' un vulcano"<<endl;
}
else
{
cout<<"non e' un vulcano"<<endl;
}
cout<<endl;
}
}
monte *sort(monte *vt, int dim) ///definiamo la funzione che ordina la struttura
{///si utilizza l'algoritmo bubble sort
int i, j;
for(i=0; i<dim; i++)
{
for(j=i+1; j<dim; j++)
{
if(vt[i].altezza<vt[j].altezza)
{
swap(vt[i],vt[j]);
}
}
}
return vt; ///valore di ritorno, la struttura ordinata per altezza a decrescere
}
int main()
{
int n;
cout<<"inserisci la dimensione: "<<endl;
cin>>n;
while(n<2)
{
cout<<"errore, inserire una dimensione accettabile: "<<endl;
cin>>n;
}
cout<<endl;
monte *v=new monte [n]; ///istanza della struttura.
v=load(v,n); ///si invoca la funzione che popola la truttura
cout<<endl;
print(v,n); ///si invoca la procedura che stampa la struttura
cout<<endl;
v=sort(v,n); ///si invoca la funzione che ordina la struttura.
cout<<"stampa in modo ordinato: "<<endl;
print(v,n); ///stampa della struttura ordinata.
cout<<endl;
delete [] v; ///si libera memoria
cout<<endl;
cout<<"Potere ai Tecnici"<<endl;
cout<<"P.C.++"<<endl;
cout<<endl;
system("PAUSE");
return 0;
}