Conversion AFND afd

Signaler
Messages postés
51
Date d'inscription
dimanche 9 décembre 2007
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
1
Date d'inscription
samedi 24 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2009
-
bonjour,
je
suis intéressé à programmer en Java la conversion d'une AFND (automate finie non deterministe)donné à
AFD(automate finie  deterministe) , je me trouve un peut bloquer dans  la methode Transf_Afnd_Afd()) :
(l'affichage est juste seulement pour la premiere etat ,je pense qu'il faut une methode recursive) ,s'il ya une autre methode plus meilleur ou une idéé ca m'aide beaucoup
et merci d'avance.
voila un lien qui explique bien la conversion manuellement:
http://fastnet.univ-brest.fr/~gire/COURS/COMPIL_IUP/node205.html
voila mon code

class Afnd
{

////attributs
    int nb_etat;//nombre d'etat
    int nb_symb;//nombre de symboles
    int nbe_atteindre;//nbre d'etat atteindre par un symbole
    int num_etat;// numero d'etat
    char sym='a';//symbole initialisé à 'a'
    char tabS[];// tableau de symboles
    int tabEat[];// tableau d'etat atteindre par un symbole
    int tabNbat[];// tableau des nbre d'etat atteindre par un symbole
    int tabEn[];//tableau d'etat d'automate fini non deterministe
    int tabEf[];//tableau d'etat d'automate  fini deterministe
    int tabEs[];
   
  

//constructeur
    Afnd(int nb_etat,int nb_symb)
    {
        this.nb_etat=nb_etat;
        this.nb_symb=nb_symb;
        tabS=new char[50];   
        tabEat=new int[100];
        tabNbat=new int[1000];
        tabEn=new int[1000];
        tabEf=new int[1000];
        tabEs=new int[1000];
   
    }
   
   
    //methode de construction d'une AFND
    public void ConstructionAfnd()
    {
        int p=0;int l=0;
            for(int j=0;j<nb_symb;j++)
            {
               
                for(int i=0;i<nb_etat;i++)
                    {
                        do
   
                    nbe_atteindre= ESBasique.litInt("de l'etat "+i+"
combien d'etat vous pouvez atteindre avec le symbole "+sym);
                        while(nbe_atteindre>nb_etat);
                        tabNbat[l]=nbe_atteindre;
                        l++;
                        for(int k=0;k<nbe_atteindre;k++)
                        {
                            do
                            num_etat= ESBasique.litInt("vous pouvez atteindre l'etat: " );
                            while(num_etat>nb_etat);
                       
                            tabEat[p]=num_etat;
                           
                            p++;
                           
                        }
                    }
                    tabS[j]=sym;
                    sym++;
            }
        }
   
    // calculer les nombres des etats atteindre par tt les symboles
    public int somme_Tab()
    {
        int s=0;
        for(int i=0;i<nb_symb*nb_etat;i++)
        {
            s+=tabNbat[i];
           
        }
        return s;
    }
   
    //transformer Afnd à Afd
    public void Transf_Afnd_Afd()
    {
        int r;
        int m=0;
        int l=1;
        int v=0;
        int p;
        p=somme_Tab();
       
        while(p!=0)
        {
            for(r=m;r<=m;r++)
            System.out.print(tabEf[r]);
            System.out.print("   |");
            for(int j=0;j<nb_symb;j++)
            {
                int z=0;
                for(int k=j*nb_etat;k<((j+1)*nb_etat)-1;k++)
                {
                   
                   
                    tabEn[z]=z;
                   
                    for(r=0;r<=m;r++,z++)
                    if(tabEf[m]==tabEn[z])
                     {
                        if(tabNbat[k]!=0)
                        {
                            l=0;
                            v=tabNbat[k];
                            for(int x=0;x<v;x++)
                            {
                                tabEs[l]=tabEat[x];
                                System.out.print(tabEs[l]);
                                System.out.print(",");
                                l++;
                               
                            }
                                for(int i=0;i<=v;i++)
                                tabEf[i]=tabEs[i];
                               
                        }
                     }
                    
                    }
                    z++;
                   
                    System.out.print("|");
                }   
                System.out.print(" \n");
                 p--;   
            }
             
           
        }
       
       
   
   
   
    //afficher l'automate fini deterministe

    public String toString()

    {
        String s=" ";
        for(int i=0;i<nb_symb;i++)
        s=s+"  |"+tabS[i];
        s=s+"\n";
        return s;
    }
}

class Afnd_afd
{
    public static void main(String args[])
    {
        int nbe= ESBasique.litInt("\n donner le nombre des etats: ");
        int nbs= ESBasique.litInt("\n donner le nombre des symnoles: ");
        Afnd afn=new Afnd(nbe,nbs);
        afn.ConstructionAfnd();
        System.out.printf("l'automate fini deterministe est: \n "+afn.toString());
        afn.Transf_Afnd_Afd();
       
       
        
    }
}

2 réponses

Messages postés
51
Date d'inscription
dimanche 9 décembre 2007
Statut
Membre
Dernière intervention
13 juillet 2010

aucune solution ou une idée ??
Messages postés
1
Date d'inscription
samedi 24 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2009

Est ce que c possible d'avoir le résultat final de ce programme?
Merci d'avance