/* correttore per tsp, Romeo Rizzi 6/2/2014 */ // Assume file di input e file di output non malformati. #include #include #include #include #include #include #include #include using namespace std; ifstream fin; // File di input ifstream fcor; // File di output ifstream fout; // File da correggere const int MAX_N = 100; int C[MAX_N+1][MAX_N+1]; void ex (const char *msg, float res) { if (msg) cerr << msg; cout << res << endl; exit (0); } template T safe_read (istream& source, const T& lower = numeric_limits::min (), const T& upper = numeric_limits::max ()) { // Legge un valore da source, assicurandosi che sia tra lower e upper if (lower > upper) { cerr << "safe_read chiamato con parametri errati: " << lower << " " << upper << "\n"; exit (1); } T x; source >> x; if (source.fail () || source.eof ()) ex ("Output malformato", 0.0f); if (x < lower || x > upper) ex ("Output invalido", 0.0f); return x; } void check_fine_file () { string x; fout >> x; if (!fout.eof ()) { ex ("Output malformato.", 0.0f); } } int main(int argc, char *argv[]) { if (argc < 4) { cerr << "Usage: " << argv[0] << " " << endl; return 1; } fin.open (argv[1]); fcor.open (argv[2]); fout.open (argv[3]); if (fin.fail()) { cerr << "Impossibile aprire il file di input " << argv[1] << "." << endl; return 1; } if (fcor.fail()) { cerr << "Impossibile aprire il file di output corretto " << argv[2] << "." << endl; return 1; } if (fout.fail()) { ex ("Impossibile aprire il file di output generato dal codice sottoposto al problema.", 0.0); } int result_cor = safe_read (fcor); int result_out = safe_read (fout, 0); if (result_cor != result_out) // Il risultato deve essere uguale ex ("Peso sbagliato.", 0.0f); else cout << "peso corretto. "; check_fine_file (); ex ("Corretto.", 1.0f); return 0; }