Advertisement
Nellyb

Untitled

Nov 18th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <fstream>
  4. #include <string.h>
  5. #include "Arbre.h"
  6. using namespace std;
  7.  
  8. int main(){
  9.     Arbre a1;
  10.     fstream fichierLineaire; /* Fichier qui contient la version lineaire de l'arbre */
  11.     fichierLineaire.open("../arbreLineaire.txt");
  12.     fstream fichierGraphe; /* Fichier qui contient la version graphViz de l'arbre */
  13.     fichierGraphe.open("../arbreGraph.txt");
  14.     string abrLineaire = "";
  15.  
  16.     a1.insererElement(3, a1.adRacine);
  17.     a1.insererElement(1, a1.adRacine);
  18.     a1.insererElement(2, a1.adRacine);
  19.     a1.insererElement(4, a1.adRacine);
  20.     a1.insererElement(5, a1.adRacine);
  21.  
  22.     /* generer le fichier qui contient la version lineaire de l'arbre. */
  23.     a1.genererFichier(fichierLineaire, a1.adRacine); // OK
  24.  
  25.     /* lire ligne par ligne le fichier qui contient la version lineaire de l'arbre */
  26.     abrLineaire = a1.lire(fichierLineaire);
  27.     cout << "abrLineaire = " << abrLineaire << endl; // OK
  28.  
  29.     /* on genere le fichier GraphViz */
  30.     a1.genererGraphe(abrLineaire, fichierGraphe); // KO
  31.    
  32.     /* on genere le graphe */
  33.     system("dot -Tpng ../arbreGraph.txt -o ../graph.png");
  34.  
  35.     return 0;
  36. }
  37.  
  38. bool Arbre::genererFichier(fstream &fichierLineaire, Noeud* n){    
  39.     if (fichierLineaire.is_open()){
  40.         if (n != NULL){
  41.             fichierLineaire << to_string(n->info);
  42.  
  43.             if(n->fg == NULL && n->fd == NULL)
  44.                 fichierLineaire << "00";
  45.             else if(n->fg == NULL || n->fd == NULL)
  46.                 fichierLineaire << "0";
  47.  
  48.             if (n->fg != NULL)
  49.                 genererFichier(fichierLineaire, n->fg);
  50.             if(n->fd != NULL)
  51.                 genererFichier(fichierLineaire, n->fd);
  52.         }
  53.     }
  54.     else{
  55.         cout << "Impossible d'ouvrir le fichier !" << endl;
  56.         return false;
  57.     }
  58.    
  59.     return true;
  60. }
  61.  
  62. bool Arbre::genererGraphe(string chaine, fstream &fichierGraphe){
  63.     fichierGraphe.seekp(0);
  64.  
  65.     if(fichierGraphe.is_open())
  66.     {
  67.         string racine = chaine.substr(0, 1);
  68.         string fg = chaine.substr(1, 5);
  69.         string fd = chaine.substr(6, 5);
  70.         int i = 0;
  71.         int valNull = 0;
  72.        
  73.         fichierGraphe << "digraph arbre {\n";
  74.         fichierGraphe << "node [fontname=\"Arial\"];\n";
  75.  
  76.         // on ecrit d'abord les deux fils de la racine
  77.         fichierGraphe << "\t" << racine << " -> " << fg[0] << ";\n";
  78.         fichierGraphe << "\t" << racine << " -> " << fd[0] << ";\n";
  79.  
  80.         //puis on fait le fils gauche
  81.         while(fg[i] != '\0' && i < 4){
  82.             if(fg[i+1] == '0' && fg[i+2] == '0'){
  83.                 fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
  84.                 valNull++;
  85.                 fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
  86.                 valNull++;
  87.             }
  88.             else if(fg[i+1] == '0'){
  89.                 fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
  90.                 fichierGraphe << "\t" << fg[i] << " -> " << fg[i+2] << ";\n";
  91.                 valNull++;
  92.             }
  93.             else if(fg[i+2] == '0'){
  94.                 fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
  95.                 fichierGraphe << "\t" << fg[i] << " -> " << fg[i+2] << ";\n";
  96.                 valNull++;
  97.             }
  98.             else{
  99.                 fichierGraphe << "\t" << fg[i] << " -> " << fg[i+1] << ";\n";
  100.                 fichierGraphe << "\t" << fg[i] << " -> " << fg[i+2] << ";\n";
  101.             }
  102.  
  103.             i+=2;
  104.         }
  105.  
  106.         i = 0;
  107.  
  108.         //puis le fils droit
  109.         while(fd[i] != '\0' && i < 4){
  110.             if(fd[i+1] == '0' && fd[i+2] == '0'){
  111.                 fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
  112.                 valNull++;
  113.                 fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
  114.                 valNull++;
  115.             }
  116.             else if(fg[i+1] == '0'){
  117.                 fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
  118.                 fichierGraphe << "\t" << fd[i] << " -> " << fd[i+2] << ";\n";
  119.                 valNull++;
  120.             }
  121.             else if(fg[i+2] == '0'){
  122.                 fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
  123.                 fichierGraphe << "\t" << fd[i] << " -> " << fd[i+2] << ";\n";
  124.                 valNull++;
  125.             }
  126.             else{
  127.                 fichierGraphe << "\t" << fd[i] << " -> " << fd[i+1] << ";\n";
  128.                 fichierGraphe << "\t" << fd[i] << " -> " << fd[i+2] << ";\n";
  129.             }
  130.  
  131.             i+=2;
  132.         }
  133.  
  134.         fichierGraphe << "}";
  135.  
  136.         return true;
  137.     }
  138.     else{
  139.         cout << "Impossible d'ouvrir le fichier !" << endl;
  140.         return false;
  141.     }
  142. }
  143.  
  144. string Arbre::lire(fstream &fichier)
  145. {
  146.     fichier.seekp(0);
  147.     string line;
  148.     string res;
  149.  
  150.     if (fichier.is_open()){
  151.         while (getline(fichier,line)){
  152.             cout << line << endl;
  153.             res += line;
  154.         }
  155.         fichier.close();
  156.     }
  157.     else
  158.         cout << "Unable to open file";
  159.  
  160.     return res;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement