230 likes | 592 Views
STRUKTUR DATA . PERTEMUAN 5. vandawaa@yahoo.com. ARRAY (LARIK). STACK / TUMPUKAN. Contoh penggunaan STACK salah satunya adalah pada program konversi aritmatik mengubah bentuk INFIX ke POSTFIX ataupun INFIX ke PREFIX. Bentuk ini adalah bentuk aritmatik yang digunakan oleh komputer.
E N D
STRUKTUR DATA PERTEMUAN 5 vandawaa@yahoo.com
ARRAY (LARIK) STACK / TUMPUKAN • Contoh penggunaan STACK salah satunya adalah pada program konversi aritmatik mengubah bentuk INFIX ke POSTFIX ataupun INFIX ke PREFIX. • Bentuk ini adalah bentuk aritmatik yang digunakan oleh komputer. • Bentuk INFIX yang ditulis dalam bahasa pemrograman, akan dikompilasi menjadi bentuk POSTFIX atau PREFIX oleh compiler.
ARRAY (LARIK) STACK / TUMPUKAN OPERAND dan OPERATOR OPERATOR A + B * C OPERAND DERAJAT OPERATOR
ARRAY (LARIK) STACK / TUMPUKAN INFIXPOSTFIXPREFIX A + B AB + + AB A + B * C ABC *+ *+ ABC • INFIX = bentuk aritmatik yang Operatornya ada diantara (di dalam) dua buah Operand. • POSTFIX = bentuk aritmatik yang Operatornya ada sesudah dua Operand. • PREFIX = bentuk aritmatik yang Operatornya ada sebelum dua Operand.
ARRAY (LARIK) STACK / TUMPUKAN • Saat dikompilasi, bahasa pemrograman tidak menggunakan tanda kurung buka ataupun kurung tutup lagi. • Urutan pelaksanaan dilakukan tergantung dari letak Operator dan Operandnya, bukan bergantung dari derajat nilai / kekuatan Operator.
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX • HanyaOPERATOR yang disimpanke Stack • BilaisivariabelnyaOPERAND, makalangsungcetakvariabel • Operator kurungbukadankurungtutupbisadisimpanke Stack, namuntidakdituliskelayar • BilaisivariabelnyaKurungBuka‘(‘, makasimpan (PUSH) KurungBukake Stack. • BilaisivariabelnyaOPERATORmakaperiksa : • Bila Stack kosong, makasimpan Operator sekarangke Stack • Bila Stack paling atasberisi Operator selaintandakurung, makabandingkanderajatdi Stack denganvariabelsekarang. • Bilalebihrendahdi Stack, makavariabellangsungdi-PUSH • Bilalebihtinggidi Stack, maka Stack paling atasdi-POP / dicetak, kemudianvariabelsekarangmasuk/ di-PUSH.
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX • Bila Stack paling atasisinyakurungbuka ‘(’, makavariabelsekaranglangsungdi-PUSH/ disimpanke Stack. • Bilavariabelsekarangisinyakurungtutup ‘)‘, makacetaksemua Operator di Stack hinggabertemutandakurungbuka ‘(’. • Bilavariabel yang adatelahhabisdiprosesdan Stack masihberisi, makacetaksemua Operator yang adadidalam Stack hingga Stack kosongmelomponk
STACK / TUMPUKAN POSTFIX INFIX A - B + C + - • - • C • + • A • B T.Atas := 1 T.Atas := 0
STACK / TUMPUKAN Contoh : Ubahlah notasi INFIX berikut ke notasi POSTFIX. A + (B / C)
ARRAY (LARIK) STACK / TUMPUKAN • POSTFIX • A B + C - • A B C * + • A B + C * • A B + C D * - • A B C - D * + • A B + C D - * • A B C D E $ * / - INFIX • A + B – C • A + B * C • (A + B) * C • A + B – C * D • A + (B - C) * D • (A + B) * (C - D) • A – B / (C * D $ E)
ARRAY (LARIK) STACK / TUMPUKAN • (A + B * C (D - E)) / ((F + G) / H) • A B C D E - * + F G + H / / • (A + B) / ((C - D) * E $ F) $ G - H • A B + C D – E F $ * G $ / H - • A – B + C * (D $ E / (F - G) + H) - I • A B – C D E $ F G - / H + * + I -
ARRAY (LARIK) STACK / TUMPUKAN DEKLARASI AWAL STACK constMaxElemen = 255; typeStringKata = string[MaxElemen]; Tumpukan = record Isi : StringKata; Atas : 0..MaxElemen; end; var Infix = StringKata; {*untuk menyimpan masukan*}
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX PenentuanDerajatNilaidari Operator : {* Fungsiuntukmengembalikannilaiderajatdari operator *} function DERAJAT(Tanda_Op : char) : integer; begin caseTanda_Opof ‘$’ : DERAJAT := 3; {* Pangkat *} ‘*’ , ‘/’ : DERAJAT := 2; {* Kali & Bagi *} ‘+’ , ‘-’ : DERAJAT := 1; {* Tambah & Kurang *} ‘(’ : DERAJAT := 0; {* KurungBuka *} end end;
ARRAY (LARIK) STACK / TUMPUKAN {* Prosedur PUSH *} procedure PUSH (var T : Tumpukan; Elemen = char); Begin T.Atas := T.Atas + 1; T.Isi[T.Atas] := Elemen; end; {* Fungsi POP -> untukmengembalikannilai POP *} function POP (var T : Tumpukan) : char; begin POP := T.Isi[T.Atas]; T.Atas := T.Atas - 1; end;
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX Prosedure INFIX ke POSTFIX : procedure KONVERSI_POSTFIX(Infix : StringKata); var I : integer Operator : set of char; Temp, Kar : char; T : Tumpukan; begin {* Deklarasikan Operator yang diijinkan *} Operator := [‘$’] + [‘*’] + [‘/’] + [‘+’] + [‘-’]; for I:=1 to length(Infix) do begin Kar := Infix(I);
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX Prosedure INFIX ke POSTFIX : {* Jikavariabeladalahtanda ‘(’, maka PUSH ke Stack*} ifKar = ‘(’ then PUSH(T,Kar) {* Jikavariabeladalahtanda ‘)’, maka POP dantulis *} {* semuaisi Stack hinggaketemutanda‘(’ *} else if Kar = ‘)’ then begin whileT.Isi[T.Atas] <> ‘(’ do write(POP(T) : 2); Temp := POP(T) end
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX Prosedure INFIX ke POSTFIX : {*Jikavariabeladalahtanda Operator selaintandakurung} {*makabandingkan operator di Stack denganvariabel*} elseifKarin Operator then begin while (T.Atas] <> 0) and (DERAJAT(Kar) <= DERAJAT(T.Isi[T.Atas])) do write(POP(T) : 2); PUSH(T,Kar) end {*Jika Operand, makalangsungdicetak} elseifKar <> ‘ ‘ then write(Kar : 2) end; {* Akhirdariperulangan FOR *}
ARRAY (LARIK) STACK / TUMPUKAN INFIX ke POSTFIX Prosedure INFIX ke POSTFIX : {*Jika Stack masihisi, POP / cetaksemuaisinya *} IfT.Atas <> 0 then repeat write(POP(T) : 2) until T.Atas = 0; end; {* Akhirdari Procedure KONVERSI_POSTFIX *}
Tugas 4 Ubahlah notasi INFIX berikut ke notasi POSTFIX. • (70 * 20) / (15 * 3) • B $ 2 – (4 * A) * C • (A – B / C + E) / (A + B) • W + (5 * 30 + P / (5 $ 8))
Tugas 4 Contoh : Ubahlah notasi INFIX berikut ke notasi POSTFIX. (A + B) / C
THE END OF THIS DAY • KANGGOANG Biin NAAAHHH,,,,!!!! DEAL??? DEEEAAALLLL,,,,,