Accueil > > > TRANSFORMATION AFN EN AFD
TRANSFORMATION AFN EN AFD
Information sur la source
Description
pour ceux qui cherche un programme qui transforme un afn en afd
Source
- ///////////////////////////////////////////////////////////////////////////
- // Transformation AFN en AFD
- //
- #include <stdio.h>
- #include <stdlib.h>
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- #define EPSILON -1
- #define NOETAT -1
-
- ///////////////////////////////////////////////////////////////////////////
- // A F N
- //
- typedef struct ptr_list* ptr_list_t;
- struct ptr_list
- {
- int info;
- ptr_list_t suiv;
- };
-
- typedef struct ptr_trans* ptr_trans_t;
- struct ptr_trans
- {
- int e, s;
- ptr_list_t vers_e;
- ptr_trans_t suiv;
- };
-
- typedef struct
- {
- ptr_list_t letat;
- ptr_list_t lsymb;
- ptr_trans_t ltrans;
- }afn_t;
-
- ///////////////////////////////////////////////////////////////////////////
- // A F D
- //
- typedef struct ptr_detat* ptr_detat_t;
- struct ptr_detat
- {
- int e;
- ptr_list_t letat;
- ptr_detat_t suiv;
- };
-
- typedef struct ptr_dtrans* ptr_dtrans_t;
- struct ptr_dtrans
- {
- int de, s, fe;
- ptr_dtrans_t suiv;
- };
-
- typedef struct
- {
- ptr_detat_t ldetat;
- ptr_list_t lsymb;
- ptr_dtrans_t ltrans;
- }afd_t;
-
- ///////////////////////////////////////////////////////////////////////////
- // P R O T O T Y P E
- //
- afn_t* saisie_afn();
- void affiche_afd(afd_t*);
- afd_t* afn2afd(afn_t*);
- void free_afn(afn_t*);
- void free_afd(afd_t*);
-
- ///////////////////////////////////////////////////////////////////////////
- // F O N C T I O N M A I N
- //
- void main()
- {
- // Variables locales
- afn_t *afn;
- afd_t *afd;
-
- // Création de l'AFN
- afn = saisie_afn();
-
- // Transformation de l'AFN
- afd = afn2afd(afn);
-
- // Affichage des resultats
- affiche_afd(afd);
-
- // Libération de la mémoire
- free_afn(afn);
- free_afd(afd);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void free_list(ptr_list_t p)
- {
- while (p)
- {
- ptr_list_t q = p;
- p = p->suiv;
- free(q);
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void free_afn(afn_t *afn)
- {
- ptr_trans_t q, p = afn->ltrans;
-
- free_list(afn->letat);
- free_list(afn->lsymb);
- while (p)
- {
- q = p;
- p = q->suiv;
- free_list(q->vers_e);
- free(q);
- }
- }
-
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void free_afd(afd_t *afd)
- {
- ptr_detat_t q1, p1 = afd->ldetat;
- ptr_dtrans_t q2, p2 = afd->ltrans;
- while (p1)
- {
- q1 = p1;
- p1 = q1->suiv;
- free_list(q1->letat);
- free(q1);
- }
- free_list(afd->lsymb);
- while (p2)
- {
- q2 = p2;
- p2 = p2->suiv;
- free(q2);
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void list_inserer(ptr_list_t *ptr, int e)
- {
- ptr_list_t p = (ptr_list_t)malloc(sizeof(struct ptr_list));
- p->info = e;
- p->suiv = 0;
- if (*ptr)
- {
- ptr_list_t q;
- for (q = *ptr; q->suiv; q = q->suiv);
- q->suiv = p;
- }
- else
- *ptr = p;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- afn_t* saisie_afn()
- {
- int nbr_etat, nbr_symb, nbr, i, j, k, e;
- afn_t *afn;
- ptr_trans_t tr;
-
- afn = (afn_t*)malloc(sizeof(afn_t));
- afn->letat = 0;
- afn->lsymb = 0;
- afn->ltrans = 0;
-
- // La list des etats
- printf("Donner le nombre des etats: ");
- scanf("%d", &nbr_etat);
- for (i = 0; i < nbr_etat; i++)
- list_inserer(&afn->letat, i);
-
- /* La list des symboles */
- printf("Donner le nombre des symboles (sans compter l'epsilon): ");
- scanf("%d", &nbr_symb);
- for (i = 0; i < nbr_symb; i++)
- list_inserer(&afn->lsymb, i);
-
- // La list des transition
- for (i = 0; i < nbr_etat; i++)
- for (j = -1; j < nbr_symb; j++)
- {
- if (j == -1)
- printf("De l'etat '%d' combien d'etat vous pouvez atteindre avec le symbole epsilon: ", i);
- else
- printf("De l'etat '%d' combien d'etat vous pouvez atteindre avec le symbole %c: ", i, 'a' + j);
-
- scanf("%d", &nbr);
- if (nbr)
- {
- tr = (ptr_trans_t)malloc(sizeof(struct ptr_trans));
-
- tr->e = i;
- tr->s = j;
- tr->vers_e = 0;
-
- for (k = 0; k < nbr; k++)
- {
- printf("Vous pouvez atteindre l'etat ? ");
- scanf("%d", &e);
- list_inserer(&tr->vers_e, e);
- }
-
- tr->suiv = afn->ltrans;
- afn->ltrans = tr;
- }
- }
-
- return (afn);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void affiche_afd(afd_t *afd)
- {
- ptr_detat_t d;
- ptr_list_t s;
-
- d = afd->ldetat;
- printf(" |");
- for (s = afd->lsymb; s; s = s->suiv)
- printf(" %c |", 'a' + s->info);
- printf("\n");
- for (d = afd->ldetat; d; d = d->suiv)
- {
- ptr_dtrans_t ldtr;
-
- printf("%c |", 'A' + d->e);
- for (ldtr = afd->ltrans; ldtr; ldtr = ldtr->suiv)
- if (ldtr->de == d->e)
- printf(" %c |", 'A' + ldtr->fe);
- printf("\n");
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void afd_ajouter_etat(ptr_detat_t *ldetat, int e, ptr_list_t letat)
- {
- ptr_detat_t lde;
- ptr_list_t p;
-
- lde = (ptr_detat_t)malloc(sizeof(struct ptr_detat));
-
- lde->e = e;
- lde->letat = 0;
- lde->suiv = 0;
- for (p = letat; p; p = p->suiv)
- list_inserer(&lde->letat, p->info);
-
- if (*ldetat)
- {
- ptr_detat_t q;
- for (q = *ldetat; q->suiv; q = q->suiv);
- q->suiv = lde;
- }
- else
- *ldetat = lde;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- int is_in_list(ptr_list_t letat, int e)
- {
- ptr_list_t p;
- for (p = letat; p; p = p->suiv)
- if (p->info == e)
- return (1);
- return (0);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- int epsilon_arc(afn_t* afn, int se, int fe)
- {
- ptr_trans_t p;
- ptr_list_t q;
- for (p = afn->ltrans; p; p = p->suiv)
- if ((p->e == se) && (p->s == EPSILON))
- for (q = p->vers_e; q; q = q->suiv)
- if (q->info == fe)
- return (1);
- return (0);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void empiler_etat(ptr_list_t *p, int e)
- {
- ptr_list_t q = (ptr_list_t)malloc(sizeof(struct ptr_list));
- q->info = e;
- q->suiv = *p;
- *p = q;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- int depiler_etat(ptr_list_t *letat)
- {
- int e;
- ptr_list_t p;
-
- if (*letat)
- {
- e = (*letat)->info;
- p = *letat;
- *letat = p->suiv;
- free(p);
- return (e);
- }
- else
- return (NOETAT);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- ptr_list_t epsilon_fermeture(afn_t* afn, ptr_list_t T)
- {
- ptr_list_t p, e_f = 0, pile_etat = 0;
- int t;
-
- for (p = T; p; p = p->suiv)
- {
- /* On initialise le epsilon fermeture de T à T */
- list_inserer(&e_f, p->info);
- /* On empile tout les etats des T */
- empiler_etat(&pile_etat, p->info);
- }
-
- /* Tant que pile est non vide */
- while ((t = depiler_etat(&pile_etat)) != NOETAT)
- {
- for (p = afn->letat; p; p = p->suiv)
- {
- /* Pour chaque etat u avec un arc de t à u etiquite epsilon */
- /* u = p->e*/
- if (epsilon_arc(afn, t, p->info))
- {
- /* Si u n'appartient pas à epsilon fermeture de T */
- if (!is_in_list(e_f, p->info))
- {
- /* Ajouter u à l'epsilon fermeture de T */
- list_inserer(&e_f, p->info);
- /* On empile u dans la pile */
- empiler_etat(&pile_etat, p->info);
- }
- }
- }
- }
- return (e_f);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- void afd_ajouter_trans(ptr_dtrans_t *ltrans, int de, int fe, int s)
- {
- ptr_dtrans_t dtrans = (ptr_dtrans_t)malloc(sizeof(struct ptr_dtrans));
- dtrans->de = de;
- dtrans->fe = fe;
- dtrans->s = s;
- dtrans->suiv = 0;
-
- if (*ltrans)
- {
- ptr_dtrans_t q;
- for (q = *ltrans; q->suiv; q = q->suiv);
- q->suiv = dtrans;
- }
- else
- *ltrans = dtrans;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- int afd_trouve_etat(afd_t *afd, ptr_list_t letat)
- {
- ptr_detat_t dp;
- ptr_list_t dp_le, dp_e;
-
- for (dp = afd->ldetat; dp; dp = dp->suiv)
- {
- int nbr_element = 0;
-
- /* Sont t-il egaux en nombre d'element */
- for (dp_e = dp->letat; dp_e; dp_e = dp_e->suiv, nbr_element++);
- for (dp_le = letat; dp_le; dp_le = dp_le->suiv, nbr_element--);
- if (nbr_element == 0)
- {
- for (dp_e = dp->letat; dp_e; dp_e = dp_e->suiv)
- {
- int trouve = 0;
-
- for (dp_le = letat; dp_le; dp_le = dp_le->suiv)
- if (dp_le->info == dp_e->info)
- {
- trouve = 1;
- break;
- }
- if (trouve == 0)
- return (NOETAT);
- }
- return (dp->e);
- }
- }
- return (NOETAT);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- ptr_list_t transiter(afn_t* afn, ptr_list_t letat, int s)
- {
- ptr_list_t p, q, tran = 0;
- ptr_trans_t tr;
-
- for (p = letat; p; p = p->suiv)
- for (tr = afn->ltrans; tr; tr = tr->suiv)
- if ((tr->e == p->info) && (tr->s == s))
- for (q = tr->vers_e; q; q = q->suiv)
- list_inserer(&tran, q->info);
-
- return (tran);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- //
- afd_t* afn2afd(afn_t *afn)
- {
- afd_t *afd;
- ptr_list_t L = 0, U, s;
- ptr_detat_t p;
- int ee, e = 0;
-
- afd = (afd_t*)malloc(sizeof(afd_t));
- afd->ldetat = 0;
- afd->lsymb = 0;
- afd->ltrans = 0;
-
- /* L'AFN et l'AFD ont les même symboles */
- for (s = afn->lsymb; s; s = s->suiv)
- list_inserer(&afd->lsymb, s->info);
-
- list_inserer(&L, 0);
- U = epsilon_fermeture(afn, L);
- afd_ajouter_etat(&afd->ldetat, e++, U);
- for (p = afd->ldetat; p; p = p->suiv)
- {
- for (s = afn->lsymb; s; s = s->suiv)
- {
- /* Netoyage de mémoire */
- free_list(L);
- free_list(U);
-
- L = transiter(afn, p->letat, s->info);
- U = epsilon_fermeture(afn, L);
-
- ee = afd_trouve_etat(afd, U);
- if (ee == NOETAT)
- {
- /* On lui donne un nom */
- ee = e++;
- afd_ajouter_etat(&afd->ldetat, ee, U);
- }
- afd_ajouter_trans(&afd->ltrans, p->e, ee, s->info);
- }
- }
- free_list(L);
- free_list(U);
-
- return (afd);
- }
///////////////////////////////////////////////////////////////////////////
// Transformation AFN en AFD
//
#include <stdio.h>
#include <stdlib.h>
///////////////////////////////////////////////////////////////////////////
//
//
#define EPSILON -1
#define NOETAT -1
///////////////////////////////////////////////////////////////////////////
// A F N
//
typedef struct ptr_list* ptr_list_t;
struct ptr_list
{
int info;
ptr_list_t suiv;
};
typedef struct ptr_trans* ptr_trans_t;
struct ptr_trans
{
int e, s;
ptr_list_t vers_e;
ptr_trans_t suiv;
};
typedef struct
{
ptr_list_t letat;
ptr_list_t lsymb;
ptr_trans_t ltrans;
}afn_t;
///////////////////////////////////////////////////////////////////////////
// A F D
//
typedef struct ptr_detat* ptr_detat_t;
struct ptr_detat
{
int e;
ptr_list_t letat;
ptr_detat_t suiv;
};
typedef struct ptr_dtrans* ptr_dtrans_t;
struct ptr_dtrans
{
int de, s, fe;
ptr_dtrans_t suiv;
};
typedef struct
{
ptr_detat_t ldetat;
ptr_list_t lsymb;
ptr_dtrans_t ltrans;
}afd_t;
///////////////////////////////////////////////////////////////////////////
// P R O T O T Y P E
//
afn_t* saisie_afn();
void affiche_afd(afd_t*);
afd_t* afn2afd(afn_t*);
void free_afn(afn_t*);
void free_afd(afd_t*);
///////////////////////////////////////////////////////////////////////////
// F O N C T I O N M A I N
//
void main()
{
// Variables locales
afn_t *afn;
afd_t *afd;
// Création de l'AFN
afn = saisie_afn();
// Transformation de l'AFN
afd = afn2afd(afn);
// Affichage des resultats
affiche_afd(afd);
// Libération de la mémoire
free_afn(afn);
free_afd(afd);
}
///////////////////////////////////////////////////////////////////////////
//
//
void free_list(ptr_list_t p)
{
while (p)
{
ptr_list_t q = p;
p = p->suiv;
free(q);
}
}
///////////////////////////////////////////////////////////////////////////
//
//
void free_afn(afn_t *afn)
{
ptr_trans_t q, p = afn->ltrans;
free_list(afn->letat);
free_list(afn->lsymb);
while (p)
{
q = p;
p = q->suiv;
free_list(q->vers_e);
free(q);
}
}
///////////////////////////////////////////////////////////////////////////
//
//
void free_afd(afd_t *afd)
{
ptr_detat_t q1, p1 = afd->ldetat;
ptr_dtrans_t q2, p2 = afd->ltrans;
while (p1)
{
q1 = p1;
p1 = q1->suiv;
free_list(q1->letat);
free(q1);
}
free_list(afd->lsymb);
while (p2)
{
q2 = p2;
p2 = p2->suiv;
free(q2);
}
}
///////////////////////////////////////////////////////////////////////////
//
//
void list_inserer(ptr_list_t *ptr, int e)
{
ptr_list_t p = (ptr_list_t)malloc(sizeof(struct ptr_list));
p->info = e;
p->suiv = 0;
if (*ptr)
{
ptr_list_t q;
for (q = *ptr; q->suiv; q = q->suiv);
q->suiv = p;
}
else
*ptr = p;
}
///////////////////////////////////////////////////////////////////////////
//
//
afn_t* saisie_afn()
{
int nbr_etat, nbr_symb, nbr, i, j, k, e;
afn_t *afn;
ptr_trans_t tr;
afn = (afn_t*)malloc(sizeof(afn_t));
afn->letat = 0;
afn->lsymb = 0;
afn->ltrans = 0;
// La list des etats
printf("Donner le nombre des etats: ");
scanf("%d", &nbr_etat);
for (i = 0; i < nbr_etat; i++)
list_inserer(&afn->letat, i);
/* La list des symboles */
printf("Donner le nombre des symboles (sans compter l'epsilon): ");
scanf("%d", &nbr_symb);
for (i = 0; i < nbr_symb; i++)
list_inserer(&afn->lsymb, i);
// La list des transition
for (i = 0; i < nbr_etat; i++)
for (j = -1; j < nbr_symb; j++)
{
if (j == -1)
printf("De l'etat '%d' combien d'etat vous pouvez atteindre avec le symbole epsilon: ", i);
else
printf("De l'etat '%d' combien d'etat vous pouvez atteindre avec le symbole %c: ", i, 'a' + j);
scanf("%d", &nbr);
if (nbr)
{
tr = (ptr_trans_t)malloc(sizeof(struct ptr_trans));
tr->e = i;
tr->s = j;
tr->vers_e = 0;
for (k = 0; k < nbr; k++)
{
printf("Vous pouvez atteindre l'etat ? ");
scanf("%d", &e);
list_inserer(&tr->vers_e, e);
}
tr->suiv = afn->ltrans;
afn->ltrans = tr;
}
}
return (afn);
}
///////////////////////////////////////////////////////////////////////////
//
//
void affiche_afd(afd_t *afd)
{
ptr_detat_t d;
ptr_list_t s;
d = afd->ldetat;
printf(" |");
for (s = afd->lsymb; s; s = s->suiv)
printf(" %c |", 'a' + s->info);
printf("\n");
for (d = afd->ldetat; d; d = d->suiv)
{
ptr_dtrans_t ldtr;
printf("%c |", 'A' + d->e);
for (ldtr = afd->ltrans; ldtr; ldtr = ldtr->suiv)
if (ldtr->de == d->e)
printf(" %c |", 'A' + ldtr->fe);
printf("\n");
}
}
///////////////////////////////////////////////////////////////////////////
//
//
void afd_ajouter_etat(ptr_detat_t *ldetat, int e, ptr_list_t letat)
{
ptr_detat_t lde;
ptr_list_t p;
lde = (ptr_detat_t)malloc(sizeof(struct ptr_detat));
lde->e = e;
lde->letat = 0;
lde->suiv = 0;
for (p = letat; p; p = p->suiv)
list_inserer(&lde->letat, p->info);
if (*ldetat)
{
ptr_detat_t q;
for (q = *ldetat; q->suiv; q = q->suiv);
q->suiv = lde;
}
else
*ldetat = lde;
}
///////////////////////////////////////////////////////////////////////////
//
//
int is_in_list(ptr_list_t letat, int e)
{
ptr_list_t p;
for (p = letat; p; p = p->suiv)
if (p->info == e)
return (1);
return (0);
}
///////////////////////////////////////////////////////////////////////////
//
//
int epsilon_arc(afn_t* afn, int se, int fe)
{
ptr_trans_t p;
ptr_list_t q;
for (p = afn->ltrans; p; p = p->suiv)
if ((p->e == se) && (p->s == EPSILON))
for (q = p->vers_e; q; q = q->suiv)
if (q->info == fe)
return (1);
return (0);
}
///////////////////////////////////////////////////////////////////////////
//
//
void empiler_etat(ptr_list_t *p, int e)
{
ptr_list_t q = (ptr_list_t)malloc(sizeof(struct ptr_list));
q->info = e;
q->suiv = *p;
*p = q;
}
///////////////////////////////////////////////////////////////////////////
//
//
int depiler_etat(ptr_list_t *letat)
{
int e;
ptr_list_t p;
if (*letat)
{
e = (*letat)->info;
p = *letat;
*letat = p->suiv;
free(p);
return (e);
}
else
return (NOETAT);
}
///////////////////////////////////////////////////////////////////////////
//
//
ptr_list_t epsilon_fermeture(afn_t* afn, ptr_list_t T)
{
ptr_list_t p, e_f = 0, pile_etat = 0;
int t;
for (p = T; p; p = p->suiv)
{
/* On initialise le epsilon fermeture de T à T */
list_inserer(&e_f, p->info);
/* On empile tout les etats des T */
empiler_etat(&pile_etat, p->info);
}
/* Tant que pile est non vide */
while ((t = depiler_etat(&pile_etat)) != NOETAT)
{
for (p = afn->letat; p; p = p->suiv)
{
/* Pour chaque etat u avec un arc de t à u etiquite epsilon */
/* u = p->e*/
if (epsilon_arc(afn, t, p->info))
{
/* Si u n'appartient pas à epsilon fermeture de T */
if (!is_in_list(e_f, p->info))
{
/* Ajouter u à l'epsilon fermeture de T */
list_inserer(&e_f, p->info);
/* On empile u dans la pile */
empiler_etat(&pile_etat, p->info);
}
}
}
}
return (e_f);
}
///////////////////////////////////////////////////////////////////////////
//
//
void afd_ajouter_trans(ptr_dtrans_t *ltrans, int de, int fe, int s)
{
ptr_dtrans_t dtrans = (ptr_dtrans_t)malloc(sizeof(struct ptr_dtrans));
dtrans->de = de;
dtrans->fe = fe;
dtrans->s = s;
dtrans->suiv = 0;
if (*ltrans)
{
ptr_dtrans_t q;
for (q = *ltrans; q->suiv; q = q->suiv);
q->suiv = dtrans;
}
else
*ltrans = dtrans;
}
///////////////////////////////////////////////////////////////////////////
//
//
int afd_trouve_etat(afd_t *afd, ptr_list_t letat)
{
ptr_detat_t dp;
ptr_list_t dp_le, dp_e;
for (dp = afd->ldetat; dp; dp = dp->suiv)
{
int nbr_element = 0;
/* Sont t-il egaux en nombre d'element */
for (dp_e = dp->letat; dp_e; dp_e = dp_e->suiv, nbr_element++);
for (dp_le = letat; dp_le; dp_le = dp_le->suiv, nbr_element--);
if (nbr_element == 0)
{
for (dp_e = dp->letat; dp_e; dp_e = dp_e->suiv)
{
int trouve = 0;
for (dp_le = letat; dp_le; dp_le = dp_le->suiv)
if (dp_le->info == dp_e->info)
{
trouve = 1;
break;
}
if (trouve == 0)
return (NOETAT);
}
return (dp->e);
}
}
return (NOETAT);
}
///////////////////////////////////////////////////////////////////////////
//
//
ptr_list_t transiter(afn_t* afn, ptr_list_t letat, int s)
{
ptr_list_t p, q, tran = 0;
ptr_trans_t tr;
for (p = letat; p; p = p->suiv)
for (tr = afn->ltrans; tr; tr = tr->suiv)
if ((tr->e == p->info) && (tr->s == s))
for (q = tr->vers_e; q; q = q->suiv)
list_inserer(&tran, q->info);
return (tran);
}
///////////////////////////////////////////////////////////////////////////
//
//
afd_t* afn2afd(afn_t *afn)
{
afd_t *afd;
ptr_list_t L = 0, U, s;
ptr_detat_t p;
int ee, e = 0;
afd = (afd_t*)malloc(sizeof(afd_t));
afd->ldetat = 0;
afd->lsymb = 0;
afd->ltrans = 0;
/* L'AFN et l'AFD ont les même symboles */
for (s = afn->lsymb; s; s = s->suiv)
list_inserer(&afd->lsymb, s->info);
list_inserer(&L, 0);
U = epsilon_fermeture(afn, L);
afd_ajouter_etat(&afd->ldetat, e++, U);
for (p = afd->ldetat; p; p = p->suiv)
{
for (s = afn->lsymb; s; s = s->suiv)
{
/* Netoyage de mémoire */
free_list(L);
free_list(U);
L = transiter(afn, p->letat, s->info);
U = epsilon_fermeture(afn, L);
ee = afd_trouve_etat(afd, U);
if (ee == NOETAT)
{
/* On lui donne un nom */
ee = e++;
afd_ajouter_etat(&afd->ldetat, ee, U);
}
afd_ajouter_trans(&afd->ltrans, p->e, ee, s->info);
}
}
free_list(L);
free_list(U);
return (afd);
}
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
afn vers afd [ par ngaspama ]
Salut, j'ai besoin d'aide; en effet je cherche un programme qui transforme un automate fini non-déterministe (afnd) en un un automate fini déterminist
automate fini deterministe [ par haprogra ]
je cherche le code source en langage C pour un programme qui demande de faire entrer un automate puis un mot et de tester si le mot est reconnu par l
demande une application en c++ pour automate a etat fini [ par hajimohamed1 ]
salut tout le monde et surtout les developpeursje suis un developpeurs en c++ j'ai en ce moment un projet qui se resume de faire une application en c
les automates [ par salem3 ]
salut tout le monde,est ce que quelqun connait les languanges et la compilation ?Voila je voudrais réaliser un prog en c qui permet de contruire
automate d'atet fini [ par leFeu ]
y a t il une difference entre les automates d'etat finis et le diagramme d'état transition d'uml?merci
OPC sous linux en C++ [ par lenanttais44 ]
Bonjour, je voudrais dans un premier temps installer un logiciel qui sert d'automate sous linux. Avec celui-ci j'ai envie de lire tout les changement
automate siemens 135U [ par 44yann ]
Bonjour.Je suis nouveau et j'aurai besoin d'aide SVP. Automate SIEMENS SIMATIC S5_ 135 U fonctionne depuis des années. Il ne passe plus en RUN ? INFO
communiquer entre PC et automate S7 224 [ par hoss55 ]
bonjour tlm!Je fais un projet qui consiste a créer une interface en VB afin de faire communiquer un PC et un Siemens S7 224, mais je ne sais pas quel
déterminisation d'un automate [ par nourelyakin ]
Etant donné un automate d'état finis non déterministe:je veux un programme en c/c++ qui permet de :-->editer,modifier,sauvegarder un automate régu
attendre que le shell soit fini C++ [ par McK_N ]
Salut,je veux appeler la fonction Shell et je veux que mon programe arrête jusqu'à ce que le shell soit terminé.Comment puis-je le faire avec la fonct
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|