Sunteți pe pagina 1din 29

1

Cuprins





I. 1ocul X yi

1. Descriere scenariu
2. Reprezentarea jocului in limbajul Z
3. Automat cu stari Iinite pentru speciIicarea scecventelor de operatii
4. Sa se genereze date de test pentru Iiecare operatie Iolosind metode
Iunctionale (de tip partitionare in categorii) daca este cazut
5. Testarea cu metoda W in cay ca este posibil
6. Realizarea unui program care sa descrie problema data




II. Limbaj specificat

1. Descriere scenariu
2. Construirea FSM-ului si speciIicarea secventelor de operatii
3. Sa se genereze date de test pentru Iiecare operatie Iolosind metode
Iunctionale (de tip partitionare in categorii
4. Sa se genereze secvente de test pe baza automatului Iolosind metoda W
5. Realizarea unui program care sa descrie problema data








2
I. 1OCUL X SI


1. Descrierea scenariului


Jocul are la baza o grila 3x3 9 casute care trebuiesc completate cu
X sau cu 0. Se joaca completand alternativ casutele cu X pentru primul jucator
respectiv 0 pentru cel de al doilea, jucatorul care joaca cu 0 deschide jocul.

La Iiecare tur jucatorul completeaza o casuta cu simbolul sau.
Fiecare jucator tinteste o linie care taie 3 celule cu simbolul sau.
O linie castigatoare poate Ii o coloana ,o linie sau diagolala
Jocul se sIarseste atunci cnd un jucator are o linie castigatoare sau toate
casutele sunt completate, caz n care nici unuldintre jucatori nu cstiga.




#eprezentarea jocului in limbajul Z

#eprezentarea in Limbajul Z.

Reprezentam grila 3x3 ca o pereche de genul (linie,coloana) ca n Iigura
urmatoare



Repre:entarea in Z a tabelului

DeIinim reprezentarea liniilor si coloanelor indexate
Index x : N , x 3}
DeIinim reprezentarea celulelor .
OXOCel Index Index
3
Functii utili:ate


DeIinim LinieOI c si coloanaOI c pentru a arata care linie sau coloana c
a casutei c este gresit:



Aceasta ne arata ca

rowOI (1, 2) 1
columnOI (1, 2) 2


Descrierea liniilor castigtoare : linii, coloane si diagonale




Arie :P OXOCasuta
2 1 2 1
: ,
3 #
o: ColoanaOfp o: ColoanaOfp arie po: po:
arie
O


Arie:P OXOCasuta
2 1 2 1
: ,
3 #
LinieOfpo: LinieOfpo: arie po: po:
arie
O


LinieOf, ColoanaOF .OXCasuta Index
y y x LinieOf Index y x
x y x LinieOf Index y x
O
O
) , ( : ,
) , ( : ,

Linie
Coloana
4





Toate liniile


Avand deIiniitile pentru linile castigatoare : solutiile , putem utiliza
disjunctii pentru a creea o schema care sa cuprinda toate celelalte scheme.
O LiniiCastigatoareLinie V Coloana V DiagonalaPrincipala V Diagonala
secundara


Mai multe setari

Trebuie sa speciIicam marcarea casutelor :
O Marcari:: blank , X , O

Avem nevoie deasemenea si de mesaje
O Rapoarte :: OK , MutareInvalida , OWins , XWins


Starea focului

Arie :P OXOCasuta
o: ColoanaOfp LinieOfpo: arie po: po:
arie
O

: ,
3 #
2 1

Arie :P OXOCasuta
2 : ,
3 #
2 1
O

o: ColoanaOfp LinieOfpo: arie po: po:


arie

Diagonala secundara
Diagonala principala
5
Trebuie sa speciIicam cum arata grila cu cele 9 casute in orice moment
al jocului si al cui rand este sa joace



Folososim o Iunctie comuna pentru toate Iunctiile. Poate contine partile
Nu avem contrangeri la joc


Inceputul focului

La inceputul jocului toate casutele sunt goale si jucatorul care incepe este cel
care joaca cu simbolul 0.


Putem scrie deasemenea continutul (, OXOCasute ,) blank}

Operatiile focului

Trebuie sa speciIicam
O mutarile valide si mutarile invalide
O conditiile de incheiere

Avand acestea speciIicate putem descrie jocul cu ajutorul disjunctiilor
O OXO MutareO V MutareX V ConditieSIarsit



JocOXO`
Continut aleator`blank}
JucatorCurent`0
InceputulJocului
Continut: OXCasuta Marcatori
jucatorCurent :X, 0}
JocOX
6

Example de operati



Vazuta ca o Iunctie partiala ar trebuie sa arate in Ielul urmator:
O Mutare0 JucatorO \ 0MarchezaEroare


Example ale conditiei de incheire





Nota: acesta nu poate Ii descris in acest mod daca contine o Iunctie partiala

ConditieSIarsit 0CastigatorulJocului \ XcastigtorulJocului \
ToateCasuteleCompletate

E Joc OX
Mesaj! :Raport
r OCastiator mesaf
arie Continut gatoare LinieCasti

O
!
} 0 ,) . / (, : /

A JocXO
Poz? :OXOCasute
Mesaj! : Raport
JucatorCurent0
Continut poz? blank
Continut ` Continut poz?0}
JucatorCurent`X
MesajOK
0Joaca
0CastigatorulJoocului
7


3 utomat cu stari finite pentru specificarea scecventelor
de operatii




Implementarea automatului


Automatul are 10 stari , starile coincid cu cele 9 casute ,adic cu numerele
(00),(01),(02),(10),(11),(12),(20),(21),(22) si starea initiata (0). Starile vor Ii notate
cu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 unde 0 este starea initiata (0), (00) este starea 1, si asa mai
departe pana la (22) care este starea 9. Odat marcata o casuta nu mai poate Ii
marcata, deci numarul de tranzitii (de mutri) este 9 si cu starea initial 10. O casut
poate Ii marcat cu ,0 sau ,x , initial toata casutele sunt goale adic completate cu
,blank .
Pentru a construi automatul trebuie avut in vedere urmtoarele:
O Starea initial : toate csutele sunt libere , adic completate ,blank, iar
juctorul este cel care detine simbolul ,0
O Tabela care da pozitia casutelor , deci starile 1, 2, 3, 4, 5, 6, 7, 8, 9


O Odat marcat o csut cu ,x si ,0 nu mai poate Ii marcat a doua
oar ;
O Strile Iinale date de liniile cstigtoare sau completrea tuturor csutelor
cu ,x si ,0 cay in care nici un jucator nu a cstigat, deci pot Ii oricare
dintre starile 1...9.
O Vom nota cu a starea ok de continuare a marcarii cu X si 0 de catre
jucatori iar cu b vom marca intrarea intro stare Iinala atnci cand unul din
jucatori castiga sau s-au marcat toate casutele.





8


Diagrama

Conditie
Stare
X 0
0 - 1.9
1 din 2...9 daca sunt bank din 2...9 daca sunt blank
2 din 1,3...9 daca sunt blank din 1,3...9 daca sunt blank
3 din1,2,4...9 daca sunt blank din 1,2,4...9 daca sunt blank
4 din 1,2,3,5...9 daca sunt blank din 1,2,3,5...9 daca sunt blank
5 din 1,2,3,4,6,7,8,9 daca sunt blank din 1,2,3,4,6,7,8,9 daca sunt blank
6 din 1...5,7,8,9 daca sunt blank din 1...5,7,8,9 daca sunt blank
7 din 1...6,8,9 daca sunt blank din 1..6,8,9 daca sunt blank
8 din 1..7,9 daca sunt blank din 1..7,9 daca sunt blank
9 din 1...8 daca sunt blank din 1...8 daca sunt blank

9




Exemplu concret de automat.

Diagrama
X 0
-0 - 1 -
1 2 - -
2 - 9
3 Blank blank
4 8 -
5 - 7
6 Blank blank
7 4 .
8 0 -
9 5 -
10



0 X -
X X -
0 0 0

Observatie In starea 8 s-a terminat jocul X si 0 , marcat prin b si se va trece in starea
0 pentru relurea jocului
Exemplul

0 X X
0 0 0
X 0 X

11


X 0
-0 - 1
1 2 -
2 - 5
3 6 -
4 7 -
5 9 -
6 0 0
7 - 8
8 3 -
9 - 4

Observatie In starea 6 s-a terminat jocul X si 0 , deci din starea 6 trece in starea 0
pentru a se relua jocul.


Specificatii .

N este numarul de x si de 0 utilizati
Mesaj- mesajul de explicare a situatie

12
Intrari
n Secventa de X si pe celule Mesaj
1 2 3 4 5 7 8 9
-3 Eroare
Eroare
2 X Eroare
5 X X Eroare
5 X X Wins
5 X X Wins
X X X Xwins
X X X Xwins
7 X X X Wins
7 X X X x Xwins
7 X X X Wins
9 X X X x End
9 X X X x End
1 Eroare
1 Eroare



5.Sa se genereze secvente de test pe baza automatului folosind metoda W

Acest joc nu se poate implementa cu metoda W deoarece FSM-ul nu indeplineste
conditiile urmatoare:
O Minimal
O Complet determinat
O Determinist
O Conectat








13
II. IMBA1 SPECIFICAT


Descriere scenariu

Se construieste un FSM cu 5 stari care sa accepte un limbaj ca X(1.0) si Y(a,b)
care sa poata Ii testat cu metoda W . Limbajul accepta secvente Iormate din
caracterele a si b care se sIarseste cu aa sau ba, dar poate accepta si a

Construirea FSM-ului




Considerm FSM-ul ) , , , , (
1
O q Q X E 0 unde

O X(1,0) , Y(a,b)
O
1 8 7 6 5 4 3 2 1
), , , , , , , , ( q q q q q q q q q Q starea initiala
O O Iuntiile de iesire
O 0 Iunctiile de tranzitie

14
Descrierea limbajului Z pentru automatul contruit anterior

Repre:entarea in Z a tabelului

DeIinim starile cu ajutorul unui index
O Index q : N , q 5}
O Stare Index

InIo 0 1
0 (00) (01)
1 (10) (11)
Unde
O (00)-a/0
O (01)-b/0
O (10)-a/1
O (11)-b/1

DeIinim tranzitiile cu ajutorul inIormatiilor
O InIox : N ,i2}
O TranzitieInIo*InIo
Observatie: putem aveam 3 tipuri de inIormatii: a/a, a/1, b/0, b/1
O stare se poate duce in 2 stari urmtoare odata cu a si odata cu b


Functii utili:ate


DeIinim StareCurenta,StareUrmatoare:


StareCurenta,StareUrmatoare.Stare Index
f f i f i
i f i f i
q q q oare StareUrmat Index q q
q q q ta StareCuren Index q q
O
O
) , ( : ,
) , ( : ,

15
IntrareTranzitie, IesireTranzitie

Aceasta ne arata ca

IntrareTranzitie(1, 2) 1
IesireTranzitie(1, 2) 2


Descrierea secventelor corecte acceptate de automat



Arie:P Stari
InIormatie : P Trazitie
' ' inI inI : inI
: ,
2 inI #
5 #
1 1
2 1 2 1
a n:itie IntrareTra o
oarepo: StareUrmat tapo: StareCuren arie po: po:
ormatie
arie
O
O


Secventa a
InraereTra:itie,IesireTran:itie.Tran:itie Info
y y x :itie IesireTran Info y x
x y x n:itie IntrareTra Info y x
O
O
) , ( : ,
) , ( : ,

Arie:P Stari
InIormatie : P Trazitie
' ' inI inI inI : inI , inI
: , ,
2 inI #
5 #
2 1 2 1
3
2 1 3 2 1
a n:itie IntrareTra n:itie IntrareTra o
tapo: StareCuren
oarepo: StareUrmat tapo: StareCuren arie po: po: po:
ormatie
arie
O


Secventa aa
16


Toate secventele

Avand deIiniitile pentru secventele a , aa, ba : solutiile , putem utiliza
disjunctii pentru a creea o schema care sa cuprinda toate celelalte scheme.
O Secvente Secventa a V Secventa aa V Secventa ba

Oservatie :este terminat de construit automatul atunci cand din Iiecare stare
ne putem duce intro stare urmatoare odata cu ,a` si odata cu ,b`

Mai multe setari


Avem nevoie deasemenea de mesaje si de marcatori
O Rapoarte :: OK , MutareInvalida ,
O Marcator ::blank , ocupat


Starea focului

Trebuie sa speciIicam cum arata grila cu cele 9 casute in orice moment
al jocului si al cui rand este sa joace

Arie:P Stari
InIormatie : P Trazitie
' ' inI inI inI : inI , inI
: , ,
2 inI #
5 #
2 1 2 1
3
2 1 3 2 1
a n:itie IntrareTra n:itie IntrareTra o
tapo: StareCuren
oarepo: StareUrmat tapo: StareCuren arie po: po: po:
ormatie
arie
O


Secventa ab
17


Folososim o Iunctie comuna pentru toate Iunctiile. Poate contine partile
Nu avem contrangeri la joc


Inceputul focului

La inceputul jocului toate casutele sunt goale si jucatorul care incepe este cel
care joaca cu simbolul 0.


Putem scrie deasemenea continutul (, Stari ,) blank}

Operatiile focului

Trebuie sa speciIicam
O mutarile valide si mutarile invalide
O conditiile de incheiere

Avand acestea speciIicate putem descrie automatul cu ajutorul disjunctiilor
O Auto ConstruireStari V ContruireTranzitii V ConditieSIarsit





Example de operati
Automat`
StareCurenta`1
Tranzitie`a
InceputulJocului
Continut: Stari Marcatori
intrari:a, b}
automat
18



Vazuta ca o Iunctie partiala ar trebuie sa arate in Ielul urmator:
O Completare TranzitieA \ TranzitieAEroare


Example ale conditiei de incheire





Nota: acesta nu poate Ii descris in acest mod daca contine o Iunctie partiala

ConditieSIarsit ToateStarileCompletate




E Automat
Mesaj! :Raport
e eCompletat ToateStail mesaf
stari Continut e laCompetat ToateStari

O
!
,) . / (, : /

ToateStarileCompletate
A Automat
Poz? :Stari
Mesaj! : Raport
StareCurenta0
Continut poz? blank
Continut ` Continut poz?a}
Tranzitie`b
MesajOK
CompletareTranzitie
19


Metoda W are o serie de pasi.


1. Estimarea numarului maxim de stri
2. Construirea setului de caracterizare W pentru automatul M
3. Construirea arborelui de testare pentru automatul M si contruirea setului
de tranzitii P;
4. Contruirea setului Z;
5. Testarea setului PZ.



Estimarea numarului maxim de stri



Stare curenta Iesiri
a b
Stare urmatoare
Q1 0 0 q3 q1
Q2 0 0 q4 q1
Q3 1 0 q3 q5
Q4 1 0 q4 q2
Q5 1 0 q2 q4


_
Stare initiala Iesiri
A b
Stare Iinala
a b
1
q1 0 0 q32 q11
q2 0 0 q42 q11
2
q3 1 0 q32 q52
q4 1 0 q42 q22
q5 1 0 q22 q42

P11,2}
_11q1, q2}
_12q3, q5, q4}


20

_
Stare initiala Stare Iinala
a b
1
Q1 q32 q11
Q2 q42 q11
2
Q3 q32 q52
Q4 q42 q21
Q5 q21 q42

P2 1,2,3}
_21q1},
_22q2, q3}
_23q4, q5}

_
Stare initiala Stare Iinala
a b
1
Q1 q32 q11
Q2 q42 q11
2
Q3 q32 q53
Q4 q42 q21
3
Q5 q21 q42

P31,2,3,4}
_31q1},
_32q2}
_33q3},
_34q4, q5}


_
Stare initiala Stare Iinala
a b
1
Q1 q32 q11
Q2 q43 q11
2
Q3 q32 q54
3
Q4 q43 q21
4
Q5 q21 q43



21
P(1, 2, 3, 4, 5)


_
Stare initiala Stare Iinala
a b
1
Q1 q33 q11
2
Q2 q44 q11
3
Q3 q33 q55
4
Q4 q44 q22
5
Q5 q22 q44

Deci k4 (partitii echivante) pentru masina






Construirea setului de caracteri:are W pentru automatul M



Si Sj X O( Si , x ) O( Sj , x )
1
1
1
1
2
2
2
3
3
4
2
3
4
5
3
4
5
4
5
5
Aba
a
a
a
a
a
a
baa
aa
a
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
1
1
0
0
1







22



Pentru perechea (q1,q2)


- q1 si q2 se aIla in acelasi grup in P3, deci r3
- zc , p1q1, p2q2
- G(p1,a)=G(p2,a ) deci z.aa
- p1o(p1,a), p2o(p2,a), deci p1q3 si p2q4

- cautam p3 si p4 sa Iie in acelasi grup, deci se gasesc in P2, r2
- za, p1q3, p2q4
- G(p1,b)=G(p2,b ) deci z.abab
- p1o(p1,a), p2o(p2,a), deci p1q5 si p2q2

- cautam q5 si q2 sa Iie in acelasi grup, r0
- zab, p1q3, p2q4
- G(p1,a)=G(p2,a )si G(p1,b)=G(p2,b ) deci alegem arbitrar una dintre
valori : z.abaaba



Pentru perechea (q4,q5), observam ca nu se aIla in acelasi grup deci r0 si
O(q4,a)=O(p5,a ) deci intrarea este a.




Analog se procedeaz si pentru celalalte perechi.

W(a, aa,ba, aba)









23


Construirea arborelui de testare pentru automatul M i contruirea
setului de tran:itii P




P]c,b,a,,aa,ab, abb,aba,abab,abaa,abaaa,abaab}

24

Testarea setului PZ


Fie M(X, Y, Q, q1, 0 , O) o masin FSM pentru Iiecare P P1, P2,.Pn}
este setul de tabele partitionate chivalente pentru k1.8.
Initializm W0

Repetam urmtorii 4 pasi pentru Iiecare pereche (qi,qj), cu i=j
1. Iie r 1rn, astIel incat perechea (qi, qj) sa apartina aceluiasi grup Pr ,
dar nu Pr1 . Dac se agseste un r se trece la pasul urmtor,si gasim un
din X ,astIel incat:
, si
2. initializm yc, p1qi, p2qj pentru perechea curenta(qi, qj) si
executm urmatorii pasi:
O gasim un simbol de intrare in Pm astIel incat
n caz ca este mai mult de un simbol care
satisIace condiIitia din acest pas atunci se va alege unul arbitrar.
O zz.
O si
3. gasim un din X astIel incat iar zy.
4.


T P.Z
]c,b,a,,aa,ab, abb,aba,abab,abaa,abaaa,abaab}a, aa, baa, aba}
a, aa, abaa, aba,
ab,aab,abb,abab,
aa, aaa, aba, abaa,
aaa, aaaa, abaa, abaaa,
aab, aaab, abab, abaab,
aabb, aaabb, ababb, abaabb,
aaba, aaaba, ababa, abaaba,
aabab, aaabab, ababab, abaabab,
aabaa, aaabba, ababaa, abaabaa
aabaaa, aaabaab, babaaa,abaabaaa,
aabaab, aaabaab, ababaab, abaabaab}


25

4 #ealizare unui program care sa descrie problema data



#include stdio.h~
#include conio.h~
#include string.h~
#include stdlib.h~
#deIine litera (sir|poz|'a' && sir|poz|'b')

#deIine N 100

int poz;
char sir|N|;
char sirOut|N|;

int A(char* sir,int poz);
int B(char* sir,int poz);
int D(char* sir,int poz);
int E(char* sir,int poz);

int main()


clrscr;
printI("introduceti sirul: ");
scanI("s",sir);
pozlitera(sir,0);
pozA(sir,poz);
printI("se incadreaza si sirul de iesire este c",sirOut);
return 0;
}

int A(char* sir,int poz)

sirOut'';
iI(litera'a')
return C(sir,poz);
sirOutsirOut'0';}
26
else iI (litera'b')
return A(sir,poz);
sirOutsirOut'0';}
else exit(1);
return -1;

}
int B(char* sir,int poz)

iI(litera'a')
return D(sir,poz);
sirOutsirOut'0';}
else iI (litera'b')
return A(sir,poz);
sirOutsirOut'0';}
else exit(2);
return -1;
}
int C(char* sir,int poz)

iI(litera'a')
return C(sir,poz);
sirOutsirOut'1';}
else iI (litera'b')
return E(sir,poz);
sirOutsirOut'0';}
else exit(3);
return -1;
}
int D(char* sir,int poz)

iI(litera'a')
return D(sir,poz);
sirOutsirOut'1';}
else iI (litera'b')
return B(sir,poz);
sirOutsirOut'0';}
else exit(4);
return -1;
}
int E(char* sir,int poz)
27

iI(litera'a')
return B(sir,poz);
sirOutsirOut'1';}
else iI (litera'b')
return D(sir,poz);
sirOutsirOut'0';}
else exit(5);
return -1;
}


',739, 2: 9089,70, 3;078,


P747,2

#initiali:ari
#folosim o matrice pentru costruirea tabeluilui cu stari curente, tran:itii cu a
respectiv b , starii urmtoare
Stari[4][3],
//datele sunt date implicit in matrice nu trebuiesc datae de a tastatura, adica
autmatul este descries si se aplica asupra acestuia metoda W

//Contoare
i,f,k.int,

//variabile locale
s.int, //folosit pentru contori:area elementelor de aceles fel

s0,
//contruirea tabelelor P
// contruirea tabelel P
For i.0,
Fir f.0,5
If( stare[f,0]stare[f,0] AND stare[f,]stare[f,])
then s,
sf,
else
for ks,5
if (stare[k,0]stare[k,0] and stare[k,]stare[k,])
28
r,//construirea tabelului P
else
r0 ,
break , //nu putem construi un tabel P, deci oprire fortata
end for
end if
)
end for f
end for i

//construirea babel P, P3 , P4

For i.,3
Fir f.0,5
For k.0,s
if ((stare[s,]stare[5-n,])and
( (stare[s,3]stare[s,3]) or (stare[5-s,3]stare[5-s,3])))
Then r4 // construirea tabelului P4
Else if ((stare[s,]stare[5-n,])and
( (stare[s,3] 'stare[s,3]) or (stare[5-s,3] 'stare[5-s,3])))
Then r3 ,// construire tabelului P3
Else if ((stare[s,]'stare[5-n,])and
( (stare[s,3]'stare[s,3]) or (stare[5-s,3]stare[5-s,3])))
Then r, //construirea tabeluilui P
End for f
End for f,

//Testarea setului PZ

//setul p se poate determina usor din matrice, parcurcgand matricea

String p[5]
P[0],
K0,
While k5
For i0,4
For f0,3
If (stare[f,]stare[f,])p[k]p[k]stare[3-f,]
Else k,
End while ,

29

//Initiali:m W0
Int w0,

//Repetam urmtorii 4 pai pentru fiecare pereche (qi,qf), cu i=f

For i0,4
For f0,3
O fie r rn, astfel incat perechea (qi, qf) sa apartina aceluiasi grup
Pr , dar nu Pr Dac se agsete un r se trece la pasul urmtor,si
gasim un din X ,astfel incat.
, i
O initiali:m yc, pqi, pqf pentru perechea curenta(qi, qf) si
executm urmatorii pai.
O gasim un simbol de intrare in Pm astfel incat
In ca: ca este mai mult de un simbol care
satisface condifitia din acest pas atunci se va alege unul arbitrar
O ::
O i
O gasim un din X astfel incat iar :y
O
End for f
End for i

End program

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