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