Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : conversion AFND afd [ Algorithme / Autre ] (khallou2007)

lundi 5 mai 2008 à 22:21:03 | conversion AFND afd

khallou2007

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();
       
       
        
    }
}



mercredi 7 mai 2008 à 20:39:12 | Re : conversion AFND afd

khallou2007

aucune solution ou une idée ??



Cette discussion est classé dans : int, etat, for, nb, afnd


Répondre à ce message

Sujets en rapport avec ce message

puissance et binaire [ par mysty57 ] Bonjour, voila j'ai fais une classe Ensemble que voici:<br version recursive pour des boucles imbriquées [ par code32 ] bonjour, j'ai trouvé un problème pour faire une version récursive pour des boucles imbriquées d'abord est ce qu'il est possible si oui : j'ai un exemp java.lang.NullPointerException [ par chris182 ] Quand je lance mon programme, voila l'erruer que ça m'affiche :"java.lang.NullPointerException"J'ai trouvé l'endroit dans mon code qui posait problème vector [ par gigi00 ] bonjour je veux que ce programme rempli aleatoirement  un tableau de 9 saans repition mais j ai un probleme  au niveau des colonnes import java.util.V faute inaperçue [ par TSI3ISSAT ] ce programme n'affiche que 1pour quoi? int fact(int n){  int i,P=1;  for(i=n;i>0;i--)  P=P*i;  return P;  }  double pow(double x, int n)   { int i;    Blocage projet rpg ! [ par anthonyhk ] voila g un probleme avecm on programme.g deux classes, une classe Carte et une classe PersonnageJoueur extends Personnagevoila en gros, ce que jarrive Petit problème simple [ par wamdeus ] Bonjour tout le monde, en cette belle journée de 1er Mai (fête du travail ne l'oublions pas) j'ai une bonne question à vous poser.Petit résumé de mon probleme avec for+while [ par wamdeus ] bon bah c'est très simple mon but est de créer un mot mêlés, j'ai donc fait des méthodes d'alignement comme ci dessous : // public void Diag6_1(String


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.