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

Embed Size (px)

Citation preview

  • 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