♾️Praktikum 2
Pengantar
Pada percobaan ini, kita akan membuat program untuk melakukan konversi notasi infix menjadi notasi postfix.
Perhatikan class diagram Postfix
berikut sebagai acuan.

Langkah Percobaan
Buatlah proyek dengan nama
Praktikum2
. Kemudian buatkla classPostfix
sesuai dengan class diagram yang telah dijelaskan sebelumnya.Tambahkan atribut
n
,top
, danstack
sesuai diagram classPostfix
tersebut.Tambahkan konstruktor
Postfix
seperti potongan kode berikut,
public Postfix(int total) {
n = total;
top = -1;
stack = new char[n];
push('(');
}
Buat method
push()
.
public void push(char c) {
top++;
stack[top] = c;
}
Buat method
pop()
.
public char pop() {
char item = stack[top];
top--;
return item;
}
Buat method
isOperand()
dengan tipe boolean yang digunakan untuk mengecek apakah elemen data berupa operand.
public boolean isOperand(char c) {
if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == ' ' && c == '.')) {
return true;
} else {
return false;
}
}
Buat method
isOperator()
dengan tipe boolean yang digunakan untuk mengecek apakah elemen data berupa operator.
public boolearn isOperator(char c) {
if(c == '^' || c == '%' || c == '/' || c == '*' || c == '-' || c == '+') {
return true;
} else {
return false;
}
}
Buat method
derajat()
yang mempunyai nilai kembalian integer untuk menentukan derajat operator.
public int derajat(char c) {
switch(c) {
case '^':
return 3;
case '%':
return 2;
case '/':
return 2;
case '*':
return 2;
case '-':
return 1;
case '+':
return 1;
default:
return 0;
}
}
Buat method konversi untuk melakukan konversi notasi infix menjadi notasi postfix dengan cara mengecek satu persatu elemen data pada String Q sebagai parameter masukan.
public String konversi(String Q) {
String P = "";
char c;
for(int i=0; i < n; i++) {
c = Q.charAt(i);
if(isOperand(c)) {
P = P + c;
}
if(c == '(') {
push(c);
}
if(c == ')') {
while(stack[top] != '(') {
P = P + pop();
}
pop();
}
if(isOperator(c)) {
while(derajar(stack[top]) >= derajat(c)) {
P = P + pop();
}
push(c);
}
}
return P;
}
Selanjutnya, buat class baru dengan nama
PostfixMain
tetap pada proyek Praktikum2. Buat class main, kemudian buat variabelP
danQ
. VariabelP
digunakan untuk menyimpan hasil akhir notasi postfix setelah dikonversi, sedangkan variabelQ
digunakan untuk menyimpan masukan dari pengguna berupa ekspresi matematika dengan notasi infix. Deklarasikan variabelScanner
dengan namasc
, kemudian panggil fungsi built-in trim yang digunakan untuk menghapus adanya spasi di depan atau di belakang teks dari teks persamaan yang dimasukkan oleh pengguna.
Scanner sc = new Scanner(System.in);
String P, Q;
System.out.println("Masukkan ekspresi matematika (infix): ");
Q = sc.nextLine();
Q.trim();
Q = Q + ")";
Penambahan string “)” digunakan untuk memastikan semua simbol/karakter yang masih berada di stack setelah semua persamaan terbaca, akan dikeluarkan dan dipindahkan ke postfix.
Buat variabel total untuk menghitung banyaknya karaketer pada variabel Q.
int total = Q.length();
Lakukan instansiasi objek dengan nama post dan nilai parameternya adalah total. Kemudian panggil method konversi untuk melakukan konversi notasi infix Q menjadi notasi postfix P.
Postfix post = new Postfix(total);
P = post.konversi(Q);
System.out.println("Postfix: " + P);
Compile dan jalankan class
PostfixMain
dan amati hasilnya.

Pertanyaan
Perhatikan class Postfix, jelaskan alur kerja method derajat!
Apa fungsi kode program berikut?
c = Q.charAt(i);
Jalankan kembali program tersebut, masukkan ekspresi 3*5^(8-6)%3. Tampilkan hasilnya!
Pada soal nomor 3, mengapa tanda kurung tidak ditampilkan pada hasil konversi? Jelaskan!
Last updated