#include #include #include #include long min (long a1, long a2) { return a1 < a2 ? a1 : a2; } long max (long a1, long a2) { return a1 > a2 ? a1 : a2; } void panic (const char *str); int main (int argc, char *argv[]) { if (argc <2) panic ("Ni info file"); ifstream in (argv[1]); char* tdfile1 = new char [100]; // 2 td .num file names; used 1,2 char* tdfile2 = new char [100]; // 2 td .num file names; used 1,2 char* bufile1 = new char [100]; // -//- ;build-up char* bufile2 = new char [100]; // -//- ;build-up int nns[200]; int nnns ; in >> nnns; in >> tdfile1 >> tdfile2 >> bufile1 >> bufile2; ifstream tdf1(tdfile1), tdf2(tdfile2), buf1(bufile1), buf2(bufile2); char **Prob_td1_Name = new char* [200]; // alpha-files char **Prob_td2_Name = new char* [200]; // alpha-files char **Prob_bu1_Name = new char* [200]; // alpha-files char **Prob_bu2_Name = new char* [200]; // alpha-files char **OutName = new char* [100]; //opening probability files ifstream prtd1[200], prtd2[200], prbu1[200], prbu2[200]; ofstream out[200]; for (int cnt1 = 0 ; cnt1 < nnns ; cnt1++ ) { Prob_td1_Name[cnt1] = new char [100]; Prob_td2_Name[cnt1] = new char [100]; Prob_bu1_Name[cnt1] = new char [100]; Prob_bu2_Name[cnt1] = new char [100]; OutName[cnt1] = new char [100]; in >> Prob_td1_Name[cnt1]; in >> Prob_td2_Name[cnt1]; in >> Prob_bu1_Name[cnt1]; in >> Prob_bu2_Name[cnt1]; in >> OutName[cnt1]; prtd1[cnt1].open (Prob_td1_Name[cnt1], ios::nocreate); prtd2[cnt1].open (Prob_td2_Name[cnt1], ios::nocreate); prbu1[cnt1].open (Prob_bu1_Name[cnt1], ios::nocreate); prbu2[cnt1].open (Prob_bu2_Name[cnt1], ios::nocreate); out[cnt1].open (OutName[cnt1]); if ( prtd1[cnt1].eof() || prtd2[cnt1].eof() || prbu1[cnt1].eof() || prbu2[cnt1].eof() ) panic ("Missing prob. file"); } // number files if (tdf1.eof() || tdf2.eof() || buf1.eof() || buf2.eof() ) panic ("Missing at least one of event number files. Exit"); long tdno1 = 0, tdno2 = 0, buno1 = 0, buno2 = 0; long minnum = 0; double dummy ; int id; for (;;) { if (tdno1 == minnum) tdf1 >> tdno1; if (tdno2 == minnum) tdf2 >> tdno2; if (buno1 == minnum) buf1 >> buno1; if (buno2 == minnum) buf2 >> buno2; if (buf1.eof()) buno1 = 0; if (buf2.eof()) buno2 = 0; if (tdf1.eof()) tdno1 = 0; if (tdf2.eof()) { cout << tdno2; tdno2 = 0;} if (tdno1 == 0 && buno1 == 0) break; if (tdno1 && buno1) minnum = min (tdno1, buno1); else minnum = max (tdno1, buno1); // { cout << tdno1 << " " << buno1 << " " << tdno2 << " " << // buno2 << " " << minnum << endl; getchar ();} for (int cnt3 = 0 ; cnt3 < nnns; cnt3++ ) { // out[cnt3] << minnum << " " ; if (minnum == tdno1) { prtd1[cnt3] >> dummy ; out[cnt3] << dummy << " " ; if (!cnt3) prtd1[cnt3] >> id; } else out[cnt3] << 0 << " "; if (minnum == tdno2) { prtd2[cnt3] >> dummy ; out[cnt3] << dummy << " "; } else out[cnt3] << 0 << " "; if (minnum == buno1) { prbu1[cnt3] >> dummy ; out[cnt3] << dummy << " "; if (!cnt3) prbu1[cnt3] >> id; } else out[cnt3] << 0 << " "; if (minnum == buno2) { prbu2[cnt3] >> dummy ; out[cnt3] << dummy << " " ; } else out[cnt3] << 0 << " " ; out[cnt3] << id << endl; } } for (int cnt3=0 ; cnt3 < nnns ; cnt3++) out[cnt3].close (); return 1; } void panic (const char* str) { cerr << str << endl ; exit (0); }