ciao a tutti...![]()
dovrei capire come funziona questo programma, ma ci sono 2 passaggi che nn riesco prorpio a capire!!!![]()
c'è qualcuno che può commentarmeli???![]()
il testo del programma è:
Prova pratica del 19/1/05
Si abbiano due file di testo, ciascuna riga dei quali abbia il seguente formato:
<matricola> <cognome> <nome>
Ciascuno dei due file è ordinato alfabeticamente per cognome e nome.
Redigere un programma C++ che unisca i due file generando un unico file sempre ordinato per
cognome e nome. Si supponga che la lunghezza di ciascun file sia tale da non poter essere letto
interamente in memoria. Il programma deve chiedere l’introduzione dei nomi dei due file di input e
del file di output.
Esempio primo file di input:
100184 BONELLI GIULIO
100303 CARRA VITTORIO
100194 FRANCHI ANGELA
100231 GROSSI GABRIELE
Esempio secondo file di input:
102893 ANGHINOLFI RAFFAELE
100292 FOLLI ALBERTO
103853 GROSSI EGIDIO
103858 MAGNANI GISELLA
103781 NUCCI MASSIMILIANO
File di output:
102893 ANGHINOLFI RAFFAELE
100184 BONELLI GIULIO
100303 CARRA VITTORIO
100292 FOLLI ALBERTO
100194 FRANCHI ANGELA
103853 GROSSI EGIDIO
100231 GROSSI GABRIELE
103858 MAGNANI GISELLA
103781 NUCCI MASSIMILIANO
e il codice è:
codice:#include <iostream> #include <fstream> using namespace std; main() { // Richiesta dei nomi dei file e controllo char infile1[20], infile2[20], outfile[20]; cout << "Nome del primo file di input: "; cin >> infile1; ifstream fin1(infile1); if (!fin1) { cerr << "Errore: impossibile aprire file " << infile1 << "\n"; exit(1); } cout << "Nome del secondo file di input: "; cin >> infile2; ifstream fin2(infile2); if (!fin2) { cerr << "Errore: impossibile aprire file " << infile2 << "\n"; exit(2); } cout << "Nome del file di output: "; cin >> outfile; ofstream fout(outfile); if (!fout) { cerr << "Errore: impossibile aprire file " << outfile << " in scrittura.\n"; exit(3); } // Inizio operazione di lettura e merge dei file char matr1[7], cog1[20], nom1[20]; char matr2[7], cog2[20], nom2[20]; // abbiamo ipotizzato che la matricola abbia al massimo 6 caratteri // e che cognome e nome abbiano al massimo 19 caratteri fin1 >> matr1 >> cog1 >> nom1; fin2 >> matr2 >> cog2 >> nom2; while (fin1 && fin2) { while (fin1 && fin2 && (strcmp(cog1,cog2) < 0 || strcmp(cog1,cog2) == 0 && strcmp(nom1,nom2) < 0) )//questo è la prima riga che nn mi è chiara { fout << matr1 << ' ' << cog1 << ' ' << nom1 << endl; fin1 >> matr1 >> cog1 >> nom1; } while (fin1 && fin2 && (strcmp(cog1,cog2) > 0 || strcmp(cog1,cog2) == 0 && strcmp(nom1,nom2) >= 0) )questa è la seconda riga che non mi è chiara { fout << matr2 << ' ' << cog2 << ' ' << nom2 << endl; fin2 >> matr2 >> cog2 >> nom2; } } // almeno uno dei due file e' terminato: gestiamo la coda dell'altro while (fin1) { fout << matr1 << ' ' << cog1 << ' ' << nom1 << endl; fin1 >> matr1 >> cog1 >> nom1; } while (fin2) { fout << matr2 << ' ' << cog2 << ' ' << nom2 << endl; fin2 >> matr2 >> cog2 >> nom2; } fin1.close(); fin2.close(); fout.close(); return 0; }
grazie in anticipo a tutti...
saluti![]()

Rispondi quotando