Professional Documents
Culture Documents
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).
Contoh :
1.
(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
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$*/
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
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-
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;
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;
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+-