]> AND Private Git Repository - equilibrage.git/blob - simulation/construitTableau.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Ajout du contre-exemple à B&T.
[equilibrage.git] / simulation / construitTableau.cpp
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4
5 using namespace std;
6
7 #define COMPLET 0
8
9 bool lireFichier(string nom, double tab[][6], int nb);
10
11 int main(int argc, char **argv)
12 {
13   double tab[16][6]; // tableau des résultats en Latex
14   int i, lig, col;
15   string nom, base;
16
17   for(i=1; i<argc; i++){
18     if(argv[i][0] == '-'){
19       switch(argv[i][1]){
20       case 'f':
21         i++;
22         base = string(argv[i]);
23         break;
24       }
25     }
26   }
27
28   for(lig=0; lig<16; ++lig){
29     for(col=0; col<6; ++col){
30       tab[lig][col] = 0;
31     }
32   }
33
34   nom = string("expe_10/") + base;
35   if(!lireFichier(nom, tab, 10)){
36     cout << "Erreur d'ouverture du fichier d'entrées " << nom << endl;
37   }
38
39   nom = string("expe_50/") + base;
40   if(!lireFichier(nom, tab, 50)){
41     cout << "Erreur d'ouverture du fichier d'entrées " << nom << endl;
42   }
43
44 #if COMPLET
45   for(lig=0; lig<16; ++lig){
46     if(lig == 0)
47       cout << "\\multirow{8}{7em}{Homogeneous processors} & ";
48     else
49       if(lig == 8)
50         cout << "\\multirow{8}{7em}{Heterogeneous processors} & ";
51       else
52         cout << " & ";
53     if(lig%8 == 0)
54       cout << "\\multirow{4}{7em}{Constant links} & ";
55     else
56       if(lig%4 == 0)
57         cout << "\\multirow{4}{7em}{Intermittent links} & ";
58       else
59         cout << " & ";
60     if(lig%4 == 0)
61       cout << "\\multirow{2}{7em}{All tasks on one node} & ";
62     else
63       if(lig%2 == 0)
64         cout << "\\multirow{2}{7em}{Homogeneous distribution} & ";
65       else
66         cout << " & ";
67
68     for(col=0; col<5; ++col){
69       cout << tab[lig][col] << " & ";
70     }
71     cout << tab[lig][col] << " \\\\" << endl;
72   }
73 #else
74   for(lig=0; lig<8; lig+=2){
75
76     if(lig%4 == 0){
77       cout << "\\hline" << endl;
78     }else{
79       if(lig%2 == 0){
80         cout << "\\cline{2-6}" << endl;
81       }
82     }
83     if(lig == 0)
84       cout << "\\multirow{4}{7em}{Constant links} & ";
85     else
86       if(lig == 4)
87         cout << "\\multirow{4}{7em}{Intermittent links} & ";
88       else
89         cout << " & ";
90     if(lig%4 == 0){
91       cout << "\\multirow{2}{6em}{All tasks on one node} & ";
92     }else{
93       if(lig%2 == 0){
94         cout << "\\multirow{2}{6em}{Homogeneous distribution} & ";
95       }else
96         cout << " & ";
97     }
98
99     cout << tab[lig + 1][1] << " & ";
100     cout << tab[lig + 1][4] << " & ";
101     cout << tab[8 + lig + 1][1] << " & ";
102     cout << tab[8 + lig + 1][4] << " \\\\" << endl;
103
104     cout << " & & \\emph{" << tab[lig + 1][2] << "} & ";
105     cout << "     \\emph{" << tab[lig + 1][5] << "} & ";
106     cout << "     \\emph{" << tab[8 + lig + 1][2] << "} & ";
107     cout << "     \\emph{" << tab[8 + lig + 1][5] << "} \\\\" << endl;
108
109   }
110 #endif
111 }
112
113 bool lireFichier(string nom, double tab[][6], int nb)
114 {
115   ifstream fic;
116   bool ret = true;
117   int lig, col;
118   bool fini = false;
119   string mot;
120
121   cout << "Lecture données " << nom << " avec " << nb << " procs " << endl;
122
123   fic.open(nom.c_str());
124   if(fic.good()){
125     lig = 0;
126     if(nb == 10){
127       col = 0;
128     }else{
129       col = 3;
130     }
131     fic >> mot;
132     while(fic.good() && !fini){
133       if(mot == "Temps"){
134         fic >> mot;
135         if(mot == "de"){
136           fic >> mot; // "calcul"
137           fic >> mot; // ":"
138           fic >> tab[lig][col];
139           //          cout << lig << " " << col << " : " << tab[lig][col] << endl;
140         }else{
141           if(mot == "optimal"){
142             fic >> mot; // ":"
143             fic >> tab[lig][col + 1];
144             //            cout << lig << " " << col + 1 << " : " << tab[lig][col+1] << endl;
145           }else{
146             if(mot == "initial"){
147               fic >> mot; // ":"
148               fic >> tab[lig][col + 2];
149               //              cout << lig << " " << col + 2 << " : " << tab[lig][col+2] << endl;
150             }
151           }
152         }
153       }else{
154         if(mot == "Surcoût"){
155           fic >> mot; 
156           if(mot == "T"){
157             fic >> mot; // ":"
158             fic >> tab[lig + 1][col + 1];
159             //            cout << lig + 1 << " " << col + 1 << " : " << tab[lig+1][col+1] << endl;
160           }
161         }else{
162           if(mot == "Gain"){
163             fic >> mot;
164             if(mot == "réel"){
165               fic >> mot; // ":"
166               fic >> tab[lig + 1][col + 2];
167               //              cout << lig + 1 << " " << col + 2 << " : " << tab[lig+1][col+2] << endl;
168             }
169           }else{
170             if(mot == "time:"){
171               lig += 2;
172               if(lig >= 16){
173                 fini = true;
174               }
175             }
176           }
177         }
178       }
179       fic >> mot;
180     }
181     fic.close();
182   }else{
183     ret = false;
184   }
185   return ret;
186 }