Documente Academic
Documente Profesional
Documente Cultură
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
!
} 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