Techno.OM, Vol. 10, No. 4, November 2011: 153-161 REKAYASA PERANGKAT UNAK PEMEAARAN POHON EKSPRESI (EXPRESSION TREE) Sumardi Program Studi Teknik Informatika, Fakultas Ilmu Komputer Universitas ian Nuswantoro l. Nakula I No. 5-11 Semarang 50131 Telp : (024) 3517261, Fax : (024) 3520165 E-mail : mardis_2000@yahoo.com Abstract Tree ( tree) is a binary tree (binary tree) where the leaves contain operands contained in an arithmetic and roots contain operators contained in the arithmetic. The process of reading from the tree starting from the leftmost leaf to the main root. Operands and operators who are at lower levels will be read first. Writing an arithmetic consists of three forms, namely forms of, Suffix (Postfix) and infix. In the form of, the operator is written in front of operandnya, and in the form of Suffix (Postfix), the operator is written on the back of operandnya. While the infix form is a normal form of writing arithmetic s. ased on the research made, a learning software is designed to describe the tree ( tree) of an arithmetic that are input. After testing the system turns the system can work well, but still there are some things that should be corrected and added that the software is becoming more perfect. Keywords : Expression tree,, Suffix, Postfix, 1. PENAHUUAN Suatu komputer dapat melaksanakan sesuatu bila kepadanya diberikan sederetan perintah/instruksi yang dimengertinya yang diurut secara logika. eretan perintah ini disebut program. Sekumpulan aturan-aturan dalam membuat program disebut sebagai bahasa pemrograman (Programming anguage). Karena komputer itu adalah suatu mesin, maka insruksi dan bahasa yang dimengerti olehnya adalah juga instruksi dan bahasa mesin. ahasa mesin pada dasarnya hanya mengandung dua simbol yaitu simbol biner 0 dan 1 sehingga sangat sulit bagi manusia membuat program untuk komputer dalam bahasa mesin, terlebih lagi karena setiap jenis komputer mempunyai bahasa mesin sendiri yang berbeda dari satu komputer ke komputer lain. Untuk memudahkan manusia membuat program komputer, telah diciptakan bermacam-macam bahasa pemrograman. Secara garis besar, bahasa pemrograman dapat dibagi menjadi dua bagian besar yaitu, 1. ahasa Pemrograman Tingkat Rendah (ow evel anguage), contohnya bahasa pemrograman Assembly. 2. ahasa Pemrograman Tingkat Tinggi (High evel anguage), contohnya bahasa pemrograman 153
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 154 FORTRAN, OO, ASI, Pascal, RPG, dan sebagainya. Kelemahan semua bahasa pemrograman ini adalah dibutuhkannya proses penerjemah dan sarana penerjemah berupa Assembler, ompiler atau Interpreter. Selain itu, program yang dibuat dengan menggunakan bahasa pemrograman tingkat tinggi pada umumnya tidak dapat menjangkau keseluruhan bagian komputer dimana program tersebut dilaksanakan. Program yang dapat menjangkau dan memanfaatkan seluruh kemampuan komputer hanyalah yang dibuat dalam bahasa mesin atau bahasa Assembly. Tujuan dari pembuatan bahasa pemrograman tingkat tinggi pada awalnya hanya ditujukan untuk menyelesaikan ekspresi aritmatika. Sebuah bahasa pemrograman dikatakan baik apabila mampu untuk memberikan keleluasaan kepada para programmer untuk menuliskan ekspresi aritmatika dengan ketentuan yang hampir sama seperti penulisan matematika secara manual. Sebuah compiler dikatakan berkompeten apabila mampu untuk membaca ekspresi ekspresi berikut ini, (x + y) * exp(x z) 4.0 a * b + c / d c * (x + y) not (p and q) or (x <= 7.0) Pohon ekspresi ( tree) adalah sebuah pohon biner (binary tree) dimana daun berisi operand yang terdapat dalam ekspresi aritmatika dan akar berisi operator yang terdapat dalam ekspresi aritmatika tersebut. Proses pembacaan dari pohon ekspresi dimulai dari daun paling kiri hingga akar utama. Operand dan operator yang berada pada level bawah akan dibaca terlebih dahulu. Penelusuran pohon ekspresi ditujukan untuk menyelesaikan ekspresi aritmatika. Penulisan ekspresi aritmatika terdiri dari 3 bentuk, yaitu bentuk, Suffix (Postfix) dan. alam bentuk, operator ditulis di depan dari operandnya, dan dalam bentuk Suffix (Postfix), operator ditulis di belakang dari operandnya. Sedangkan bentuk merupakan bentuk penulisan normal dari ekspresi aritmatika. 2. TINAUAN PUSTAKA Ekspresi Aritmatika Sebuah ekspresi aritmatika terdiri dari operand dan operator. Operator dalam ekspresi aritmatika dapat dibagi menjadi 2 jenis, yaitu : inary operator (operator pasangan) dan Unary operator (operator tunggal) inary operator adalah operator yang memiliki 2 buah operand (diapit oleh 2 buah operand), sedangkan unary operator adalah operator yang hanya memiliki 1 buah operand (diikuti oleh sebuah operand). Operator operator yang termasuk dalam binary operator adalah operator penjumlahan (+), pengurangan (-), perkalian (*), pembagian (/), modulo (mod), divisor (div), pemangkatan (^), operator logika AN, operator logika OR, dan operator perbandingan (seperti operator lebih besar, lebih kecil, sama dengan, lebih besar sama dengan, lebih kecil sama dengan, dan tidak sama dengan). Sedangkan operator yang termasuk dalam unary operator adalah operator minus (~), operator faktorial (!), operator trigonometri (seperti operator sinus, cosinus, tangen, cotangen, secan, dan cosecan), operator logika NOT, operator exponential (exp) dan fungsi logaritma (log). Prioritas/kedudukan dari masing masing operator (baik unary operator maupun binary operator) dari tinggi ke rendah adalah sebagai berikut,
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 155 1. Operator pemangkatan (^) dan semua unary operator. 2. Operator perkalian (*), pembagian (/), modulo (mod) dan divisor (div). 3. Operator penjumlahan (+) dan pengurangan (-). 4. Operator perbandingan, yaitu operator lebih besar, lebih kecil, sama dengan, lebih besar sama dengan, lebih kecil sama dengan, dan tidak sama dengan. 5. Operator logika NOT. 6. Operator logika AN dan OR. 7. Assignment Operator (=). Ekspresi aritmatika akan diselesaikan berdasarkan urutan prioritas dari operator di atas dengan ketentuan operator yang memiliki prioritas yang lebih tinggi akan diselesaikan terlebih dahulu. Tahapan tahapan penyelesaian suatu ekspresi aritmatika dapat direpresentasikan dalam bentuk graph yang dinamakan pohon ekspresi ( tree). Notasi/Penulisan Ekspresi Aritmatika Polish Notation diperkenalkan oleh seorang ahli matematika Polandia bernama an ukasiewicz. Polish Notation merupakan notasi penulisan ekspresi aritmatika. Polish Notation terdiri dari 3 bentuk, yaitu : a. b. Suffix (Postfix) c. dengan dua buah infix. iagram bentuk infix dapat dilihat pada gambar di bawah ini. entuk prefix merupakan cara / bentuk penulisan ekspresi aritmatika dimana operator ditulis di depan dari operandnya. Suatu prefix dapat berupa operand tunggal, atau gabungan dari unary operator dengan prefix, ataupun berupa gabungan dari binary operator dengan dua buah prefix. iagram bentuk prefix dapat dilihat pada gambar di bawah ini. Suffix (Postfix) entuk suffix (postfix) merupakan cara / bentuk penulisan ekspresi aritmatika dimana operator ditulis di belakang dari operandnya. Suatu suffix dapat berupa operand tunggal, atau gabungan dari suffix dengan unary operator, ataupun berupa gabungan dari dua buah suffix dengan binary operator. iagram bentuk suffix dapat dilihat pada gambar di bawah ini. entuk infix merupakan bentuk penulisan normal dari ekspresi aritmatika. Suatu infix dapat berupa operand tunggal, atau gabungan dari unary operator dengan infix, ataupun berupa gabungan dari binary operator
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 156 Operand Unary operator inary operator Gambar 1 : iagram bentuk infix Operand Unary operator inary operator Gambar 2: iagram bentuk prefix Operand Suffix Suffix Unary operator Suffix Suffix inary operator Gambar 3: iagram bentuk suffix Pohon Ekspresi (Expression Tree) Pohon ekspresi ( tree) adalah sebuah pohon biner (binary tree) dimana daun berisi operand yang terdapat dalam ekspresi aritmatika dan akar berisi operator yang terdapat dalam ekspresi aritmatika tersebut. Proses pembacaan dari pohon ekspresi dimulai dari daun paling kiri hingga akar utama. Operand dan operator yang berada pada level bawah akan dibaca terlebih dahulu. Sebagai contoh, misalkan diketahui sebuah ekspresi matematika x * y + 2 * (z 3), maka pohon ekspresinya adalah sebagai berikut, x * y + 2 * - z 3 Gambar 4 : Pohon ekspresi untuk ekspresi aritmatika x * y + 2 * (z 3)
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 157 Proses Traversal pada inary Tree Pohon biner (inary Tree) dapat ditelusuri dengan 4 cara yakni: Preorder Traversal (Penelusuran Preorder) Preorder etak Node H A etak Node A (kosong) etak Node K etak Node etak Node etak Node (kosong) (kosong) etak Node (kosong) (kosong) (kosong) K (kosong) etak Node (kosong) (kosong) Gambar 5: Proses Preorder traversal dari binary tree Inorder Traversal (Penelusuran Inorder) Inorder A etak Node H (kosong) etak Node A etak Node (kosong) etak Node (kosong) etak Node (kosong) (kosong) etak Node (kosong) K etak Node K (kosong) (kosong) etak Node (kosong) Gambar 6: Proses Inorder Traversal dari binary Tree
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 158 Postorder Traversal (Penelusuran Postorder) (kosong) Postorder A K etak Node H (kosong) etak Node A Gambar 7: Proses Postorder Traversal dari binary tree etak Node K etak Node (kosong) etak Node (kosong) (kosong) etak Node (kosong) (kosong) etak Node (kosong) etak Node (kosong) 3. PEMAHASAN Algoritma Pembagian Ekspresi Aritmatika ke bentuk Sub Ekspresi Aritmatika Proses penggambaran pohon ekspresi membutuhkan sub sub ekspresi aritmatika pada setiap tahapnya. Oleh karena itu, ekspresi aritmatika yang diinput harus dibagi ke bentuk sub ekspresi aritmatika sebelum memasuki proses penggambaran pohon ekspresi. Algoritma pembagian ekspresi aritmatika ke bentuk sub ekspresi aritmatika terbagi atas 3 (tiga) algoritma yaitu, algoritma pembagian untuk bentuk prefix, suffix (postfix) dan infix. Algoritma Pembagian Ekspresi Aritmatika dalam entuk ke entuk Sub Ekspresi Aritmatika Sebagai contoh, penulis meng-input data sebagai berikut. Ekspresi Aritmatika dalam bentuk : - + ~ g ^ a 2 * 4 + * b c/ d e. Proses pembagian ekspresi aritmatika ke sub ekspresi aritmatika, adalah sebagai berikut : Gambar 8: Hasil Pembagian ke Sub Ekspresi Aritmatika dengan Input Ekspresi Aritmatika dalam bentuk -+~g^a2*4+*bc/de Algoritma Pembagian Ekspresi Aritmatika dalam entuk Suffix (Postfix) ke entuk Sub Ekspresi Aritmatika ontoh Input Ekspresi Aritmatika dalam bentuk Suffix (Postfix) : c a ^ b * z ~ c e * + / d -.
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 159 Proses pembagian ekspresi aritmatika ke sub ekspresi aritmatika, adalah sebagai berikut : aritmatika yang telah dihasilkan oleh algoritma pembagian. Hasil penggambaran struktur pohon ekspresi dalam bentuk prefix - + ~ g ^ a 2 * 4 + * b c / d e Gambar 9 : Hasil Pembagian ke Sub Ekspresi Aritmatika dengan Input Ekspresi Aritmatika dalam bentuk Suffix c a ^ b * z ~ c e * + / d - Algoritma Pembagian Ekspresi Aritmatika dalam entuk ke entuk Sub Ekspresi Aritmatika ontoh Input Ekspresi Aritmatika dalam bentuk (entuk iasa) : (a+b)/c*5-((3\d)^(e^2*b)). Proses pembagian ekspresi aritmatika ke sub ekspresi aritmatika, adalah sebagai berikut : Gambar 11 : Hasil Penggambaran Struktur Pohon Ekspresi dengan Input Ekspresi Aritmatika dalam bentuk -+~g^a2*4+*bc/de Hasil penggambaran struktur pohon ekspresi dalam bentuk infix (a+b)/c*5-((3\d)^(e^2*b)) Gambar 12 : Hasil Penggambaran Struktur Pohon Ekspresi dengan Input Ekspresi Aritmatika dalam bentuk (iasa) (a+b)/c*5-((3\d)^(e^2*b)) Algoritma Proses Traversal Pre Order Gambar 10 : Hasil Pembagian ke Sub Ekspresi Aritmatika dengan Input Ekspresi Aritmatika dalam bentuk (iasa) (a+b)/c*5-((3\d)^(e^2*b)) Algoritma Penggambaran Struktur Pohon Ekspresi Algoritma penggambaran berfungsi untuk menggambarkan struktur pohon ekspresi sesuai dengan sub ekspresi Algoritma proses traversal Pre Order mengunjungi semua data / node yang dimulai dari data akar, dilanjutkan ke sebelah kirinya, setelah itu dilanjutkan ke sebelah kanannya. Hasil proses traversal Pre Order menghasilkan ekspresi aritmatika dalam bentuk prefix. Hasil proses traversal Pre Order dari bentuk - + ~ g ^ a 2 * 4 + * b c / d e
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 160 Gambar 13: Hasil Proses Traversal Pre Order dengan Input Ekspresi Aritmatika dari bentuk -+~g^a2*4+*bc/de Algoritma proses traversal Pre Order adalah sebagai berikut : '--------- SIMUASI TRAVERSA PREORER Private Sub ProcPreOrder(pnNode As Integer, pcalur As String, yval pnspeed As Integer) 'Tree tidak kosong If pnnode <> 0 Then '----- Write (Aku.Isi) ShpNode(pnNode).Fillolor = &HFF& 'Merah lblnode(pnnode).fontold = True lblnode(pnnode).foreolor = pcalur = pcalur & ", " & lblnode(pnnode).aption 'elay 500 oevents Sleep pnspeed oevents ShpNode(pnNode).Fillolor = lblnode(pnnode).fontold = False lblnode(pnnode).foreolor = 0 'Hitam '------------------------------ 'Write (Aku.Kiri) all ProcPreOrder(ArrNode(pnNode).eft, pcalur, pnspeed) 'Write (Aku.Kanan) / Rekursif all ProcPreOrder(ArrNode(pnNode).Right, pcalur, pnspeed) End If End Sub Hasil proses traversal Pre Order dari bentuk Suffix ca^b*z~ce*+/d- Gambar 14: Hasil Proses Traversal Pre Order dengan Input Ekspresi Aritmatika dari bentuk Suffix ca^b*z~ce*+/d- Algoritma proses traversal In Order adalah sebagai berikut : '--------- SIMUASI TRAVERSA INORER Private Sub ProcInOrder(pnNode As Integer, pcalur As String, yval pnspeed As Integer) 'Tree tidak kosong If pnnode <> 0 Then 'Write (Aku.Kiri) / Rekursif all ProcInOrder(ArrNode(pnNode).eft, pcalur, pnspeed) '----- Write (Aku.Isi) ShpNode(pnNode).Fillolor = &HFF& 'Merah lblnode(pnnode).fontold = True lblnode(pnnode).foreolor = pcalur = pcalur & ", " & lblnode(pnnode).aption 'elay 500 oevents Sleep pnspeed oevents ShpNode(pnNode).Fillolor = lblnode(pnnode).fontold = False lblnode(pnnode).foreolor = 0 'Hitam '------------------------------ 'Write (Aku.Kanan) all ProcInOrder(ArrNode(pnNode).Right, pcalur, pnspeed) End If End Sub Hasil dari proses traversal In Order dikembalikan pada nilai variabel pcalur
Techno.OM, Vol. 10, No. 4, November 2011: 153-161 161 Hasil proses traversal Pre Order dari bentuk (iasa) (a+b)/c*5-((3\d)^(e^2*b)) Gambar 15 : Hasil Proses Traversal Pre Order dengan Input Ekspresi Aritmatika dari bentuk (iasa) (a+b)/c*5-((3\d)^(e^2*b)) Algoritma proses traversal Post Order adalah sebagai berikut : '--------- SIMUASI TRAVERSA POSTORER Private Sub ProcPostOrder(pnNode As Integer, pcalur As String, yval pnspeed As Integer) 'Tree tidak kosong If pnnode <> 0 Then 'Write (Aku.Kiri) all ProcPostOrder(ArrNode(pnNode).eft, pcalur, pnspeed) 'Write (Aku.Kanan) all ProcPostOrder(ArrNode(pnNode).Right, pcalur, pnspeed) '----- Write (Aku.Isi) ShpNode(pnNode).Fillolor = &HFF& 'Merah lblnode(pnnode).fontold = True lblnode(pnnode).foreolor = pcalur = pcalur & ", " & lblnode(pnnode).aption 4. SIMPUAN Setelah menyelesaikan perancangan perangkat lunak pembelajaran pohon ekspresi ( tree), peneliti berkesimpulan sebagai berikut : Perangkat lunak dapat melakukan validasi terhadap struktur prefix, infix dan postfix. Perangkat lunak didukung dengan visualisasi proses pembentukan pohon ekspresi, proses traversal, dan proses evaluasi. Perangkat lunak dapat digunakan untuk membantu pemahaman pembentukan pohon ekspresi. AFTAR PUSTAKA Alfred V.Aho, ohn E. Hopcroft, effrey. Ullman, 1983. ata Structures And Algorithms. Alfred V.Aho, Ravi Sethi, effrey. Ullman, 1986. ompilers, Principles, Techniques, and Tools Rahadian, Hadi, 2002. Pemrograman Windows API dengan Microsoft Visual asic 6.0, PT. Elex Media Komputindo. Rahmat Putar, 2005. The est Source ode Visual asic, PT. Elex Media Komputindo. Robert.Kruse, 1991. ata Structures & Program esign, Second Edition. 'elay 500 oevents Sleep pnspeed oevents ShpNode(pnNode).Fillolor = lblnode(pnnode).fontold = False lblnode(pnnode).foreolor = 0 'Hitam '------------------------------ End If End Sub