Algoritma Kalkulator

6
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 1 + 4 1 + 4 * 1 +

Transcript of Algoritma Kalkulator

Page 1: Algoritma Kalkulator

Petunjuk pengerjaan program

Mengubah infix postfix

Cara:1. Pakai 2 stack: (a) stack operand, (b) stack operator2. Tumpuk operand di stack operand, dan operator di stack operator3. 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

1 +

41 +

4 *1 +

34 *1 +

3 /4 *1 +

Page 2: Algoritma Kalkulator

23 /4 *1 +

Operator saat ini '-' memiliki prioritas yang lebih rendahdaripada 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 operatorteratas '+', maka push operator '-' ke dalam stack operator, menjadi

432/* -1 +

Terakhir, angka 6 di-push ke dalam stack operand

6432/* -1 +

Karena sekarang input sudah habis, lakukan operasi satu-per satu, hingga seluruh operand-nya habis sbb:

Page 3: Algoritma Kalkulator

432/*6-1 +

Lalu terakhir menjadi:

1432/*6-+

Inilah yang menjadi notasi postfix-nya.

Contoh lain: 1+2x3

1

1 +

21 +

2 *1 +

32 *1 +

Karena input sudah habis, lakukan evaluasi:

23*1 +

123*+

Notasi postfix-nya menjadi: 123*+

Kalkulator dengan evaluasi ekspresi postfix

Page 4: Algoritma Kalkulator

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

Operand 11

Operand 441

Operand 3341

Operand 22341

Operator /1.5 (yaitu=3/2)41

Operator *6 (yaitu 4*1.5)1

Operand 66 (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.

Page 5: Algoritma Kalkulator