Top Banner

of 25

Ngăn xếp và biểu thức trung tố

Apr 14, 2018

Download

Documents

Harry Cong Dat
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 7/27/2019 Ngn xp v biu thc trung t

    1/25

    Ngn xp v biu thc trung t, hu t, tin t

    byhosytanon 13/5/2013, 15:11

    1. Khi nim

    Mt php ton hai ngi trn tp hp X l mt nh x f: XX X cho (a,b) f(a,b)

    thuc A. nh x f khi thng c k hiu bi *, c gi l ton t, cc phn t

    a, b c gi l cc hng t (cn gi l ton hng).

    Khi vit biu thc biu din php ton ta c th t k hiu ton t trc (k

    php tin t), sau (k php hu t) hoc gia (k php trung t) cc ton hng.

    Thng thng trong cc biu thc i s v s hc, ta vit k hiu php ton gia

    hai hng t, l k php trung t. V d: a + b, a * b,... Khi mt biu thc c nhiu

    php ton, ta dng cc cp du ngoc "(", ")" v th t u tin cc php ton ch

    r th t thc hin cc php ton. (Cc php ton u quy v php ton 2 ngi.)

    Ta cng c th vit hai hng t trc v k hiu ton t sau. Chng hn:

    a + b vit l a b +, a * b vit l a b *

    Cng c th vit ton t trc, hai ton hng sau. Chng hn:

    a + b vit l + a b, a * b vit l * a b

    V l thuyt, k php tin t v k php hu t cn c th c m rng cho cc

    php ton ba ngi hoc nhiu hn m vn khng phi dng ti du ngoc th

    hin u tin cc php ton, tng t vi hm s a bin, cn k php trung t th

    khng th. Tuy nhin, trong thc t khng c nhiu php ton a ngi v k php

    trung t vn c dng rng ri v thi quen. V d: + a b c c th c hiu l tng

    ca 3 s a, b v c trong k php tin t. Tng t, f a b c c th c hiu l hm fca 3 bin a, b v c trong k php tin t.

    Tm li:

    - Tin t: Vit ton t trc ton hng

    - Hu t: Vit ton t sau ton hng

    - Trung t: Vit ton t gia hai ton hng.

    Ch : Vi cch biu din dng trung t, ta c cc trng hp sau:

    - Trung t y du ngoc: Tt c ton t v ton hng u dng 2 ngi v t

    trong mt cp du ngoc.

    - Trung t khng y du ngoc: Ch c mt s cp ton hng v ton t l cdu ngoc.

    - Trung t khng c du ngoc: Biu thc khng cha bt k du ngoc no.

    tnh biu thc ca hai dng trung t sau ta cn xt n tnh u tin ca ton t.

    Nguyn tc u tin l *, /, % u tin hn + v -.Chuyn i biu thc Trung t y du ngoc sang Hu t

    http://cnttk25.forumvi.com/t12-topic#15http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/t12-topic#16http://cnttk25.forumvi.com/t12-topic#15http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/t12-topic#16
  • 7/27/2019 Ngn xp v biu thc trung t

    2/25

    a. Bi ton

    Chuyn biu thc M = M1M2M3...Mn t dng trung t y du ngoc sang hu t

    (N).

    b. Nhn xt- V M dng trung t y du ngoc nn chc chn mi ton t hai ngi u

    nm trong mt cp du ngoc.

    - Ta s phi thc hin php ton khi gp du ngoc ng u tin.

    c. tng

    Duyt t M t tri qua phi:

    - Nu gp ton hng th a ton hng vo biu thc ch N.

    - Nu gp ton t th a vo mt ngn xp (stack) S no khi to t trc.

    - Gp du ngoc m ("(") th b qua, gp du ngoc ng (")") th ly ton t tnh ca S a vo biu thc ch N.

    d. Gii thut

    CODE:

    Input: M: Bi u th c trung t y d u ngo c.

    1. Khi to stack S = {}; // Stack S rng.

    2. Khi to biu thc ch N = ""; // N cha c phn t no.

    3. for i:=1 to |M| do

    a. if (Mi l Ton hng) then N:=N+Mi; // a Mi vo N

    b. if (Mi l Ton t) then PUSH(Mi,S); // a Mi vo ngn xp S

    c. if (Mi l ")" ) then

    POP(S,a); // Ly gi tr trn nh ca S a vo a

    N:=N+a; // Thm a vo N

    Output: N: Biu thc hu t.

    e. V d

    CODE:

    Input: M = (10-(3*((14-2)/(2+4)))) sang hu t ( y M c s

    phn t l n=21)

    - Khi to: S={}; N="";

    - M1 = "(", b qua

  • 7/27/2019 Ngn xp v biu thc trung t

    3/25

    - M2 = "10", S={}; N="10";

    - M3 = "-", S={-}; N="10";

    - M4 = "(", S={-}; N="10";

    - M5 = "3", S={-}; N="10, 3";

    - M6 = "*", S={-, *}; N="10, 3";- M7 = "(", S={-, *}; N="10, 3";

    - M8 = "(", S={-, *}; N="10, 3";

    - M9 = "14", S={-, *}; N="10, 3, 14";

    - M10 = "-", S={-, *, -}; N="10, 3, 14";

    - M11 = "2", S={-, *, -}; N="10, 3, 14, 2";

    - M12 = ")", S={-, *}; N="10, 3, 14, 2, -";

    - M13 = "/", S={-, *, /}; N="10, 3, 14, 2, -";

    - M14 = "(", S={-, *, /}; N="10, 3, 14, 2, -";

    - M15 = "2", S={-, *, /}; N="10, 3, 14, 2, -, 2";- M16 = "+", S={-, *, /, +}; N="10, 3, 14, 2, -, 2";

    - M17 = "4", S={-, *, /, +}; N="10, 3, 14, 2, -, 2, 4";

    - M18 = ")", S={-, *, /}; N="10, 3, 14, 2, -, 2, 4, +";

    - M19 = ")", S={-, *}; N="10, 3, 14, 2, -, 2, 4,

    +, /";

    - M20 = ")", S={-}; N="10, 3, 14, 2, -, 2, 4,

    +, /, *";

    - M21 = ")", S={}; N="10, 3, 14, 2, -, 2, 4, +, /,

    *, -";Output: N = 10 3 14 2 - 2 4 + / * -

    Chuyn i biu thc Trung t khng y du ngoc sang Hut

    a. Bi ton

    Chuyn biu thc M = M1M2M3...Mn t dng trung t khng y du ngoc sang

    hu t (N).

    b. Nhn xt

    - V M dng trung t khng y du ngoc nn khi gp ton t ta cn xt n

    http://cnttk25.forumvi.com/t12-topic#17http://cnttk25.forumvi.com/t12-topic#17http://cnttk25.forumvi.com/t12-topic#17http://cnttk25.forumvi.com/t12-topic#17
  • 7/27/2019 Ngn xp v biu thc trung t

    4/25

    u tin ca ton t.

    c. tng

    Duyt t M t tri qua phi:

    - Nu gp ton hng th a ton hng vo biu thc ch N.- Nu gp du ngoc m ("(") th a vo mt ngn xp (stack) S no khi to

    t trc.

    - Nu gp du ngoc ng (")") th ln lt ly cc ton t t nh ca S a vo

    biu thc ch N cho n khi gp du ngoc ng (")") u tin, loi b lun du

    ngoc ng ra khi stack.

    - Nu gp ton t c u tin cao hn ton t hin c trn nh stack th a n

    vo stack.

    - Nu gp ton t c u tin thp hn hoc bng ton t hin ti trn inh stack

    th ly ton t trn nh stack ra a vo biu thc ch N, ng thi a ton t vo nh stack.

    - Khi xt ht cc phn t ca biu thc M, ln lt ly cc ton t c trong stack ra

    biu thc ch N.

    d. Gii thut

    CODE:

    Input: M: Biu thc trung t khng y du ngoc.

    int UT(x){ // x l mt phn t ca M

    if ((x="*") OR (x="/") OR (x="%")) ruturn 2;

    if ((x="+") OR (x="-")) ruturn 1;

    }

    1. Khi to stack S = {}; // Stack S rng.

    2. Khi to biu thc ch N = ""; // N cha c phn t no.

    3. for i:=1 to |M| do

    a. if (Mi l Ton hng) N:=N+Mi; // a Mi vo N

    b. if (Mi l Ton t)

    if UT(Top(S)>=UT(Mi){

    Pop(S,x);

    N:=N+x;

    Push(Mi,S);

  • 7/27/2019 Ngn xp v biu thc trung t

    5/25

    }

    c. if (Mi l ")" ){

    x="";

    while(x"("){

    N:=N+x; // Thm x vo NPOP(S,x); // Ly gi tr trn nh ca S a vo x

    }

    }

    4. while !IsEmpty(S){

    Pop(S,x);

    if x"(" N:=N+x;

    }

    Output: N: Biu thc hu t.

    e. V d

    CODE:

    Input: M = 10-3*(14-2)/(2+4) sang hu t ( y M c s phn t

    l n=15)

    - Khi to: S={}; N="";

    - M1 = "10", S={}; N="10";

    - M2 = "-", S={-}; N="10";

    - M3 = "3", S={-}; N="10, 3";

    - M4 = "*", S={-, *}; N="10, 3";

    - M5 = "(", S={-, *, (}; N="10, 3";

    - M6 = "14", S={-, *, (}; N="10, 3, 14";

    - M7 = "-", S={-, *, (, -}; N="10, 3, 14";

    - M8 = "2", S={-, *, (, -}; N="10, 3, 14, 2";

    - M9 = ")", S={-, *}; N="10, 3, 14, 2, -";

    - M10 = "/", S={-, /}; N="10, 3, 14, 2, -, *";

    - M11 = "(", S={-, /, (}; N="10, 3, 14, 2, -, *";

    - M12 = "2", S={-, /, (}; N="10, 3, 14, 2, -, *, 2";

    - M13 = "+", S={-, /, (, +}; N="10, 3, 14, 2, -, *, 2";

    - M14 = "4", S={-, /, (, +}; N="10, 3, 14, 2, -, *, 2,

    4";

    - M15 = ")", S={-, /}; N="10, 3, 14, 2, -, *, 2,

  • 7/27/2019 Ngn xp v biu thc trung t

    6/25

    4, +";

    - M16 = "", S={}; N="10, 3, 14, 2, -, *, 2, 4,

    +, /, -";

    Output: N = 10 3 14 2 - * 2 4 + / -

    Chuyn i biu thc Trung t khng c du ngoc sang Hu t

    a. Bi ton

    Chuyn biu thc M = M1M2M3...Mn t dng trung t khng c du ngoc sang hut (N).

    b. Nhn xt

    - y l trng hp ring ca trng hp M khng y du ngoc (trong qu trnh

    xt khng gp du ngoc no), ta vn cn xt n u tin ca ton t.

    c. tng

    Duyt t M t tri qua phi:

    - Nu gp ton hng th a ton hng vo biu thc ch N.- Nu gp ton t c u tin cao hn ton t hin c trn nh stack th a n

    vo stack.

    - Nu gp ton t c u tin thp hn hoc bng ton t hin ti trn inh stack

    th ly ton t trn nh stack ra a vo biu thc ch N, ng thi a ton t

    vo nh stack.

    - Khi xt ht cc phn t ca biu thc M, ln lt ly cc ton t c trong stack ra

    biu thc ch N.

    d. Gii thut

    CODE:

    Input: M: Biu thc trung t c du ngoc.

    int UT(x){ // x l mt phn t ca M

    if ((x="*") OR (x="/") OR (x="%")) ruturn 2;

    http://cnttk25.forumvi.com/t12-topic#18http://cnttk25.forumvi.com/t12-topic#18
  • 7/27/2019 Ngn xp v biu thc trung t

    7/25

    if ((x="+") OR (x="-")) ruturn 1;

    }

    1. Khi to stack S = {}; // Stack S rng.

    2. Khi to biu thc ch N = ""; // N cha c phn t no.3. for i:=1 to |M| do

    a. if (Mi l Ton hng) N:=N+Mi; // a Mi vo N

    b. if (Mi l Ton t)

    if UT(Top(S)>=UT(Mi){

    Pop(S,x);

    N:=N+x;

    Push(Mi,S);

    }

    4. while !IsEmpty(S){Pop(S,x);

    N:=N+x;

    }

    Output: N: Biu thc hu t.

    e. V d

    CODE:

    Input: M = 10-3*14-2/2+4 sang hu t ( y M c s phn t l

    n=11)

    - Khi to: S={}; N="";

    - M1 = "10", S={}; N="10";

    - M2 = "-", S={-}; N="10";

    - M3 = "3", S={-}; N="10, 3";

    - M4 = "*", S={-, *}; N="10, 3";

    - M5 = "14", S={-, *}; N="10, 3, 14";

    - M6 = "-", S={-, -}; N="10, 3, 14, *";

    - M7 = "2", S={-, -}; N="10, 3, 14, *, 2";

    - M8 = "/", S={-, -, /}; N="10, 3, 14, *, 2";

    - M9 = "2", S={-, -, /}; N="10, 3, 14, *, 2, 2";

    - M10 = "+", S={-, -, +}; N="10, 3, 14, *, 2, 2, /";

    - M11 = "4", S={-, -, +}; N="10, 3, 14, *, 2, 2, /,

  • 7/27/2019 Ngn xp v biu thc trung t

    8/25

    4";

    - M12 = "", S={}; N="10, 3, 14, *, 2, 2, /, 4,

    +, -, -";

    Output: N = 10 3 14 * 2 2 / 4 + - -

    Tnh gi tr biu thc dng Trung t y du ngoc

    a. Bi ton

    Tnh gi tr biu thc M = M1M2M3...Mn dng trung t y du ngoc.

    b. Nhn xt

    - Ta nn s dng mt stack lu tr cc kt qu tnh ton trung gian.

    c. tng

    Duyt t M t tri qua phi:- Nu gp du ngoc m ("(") th b qua.

    - Nu gp ton hng hoc ton t th a chng vo stack.

    - Nu gp du ngoc ng (")") th ly 3 phn t trn nh stack (gm 2 ton hng

    v mt ton t) ri thc hin php ton, kt qu li ct vo nh stack.

    - Khi xt ht M, gi tr cui cng trn nh stack chnh l kt qu tnh ton biu thc

    M.

    d. Gii thut

    CODE:

    Input: M: Biu thc trung t y du ngoc.

    1. Khi to stack S = {}; // Stack S rng.

    2. for (i=1;i

  • 7/27/2019 Ngn xp v biu thc trung t

    9/25

    Push((bxa),S); // Tnh gi tr bxa, kt qu li a vo S.

    }

    }

    3. Pop(S,Result);

    Output: Result.

    e. V d

    CODE:

    Cu I, thi tuyn sinh cao hc nm 2013

    Input: M = (10-(3*((14-2)/(2+4))))

    - Khi to: S={};

    - M1="(" B qua S={}

    - M2="10" a 10 vo S S={10}

    - M3="-" a - vo S S={10, -}

    - M4="(" B qua S={10, -}

    - M5="3" a 3 vo S S={10, -, 3}

    - M6="*" a * vo S S={10, -, 3, *}

    - M6="(" B qua S={10, -, 3, *}

    - M7="(" B qua S={10, -, 3, *}

    - M8="14" a 14 vo S S={10, -, 3, *, 14}

    - M9="-" a - vo S S={10, -, 3, *, 14,

    -}

    - M10="2" a 2 vo S S={10, -, 3, *,

    14, -, 2}

    - M11=")" Tnh 14-2=12 ri vo S S={10, -, 3, *,

    12}

    - M12="/" a / vo S S={10, -, 3, *,

    12, /}

    - M13="(" B qua S={10, -, 3, *,

    12, /}

    - M14="2" a 2 vo S S={10, -, 3, *,

    12, /, 2}

    - M15="+" a + vo S S={10, -, 3, *,

    12, /, 2, +}

    - M16="4" a 4 vo S S={10, -, 3, *,

  • 7/27/2019 Ngn xp v biu thc trung t

    10/25

    12, /, 2, +, 4}

    - M17=")" Tnh 2+4=6 ri vo S S={10, -, 3, *,

    12, /, 6}

    - M18=")" Tnh 12/6=2 ri vo S S={10, -, 3, *, 2}

    - M19=")" Tnh 3*2=6 ri vo S S={10, -, 6}- M20=")" Tnh 10-6=4 ri vo S S={4}

    - M21="" Kt thc vic tnh ton S={4}

    Output: Result=4

    Tnh gi tr biu thc dng Trung t khng y du ngoc

    a. Bi ton

    Tnh gi tr biu thc M = M1M2M3...Mn dng trung t khng y du ngoc.

    b. Nhn xt- Ta nn s dng hai stack lu tr cc kt qu tnh ton trung gian. Stack Sh lu

    tr cc ton hng, stack St lu tr cc ton t v du ngoc m.

    - V biu thc M dng Trung t khng y du ngoc nn ta cn xt n u

    tin ca cc ton t.

    c. tng

    Gi s M c cho dng ng (ngha l du ngoc phi i vi nhau tng i mt,

    cc phn t ch gm ton t, ton hng hoc du ngoc).

    Khi to 2 stack: Sh v St.Duyt t M t tri qua phi:

    - Nu gp du ngoc m ("(") th a vo St.

    - Nu gp ton hng th a vo Sh.

    - Nu gp ton t c u tin cao hn ton t hin c trn nh St th a n vo

    St.

    - Nu gp ton t c u tin thp hn hoc bng ton t hin c trn nh St th

    ly ton t trn nh St cng hai ton hng trn nh Sh, thc hin php ton ri ct

    kt qu vo Sh.

    - Nu gp du ngoc ng (")") th ly ton t trn nh St cng 2 ton hng trnnh Sh, thc hin php ton, kt qu ct vo Sh. C thc hin nh vy cho n khi

    gp du ngoc m u tin trn St, loi b lun du ngoc m ny ra khi St.

    - Khi xt ht M, ln lt ly mt ton t trn St v 2 ton hng trn Sh, thc hin

    php ton, kt qu ct vo Sh cho n khi Sh ch cn mt phn t (hay n khi St

    rng).

    http://cnttk25.forumvi.com/t12-topic#20http://cnttk25.forumvi.com/t12-topic#20
  • 7/27/2019 Ngn xp v biu thc trung t

    11/25

    d. Gii thut

    CODE:

    Input: M: Biu thc trung t khng y du ngoc.

    int UT(x){ // x l mt phn t ca M

    if x thuc {*, /, %} return 2;

    if x thuc {+, -} return 1;

    if x = "(" return 0

    }

    1. Khi to stack Sh = St = {}; // Stack Sh, St rng.

    2. for (i=1;i

  • 7/27/2019 Ngn xp v biu thc trung t

    12/25

    Pop(Sh,a); // a l mt ton hng ly t Sh.

    Pop(St,x); // x l mt ton t ly t St.

    Pop(Sh,b); // b l mt ton hng ly t Sh.

    Push((bxa),Sh); // Tnh gi tr bxa, kt qu li a vo Sh.

    }4. Pop(Sh,Result); // Ly phn t cui cng ca Sh ra kt qu.

    Output: Result.

    e. V d

    CODE:

    Input: M = 10-3*(14-2)/(2+4)

    - Khi to: Sh={};St={};

    - M1="10" a 10 vo Sh Sh={10}

    St={}

    - M2="-" a - vo St Sh={10}

    St={-}

    - M3="3" a 3 vo Sh Sh={10, 3}

    St={-}

    - M4="*" a * vo St Sh={10, 3}

    St={-, *}

    - M5="(" a ( vo St Sh={10, 3}

    St={-, *, (}

    - M6="14" a 14 vo Sh Sh={10, 3,

    14} St={-, *, (}

    - M7="-" a - vo St Sh={10, 3,

    14} St={-, *, (, -}

    - M8="2" a 2 vo Sh Sh={10, 3,

    14, 2} St={-, *, (, -}

    - M9=")" Tnh 14-2=12 ri vo Sh, loi b lun ( St

    Sh={10, 3, 12} St={-, *}

    - M10="/" Tnh 3*12=36 ri a vo Sh, a / vo St

    Sh={10, 36} St={-, /}

    - M11="(" a ( vo St Sh={10, 36}

    St={-, /, (}

    - M12="2" a 2 vo Sh Sh={10, 36,

  • 7/27/2019 Ngn xp v biu thc trung t

    13/25

    2} St={-, /, (}

    - M13="+" a + vo St Sh={10, 36,

    2} St={-, /, (, +}

    - M14="4" a 4 vo Sh Sh={10, 36,

    2, 4} St={-, /, (, +}- M15=")" Tnh 2+4=6 ri vo Sh, loi b lun ( St

    Sh={10, 36, 6} St={-, /}

    - Top(St)="/" Tnh 36/6=6 ri a vo Sh

    Sh={10, 6} St={-}

    - Top(St)="-" Tnh 10-6=4 ri a vo Sh

    Sh={4} St={}

    - Top(St)="" Dng

    Output: Result=Top(Sh) = 4

    Tnh gi tr biu thc dng Trung t khng c du ngocbyhosytanon 14/5/2013, 11:13

    a. Bi ton

    Tnh gi tr biu thc M = M1M2M3...Mn dng trung t khng c du ngoc.

    b. Nhn xt

    - C th s dng lun th tc tnh ton biu thc dng Trung t khng y du

    ngoc thc hin v y ch l trng hp c bit ca trng hp khng y du ngoc.

    - Ta vn nn s dng hai stack lu tr cc kt qu tnh ton trung gian. Stack Sh

    lu tr cc ton hng, stack St lu tr cc ton t.

    - V biu thc M dng Trung t c khng du ngoc nn ta cn xt n u tin

    ca cc ton t.

    c. tng

    Gi s M c cho dng ng (ngha l cc phn t ch gm ton t v ton

    hng ).Khi to 2 stack: Sh v St.

    Duyt t M t tri qua phi:

    - Nu gp ton hng th a vo Sh.

    - Nu gp ton t c u tin cao hn ton t hin c trn nh St th a n vo

    St.

    - Nu gp ton t c u tin thp hn hoc bng ton t hin c trn nh St th

    http://cnttk25.forumvi.com/t12-topic#21http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/u2http://cnttk25.forumvi.com/t12-topic#21http://cnttk25.forumvi.com/u2
  • 7/27/2019 Ngn xp v biu thc trung t

    14/25

    ly ton t trn nh St cng hai ton hng trn nh Sh, thc hin php ton ri ct

    kt qu vo Sh. a ton t ang xt vo St.

    - Khi xt ht M, ln lt ly mt ton t trn St v 2 ton hng trn Sh, thc hin

    php ton, kt qu ct vo Sh cho n khi Sh ch cn mt phn t (hay n khi St

    rng).

    d. Gii thut

    CODE:

    Input: M: Biu thc trung t khng c du ngoc.

    int UT(x){ // x l mt phn t ca M

    if x thuc {*, /, %} return 2;

    if x thuc {+, -} return 1;

    }

    1. Khi to stack Sh = St = {}; // Stack Sh, St rng.

    2. for (i=1;i

  • 7/27/2019 Ngn xp v biu thc trung t

    15/25

    e. V d

    CODE:

    Input: M = 10-3*14-2/2+4

    - Khi to: Sh={};St={};

    - M1="10" a 10 vo Sh Sh={10}

    St={}

    - M2="-" a - vo St Sh={10}

    St={-}

    - M3="3" a 3 vo Sh Sh={10, 3}

    St={-}

    - M4="*" a * vo St Sh={10, 3}

    St={-, *}

    - M6="14" a 14 vo Sh Sh={10, 3,

    14} St={-, *}

    - M7="-" Ly 14*3=42 a vo Sh, a - vo St

    Sh={10, 42} St={-, -}

    - M8="2" a 2 vo Sh Sh={10, 42,

    2} St={-, -}

    - M10="/" Da / vo St Sh={10, 42,

    2} St={-, -, /}

    - M12="2" a 2 vo Sh Sh={10, 42,

    2, 2} St={-, -, /}

    - M13="+" Ly 2/2=1 a vo Sh, a + vo St

    Sh={10, 42, 4} St={-, -, +}

    - M14="4" a 4 vo Sh Sh={10, 42,

    4, 4} St={-, -, +}

    - Top(St)="+" Tnh 4+4=8 ri a vo Sh

    Sh={10, 42, 8} St={-, -}

    - Top(St)="-" Tnh 42-8=34 ri a vo Sh

    Sh={10, 34} St={-}

    - Top(St)="-" Tnh 10-34=-24 ri a vo Sh Sh={-

    24} St={}

    - Top(St)="" Dng

  • 7/27/2019 Ngn xp v biu thc trung t

    16/25

    Output: Result=Top(Sh) = -24

    Tnh gi tr biu thc dng Hu tbyhosytanon 14/5/2013, 13:26

    a. Bi tonTnh gi tr biu thc M = M1M2M3...Mn dng hu t.

    b. Nhn xt

    - Do M dng hu t nn ta khng cn quan tm n u tin ca cc ton t.

    - Ta vn dng 1 ngn xp lu kt qu trnh ton trung gian.

    c. tng

    Gi s M c cho dng ng (ngha l cc phn t ch gm ton t v ton hng).

    Khi to stack: S.Duyt t M t tri qua phi:

    - Nu gp ton hng th a vo ngn xp S.

    - Nu gp ton t th ly hai phn t trn nh ngn xp, thc hin php ton ri a

    kt qu tr li ngn xp.

    - Thc hin cho n khi vt cn ht tt c phn t ca M.

    d. Gii thut

    CODE:

    Input: M: Biu thc hu t.

    1. Khi to stack S={}; // Stack S rng.

    2. for (i=1;i

  • 7/27/2019 Ngn xp v biu thc trung t

    17/25

    e. V d

    CODE:

    Cu I, 2, thi tuyn sinh nm 2011.Input: M = 6 1 - 7 1 - * 11 1 + 3 / 2 + /Khi to S={};- M= 6, S={6};- M= 1, S={1};- M= -, S={5};- M= 7, S={5,7};- M= 1, S={5,7,1};- M= -, S={5,6};- M= *, S={30};- M= 11, S={30,11};- M= 1, S={30,11,1};- M= +, S={30,12};

    - M= 3, S={30,12,3};- M= /, S={30,4};- M= 2, S={30,4,2};- M= +, S={30,6};- M= /, S={5};- M= , Dng, S={5};Output: Result=Top(S) = 5

    [THUT TON - JAVA] CHUYN BIU THC TRUNG TSANG HU T JAVA CONVERTS INFIXTO POSTFIX

    Cc biu thc i s c s dng hng ngy u c biu din di dng trung

    t (infix). Cch biu din ny rt d hiu vi con ngi v hu ht cc ton t (+,

    -, *, /) u l ton t hai ngi v chng phn cch gia hai ton hng vi nhau.

    Tuy nhin i vi my tnh, tnh c gi tr ca mt biu thc i s theo

    dng ny khng n gin nh ta vn lm. khc phc iu , my tnh cn

    chuyn cch biu din cc biu thc i s t trung t sang mt dng khc l

    tin t hoc hu t.

    Th no l biu thc tin t, trung t v hu t

    Trong 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

  • 7/27/2019 Ngn xp v biu thc trung t

    18/25

    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:

  • 7/27/2019 Ngn xp v biu thc trung t

    19/25

    Phng php chuyn t biu thc trung t sang hu t

    u tin ca cc ton t

    Mt trong nhng iu quan trng trc khi bt u l phi tnh ton c u

    tin ca cc ton t trong biu thc nhp vo. n gin ta ch xt cc ton t

    hai ngi v thng dng bao gm: multiply (+),subtract (-), multiply (*), divide

    (/). Theo cc ton t *, / c cng u tin v cao hn hai ton t +, -.

    Nh vy ta c phng thc ly u tin ton t nh sau:

    1

    2

    3

    4

    5

    publicintpriority(charc){ // thiet lap thu tu uu tienif(c == '+'|| c == '-') return1;elseif(c == '*'|| c == '/') return2;

    elsereturn0;}

    Kim tra ton t v ton hng

    Trong thut ton chuyn i ny ta cn c cc phng thc kim tra xem mt

    thnh phn ca chui c phi l ton t hoc ton hng khng. Thay v s dng

    cc cu trc if hoc switch di dng v bt tin khi pht trin, ta s dng Regex

    kim tra.

    Ngoi ra v chui nhp vo l mt biu thc i s, nn cc ton hng ta s xt

    khng ch l cc ch s m cn c ch ci t a-z v A-Z.

    C mt quy tc na l khi dng ch ci th ch cho php duy nht mt ch ci i

    din cho mt ton hng, cn khi dng ch s th c th nhiu ch s ghp thnh

    mt ton hng.

    1

    2

    3

    4

    5

    6

    7

    publicboolean

    isOperator(char

    c){ // kiem tra xem co phai toan tucharoperator[] = { '+', '-', '*', '/', ')', '('};

    Arrays.sort(operator);if(Arrays.binarySearch(operator, c) > -1)

    returntrue;elsereturnfalse;

    }

    Chun ha biu thc Infix trc khi chuyn i

  • 7/27/2019 Ngn xp v biu thc trung t

    20/25

    Cc biu thc Infix khi nhp vo c th d tha cc khong trng, cc k t khng

    ph hp hoc vit sai c php.

    Phn ny cc bn xem bi chun ha xu trong Java

    Ngoi ra cc bn cn phi ghp cc ch s lin nhau thnh s (ton hng), tch

    cc ton t, phn cch vi nhau bng mt khong trng. Cc phn t ny ti s

    gi l mt token.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    publicString[] processString(String sMath){ // xu ly bieu thuc nhap vao thaString s1 = "", elementMath[] = null;InfixToPostfix IFP = newInfixToPostfix();sMath = sMath.trim();

    sMath = sMath.replaceAll("\\s+"," "); // chuan hoa sMathfor(inti=0; i

  • 7/27/2019 Ngn xp v biu thc trung t

    21/25

    hoc bng ton t hin ti th ly ton t ra khi stack v cho ra

    output.

    +/a ton t hin ti vo stack

    Sau khi duyt ht biu thc infix, nu trong stack cn phn t th ly

    cc token trong ra v cho ln lt vo output.

  • 7/27/2019 Ngn xp v biu thc trung t

    22/25

    VD: Chng ta s chuyn biu thc A*B+C*((D-E)+F)/G t dng Infix sang dng

    Postfix:

  • 7/27/2019 Ngn xp v biu thc trung t

    23/25

    Ci t trn Java

    1

    2

    3

    4

    publicString[] postfix(String[] elementMath){InfixToPostfix IFP = newInfixToPostfix();String s1 = "", E[];Stack S = newStack ();for(inti=0; i

  • 7/27/2019 Ngn xp v biu thc trung t

    24/25

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    charc = elementMath[i].charAt(0); // c la ky tu dau tien cua m

    if(!IFP.isOperator(c)) // neu c khong la toan tus1 = s1 + " "+ elementMath[i]; // xuat elem vao s1

    else{ // c la toan tuif(c == '(') S.push(elementMath[i]); // c la "(" -> day pelse{

    if(c == ')'){ // c la ")"charc1; //duyet lai cac phan tu trong Stackdo{

    c1 = S.peek().charAt(0); // c1 la ky tu dau tif(c1 != '(') s1 = s1 + " "+ S.peek(); // trS.pop();

    }while(c1 != '(');}else{

    while(!S.isEmpty() && IFP.priority(S.peek().charAt(// Stack khong rong va trong khi phan tu trong Stack

    s1 = s1 + " "+ S.peek(); // xuat phan tu tronS.pop();

    }S.push(elementMath[i]); // dua phan tu hien tai vao

    }}

    }}while(!S.isEmpty()){ // Neu Stack con phan tu thi day het vao s1

    s1 = s1 + " "+ S.peek();S.pop();

    }E = s1.split(" "); // tach s1 thanh cac phan tureturnE;

    }

    V cui cng l chy chung trnh chnh:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    publicstaticvoidmain(String[] agrs){String sMath, elementMath[] = null;

    InfixToPostfix IFP = newInfixToPostfix();Scanner input = newScanner(System.in);sMath = input.nextLine(); // nhap bieu thucelementMath = IFP.processString(sMath); // tach bieu thuc thanhelementMath = IFP.postfix(elementMath); // dua cac phan tu ve dfor(inti=0; i

  • 7/27/2019 Ngn xp v biu thc trung t

    25/25

    10

    11