1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
#include "automate.h"
using namespace std;
///REREGARDER LES ADRESSESETATS
string intToString(int i)
{
ostringstream oss;
oss << i;
return oss.str();
}
Automate:: Automate(string _nom, bool &lu):nom(_nom)
{
ifstream fichier(nom.c_str());///nous ouvrons le fichier
int donnee;
int i = 0, j = 0;
ascii = 97;
if(fichier)
{
fichier >> donnee;///ici nous creons les donnees lu par l'automate
for (i = 0; i < donnee; ++i)
{
alphabet.push_back(ascii);
ascii ++;
}
fichier >> donnee;
nbr_etat = donnee;
for(i = 0; i < donnee; i++)
adresseEtat.push_back(creationEtat(i + 1));
fichier >> donnee;
initialisionEntreSortie(fichier, donnee, adresseEtat, 0);
fichier >> donnee;
initialisionEntreSortie(fichier, donnee, adresseEtat, 1);
///ici nous recuperons les transitions
fichier >> donnee;
initialisationTransition(fichier, donnee, adresseEtat);/*///*/
fichier.close();
lu = true;
}
else
cout << "nous n'avons pas reussi a ouvrir le fichier demander" << endl;
}
Automate::~Automate()
{
if(adresseEtat.size() >= 1)
{
for(int i = 0; i <= nbr_etat - 1; i++)///on supprime les etat apres utilisation
delete adresseEtat[i];
}
}
Etat* Automate:: creationEtat(int nom_etat)///création du maillon et initialisation
{
Etat* maillon = new Etat;
maillon->nom = intToString (nom_etat);
maillon->entre = 0;
maillon->sortie = 0;
maillon->nb_trans = 0;
return maillon;
}
///permet d'initialisation des entre et des sortie
void Automate:: initialisionEntreSortie(ifstream &fichier, int tour, vector <Etat*>& adresseEtat, int choix)
{
int compteur = 0;
int donnee = 0;
for(compteur = 0; compteur <= tour - 1; compteur++)
{
fichier >> (donnee);
if(choix == 0)///si on initialise une entree
{
adresseEtat[donnee - 1]->entre = 1;
nbr_entre = tour;
}
else///si on initialise une sortie
{
adresseEtat[donnee - 1]->sortie = 1;
nbr_sortie = tour;
}
}
} |
Partager