Hello, guys!
Well, hello there! It's been a while since I posted an article about my assignment due to some days off. Okay, so without any further due, i'm just going to get down to the business. While the last article was mostly talking about stack, now we're going to discuss about one of its application, which is the translation from infix to postfix.
Now the question is how? To answer this complicated question, let's just check out the article I've written down here!
Menerjemahkana Infix ke Postfix
Bagaimana Manusia Mengerjakan Operasi Infix?
Dalam mengerjakan sebuah operasi aritmatika, biasanya manusia mengikuti beberapa langkah sederhana sebagai berikut. Pertama, mereka akan membacanya dari kiri ke kanan. Kemudian ketika manusia sudah membaca cukup data berupa 2 variabel dan sebuah operasi, maka mereka akan menghitungnya dan menyimpan jawaban tersebut. Proses ini dilakukan secara berulang-ulangーdari kiri ke kanan dan mengerjakannya ketika memungkinkanーsampai akhir dari persoalan.
Dalam mengerjakan operasi infix aritmatika, seorang manusia akan bergerak maju dan mundur sepanjang persoalannya. Ia akan bergerak maju (kiri ke kanan) membaca variabel dan operatornya. Ketika ia mendapatkan informasi yang cukup untuk mengerjakan operatornya, ia akan bergerak mundur, memanggil kembali kedua variabel dan operator tersebut untuk menyelesaikan aritmatikannya.
Terkadang seseorang harus membedakan kapan sebuah operator dapat dikerjakan sesuai dengan tingkat atau derjatnya, hal yang sama juga berlaku dengan tanda kurung. Ketika ini terjadi atau ditemukan, ia harus mengerjakan operator dengan derajat yang lebih tinggi terlebih dahulu; kemudian bergerak mundur ke belakang untuk mengerjakan operator lainnya.
Bagaimana Manusia Menerjemahkan Operasi Infix ke Postfix?
Ide dasarnya bukanlah untuk mengerjakan operasi infix, tetapi untuk menyusun ulang operator beserta variabelnya ke dalam format yang berbeda: notasi postfix. Notasi postfix yang sudah dihasilkan ini baru akan dikerjakan kemudian. Seperti sebelumnya, seorang manusia akan membaca operasi infix dari kiri ke kanan, melihat setiap karakter secara bergiliran. Sembari bergerak, ia akan menyalin setiap variabel dan operatornya ke dalam output postfix berupa string.
Apabila karakter dalam string infix berupa variabel, maka ia akan langsung menyalinnya ke dalam string postfix. Ia akan langsung menyalin variabel ketika menemukannya, tidak peduli seberapa lama ia harus menunggu untuk menyalin operator yang berperan dalam variabel tersebut.
Untuk dapat mengetahui kapan harus menyalin sebuah operator merupakan pekerjaaan yang lebih rumit, namun peraturannya sama dengan ketika mengerjakan operasi infix. Kapan saja seseorang dapat mulai mengerjakan operator dalam operasi infix, ia tidak akan langsung mengevaluasinya melainkan menyalinnya ke dalam string postfix.
Sedangkan, untuk proses pengerjaan aritmatika, seorang manusia akan bergerak maju dan mundur mengikuti alur operasi infix untuk menyelesaikan terjemahannya ke dalam notasi postfic. Seseorang tidak dapat menuliskan operator ke dalam string output (postfix) apabila setelahnya diikuti dengan operator yang memiliki derajat lebih tinggi atau tanda kurung. Apabila ditemukan operator dengan derajat yang lebih tinggi, maka operator tersebut harus disalin terlebih dahulu.
Menyimpan Operator dalam Stack
Penyimpanan operator pada postfix letaknya berbalik dengan penulisannya di operasi infix. Hal ini menunjukan bahwa sebuah stack mampu menjadi tempat yang baik untuk menyimpan operator-operator dalam sebuah ekspresi sembari seseorang menunggu untuk menggunakannya.
Mengeluarkan (popping) sebuah benda dari stack memperbolehkan seseorang untuk bergerak mundur (kanan ke kiri) mengikuti alur inputan string. Seseorang tidak benar-benar memerika semua input string, melainkan hanya operator dan tanda kurung saja. Operator dan tanda kurung tersebut dimasukkan ke dalam stack ketika membaca input string, sehingga sekarang mereka dapat dipanggil dalam urutan yang terbalik melalui operasi popping pada stack.
Untuk variabel (A,B, dan lain-lain) memiliki urutan yang sama pada ekspresi infix dan postfix, sehingga ini memungkinkan seseorang untuk langsung menuliskan variabel pada output ketika ditemukan pertama kali; variabel tidak perlu disimpan dalam stack.
Kode Pengimplementasian Stack untuk Mengubah Infix ke Postfix.
Fungsi main pada kelas InfixApp meminta pengguna untuk memasukan sebuah ekspresi infix. Input user kemudian dibaca oleh program melalui fungsi readString(). Program tersebut kemudian membuat sebuah objek InToPost yang mana diinisialisasi dengan nilai input string. Lalu, ia akan memanggil fungsi doTrans() agar objek tersebut dapat melakukan penerjemahan. Fungsi ini mengembalikan sebuah output postfix berupa string yang kemudian ditampilkan ke layar.
Fungsi doTrans() menggunakan perintah switch untuk mengendalikan bermacam aturan penerjemahan seperti yang sudah disebutkan sebelumnya (derajat operator, variabel, dan lain-lain). Fungsi ini memanggil gotOper() ketika ia membaca sebuah operator dan memanggil goParen() ketika ia membaca tanda kurung.
Comments
Post a Comment