♾️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 class Postfix sesuai dengan class diagram yang telah dijelaskan sebelumnya.

  • Tambahkan atribut n, top, dan stack sesuai diagram class Postfix 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 variabel P dan Q. Variabel P digunakan untuk menyimpan hasil akhir notasi postfix setelah dikonversi, sedangkan variabel Q digunakan untuk menyimpan masukan dari pengguna berupa ekspresi matematika dengan notasi infix. Deklarasikan variabel Scanner dengan nama sc, 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

  1. Perhatikan class Postfix, jelaskan alur kerja method derajat!

  2. Apa fungsi kode program berikut? c = Q.charAt(i);

  3. Jalankan kembali program tersebut, masukkan ekspresi 3*5^(8-6)%3. Tampilkan hasilnya!

  4. Pada soal nomor 3, mengapa tanda kurung tidak ditampilkan pada hasil konversi? Jelaskan!

Last updated