Ki Phap Ba Lan - Phan Van Phuoc

download Ki Phap Ba Lan - Phan Van Phuoc

of 14

Transcript of Ki Phap Ba Lan - Phan Van Phuoc

TRNG I HC KINH T NNG

MN HC: CU TRC D LIU V GII THUT GIO VIN: NGUYN THNH THY

TI:C S L THUYT BALAN:BIU THC TIN T,TRUNG T,HU T.TRNH BY THUT TON V CI T TRN C CHNG TRNH TNH GI TR CA MT BIU THC TON HC TRN C

NHM THC HIN:NHM 10

Nng 3/2011

I. C S L THUYT K PHP BALAN I.1. K php Ba lan

(ting Anh: Polish notation), cn gi l k php tin t (ting Anh: prefix notation), l mt cch vit mt biu thc i s rt thun li cho vic thc hin cc php ton. c im c bn ca cch vit ny l khng cn dng n cc du ngoc v lun thc hin t tri sang phi.

Tc gi

Jan ukasiewicz K php Ba Lan do nh logic ton Jan ukasiewicz xut khong nm 1920. Jan ukasiewicz l mt nh ton hc ngi Ba Lan. ng sinh ra Lww, Galicia (nay l Lviv, Ukraina) Khi lp trnh, tnh gi tr mt biu thc ton hc l iu qu i bnh thng. Tuy nhin, trong nhiu ng dng (nh chng trnh v th hm s chng hn, trong chng trnh cho php ngi dng nhp vo hm s), ta cn phi tnh gi tr ca mt biu thc c nhp vo t bn phm di dng mt chui. Vi cc biu thc ton hc n gin (nh a+b) th bn c th t lm bng cc phng php tch chui th cng. Nhng gii quyt cc biu thc c du ngoc, v d nh (a+b)*c + (d+e)*f , th cc phng php tch chui n gin u khng kh thi. Trong tnh hung ny, ta phi dng n K Php Nghch o Ba Lan (Reserve Polish Notation RPN), mt thut ton kinh in trong lnh vc trnh bin dch.

I.2. Th no l k php nghch o Ba Lan?Cch trnh by biu thc theo cch thng thng tuy t nhin vi con ngi nhng li kh kh chu i vi my tnh v n khng th hin

mt cch tng minh qu trnh tnh ton a ra gi tr ca biu thc. n gin ha qu trnh tnh ton ny, ta phi bin i li biu thc thng thng v dng hu t - postfix (cch gi ngn ca thut ng k php nghch o Ba Lan). phn bit hai dng biu din biu thc, ta gi cch biu din biu thc theo cch thng thng l trung t - infix (v ton t nm gia hai ton hng). K php nghch o Ba Lan c pht minh vo khong gia thp k 1950 bi Charles Hamblin - mt trit hc gia v khoa hc gia my tnh ngi c - da theo cng trnh v k php Ba Lan ca nh Ton hc ngi Ba Lan Jan ukasiewicz. Hamblin trnh by nghin cu ca mnh ti mt hi ngh khoa hc vo thng 6 nm 1957 v chnh thc cng b vo nm 1962. T ci tn hu t cc bn cng on ra phn no l theo cch biu din ny, cc ton t s c t sau cc ton hng. C th l biu thc trung t: 4+5 s c biu din li thnh 4 5 +. Qu trnh tnh ton gi tr ca biu thc hu t kh t nhin i vi my tnh

I.3. Th no l biu thc tin t, trung t v hu tTrong on gii thiu trn c l bn cng hnh dung c th no l biu thc trung t, hiu n gin tc l ton t s c t gia hai ton hng, d nhin y phi l ton t hai ngi. Vy da vo v tr ca ca ton t, liu ta c th biu din biu thc i s di dng khc? Cu tr li l c, v nh ni, ta c ba cch l biu thc tin t (prefix), trung t (infix) v hu t (postfix). Hy xem mt cht gii thiu v cch biu din biu thc tin t v hu t hiu r hn v chng. Prefix: Biu thc tin t c biu din bng cch t ton t ln trc cc ton hng. Cch biu din ny cn c bit n vi tn gi k php Ba Lan do nh ton hc Ba Lan Jan ukasiewicz pht minh nm 1920. Vi cch biu din ny, thay v vit x+y nh dng trung t, ta s vit +xy. Ty theo u tin ca ton t m chng s c sp xp khc nhau, bn c th xem mt s v d pha sau phn gii thiu ny. Postfix: Ngc li vi cch Prefix, tc l cc ton t s c t sau cc ton hng. Cch biu din ny c gi l k php nghch o Ba Lan hoc c vit tt l RPN (Reverse Polish notation), c pht minh vo khong gia thp k 1950 bi mt trit hc gia v nh khoa hc my tnh Charles Hamblin ngi c. Mt s v d:

Infix X+y X+y-z X+y*z X+(y-z)

Prefix +xy -+xyz +x*yz +x-yz

Postfix xy+ xy+z xyz*+ xyz-+

II.

Phng php chuyn t biu thc trung t sang tin t v hu t

Thut ton chuyn i ny c pht minh bi v gio s ngi H Lan ni ting Edsger Dijkstra (cng l tc gi ca thut ton tm ng i ngn nht c t theo tn ng v semaphore, mt k thut ng b cc tin trnh trong lp trnh a nhim).

II.1. Thut ton :Thut ton ny cng da theo c ch ngn xp. tng chung ca thut ton cng l duyt biu thc t tri sang phi: - Nu gp mt ton hng (con s hoc bin) th ghi n vo chui kt qu (chui kt qu l biu thc hu t). - Nu gp du m ngoc, a n vo stack. - Nu gp mt ton t (gi l o1 ), thc hin hai bc sau: o Chng no cn c mt ton t o2 nh ngn xp V u tin ca o1 nh hn hay bng u tin ca o2 th ly o2 ra khi ngn xp v ghi vo kt qu. o Push o1 vo ngn xp - Nu gp du ng ngoc th c ly cc ton t trong ngn xp ra v ghi vo kt qu cho n khi ly c du m ngoc ra khi ngn xp. - Khi duyt ht biu thc trung t, ln lt ly tt c ton t (nu c) t ngn xp ra v ghi vo chui kt qu.

II.2. V d tng qut:Q=a*(b+c)-d^5 K hiu biu thc ghi di dng php ton sau l P. Trong qu trnh chuyn i ta dng mt stack S lu cc phn t trong P cha s dng n. Khi c t tri sang phi biu thc Q la ln lt c: 1. 2. 3. 4. 5. du ngoc m "(", a du ngoc ny vo stack: S = "*(". c hng t b, a b vo P: P= "a b" c ton t "+", t "+" vo stack: S ="*(+" c hng t "c", a c vo cui P: P="a b c" c du ngoc ng ")". Ln lt ly cc ton t cui stack ra khi stack t vo cui P cho n khi gp du ngoc m "(" trong stack th gii phng n: S= "*"; P="a b c +" c v ghi nhn gi tr a, ghi gi tr a vo P. Vy P = "a".

6. c ton t "*". a ton t ny vo stack S: S = "*" 7. c 8. c ton t "-". Cui stack S c ton t "*" c mc u tin ln hn ton t "-", ta ly ton t "*" ra khi stack, t vo cui P, t ton t "-" vo stack: S="-"; P=" a b c + * " 9. c hng t d, a d vo cui P. P="a b c + * d" 10. c ton t "^", a ton t "^" vo cui stack: S="-^" 11. c hng s 5, a 5 vo cui P: P="a b c + * d 5" 12. c ht biu thc Q, ln lt ly cc phn t cui trong stack t vo P cho n ht. P="a b c + * d 5 ^ -".

II.3. V d c th:Biu thc cn chuyn i: 3+4*2/(1-5)

Vy biu thc hu t l: 3 4 2 * 1 5 - / +

III.

Tnh gi tri biu thc khi bin i v dng hu t.III.1. Thut ton:

tng l c biu thc t tri sang phi, nu gp mt ton hng (con s hoc bin) th push ton hng ny vo ngn xp; nu gp ton t, ly hai ton hng ra khi ngn xp (stack), tnh kt qu, y kt qu tr li ngn xp. Khi qu trnh kt thc th con s cui cng cn li trong ngn xp chnh l gi tr ca biu thc .

III.2.

V d:

biu thc trung t :3+4*2/(1-5) c biu din li di dng hu t l (ta s bn v thut ton chuyn i t trung t sang hu t sau): 342*15-/+

Qu trnh tnh ton s din ra theo nh bng di y: K t Thao tc Trng thi stack 3 Push 3 3 4 Push 4 3, 4 2 Push 2 3, 4, 2 *

Tnh 4*2 Push 8 3,8 1 Push 1 3, 8, 1 5 Push 5 3,8,1,5 Tnh 1-5 Push -4 3,8,-4 / Tnh 8/-4 Push -2 3,-2 + Tnh 3+(-2) Push 1 1 Vy kt qu bng 1

IV.Ci t gii thut bng chng trnh C: IV.1. Yu cu bi ton:

Ci t trn C chng trnh tnh gi tr biu thc:chng trnh c d liu t file INPUT.TXT cha cc biu thc ton hc hp l,c file,x l c ghi ra file OUTFUT.TXT gi tr ca cc biu thc tng ngV d: File INFUT.TXT: (6+4*(2+6))/2 5-(3+2)*8 File OUTPUT.TXT 19 -35 Chng trnh x l: #include #include #include #include #define max 50 FILE *f1,*f2; //khoi tao stack void khoitaostack(int &t) { t=-1; } //ham bo phan tu vao stack void push(char s[],int &t,char x) { if(t==max) { //printf("stack day"); return; } t++; s[t]=x; } //ham stack rong int emptystack(int t)

{ return(t==-1); } //ham stack day int fullstack(int t) { return(t==max); } // ham lay ptu tu stack void pop(char s[],int &t,char &x) { if (emptystack(t)) { // printf("Empty Stack !!!"); return; } x=s[t]; t=t-1; } // ham kiem tra do uu tien cua cac phep toan int uutien (char ch) { switch(ch) { case '/' : return(2); case '*' : return(2); case '+' : return(1); case '-' : return(1); } return(0); } // ham kiem tra toan tu int toantu( char c) { switch(c) { case '/' : return(1); case '*' : return(1); case '+' : return(1); case '-' : return(1); return(0); } } // ham chuyen tu trung to sang hau to //------------------------------------//----------------------------------------void convert (char P[],char Kq[]) { char x,ch,S[50];

int t1,t2,leng=strlen(P); khoitaostack(t1); khoitaostack(t2); // duyet tu trai sang phai cac ptu cua bieu thuc trung to P for(int i=0;i