Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <fstream>
- #include <string.h>
- #include "Arbre.h"
- using namespace std;
- int main(){
- Arbre a1;
- fstream fichierLineaire; /* Fichier qui contient la version lineaire de l'arbre */
- fichierLineaire.open("../arbreLineaire.txt");
- fstream fichierGraphe; /* Fichier qui contient la version graphViz de l'arbre */
- fichierGraphe.open("../arbreGraph.txt");
- string abrLineaire = "";
- a1.insererElement(3, a1.adRacine);
- a1.insererElement(1, a1.adRacine);
- a1.insererElement(2, a1.adRacine);
- a1.insererElement(4, a1.adRacine);
- a1.insererElement(5, a1.adRacine);
- /* generer le fichier qui contient la version lineaire de l'arbre. */
- a1.genererFichier(fichierLineaire, a1.adRacine); // OK
- /* lire ligne par ligne le fichier qui contient la version lineaire de l'arbre */
- abrLineaire = a1.lire(fichierLineaire);
- cout << "abrLineaire = " << abrLineaire << endl; // OK
- /* on genere le fichier GraphViz */
- a1.genererGraphe(abrLineaire, fichierGraphe); // KO
- /* on genere le graphe */
- system("dot -Tpng ../arbreGraph.txt -o ../graph.png");
- return 0;
- }
- bool Arbre::genererFichier(fstream &fichierLineaire, Noeud* n){
- if (fichierLineaire.is_open()){
- if (n != NULL){
- fichierLineaire << to_string(n->info);
- if(n->fg == NULL && n->fd == NULL)
- fichierLineaire << "00";
- else if(n->fg == NULL || n->fd == NULL)
- fichierLineaire << "0";
- if (n->fg != NULL)
- genererFichier(fichierLineaire, n->fg);
- if(n->fd != NULL)
- genererFichier(fichierLineaire, n->fd);
- }
- }
- else{
- cout << "Impossible d'ouvrir le fichier !" << endl;
- return false;
- }
- return true;
- }
- bool Arbre::genererGraphe(string chaine, fstream &fichierGraphe){
- fichierGraphe.seekp(0);
- if(fichierGraphe.is_open())
- {
- string racine = chaine.substr(0, 1);
- string fg = chaine.substr(1, 5);
- string fd = chaine.substr(6, 5);
- int i = 0;
- int valNull = 0;
- fichierGraphe << "digraph arbre {\n";
- fichierGraphe << "node [fontname=\"Arial\"];\n";
- // on ecrit d'abord les deux fils de la racine
- fichierGraphe << "\t" << racine << " -> " << fg[0] << ";\n";
- fichierGraphe << "\t" << racine << " -> " << fd[0] << ";\n";
- //puis on fait le fils gauche
- while(fg[i] != '\0' && i < 4){
- if(fg[i+1] == '0' && fg[i+2] == '0'){
- fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
- valNull++;
- fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
- valNull++;
- }
- else if(fg[i+1] == '0'){
- fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
- fichierGraphe << "\t" << fg[i] << " -> " << fg[i+2] << ";\n";
- valNull++;
- }
- else if(fg[i+2] == '0'){
- fichierGraphe << "\t" << fg[i] << " -> null" << valNull << ";\n";
- fichierGraphe << "\t" << fg[i] << " -> " << fg[i+2] << ";\n";
- valNull++;
- }
- else{
- fichierGraphe << "\t" << fg[i] << " -> " << fg[i+1] << ";\n";
- fichierGraphe << "\t" << fg[i] << " -> " << fg[i+2] << ";\n";
- }
- i+=2;
- }
- i = 0;
- //puis le fils droit
- while(fd[i] != '\0' && i < 4){
- if(fd[i+1] == '0' && fd[i+2] == '0'){
- fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
- valNull++;
- fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
- valNull++;
- }
- else if(fg[i+1] == '0'){
- fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
- fichierGraphe << "\t" << fd[i] << " -> " << fd[i+2] << ";\n";
- valNull++;
- }
- else if(fg[i+2] == '0'){
- fichierGraphe << "\t" << fd[i] << " -> null" << valNull << ";\n";
- fichierGraphe << "\t" << fd[i] << " -> " << fd[i+2] << ";\n";
- valNull++;
- }
- else{
- fichierGraphe << "\t" << fd[i] << " -> " << fd[i+1] << ";\n";
- fichierGraphe << "\t" << fd[i] << " -> " << fd[i+2] << ";\n";
- }
- i+=2;
- }
- fichierGraphe << "}";
- return true;
- }
- else{
- cout << "Impossible d'ouvrir le fichier !" << endl;
- return false;
- }
- }
- string Arbre::lire(fstream &fichier)
- {
- fichier.seekp(0);
- string line;
- string res;
- if (fichier.is_open()){
- while (getline(fichier,line)){
- cout << line << endl;
- res += line;
- }
- fichier.close();
- }
- else
- cout << "Unable to open file";
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement