You are on page 1of 15

22/3/2011

GVHD: Nguyn Thnh Thy

Li m u.2 Chng I. S lc v thut ton K php Ba Lan.4 I. S lc v thut ton K php Ba Lan......4 II. Biu thc tin t, trung t, hu t..4 Chng II. Thut ton K php Ba Lan... I. tng ca bi ton..5 II. Trnh by thut ton...5 1. Thut ton chuyn i t trung t sang hu t.5 2. Thut ton tnh gi tr ca biu thc hu t.5 3. Trnh by thut ton.5 III. V d minh ha..6 IV. nh gi phc tp ca thut ton.7 Chng III. Ci t trn C thut ton K php Ba Lan...9 I. M t ci t chng trnh.9 II. Mt s lu .10 III. Ci t trn C...10

1 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

Biu thc s hc xut hin rt nhiu trong cuc sng v vic tnh ton gi tr ca cc biu thc l iu tt yu, quan trng. V d: - Khi s dng my tnh (calculator), ngi dng s nhp cc biu thc s hc cn tnh thng qua cc phm s v php ton c sn. Nhim v ca my s tnh ton v hin th kt qu chnh xc ra mn hnh. - Khi s dng cc bng tnh in t (nh Excel, ) lp cc bng tnh lng, thng k vic thu chi ca doanh nghip, ngi dng s nhp cc biu thc s hc vo cc tnh. Khi , chng trnh s c nhim v phn tch v tnh ton ri a ra kt qu ti . - Hay trong cc ngn ng lp trnh (nh C, Pascal, ) ta kh quen thuc vi cc lnh gn: X= <biu thc s hc> // X l bin. - V vy, vic xy dng mt chng trnh tnh ton gi tr ca cc biu thc s hc l cn thit. Biu thc s hc l mt dy cc ton hng (hng, bin, hm) ni vi nhau bi cc php ton s hc (cng, tr, nhn, chia, ly tha, cn thc, ...). Trong cc biu thc c th cha cc du ngoc trn xc nh th t u tin. Khi cc php ton trong ngoc s c thc hin trc cc php ton ngoi. Cc php ton s hc c phn ra lm hai loi: - Cc php ton hai ngi (+,-,*,/,^,): mi php ton c t gia cc ton hng. V d: 2+3, 65*2, 8/4, - Cc php ton mt ngi (cn, logarit, cc hm lng gic nh sin, cos,): mi php ton i ngay trc cc ton hng. V d: sin30, cos60,.. Hn na, khi tnh cc biu thc s hc, ta cn phi tun theo nhng quy tc sau: - Th t u tin: ^ *, / +,- Quy tc kt hp: Cho bit khi c 2 php ton c cng th t u tin th s thc hin php ton no trc. ^ thc hin t phi qua tri. + - * / : thc hin t tri qua phi. Du () c u tin hn c th t u tin v quy tc kt hp. Khi lp trnh, vic tnh gi tr ca mt biu thc ton hc l iu qu i bnh thng. Tuy nhin trong nhiu ng dng (nh chng trnh v th hm s, 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 lm theo cc phng php th cng l tch chui. Nhng, gii quyt cc biu thc c du ngoc, v d nh (a+b)*c+d/e, 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. n gin cho vic minh ha, ta gi nh rng biu thc m ta nhn c t bn phm ch bao gm: cc du m ngoc, ng ngoc, 4 ton t (+, -, *, /), cc 2 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

ton hng u ch l cc con s nguyn t 0 n 9, khng c bt k khong trng no gia cc k t. ti Trnh by thut ton v ci t trn C chng trnh tnh gi tr ca mt biu thc ton hc s i su tm hiu v 3 vn chnh: + S lc v K php Ba Lan. + Trnh by thut ton K php Ba Lan. + Ci t trn C chng trnh tnh gi tr ca mt biu thc ton hc.

CHNG I. S LC V THUT TON K PHP BA LAN.


3 - Data Structures and Algorithms Nhm 10

22/3/2011 I. S lc v thut ton K php Ba Lan:

GVHD: Nguyn Thnh Thy

Cch trnh by biu thc theo cch thng thng tuy t nhin vi con ngi nhng li 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 tpostfix (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 Charels 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 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 cn on ra c 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: 2+3 s c chuyn li thnh 2 3 +. II. Biu thc tin t, trung t, hu t. - Biu thc tin t (prefix): c biu din bng cch t ton t ln trc ton hng. Vi cch vit ny thay v vit a+b, nh dng trung t ta s vit l +ab. Ty theo u tin ca ton t m n s c sp xp khc nhau. Cch biu din ny gi l K php Ba Lan c pht minh vo nm 1920 bi nh ton hc Ba Lan. - Biu thc trung t (infix): ton t nm gia hai ton hng. Vi biu thc ny ta vit nh bnh thng l a+b. - Biu thc hu t (postfix): c biu din bng cch t ton t sau ton hng. Vi cch vit ny thay v vit a+b ta s vit ab+. Cch biu din ny gi l K php nghch o Ba Lan c pht minh vo khong gia thp k 1950 bi mt trit hc gia v nh khoa hc my tnh ngi c.

CHNG II. THUT TON K PHP BA LAN.


I. tng ca bi ton 4 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

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 . II. Trnh by thut ton.
1. Thut ton chuyn i t trung t sang hu t.

Thut ton chuyn i ny c pht minh bi v gio s ngi c 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). 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 trung t). + Nu gp du m ngoc, a n vo Stack. + Nu gp mt ton t (gi l 01) thc hin 2 bc sau: - Chng no cn mt ton t 02 nh ngn xp v u tin ca 01 nh hn hay bng u tin ca 02 th ly 02 ra khi ngn xp v ghi vo kt qu. - Push 01 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, ly ln lt tt c cc ton hng (nu c) t ngn xp ra v ghi vo chui kt qu. 2. Thut ton tnh gi tr ca biu thc hu t. Lp qua cc Token ca biu thc postfix t tri qua phi: + Nu l ton hng: Push vo Stack. + Nu l ton t: Pop hai ton hng trong Stack ra v tnh gi tr ca chng da vo ton t ny. Push kt qu li vo Stack. + Phn t cn st li trong Stack sau vng lp chnh l kt qu ca biu thc. 3. Trnh by thut ton: - Input: Biu thc trung t hp l. - Output: Gi tr ca biu thc hu t. - Process: *) Thut ton chuyn t dng trung t sang hu t: + Khi ng Stack rng (Stack cha ton t). + While (Khng c li v cha ht biu thc) - c Token (Token=hng/bin/ton t s hc/ngoc tri/ngoc phi). - Nu Token l: Ngoc tri: Push vo Stack. Ngoc phi: Pop v hin th cc phn t ca Stack n khi gp ngoc tri. (Pop ngoc tri nhng khng hin th ngoc tri). 5 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

Ton t: Nu Stack rng hay Token c u tin hn phn t nh Stack th Push vo Stack. Ngc li (u tin bng hoc t u tin hn) Pop v hin th mt phn t nh Stack. Lp li vic so snh Token vi mt phn t nh Stack. Ton hng: hin th n. Khi ht biu thc trung t: Pop v hin th ton b Stack cn li. *) Thut ton tnh gi tr biu thc hu t: + Khi ng Stack rng. + Lp li cc bc sau n khi ht biu thc: - c Token (Hng/bin/ton t). - Nu Token l: Ton hng: Push vo Stack. Ton t: Pop 2 gi tr p dng ton t cho 2 gi tr ly ra. Push kt qu vo Stack. -End. III. V d minh ha. - Input: (6+4*(2+6))/2 - Output: 19. - Process: *) Chuyn t biu thc t dng trung t sang hu t: Cc bc chuyn i c thc hin nh bng di y: K t ( 6 + 4 * ( 2 + 6 ) ) / 2 Thao tc Push ( Ghi 6 vo kt qu. Push + Ghi 4 vo kt qu. Push * Push ( Ghi 2 vo kt qu. Push + Ghi 6 vo kt qu. Pop cho n khi ly c ), ghi cc ton t Pop c ra kt qu. Pop cho n khi ly c ), ghi cc ton t Pop c ra kt qu. Push / Ghi 2 vo kt qu Pop tt c cc ton t ra khi ngn xp v ghi vo kt qu. Stack ( (+ 64 (+* (+*( 642 (+*(+ (+* 6426 6426+ 6 4 2 6 + *+ / 6426+*+2 6426+*+2/ Chui hu t 6

Kt qu: Biu thc hu t: 6 4 2 6 + * + 2 / 6 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

*) Tnh gi tr ca biu thc hu t: Qu trnh tnh ton c din ra nh bng di y: K t 6 4 2 6 + * + 2 / Thao tc Push 6 Push 4 Push 2 Push 6 Tnh 2+6 Push 8 Tnh 4*8 Push 32 Tnh 6+32 Push 38 Push 2 Tnh 38/2 Push 19 Trng thi Stack 6 64 642 6426 648 6 32 38 38 2 19

Kt qu: 19. - End. IV. nh gi phc tp ca thut ton. - Gi s xu biu thc dng trung t u vo c di l n. - Gi thi gian tnh ca thut ton l O(f(n)). - Thi gian tnh ca hm convert (char *input, char *output) chuyn i xu biu thc u vo t dng trung t sang hu t l O(g(n)). - Thi gian tnh ca hm tinhtoan (char *bieuthuc) tnh ton gi tr ca biu thc dng hu t l O(h(n)). - Ta c: Thi gian ci t v thc hin cc php ton c bn trn Stack nh Push(), Pop(), Isempty(), l hng s O(1). Vy ta c thi gian tnh ca thut ton l: O(f(n))= max{O(g(n)),O(h(n))} *) nh gi phc tp ca hm convert (char *input, char * output) tnh O(g(n)). - Chuyn xu biu thc u vo sang ch thng strlwr (input) thi gian tnh l O(n). - Duyt ton b xu: While(input[i]!=\0) { While(input[i]== ) //Loai bo dau ; { // Cau lenh hoac khoi cau lenh voi thoi gian O(1) ; i++ ; } If(((input[i]>=0)&&(input[i]<=9))||(input[i]==.)) 7 - Data Structures and Algorithms Nhm 10

22/3/2011 {

GVHD: Nguyn Thnh Thy

While(((input[i]>=0)&&(input[i]<=9))||(input[i]==.)) { // Cau lenh hoac khoi cau lenh voi thoi gian O(1); } } Else if () { } } * Vng lp ny thc hin cho n khi gp phn t null ca biu thc (kt thc biu thc), nu l k t rng (du cch) th b qua (tng ch s phn t ca xu thm mt n v) ri tip tc cho n khi ht cc k t cch lin nhau, gp ch s hoc du chm th a vo output cho n khi no ht cc k t ny lin nhau V vy, thut ton ch duyt qua xu biu thc ng mt ln thi gian tnh l O(n). thi gian tnh ca hm convert (char *input, char *output) l: O(g(n))= max{O(n),O(n)}=O(n); *) nh gi phc tp ca hm tinhtoan (char *bieuthuc) tnh O(h(n)) Trnh t thc hin ca hm ny cng tng t nh hm convert. Tuy nhin di ca xu u vo c s thay i do hm convert b qua cc du cch v n gin ha cc ton t (nh sins, cosc, Gi s di ca xu biu thc u vo l m (m<n) - Thi gian tnh ton cc php tnh c bn l hng s - Cc php ton c bn trn Stack l hng s. - Thi gian thc hin gn cc gi tr vo cc bin tm thi cng l hng s. - Xu biu thc u vo c duyt qua ng mt ln. T , ta c th d dng suy ra tng t nh trn, thi gian tnh ca hm tinhtoan (char *bieuthuc) l: O(h(n))=O(m) Vy thi gian tnh ca ton b thut ton tnh gi tr biu thc dng hu t l: O(f(n))=max {O(n),O(m)}=O(n)

CHNG III: CI T TRN C THUT TON K PHP BA LAN


I. M t ci t chng trnh: - Input: Biu thc s hc dng trung t. 8 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

- Output: Gi tr kt qu ca biu thc dng hu t. - Process: S dng cc php ton c bn xy dng da trn kiu d liu tru tng ngn xp, tin hnh vic chuyn i biu thc s hc trung t do ngi dng nhp t bn phm sang biu thc s hc dng hu t, tnh ton gi tr ca biu thc dng hu t v hin th kt qu ra mn hnh. Chng trnh gm: - Hm main: thc hin vic nhp biu thc vo xu input, gi cc hm chuyn i v tnh ton a kt qu ra mn hnh. To giao din ngi dng (c th lp li vi biu thc tnh ton khc). - Hm convert (char *input, char *output): thc hin vic phn tch xu biu thc vo input, chuyn i xu biu thc ra output l biu thc s hc ban u di dng hu t. + Duyt ln lt cc phn t ca xu input. + B qua khi gp du cch. + Nu l ch s hoc du chm (s thc) th a vo xu output. + Gp du m ngoc ( th y vo Stack. + Gp du cng + hoc tr - m khi nh ngn xp l du ( th y vo, cn khng phi l du m ( th ly phn t nh ra khi ngn xp trc, a vo xu output ri mi y vo Stack. + Gp du nhn * hoc chia /: y vo nu nh khng phi l (, +, hoc -, ly phn t nh ra trc a vo output ri mi y vo Stack nu ngc li. + Tng t khi gp cc ton t ly tha ^, cn thc , logarit l, v cc hm lng gic (sin s, cos c, tant): y vo ngay nu nh khng phi l cc ton t trn, ly phn t nh ra trc a vo output ri mi y vo Stack nu ngc li. + Gp du ng ngoc ) th y cc phn t trong ngn xp ra cho n khi gp du m ngoc ( a vo xu output. + Cui cng ta thu c xu output l biu thc dng hu t. - Hm tinhtoan (char *bieuthuc): thc hin vic phn tch biu thc di dng hu t, tnh ton gi tr biu thc theo thut ton Ba Lan, tr li gi tr l kt qu ca biu thc ban u. + Duyt xu cha biu thc dng hu t. + Duyt tng phn t ca xu. + Nu gp du cch th b qua, nu phn t = null th kt thc. + Gp ch s hoc du chm lu ra mt xu tm thi thc hin vic chuyn i sang kiu s thc y vo Stack. + Khi gp cc ton t hai ngi nh +, -, *, /, ^: y ln lt 2 phn t nh ngn xp ra, lu vo 2 bin tm thi ri tin hnh thc hin php tnh. + Khi gp ton t mt ngi nh sin, cos, tan, ln, e^: thc hin vic y phn t nh ra lu vo bin tm thi ri tnh. + Lp li qu trnh cho n khi duyt ht xu (Khi ngn xp cn duy nht mt phn t). - Ngoi ra, chng trnh cn c mt th vin lu tr cu trc ca ngn xp v cc php ton c bn trn ngn xp. (file Pstack.h) 9 - Data Structures and Algorithms Nhm 10

22/3/2011 -End. II. Mt s lu :

GVHD: Nguyn Thnh Thy

Cc php ton m chng trnh c th thc hin c: Php ton Biu din V d Cng x+y 2+4 Tr x-y 7-1 Nhn x*y 2*4 Chia x/y 10/2 Ly tha x^y 2^3 Ly tha c s e ex e3 Cn bc 2 x 25 Logarit t nhin lnx hoc lx l20 Sin sinx hoc sx s45 Cos cosx hoc cx c30 Tan tanx hoc tx t45 * Mt s lu : - S thc: V d: 5.3 - S m: V d: -5 - Cc gc trong cc hm lng gic c tnh theo n v radian. - C th s dng cc du ng m ngoc. V d: (2+5)*5-5.3/(5.4-7) - Cc cch nhp biu thc sau l khng hp l: sin-5 Hp l: sin(-5). e-3 Hp l: e(-3) 2/-1 Hp l: 2/(-1). <Du tr khng c vit lin sau cc ton t phn bit s m v ton t -> vv7 Hp l: v(v7). lnsin2 Hp l: ln(sin2). <Cc ton t mt ngi khng c vit lin nhau>. III. Ci t trn C. - 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 biu thc trung t hp l, c, x l v in ra file OUTPUT.TXT gi tr ca biu thc tng ng.

10 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

- Chng trnh: #include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> #define max 50 FILE *f1,*f2; //Khoi tao Stack void initialize(int &t) { t=-1; } int emptystack(int t) { return(t==-1); } int fullstack(int t) { return(t==max); } //Ham them phan tu vao Stack void push(char s[],int &t,char x) { 11 - Data Structures and Algorithms Nhm 10

22/3/2011 if(t==max) { //printf("stack day"); return; } t++; s[t]=x; } // Ham lay phan tu 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

GVHD: Nguyn Thnh Thy

12 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

//------------------------------------//----------------------------------------void convert (char P[],char Kq[]) { char x,ch,S[50]; int t1,t2,leng=strlen(P); initialize(t1); initialize(t2); // duyet tu trai sang phai cac ptu cua bieu thuc trung to P for(int i=0;i<leng;i++) { ch=P[i]; if(isdigit(ch)) push(Kq,t2,ch);// kiem tra toan hang (chi ktra co phai la so) else if(ch=='(') push(S,t1,ch); else if (toantu(ch)==1) // ktra neu la toan tu { if(uutien(ch)<=uutien(S[t1])) { pop(S,t1,x); push(Kq,t2,x); } push(S,t1,ch); } else if (ch==')') { // lan luot lay cac toan tu trong Stack S cho den khi gap '(' while(S[t1] !='(') { pop(S,t1,x); push(Kq,t2,x); } pop(S,t1,x); } } // lan luot lay cac toan tu con lai (neu co) trong S cho vao Kq khi da duyet xong P while(!emptystack(t1)) { pop(S,t1,x); push(Kq,t2,x); } push(Kq,t2,'\0'); } 13 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

// Cac ham tinh bieu thuc hau to. //-------------------------------void push2(int s[],int &t,int x) // stack nay mang gia tri kieu nguyen de tinh toan { t++; s[t]=x; } void pop2(int s[],int &t,int &x) { x=s[t]; t--; } // Ham tinh bieu thuc hau to void tinhtoan(char A[]) { int S[max],t=-1,x1,x2;// Khoi tao mot stack char ch; for(int i=0;i<strlen(A);i++) // Duyet tu trai sang phai cac phan tu cua hau to { ch=A[i]; if(isdigit(ch)) push2(S,t,ch-'0');// Dua gtri nguyen vao stack else // Khi gap toan tu { // Lay 2 ptu cuoi stack hien thoi, tinh ket qua,roi cho vao lai stack pop2(S,t,x1); pop2(S,t,x2); switch(ch) { case '+' : push2(S,t,x2+x1); break; case '-' : push2(S,t,x2-x1); break; case '*' : push2(S,t,x2*x1); break; case '/' : push2(S,t,x2/x1); break; } } } fprintf(f2,"%d\n",S[0]); printf("\nKET QUA:%d\n",S[0]); } void main() { 14 - Data Structures and Algorithms Nhm 10

22/3/2011

GVHD: Nguyn Thnh Thy

char Kq[max],P[max]; f1=fopen("d:\\input.txt","rt"); f2=fopen("d:\\output.txt","wt"); while(!feof(f1)) { fscanf(f1,"%s\n",P); convert(P,Kq); printf("\n ------------------------------------------------"); printf("\nKET QUA KHI CHUYEN TU BIEU THUC TRUNG TO SANG HAU TO: %s",Kq); tinhtoan(Kq); } fclose(f1); fclose(f2); getch(); }

15 - Data Structures and Algorithms Nhm 10

You might also like