domenica 12 febbraio 2017

COMPITO 5 (PICCIALLI, CHIAMNESE)

COMPITO 5 ORDINARE ELENCO

#include<iostream>
#include<string>
#include<fstream>

#define MAX 100

using namespace std;

struct persona{
string nome;
int numero;
};

bool carica_elenco(string percorso, persona lista[], int &riemp);
bool verifica_ordine(persona lista[], int riemp);
void ordine(persona lista[], int riemp);
void elimina_doppioni(persona lista[], int &riemp);
void stampa_elenco(persona lista[], int riemp);

int main(){
string percorso;
persona lista[MAX];
int riemp = 0;
bool errore;

cout << "Inserire il percorso del file: ";
cin >> percorso;

do{
errore = carica_elenco(percorso, lista, riemp);
if (errore){
cout << "Inserire un nuovo percorso: ";
cin >> percorso;
}
} while (errore);

if (!verifica_ordine(lista, riemp))
ordine(lista, riemp);

elimina_doppioni(lista, riemp);

stampa_elenco(lista, riemp);

system("PAUSE");

return 0;
}

bool carica_elenco(string percorso, persona lista[], int &riemp){
ifstream mioFile;

riemp = 0;

mioFile.open(percorso, ios::in);
if (!mioFile){
cout << "Errore nell'apertura del file!\n";
return true;
}

while (!mioFile.eof()){
mioFile >> lista[riemp].nome;
mioFile >> lista[riemp].numero;
riemp++;
}

mioFile.close();
return false;
}

bool verifica_ordine(persona lista[], int riemp){
bool ordinato = true;
int i = 0;

while (i < riemp-1 && ordinato){
if (lista[i].nome.compare(lista[i + 1].nome) > 0){
ordinato = false;
}
i++;
}
return ordinato;
}

void ordine(persona lista[], int riemp){
int scambi;
persona temp;

do{
scambi = 0;
for (int i = 0; i < riemp - 1; i++){
if (lista[i].nome.compare(lista[i + 1].nome) > 0){
temp = lista[i];
lista[i] = lista[i + 1];
lista[i + 1] = temp;
scambi++;
}
}
} while (scambi > 0);
}

void elimina_doppioni(persona lista[], int &riemp){
for (int i = 0; i < riemp - 1; i++){
for (int j = i + 1; j < riemp; j++){
if (lista[i].nome == lista[j].nome){
for (int k = j; k < riemp - 1; k++){
lista[k] = lista[k + 1];
}
riemp--;
j--;
}
}
}
return;
}

void stampa_elenco(persona lista[], int riemp){
for (int i = 0; i < riemp; i++){
cout << lista[i].nome << endl << lista[i].numero << endl;
}
}

Nessun commento :

Posta un commento