programe en langage c pour automate de langage (aabb*)*
///Author: Karara Mohamed @ tutodev1.blogspot.com/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include<string.h>
#define taille 100
int TR[10][26];
int a,b;
void lireAFD(){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<26;j++){TR[i][j]=-1;}///Initialise le table de tansition
}
///table de transition de AFD pour la langage (aabb*)*
TR[0][0]=1;
TR[1][0]=2;
TR[2][1]=3;
TR[3][0]=1;
TR[3][1]=3;
}
int AFD(char *TM) {///pour voir si les mots sont Reconnu ou non
int e=0,i=0,lgtm=strlen(TM);
char s=TM[i];
while((TR[e][(int)(s-'a')]!=-1)&&(i<lgtm)){
e=TR[e][(int)(s-'a')];
i++;
s=TM[i];
}
if((e==3)){return 0;}
return -1;
}
void valid(char TM[]);///la fonction valid si une mot est reconnu,elle donne les droite de affiche (miroir,occ,pref fixe,suffixe
void liremot(char *TM){
printf("donnez votre mot :");
scanf("%s",TM);
if(AFD(TM)==0){printf("le mot reconnu\n");///si mote reconnu
valid(TM);
}
else { printf("le mot non reconnu\n");}///si non
}
void Miroire(char T[]){///pour miroire
int i,n=strlen(T);
printf("votre Miroire est:");
for(i=n;i>=0;i--){
printf("%c",T[i]);
}
puts("\n");
}
void Occu(char T[] ){///pour conte le a et b
int i,n=strlen(T);
a=0,b=0;
for(i=0;i<n;i++){
if(T[i]=='a'){a++;}
if(T[i]=='b'){b++;}
}
printf("vous avez a=%d et b=%d\n",a,b);
}
void pref(char TM[]){
int i,j,k,n=strlen(TM);
printf("les prefixes de m sont:\n");
k=n;
for(i=0;i<n;i++){
for(j=0;j<k;j++){printf("%c",TM[j]);}puts("\n");k=k-1;}
}
void suff(char TM[]){
int i,j,k,n=strlen(TM);
printf("les suffixes de m sont:\n");
k=n;
for(i=0;i<n;i++){
for(j=i;j<k;j++){printf("%c",TM[j]);}puts("\n");}
}
void conjj(char TM[]){
int i,j,t=0,n=strlen(TM);
printf("les conj de m sont =\n");
printf("-%s\n",TM);
for(i=n;i>=0;i--){
printf("%c",TM[i]);
}
puts("\n");
a=0,b=0;
for(i=0;i<n;i++){
if(TM[i]=='a'){a++;}
if(TM[i]=='b'){b++;}}
for(i=0;i<a;i++){printf("%c",'a');
for(j=0;j<1;j++){printf("%c",'b');t++;}
}
b=b-t;
if(b>0){
for(i=0;i<b;i++){printf("%c",'b');}}
puts("\n");
t=a;
for(i=0;i<b;i++){printf("%c",'b');
for(j=0;j<1;j++){if(t>0)printf("%c",'a');t--;}
}
}
int main()
{ char TM[taille];
lireAFD();
int choix;
do { system("cls");///meun principale
printf("\t\t\t================MENU================\n\n");
printf("\t\t\t1-lire un mot\n");
printf("\t\t\t2-QUIT\n");
printf("\t\t\t");
scanf("%d",&choix);
switch(choix){
case 1:system("cls");liremot(TM);system("pause>null");break;
case 2:system("cls"); printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tBYEEEEEEEEEE\n\n\n\n"); system("pause>null");break;
default:
system("cls");
printf("\t\t\t Erreur de choix !!!!!!!!!!!!!!!!!! \n");
Sleep(1500); system("cls");
}
}while(choix!=2);
return 0;
}
void valid(char TM[]){///menu de valid
int choix;
do{
printf("\t\t\t================MENU(2)================\n\n");
printf("\t\t\t1-Miroire de m\n");
printf("\t\t\t2-Occurrence de a et b\n");
printf("\t\t\t3-les mots conjugues\n");
printf("\t\t\t4-les prefixes de m\n");
printf("\t\t\t5-les suffixes de m\n");
printf("\t\t\t6-QUIT\n");
printf("\t\t\t");
scanf("%d",&choix);
switch(choix){
case 1:system("cls");Miroire(TM);system("pause>null"); break;
case 2:system("cls");Occu(TM);system("pause>null");break;
case 3:system("cls");conjj(TM);system("pause>null");break;
case 4:system("cls");pref(TM);system("pause>null");break;
case 5:system("cls");suff(TM);system("pause>null");break;
case 6:system("cls");break;
default:
system("cls");
printf("\t\t\t Erreur de choix !!!!!!!!!!!!!!!!!! \n");
Sleep(1500); system("cls");
}
}while(choix!=6);
}