Anda di halaman 1dari 5

Petunjuk pengerjaan program

Mengubah infix → postfix


Cara:
1. Pakai 2 stack: (a) stack operand, (b) stack operator
2. Tumpuk operand di stack operand, dan operator di stack operator
3. Operator memiliki prioritas:
a. Tinggi: kali (x) dan bagi (/)
b. Rendah: plus (+) dan minus (-)
c. Jika operator saat ini memiliki prioritas yang lebih rendah
daripada operator yang berada di atas stack, maka (i) pop dua
operand di stack operand, (ii) pop operator teratas, gabungkan
kedua operand itu dengan operator yang baru di-pop itu, (iii)
push string ini ke dalam stack operand, (iv) Bandingkan lagi
operator saat ini dengan operator stack teratas, spt langkah di
atas, sampai operator saat ini memiliki prioritas sama dengan
operator teratas, atau sampai stack operator kosong.
4. Contoh: input string “1+4*3/2-6” bisa dijadikan notasi postfix dengan
langkah2 berikut:

1 +

4
1 +

4 *
1 +

3
4 *
1 +

3 /
4 *
1 +

2
3 /
4 *
1 +

Operator saat ini '-' memiliki prioritas yang lebih rendah


daripada operator di stack teratas '/'. Jadi, langkahnya
(i) ambil dua operand dari stack operand (yaitu '3' dan '2')
(ii) gabungkan dengan operator dari stack teratas '/'
(iii) Masukkan string postfix hasilnya ('32/') ke dalam stack
operand.

Kedua stack menjadi sbb:

32/
4 *
1 +

(iv) Bandingkan operator saat '-' dengan operator teratas '*'.


Karena '-' prioritasnya lebih rendah daripada '*', ulangi
langkah (i) - (iii) di atas.

432/*
1 +

Lakukan (i) - (iv) terus-menerus sampai operator saat ini '-'


memiliki prioritas yang sama dengan operator teratas dari stack
operator.

Sekarang karena operator '-' sudah sama prioritasnya dengan


operator
teratas '+', maka push operator '-' ke dalam stack operator,
menjadi

432/* -
1 +

Terakhir, angka 6 di-push ke dalam stack operand

6
432/* -
1 +

Karena sekarang input sudah habis, lakukan operasi satu-per


satu,
hingga seluruh operand-nya habis sbb:
432/*6-
1 +

Lalu terakhir menjadi:

1432/*6-+

Inilah yang menjadi notasi postfix-nya.

Contoh lain: 1+2x3

1 +

2
1 +

2 *
1 +

3
2 *
1 +

Karena input sudah habis, lakukan evaluasi:

23*
1 +

123*+

Notasi postfix-nya menjadi: 123*+

Kalkulator dengan evaluasi ekspresi postfix

Notasi postfix ini lalu dievaluasi dengan stack tunggal. Misalnya: 1432/*6-+
Operand 1
1

Operand 4
4
1

Operand 3
3
4
1

Operand 2
2
3
4
1

Operator /
1.5 (yaitu=3/2)
4
1

Operator *
6 (yaitu 4*1.5)
1

Operand 6
6 (input angka ‘6’)
6 (yaitu 4*1.5)
1

Operator -
0 (yaitu 6-6)
1

Operator +
1 (yaitu 1+0)

Sisa bilangan terakhir dalam stack adalah hasilnya = 1.

Anda mungkin juga menyukai