🖥️
JTI - Modul Praktikum: Algoritma dan Struktur Data
  • 👋Selamat Datang!
  • 🔰Refreshment
    • 🔰Job Sheet 1: Objek
    • 🔰Job Sheet 2 - Array of Objects
  • 📚Dasar Struktur Data
    • 📚Job Sheet 3: Brute Force & Divide Conquer
      • 🐣Praktikum 1
      • 🐥Praktikum 2
      • 🐔Tugas Praktikum
  • 🔍Job Sheet 4: Sorting dan Searching
    • 🧮Praktikum 1: Sorting
    • 🔭Praktikum 2: Searching
    • 📚Tugas Praktikum
  • 📈Struktur Data Linier
    • 🧮Job Sheet 5: Stack
      • 👔Praktikum 1
      • ♾️Praktikum 2
      • 📲Tugas Praktikum
    • ⛓️Job Sheet 6: Queue
      • 🧬Praktikum 1
      • 💸Praktikum 2
      • 💷Tugas
    • 🔗Job Sheet 7: Single Linked List
      • 📂Praktikum 1
      • 🗂️Praktikum 2
      • 🗃️Tugas
    • ➿Job Sheet 8: Doubly Linked List
      • 📕Praktikum 1
      • 📗Praktikum 2
      • 📘Praktikum 3
      • ✍️Tugas Praktikum
  • 🎆STRUKTUR DATA NON LINEAR
    • 🌳Job Sheet 9: Tree
      • 🌴Praktikum 1
      • 🎋Praktikum 2
      • 🎄Tugas
    • 🗺️Job Sheet 10: Graf
      • 🛣️Praktikum 1
      • 🛤️Praktikum 2
      • 🏔️Tugas
    • 🌏Job Sheet 11: Hash Table
      • 🌎Praktikum 1
      • 🌍Tugas
    • 🎄Job Sheet 12: Heap
      • 🌿Praktikum 1
      • 🎋Tugas
    • ⛰️Job Sheet 13: Java Collection
      • 🌄Praktikum 1
      • 🏔️Praktikum 2
      • 🗻Praktikum 3
      • 🌏Praktikum 4
      • 🌎Praktikum 5
      • 🌋Tugas Praktikum
  • 🧑‍🏫Kontributor
Powered by GitBook
On this page
  • Pengantar
  • Langkah Percobaan
  • Pertanyaan
  1. Struktur Data Linier
  2. Job Sheet 5: Stack

Praktikum 2

PreviousPraktikum 1NextTugas Praktikum

Last updated 1 year ago

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!

📈
🧮
♾️
Class Diagram Postfix