โพ๏ธ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 classPostfixsesuai dengan class diagram yang telah dijelaskan sebelumnya.Tambahkan atribut
n,top, danstacksesuai diagram classPostfixtersebut.Tambahkan konstruktor
Postfixseperti 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
PostfixMaintetap pada proyek Praktikum2. Buat class main, kemudian buat variabelPdanQ. VariabelPdigunakan untuk menyimpan hasil akhir notasi postfix setelah dikonversi, sedangkan variabelQdigunakan untuk menyimpan masukan dari pengguna berupa ekspresi matematika dengan notasi infix. Deklarasikan variabelScannerdengan 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
PostfixMaindan 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