art_dupond je suis neuneu... oui oui !! | arrete de m'embrouiller euh bong, je te donne mon programme et t'as qu'à voir:
Code :
- #include <vcl.h>
- #include <iostream.h>
- #include <fstream.h>
- #include <iomanip.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #define MAX 100
- class tevenement
- {
- short flag;
- string name;
- float time;
- public:
- tevenement() { flag=0; name=""; time=0;}
- tevenement(short court, string corde, float bateau) { flag=court; name=corde; time=bateau;}
- virtual void affiche() { cout << flag << " " << name << " " << time << " ";}
- ~tevenement() {}
- string namek() { return name;}
- float tempete() { return time;}
- short flagada() { return flag;}
- tevenement & operator=(const tevenement &);
- };
- tevenement & tevenement::operator=(const tevenement & kablouille) //------ =
- {
- flag = kablouille.flag;
- name = kablouille.name;
- time = kablouille.time;
- return *this;
- }
- class tdroit : public tevenement
- {
- string fichier;
- public:
- tdroit() { fichier="";}
- tdroit(short, string, float, string);
- void affiche()
- {
- tevenement::affiche();
- cout << fichier << endl;
- }
- ~tdroit() {}
- string fitchier() { return fichier;}
- tdroit & operator=(const tdroit &);
- };
- class tpermission : public tevenement
- {
- float number;
- public:
- tpermission() { number=0;}
- tpermission(short, string, float, float);
- void affiche()
- {
- tevenement::affiche();
- cout << number << endl;
- }
- ~tpermission() {}
- float prems() { return number;}
- tpermission & operator=(const tpermission &);
- };
- tdroit::tdroit(short court, string corde, float bateau, string fil) : tevenement(court, corde, bateau)
- {
- fichier = fil;
- }
- tpermission::tpermission(short court, string corde, float bateau, float barque) : tevenement(court, corde, bateau)
- {
- number = barque;
- }
- tdroit & tdroit::operator=(const tdroit & kablouille) //------ =
- {
- tevenement::operator=(kablouille);
- fichier = kablouille.fichier;
- return *this;
- }
- tpermission & tpermission::operator=(const tpermission & kablouille) //------ =
- {
- tevenement::operator=(kablouille);
- number = kablouille.number;
- return *this;
- }
- /**********************************************************************/
- // fin déclaration des classes
- /**********************************************************************/
- template <class T> int compare(T a, T b)
- {
- if(a < b)
- {
- return (-1);
- }
- else if(a > b)
- {
- return 1;
- }
- else return 0;
- }
- int sort_name(const void *a, const void *b);
- int sort_time(const void *a, const void *b);
- /*************************************************************************/
- /*
- // main()
- */
- /*************************************************************************/
- int main()
- {
- int cptr;
- ifstream entree("sys.log", ios::in);
- if(!entree)
- {
- cerr << "le fichier n'a pas pu être ouvert.\n";
- exit(1);
- }
- char lettre;
- int abs = 1;
- int ligne = 0;
- // tevenement **vecteur = new tevenement*[MAX];
- // delete[] vecteur;
- tevenement *vecteur[MAX];
- float time = 0;
- int moiur;
- int barque=0;
- int etre_decimal = 0;
- int nb_decimales = 0;
- float decitime = 0;
- short flag;
- string nom = "";
- string string_time = ""; // à transformer en float
- string fichier = "";
- while(entree.get(lettre))
- {
- if((int) lettre == 10)
- {
- if(nb_decimales)
- {
- time += decitime / pow(10,nb_decimales);
- }
- if(!flag) // permission
- {
- vecteur[ligne] = new tpermission(flag, nom, time, barque);
- }
- else // droit
- {
- vecteur[ligne] = new tdroit(flag, nom, time, fichier);
- }
- ligne++; abs = 1;
- nom = ""; string_time = ""; etre_decimal = 0; nb_decimales = 0;
- time = 0; decitime = 0; fichier = ""; barque = 0;
- }
- else if((int) lettre == 59)
- {
- abs++;
- }
- else
- {
- if(abs == 1)
- {
- flag = lettre-'0';
- if(flag)
- barque = 0;
- else
- fichier = "";
- }
- else if(abs == 2)
- {
- nom += lettre;
- }
- else if(abs == 3)
- {
- if((int)lettre == 46) { etre_decimal = 1;}
- else
- {
- moiur = lettre-'0';
- if(!etre_decimal)
- {
- time = 10 * time + moiur;
- }
- else
- {
- decitime = 10 * decitime + moiur;
- nb_decimales++;
- }
- }
- }
- else
- {
- if(!flag)
- {
- moiur = lettre-'0';
- barque = 10 * barque + moiur;
- }
- else
- {
- fichier += lettre;
- }
- }
- }
- }
- entree.close();
- if((int) lettre != 10)
- {
- if(nb_decimales)
- {
- time += decitime / (pow(10,nb_decimales));
- }
- if(!flag) // permission
- {
- vecteur[ligne] = new tpermission(flag, nom, time, barque);
- }
- else // droit
- {
- vecteur[ligne] = new tdroit(flag, nom, time, fichier);
- }
- ligne++;
- }
- ofstream name_file("sys_name.log", ios::out);
- if(!name_file)
- {
- cout << "creation fichier impossible\n";
- exit(1);
- }
- qsort((void *)vecteur, ligne, sizeof(vecteur[0]), sort_name);
- for(int i=0; i<ligne; i++)
- {
- name_file << vecteur->flagada() << ";" << vecteur[i]->namek() << ";"
- << vecteur[i]->tempete() << ";";
- if(vecteur[i]->flagada())
- {
- name_file << (dynamic_cast <tdroit *> (vecteur[i]))->fitchier() << endl;
- }
- else
- {
- name_file << (dynamic_cast <tpermission *> (vecteur[i]))->prems() << endl;
- }
- }
- cout << "fichier sys_name.log encode\n";
- name_file.close();
- ofstream time_file("sys_time.log", ios::out);
- if(!time_file)
- {
- cout << "creation fichier impossible\n";
- exit(1);
- }
- qsort((void *)vecteur, ligne, sizeof(vecteur[0]), sort_time);
- for(int i=0; i<ligne; i++)
- {
- time_file << vecteur[i]->flagada() << ";" << vecteur[i]->namek() << ";"
- << vecteur[i]->tempete() << ";";
- if(vecteur[i]->flagada())
- {
- time_file << (dynamic_cast <tdroit *> (vecteur[i]))->fitchier() << endl;
- }
- else
- {
- time_file << (dynamic_cast <tpermission *> (vecteur[i]))->prems() << endl;
- }
- }
- cout << "fichier sys_time.log encode\n";
- time_file.close();
- for(int i=0; i<ligne; i++)
- {
- delete vecteur[i];
- }
- // cin >> cptr;
- return 0;
- }
- /***********************************************/
- /*
- // fonctions de tri
- */
- /***********************************************/
- int sort_name(const void *a, const void *b)
- {
- tevenement *alpha, *beta;
- string corde, cordelette;
- alpha = *((tevenement**)a);
- beta = *((tevenement**)b);
- corde = alpha->namek();
- cordelette = beta->namek();
- return compare(corde, cordelette);
- }
- int sort_time(const void *a, const void *b)
- {
- tevenement *alpha, *beta;
- float tempete, tempest;
- alpha = *((tevenement**)a);
- beta = *((tevenement**)b);
- tempete = alpha->tempete();
- tempest = beta->tempete();
- return compare(tempete, tempest);
- }
|
il faut aussi faire un fichier [i]sys.log avec ca dedans :
0;frodon;3.76;36
0;aragorn;4.37;42
1;bilbon;2.76;test.dat
0;sauron;8.32;41
1;saroumane;7.75;mechant.dat
1;gandalf;7.37;gentil.dat
0;legolas;5.25;54
0;gimli;4.32;22
1;boromir;2.83;hom.dat
0;elrond;5.13;12
ps : bong, j'ai fait ca comme une tache, mais je sais pas programmer, alors voili pps : en fait oui, ca doit être parce que c'est des pointeurs vers des classes dérivées qu'il faut dynamic_caster...
mais bong, le monsieur il a dit de dynamic_cast alors je dynamic_cast |