You are on page 1of 18

Aswandi, S.Kom, M.

Kom

Notasi aritmatik biasanya ditulis dalam notasi infix yang mudah dimengerti oleh manusia, hanya saja perlu diperhatikan prioritas pengerjaan karena berhubungan dengan hirarki operator pada komputer. Prioritas pengerjaan adalah : 1. Tanda kurung : (.) 2. Eksponensial atau pangkat : ^ 3. Perkalian, Pembagian : *, / 4. Penjumlahan, Pengurangan : +, Aswandi, S.Kom, M.Kom

Notasi infix untuk penulisan aritmatik, biasanya diubah ke dalam notasi prefix atau postfix saat kompilasi. Notasi prefix dan postfix akan lebih mudah dikerjakan oleh komputer, karena tidak perlu mencari urutan pengerjaan seperti pada notasi infix.
Konversi dalam pemrosesan dikomputer ada 3 macam notasi yaitu : 1. Notasi Prefix adalah : Suatu notasi dimana simbol operator ditulis didepan operand Contoh : *AB 2. Notasi Infix adalah : Suatu notasi dimana simbol operator ditulis diantara 2 operand/sblm operand lain. Contoh : A*B 3. Notasi Posfix adalah : Suatu notasi yang simbol operatornya terletak dibelakang operand. Contoh : AB*
Aswandi, S.Kom, M.Kom

Konversi Notasi Infix menjadi posfix dengan mengunakan stack/tumpukan, memiliki aturan-aturan (algorithma) sebagai berikut : a. Tentukan panjang notasi yang akan dibaca, misalnya N character. Derajat masing-masing operator yaitu : # $ atau ^ : berderajat 3(tiga) # * dan / : berderajat 2(dua) # + dan : berderajat 1(satu) # ( : berderajat 0(nol) b. Baca simbol didalam notasi mulai dari urutan pertama (I=1) sampai keurutan ke N, misalnya : S S(I)
Aswandi, S.Kom, M.Kom

c. Jika S(I) berupa operand tulis S(I) kedalam notasi posfix d. Jika S(I) berupa operator ada 3(tiga) kemungkinan : Jika top stack = 0(kosong) atau top stack berupa kurung buka, PUSH S(I) kedalam stack Jika top stack 0(kosong), bandingkan S(I) dengan top stack dan jika S(I) > top stack PUSH S(I) ke dalam stack Jika S(I) <= top stack maka operator top stack ditulis ke dalam notasi posfix, kemudian PUSH S(I) kedalam stack e. Jika S(I) berupa kurung buka PUSH S(I) ke dalam stack
Aswandi, S.Kom, M.Kom

f. Jika S(I) berupa kurung tutup maka POP semua operator didalam stack sampai dibaca/ditemukan simbol kurung buka kemudian tanda kurung dihilangkan. g. Jika S(I)/simbol habis dibaca atau kosong dan top stack 0, maka POP operator top stack ditulis kedalam notasi posfix sampai top stack = 0(kosong).

Aswandi, S.Kom, M.Kom

Contoh :
1.

Merubah ungkapan Notasi Infix menjadi Posfix

(A+B)/((C-D)*E$F) Jawab : Secara Substitusi : A+B AB+ = X C-D CD- = Y E$F EF$ = Z Y*Z YZ* = CD-EF$* =W X/W XW/ = AB+CD-EF$*/ Secara Distribusi : Merubah Notasi Infix menjadi Notasi Posfix dengan mengunakan fasilitas stack
Aswandi, S.Kom, M.Kom

Tahap (I) 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Character Dibaca S(I) ( A + B ) / ( ( C D ) * E ( (

Isi Stack

Character Tercetak ------A ------B + ------------------C ------D ------E ------A A AB AB+ AB+ AB+ AB+ AB+C AB+C

Persamaan Posfix

(+ (+ ------/ /( /(( /(( /((/((/( /(* /(*

AB+CD AB+CDAB+CDAB+CD-E

15
16 17 18 19

$
F ) -------------

/(*$
/(*$ /(* / -------

------F $ * /

AB+CD-E
AB+CD-EF AB+CD-EF$ AB+CD-EF$* AB+CD-EF$*/

Aswandi, S.Kom, M.Kom

2.

((A*B)$(C+D))-E Jawab : Secara Substitusi : A*B AB* = X C+D CD+ = Y X$Y XY$ = AB*CD+$ = Z Z-E ZE- = ZE- = AB*CD+$E-

Secara Distribusi : Merubah Notasi Infix menjadi Notasi Posfix dengan mengunakan fasilitas stack
Aswandi, S.Kom, M.Kom

Tahap (I)
1 2 3 4 5 6 7 8 9 10 11 12

Character Dibaca S(I)


( ( A * B ) $ ( C + D ) ( (( ((

Isi Stack

Character Tercetak
------------A ------B * ------------C ------D + ------------A A AB AB* AB* AB* AB*C AB*C

Persamaan Posfix

((* ((* ( ($ ($( ($( ($(+ ($(+ ($

AB*CD AB*CD+

13
14 15 16

)
E

-------

$
------E -

AB*CD+$
AB*CD+$ AB*CD+$E AB*CD+$E-

Aswandi, S.Kom, M.Kom

Program Koversi_Infix_ke_Posfix; Uses WinCrt; Const Max = 100; Type Stack = Record Isi : Array[1..Max] of char; atas : 0..max; end; Var S : Stack; Infix : String; lagi : char; I : Integer; Operator : set of char; Buang,Simbol : Char;

Aswandi, S.Kom, M.Kom

Function derajat(tanda : Char) : Integer; Begin Case tanda of '^' : derajat := 3; '*','/': derajat := 2; '+','-': derajat := 1; '(' : derajat := 0; end end;
Procedure Push(var S : Stack; X : Char); Begin S.Atas := S.Atas + 1; S.Isi[S.Atas] := X end;
Aswandi, S.Kom, M.Kom

Function Pop(var S : Stack) : Char; Begin Pop := S.Isi[S.Atas]; S.Atas := S.Atas - 1 end;

Aswandi, S.Kom, M.Kom

Procedure Konversi(Infix : String); Begin Operator := ['^']+['*']+['/']+['+']+['-']; For I := 1 to length(infix) do Begin Simbol := Infix[I]; If Simbol = '(' then Push(S,Simbol) else If Simbol = ')' then Begin While S.Isi[S.Atas] <> '(' do Write(Pop(S):2); Buang := Pop(S) end else
Aswandi, S.Kom, M.Kom

If Simbol In Operator then Begin While(S.Atas<>0) and (derajat(Simbol) <= derajat(S.Isi[S.atas])) do write(Pop(S):2); Push(S,Simbol) end else If Simbol <> '' then Write (Simbol : 2) end; If S.Atas <> 0 then Repeat Write(Pop(S):2) Until S.Atas = 0; end;
Aswandi, S.Kom, M.Kom

{Procedure Utama} Begin ClrScr; lagi := 'Y'; Writeln('Konversi Notasi Infix menjadi Notasi Posfix'); Writeln('-------------------------------------------'); Writeln; While upcase(lagi)='Y' do Begin Write('Inputkan Notasi Infix : ');Readln(Infix); Writeln; Write('Notas Posfix : '); Konversi(Infix); Writeln; write('Ada Data Lagi [Y/T] : ');Readln(lagi); writeln end; Writeln; End.
Aswandi, S.Kom, M.Kom

Tugas 2 :
1. Jelaskan algorithma untuk mengkonversikan ungkapan Infix menjadi Posfix dengan cara Substitusi dan Distribusi di bawah ini : - A/B-C/D - A+B*C - A*(B/(C+D)) - (2+3*(6-2))/((1+3)/2) - A^(B+C-D) - (2+4*3)+((2+1)*2) - ((I*(J+K))-((L$M)/(N*O))) - A^(B+C)/(D-E) - (A+B)^3-C*D
Aswandi, S.Kom, M.Kom

2. Ubah Notasi Prefix ini ke dalam infix dan postfix : a. +-/ABC^DE b. -+DE/XY c. ^+23-CD 3. Ubah Notasi Posfix ini ke dalam infix dan prefix : a. ABC+b. GH+IJ/* c. AB^CD+-

Aswandi, S.Kom, M.Kom

You might also like