Sunteți pe pagina 1din 15

Ministerul Educaiei, Tineretului i Sportului al Republicii Moldova

Universitate Tehnic a Moldovei


Catedra Automatica i Tehnologii Informaionale

Disciplina: L.F.P.C.
Lucrarea de laborator nr.2
Tema: Automate finite

V16

A efectuat:
Onorina

A verificat:

st. gr. C-111,Maznic

T. Srbu
asistent

universitar

Chiinu 2012

Lucrarea de laborator Nr_ 2


la disciplina Limbaje formale i automate
Tema : Automate finite

1. Reprezentai automatul sub form de graf.


2. Construii gramatica regulat echivalent cu automatul dat.
3. Este sau nu automatul dat determinist? De ce?
4. Dac automatul este nedeterminist, construii automatul finit determinist
echivalent
Reprezentai AFD n form de graf.
5. Inventai un ir peste vocabularul care nu va fi acceptat de ctre
automat. Artai acest lucru scriind secvena (secvenele) de configuraii
respectiv.
6. Pentru automatul finit AF=(Q, , , q0, F) construii 5 iruri acceptate de
automat. Lungimea irurilor s nu fie mai mic dect n+2, unde n este
numrul de stri din Q.
7. Pentru fiecare ir x scriei secvena de configuraii pentru acceptarea
irului, adic (q0, x) (qi1, x1) (qi2, x2) (qf, ), unde qf F.
8. Petru toate cele 5 iruri obinute construii aplicnd lema de pompare
descompunerea x=uvw.
Varianta 16
AF=(Q, , , q0, F),
Q = { q0, q1, q2, q3 },
= { a, b }, F = { q3}.
(q0, a ) = q1 ,
(q1, b ) = q1 ,
(q1, b ) = q2,
(q2, a ) = q2,
(q2, b ) = q3,

(q0, b ) = q0 .

1) Reprezentm automatul sub form de graf:


a

q0

q1

q3

q2

b
b

2) Construcia gramatica regulat echivalent cu automatul dat:

G V N ,VT , P, S
1) VN = Q = {q0, q1, q2, q3}
2) VT = ={a, b}
3) S=q0

1.q0-> a q1

(q0, a ) = q1

2.q1 -> b q1

(q1, b ) = q1

3. q1->bq2

(q1, b ) = q2

4.q2 ->a q2

(q2, a ) = q2

5.q2 -> b q3
6.q0->b q0
7.q2 ->b

(q2, b ) = q3
(q0, b ) = q0

3) Este sau nu automatul dat determinist? De ce?


Automatul dat este nedeterminist, deoarece din starea q1 prin b se
poate trece n 2 stri diferite: q0 sau q1
(q1,b) ={,q1 q2},

4) Dac automatul este nedeterminist, construii automatul finit


determinist echivalent.
Reprezentai AFD n form de graf.
AFD = ( Q', , ', q0 , F' ),
= {a, b }

q0
q1
q1 q 2
q2
q1 q 2 q 3
q3

q0

q1
q2
q2
q2

q0
q1 q 2
q1 q 2 q 3
q3
q1 q 2 q 3

---

---

----

q1

q1 q 2

a
b
q2
a
a

q1q2 q3
q3

b
b

5) Inventm un ir peste vocabularul care nu este acceptat de

ctre automat. Artm acest lucru scriind secvena (secvenele) de


configuraii respectiv.
Cuvntul neacceptat de gramatica dat este
bbaa

6) Lungimea irurilor nu este mai mic dect n+2, unde n este


numrul de stri din Q.

1. x
2. x
3. x
4. x
5. x

= bbbabbbab
= bbabaaab
= babbbbaab
= abaaaaab
=abbbbbaab

7) Pentru fiecare ir x scriem secvena de configuraii pentru


acceptarea irului:
(q0, x) (qi1, x1) (qi2, x2) (qf, ), unde qf F.
1. (q0, x) = (q0,bbbabbbab)(q0,bbabbbab ( q0,babbbab)
( q0,abbbab)(q1,bbbab)
( q1q2,bbab)( q1q2 q3,bab) (q2,ab) (q3 , b), (q3 , ),

acceptare

q3 F

2. (q0, x) = (q0,bbabaaab )(q0,babaaab )(q0,abaaab )(q1,baaab) )


( q1q2,aaab )

(q2, aab)(q2,ab) (q3 , b), (q3 , ), q3 F


acceptare

3. (q0, x) = (q0, babbbbaab)(q0,abbbbaab )( q1,bbbbaab )


( q1q2,bbbaabb ) )

( q1q2 q3,bbaab) ( q1q2 q3,baab)( q2,aab ) (q2, ab), (q3, b),

(q3 , ), q3 F
acceptare
4.(q0, x) = (q0,abaaaaab )(q1, baaaaab )(q1q2, aaaab )( q2,aaab
)( q2,aab )
(q2,ab ) (q3,b ),

(q3 , ), q2q3 F

acceptare

5.(q0, x) = (q0,abbbbbaab )(q1, bbbbbaab)(q1q2,bbbbaab )


( q1q2q3,bbbaab ) )
( q1q2q3, bbaab)( q1q2q3,baab) (q2,aab )(q2,ab )( q3, b),

( q3, ), q3 F

acceptare

8) Petru toate cele 5 iruri obinute construim aplicnd lema de


pompare descompunerea z=uvw:
1. z=uvw
2. |z| n, n=card(Q), |v|1
3. |uv| n
4. uviw L
1. X= bbbabbbab

q0B

bq

q0

v=bbb
w=abbbab

q0

q1

b qq
1 2

q1 q 2 q 3

q1 q2 q3 bb

q2 a

q3

2. x = bbabaaab

q0

q0

q0

q1

q1q2

q2

q2

q2

q3

v=bb
w=abaaab
3. x = babbbbaab

b
q0
a

q0

q1

q1q2

q1 q 2 q 3

qb
1 q2 q3

q1 q 2 q 3

q2

bq2

q3

v=b
w=abbbbaab

4. X=abaaaaab

q0

q1

q1q2

q2

q2

q2

q2

q2

q3

w
u=aba
v=aaaa
w=b
5.x=abbbbbaab

q0

q1qb2

aq1
a

q1 q2 q3b

q1 q 2 q 3

b q1 q 2 q 3

q1 qb2 q3

q2

w
u=abb
v=bbb
w=aab

Listengul programului :
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>

void main(){
int n,i,j,nr,k=0,numQ,numE,x=3,y=2,r=0,cont=0;
char l[255][20],l1[255]
[20],Q[100],E[100],cuvint[255]="\0",shir[255];
char start,final,c='0';
clrscr();
cout << "Avem automatul finit AF=(Q,E,?,q0,F)" << endl;

q2 b

q3

cout << "Cite stari avem in multimea Q: ";


cin >> numQ;
cout << "Dati starile: \n"; for (i=0;i<numQ;i++){
cout << "q";
cin >> Q[i];
}
cout << "Cite elemente avem in multimea a: ";
cin >> numE;
cout << "Dati elementele: \n"; for (i=0;i<numE;i++) cin >> E[i];
cout << "Dati starea finala" <<endl<<"q";
cin >> final;
cout << "Cite functii de tranzitie avem: ";
cin >> n ;
cout << "Dati functiile de tranzitie:" << endl;
for (i=0;i<n;i++){
cout << i+1 << ". e";
cin >> l1[i];
}

clrscr();
/* Afisarea Matricei AF */
for (i=0;i<numQ;i++){
gotoxy(x+2*i,1);
cout << i ;
gotoxy(1,y+i);
cout << i ;
}

gotoxy(x+2,y); cout << E[0];


gotoxy(x+2,y+1); cout << E[1];
gotoxy(x+4,y+1); cout << E[1];
gotoxy(2*x+x,2*y); cout << E[0];
gotoxy(x,2*y); cout << E[1];
gotoxy(2*x+x,y+3); cout << E[0];
gotoxy(x,3*y); cout << E[0];

getch();
clrscr();

/* Construirea gramaticii regulate echivalente lui AF */


for (i=0;i<n;i++){
if (l1[i][8]!=final){
l[i][0]=l1[i][2];
l[i][1]=l1[i][4];
l[i][2]=l1[i][8];
}
if (l1[i][8]==final){
l[i][0]=l1[i][2];
l[i][1]=l1[i][4];
l[i][2]='\x0';
}
}
cout << "S-au obtinut productiile:" << endl;
for (i=0;i<n;i++){
if (l[i][2]!='\0')
cout << i+1 << ". q" << l[i][0] << "->"<< l[i][1]

<< "q" << l[i][2] << endl;


if (l[i][2]=='\0')
cout << i+1 << ". q" << l[i][0] << "->"<< l[i][1] <<
endl;
}
getch();

/* Generarea unui cuvint */


clrscr();
randomize();
shir[0]='0';
cout <<"\nq" << c;
do{
nr=random(n);
if(l[nr][0]==c)
{ if (l[nr][2]!='\x0')
cout<< "->" << l[nr][1] << "q" << l[nr][2];
if (l[nr][2]=='\x0')
cout<< "->" << l[nr][1] ;
c=l[nr][2];
cuvint[k]=l[nr][1];
shir[k+1]=l[nr][2];
k++;
}

if(c=='\0')
if(k>=numQ+2) goto exit_now;
else

{
k=0;
c='0';
cout<<"\n"<<"q0";};
} while(1);

exit_now:;
cuvint[k]='\0';
shir[k]='\0';
cout<< "\nCuvintul format este: " << cuvint << endl;
c='0';

getch();

/* Secventa de configuratii pentru acceptarea sirului */

clrscr();
cout << "(q0,x)=";
i=0;
do {
cout << "(q" << shir[i] << ",";
for (i;i<k;i++)
cout << cuvint[i];
cout << ")|-";
i=++r;

} while (i<k);
cout << "(q3,i)";

getch();

/* Lema de pompare x=uvw */

clrscr();
start=shir[0];
i=1;
do{
if (shir[i]==start){
cont++;
cout << "v=";
for (j=0;j<i;j++)
cout << cuvint[j];
cout << "\nw=";
for (j=i;j<k;j++)
cout << cuvint[j];
i=k-1;
}
i++;
} while (i<k);

if (cont==0){
start=shir[1];
i=1;
do{
if (shir[i]==start){
cont++;

cout << "u=" << shir[0];


cout << "v=";
for (j=1;j<i;j++)
cout << cuvint[j];
cout << "\nw=";
for (j=i;j<k;j++)
cout << cuvint[j];
}
i++;
} while (i<k);
}getch();}
Rezultatele obtinute:

S-ar putea să vă placă și