BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis
Proses penyederhanaan fungsi Boolean dengan metode Quine-McCluskey mempunyai 7 (tujuh) langkah pengerjaan untuk menyederhanakan fungsi Boolean dalam bentuk SOP (sum-of-product) atau bentuk POS (product-of-sum), seperti yang telah dijelaskan pada bab 2 sebelumnya.
Metode Quine-McCluskey menyederhanakan fungsi Boolean dengan menggabungkan minterm/maxterm menjadi himpunan bentuk prima (prime-implicant), di mana sebanyak mungkin peubah dieliminasi (dihilangkan) secara maksimal.
Minterm/maxterm yang digabung untuk membentuk sebuah bentuk prima harus
memiliki tepat satu buah peubah yang nilainya berbeda (komplemen dan non-komplemen). Bentuk prima yang terbentuk juga dapat digabung untuk membentuk bentuk prima lainnya, apabila memiliki satu buah peubah yang nilainya berbeda. Prosedur ini dilakukan berulang kali hingga tidak terdapat bentuk prima yang dapat dibentuk lagi.
Untuk proses selanjutnya, metode ini memilih bentuk prima yang paling sederhana, yaitu bentuk prima yang tidak membentuk bentuk prima yang baru. Dari bentuk-bentuk prima yang sederhana ini, dipilih bentuk prima yang memiliki jumlah peubah paling sedikit (bentuk prima yang paling panjang) dan mencakup sebanyak mungkin minterm/maxterm dari fungsi Boolean yang di-input. Bentuk prima inilah yang merupakan hasil minimisasi dari fungsi Boolean.
Keunggulan dari metode Quine-McCluskey adalah kemampuannya untuk melakukan proses penyederhanaan terhadap fungsi Boolean dengan jumlah peubah yang besar. Selain itu, prosedur atau langkah–langkah pengerjaan dari metode ini sangat sistematis, artinya pengerjaan setiap langkah sangat rapi, teratur dan terstruktur, sehingga metode ini lebih mudah diprogram di dalam komputer dibandingkan dengan metode penyederhanaan lainnya.
Sebagai contoh, dilakukan penyederhanaan terhadap fungsi Boolean dalam bentuk SOP : f (w, x, y, z) = 3 (0, 1, 3, 4, 5, 6, 8, 10, 11, 15). Langkah–langkah penyederhanaan fungsi Boolean dengan metode Quine-McCluskey adalah sebagai berikut.
LANGKAH-1 : Nyatakan tiap minterm dalam n peubah menjadi string bit biner yang panjangnya n. (Pada contoh ini, jumlah peubah adalah 4 sehingga n = 4)
0 = 0000 1 = 0001 3 = 0011 4 = 0100 5 = 0101 6 = 0110 8 = 1000 10 = 1010 11 = 1011 15 = 1111
LANGKAH-2 : Kelompokkan tiap minterm berdasarkan jumlah '1' yang dimilikinya. Hasil Penyelesaian Langkah - 2 :
)))))))))))))))) term w x y z ))))))))))))))))
0 0 0 0 0 -> jumlah bit '1' = 0 buah ))))))))))))))))
1 0 0 0 1 -> jumlah bit '1' = 1 buah 4 0 1 0 0
8 1 0 0 0 ))))))))))))))))
5 0 1 0 1 -> jumlah bit '1' = 2 buah 6 0 1 1 0
3 0 0 1 1 10 1 0 1 0 ))))))))))))))))
11 1 0 1 1 -> jumlah bit '1' = 3 buah ))))))))))))))))
15 1 1 1 1 -> jumlah bit '1' = 4 buah ))))))))))))))))
LANGKAH-3 : Kombinasikan minterm dalam n peubah dengan kelompok lain yang jumlah '1'-nya berbeda satu, sehingga diperoleh bentuk prima (prime-implicant) yang terdiri dari n-1 peubah. minterm yang dikombinasikan diberi tanda 'v'
LANGKAH-4 : Kombinasikan minterm dalam n - 1 peubah dengan kelompok lain yang jumlah '1'-nya berbeda satu, sehingga diperoleh bentuk prima yang terdiri dari n-2 peubah.
LANGKAH-5 : Teruskan langkah 4 sampai diperoleh bentuk prima yang sesederhana mungkin.
Hasil Penyelesaian Langkah-3, 4 dan 5 : )))))))))))))))) term w x y z )))))))))))))))) 0 0 0 0 0 v )))))))))))))))) 1 0 0 0 1 v 4 0 1 0 0 v 8 1 0 0 0 v )))))))))))))))) 5 0 1 0 1 v 6 0 1 1 0 v 3 0 0 1 1 v 10 1 0 1 0 v )))))))))))))))) 11 1 0 1 1 v )))))))))))))))) 15 1 1 1 1 v )))))))))))))))) Dikombinasikan menjadi : )))))))))))))))) term w x y z )))))))))))))))) 0,1 0 0 0 - v 0,4 0 - 0 0 v 0,8 - 0 0 0 )))))))))))))))) 1,3 0 0 - 1 1,5 0 - 0 1 v 4,5 0 1 0 - v 4,6 0 1 - 0 8,10 1 0 - 0 )))))))))))))))) 3,11 - 0 1 1 10,11 1 0 1 - )))))))))))))))) 11,15 1 - 1 1 )))))))))))))))) Dikombinasikan menjadi : )))))))))))))))))))) term w x y z )))))))))))))))))))) 0,1,4,5 0 - 0 - 0,4,1,5 0 - 0 - ))))))))))))))))))))
LANGKAH-6 : Ambil semua bentuk prima yang tidak bertanda 'v'. Buatlah tabel baru yang memperlihatkan minterm dari ekspresi Boolean semula yang dicakup oleh bentuk prima tersebut (tandai dengan 'x').
Hasil Penyelesaian Langkah - 6 :
LANGKAH-7 : Pilih bentuk prima yang memiliki jumlah literal paling sedikit namun mencakup sebanyak mungkin minterm dari ekspresi Boolean semula. Hal ini dapat dilakukan dengan cara berikut.
LANGKAH-7.A : Tandai kolom-kolom yang mempunyai satu buah tanda 'x' dengan tanda '*', lalu beri tanda 'v' di sebelah kiri bentuk prima yang mencakup minterm yang mempunyai tanda '*' tersebut. Bentuk prima ini telah dipilih untuk fungsi Boolean sederhana.
Hasil Penyelesaian Langkah-7 dan 7.A :
LANGKAH-7.B : Untuk setiap bentuk prima yang telah ditandai dengan 'v', beri tanda
minterm yang dicakup oleh bentuk prima tersebut dengan tanda 'v' (di baris bawah
setelah tanda '*').
LANGKAH-7.C : Periksa apakah masih ada minterm yang belum memiliki tanda 'v' (artinya, belum dicakup oleh bentuk prima terpilih). Jika ada, pilih dari bentuk prima yang tersisa yang mencakup sebanyak mungkin minterm tersebut. Beri tanda 'v' untuk setiap bentuk prima yang dipilih itu serta minterm yang dicakupnya.
LANGKAH-7.D : Ulangi langkah 7.C sampai seluruh minterm sudah dicakup oleh bentuk prima
Hasil Penyelesaian Langkah - 7.C dan 7.D :
Sampai tahap ini, masih ada minterm yang belum tercakup dalam bentuk prima terpilih, yaitu 3, 8, 10. Untuk mencakup minterm tersebut, dipilih bentuk prima (8,10) dan (1,3) karena mencakup minterm 3, 8 dan 10 sekaligus.
Sekarang, semua minterm sudah tercakup dalam bentuk prima terpilih. Bentuk prima yang terpilih adalah :
1, 3 yang bersesuaian dengan term w'x'z (minterm 1 (0001) dan minterm 3 (0011) memiliki persamaan bit pada POSisi 1, 2 dan 4 sehingga dapat dikatakan minterm 1 dan minterm 3 merupakan fungsi Boolean w'x'z). 4, 6 yang bersesuaian dengan term w'xz'
8, 10 yang bersesuaian dengan term wx'z' 11, 15 yang bersesuaian dengan term wyz 0, 1, 4, 5 yang bersesuaian dengan term w'y'
Dari langkah–langkah penyederhanaan di atas, hasil minimisasi fungsi Boolean dalam bentuk SOP: f (w, x, y, z) = 3 (0, 1, 3, 4, 5, 6, 8, 10, 11, 15) adalah
Misalkan input fungsi dalam bentuk POS dengan nomor–nomor maxterm yang
sama dengan nomor–nomor minterm pada contoh sebelumnya.
f (w, x, y, z) = ϑ (0, 1, 3, 4, 5, 6, 8, 10, 11, 15)
Langkah–langkah dan hasil penyederhanaan sama dengan penyederhanaan dalam bentuk SOP, yaitu menghasilkan bentuk prima terpilih (1,3), (4,6), (8,10), (11,15) dan (0,1,4,5). Perbedaannya hanya terletak pada bentuk output. Bentuk prima terpilih diubah ke bentuk POS (sama dengan bentuk input).
1, 3 bersesuaian dengan term (w + x + z'). 4, 6 yang bersesuaian dengan term (w + x' + z). 8, 10 yang bersesuaian dengan term (w' + x + z). 11, 15 yang bersesuaian dengan term (w' + y' + z'). 0, 1, 4, 5 yang bersesuaian dengan term (w + y).
Dengan demikian, hasil minimisasi fungsi Boolean dalam bentuk POS adalah
f(w, x, y, z) = (w + x + z')(w + x' + z)(w' + x + z)(w' + y' + z')(w + y).
3.2 Rancangan Sistem
Sistem yang akan dibuat dirancang sedemikian rupa untuk memenuhi berbagai kebutuhan dan tuntutan yang digunakan untuk menghasilkan sebuah aplikasi penyederhanaan fungsi Boolean. Sistem tersebut nantinya diharapkan dapat memberikan kemudahan bagi pengguna untuk mempelajari langkah-langkah penyederhanaan fungsi
Boolean. Berbagai form dan fungsi akan diberikan untuk membantu pengguna
Berikut ini akan dijelaskan detail rancangan sistem yang akan dibuat pada program aplikasi ini yang meliputi sebuah form utama untuk menunjukkan penyederhanaan fungsi Boolean dengan metode Quine-McCluskey. Yang pertama adalah mengenai rancangan program yang akan dibuat untuk aplikasi penyederhanaan fungsi
Boolean. Juga akan dijelaskan mengenai rancangan layar dan rancangan struktur utama
menu.
3.2.1 Rancangan UML
Pada bagian rancangan program ini digunakan flowchart dan sequence diagram untuk menunjukkan alur kontrol dan jalannya program. Berikut ini adalah flowchart yang menunjukkan alur kontrol pada setiap modul.
Gambar 3.1. Flowchart sistem kontrol modul
Secara umum modul sistem akan berjalan sesuai dengan flowchart diatas. Pertama pengguna akan memasukkan banyaknya peubah atau variabel untuk menentukan banyaknya variabel yang akan disederhanakan. Setelah itu, pengguna akan memasukkan peubah atau variabel yang ingin ditambahkan.
Apabila pengguna ingin mengganti atau menghilangkan peubah atau variabel yang telah ditambahkan maka peubah atau variabel tersebut dapat dihapus. Selanjutnya pengguna akan memasukkan input nomor minterm. Apabila input nomor minterm telah sesuai maka perhitungan penyederhanaan fungsi Boolean dapat dilanjutkan. Setelah itu akan didapatkan hasil penyderhanaan fungsi Boolean sesuai dengan variabel dan input
minterm yang dimasukkan. Kemudian para pengguna dapat melihat tahapan-tahapan
proses penyederhanaan fungsi Boolean untuk pembelajaran.
a. Rich Picture
Gambar 3.2. Rich picture dari aplikasi fungsi Boolean
b. Use Case Diagram
Gambar 3.3. Use case diagram untuk aplikasi
c. Sequence Diagram
Sequence diagram di bawah ini akan menjelaskan mengenai aliran data atau program yang diproses oleh sistem. Gambar berikut ini menggambarkan urutan kejadian interaksi pengguna aplikasi dengan GUI.
Gambar 3.4. Sequence diagram untuk membuat perhitungan baru
Gambar 3.5. Sequence diagram untuk proses input dan variabel tambahan
Gambar 3.6. Sequence diagram untuk proses perhitungan fungsi
User Sistem Aplikasi Melakukan Penyederhanaan Proses Perhitungan Hasil Penyederhanaan
Gambar 3.7. Sequence diagram untuk ekstrasi data hasil perhitungan fungsi Boolean
d. Flow Chart Program Utama
Berikut ini adalah flowchart program utama sistem aplikasi penyederhanaan fungsi Boolean dengan metode Quine-McCluskey yang akan menjelaskan mengenai aliran atau jalannya program oleh pengguna.
Gambar 3.8. Flowchart program utama
Pada saat berada dalam menu utama, pengguna akan memulai project baru. Langkah yang pertama akan dilakukan adalah memasukkan jumlah variabel atau peubah yang akan disederhanakan. Setelah itu, pengguna akan memasukkan peubah atau variabel yang ingin ditambahkan. Apabila pengguna ingin mengganti atau menghilangkan peubah atau variabel yang telah ditambahkan maka peubah atau variabel tersebut dapat dihapus. Selanjutnya pengguna akan memasukkan input nomor minterm. Apabila input nomor
minterm telah sesuai maka perhitungan penyederhanaan fungsi Boolean dapat
dilanjutkan. Setelah itu akan didapatkan hasil penyderhanaan fungsi Boolean sesuai dengan variabel dan input minterm yang dimasukkan. Kemudian para pengguna dapat melihat tahapan-tahapan proses penyederhanaan fungsi Boolean untuk pembelajaran.
3.2.2 Rancangan Program
Perangkat lunak bantu pemahaman ini dirancang dengan menggunakan bahasa pemrograman Microsoft C# dengan beberapa komponen standar seperti Command
Button, Text Box, Rich Text Box, Option Button, Label, Shape, dan sebagainya.
Perangkat lunak bantu pemahaman ini memiliki beberapa form, antara lain: a. Form Input.
b. Form Pembelajaran Quine-McCluskey
c. Form Langkah–Langkah Penyederhanaan dalam Format Text. d. Form About.
a. Form Input
Form input berfungsi sebagai form untuk memasukkan input terhadap perangkat
lunak, seperti: banyak peubah, simbol peubah, bentuk fungsi dan input term pada fungsi
Boolean. Input fungsi Boolean dapat disimpan (save) dalam bentuk file (exstension
QMC) dan dibuka (load) kembali. Pada form ini, juga terdapat fasilitas untuk menghitung dan mendapatkan hasil minimisasi fungsi Boolean secara langsung (tanpa melihat langkah–langkah pemahaman).
Gambar 3.9. Rancangan form input Bagian-bagian:
1 : title bar, berisikan tulisan ‘Boolean (Tugas Akhir oleh : Ronny Chandra Kurniawan, NIM : 0800738793)’.
2 : tombol ‘Close’, berfungsi untuk menutup Form Input.
Quine-McCluskey Peubah (Variabel) Banyak Peubah Simbol Peubah Buah Tambah Hapus Hapus Semua
Input Fungsi Boolean
Fungsi Boolean :
Hitung
Load Save About Exit
Input Nomor Minterm
Refresh X
3 : combobox, berfungsi sebagai tempat memilih banyak peubah (variabel). 4 : textbox ‘Simbol peubah’, berfungsi sebagai tempat pengisian simbol peubah. 5 : listbox, sebagai tempat menampilkan simbol peubah yang telah di-input. 6 : tombol ‘Tambah’ untuk menambahkan simbol peubah yang diisikan pada daerah-4 ke listbox pada daerah-5.
7 : tombol ‘Hapus’ untuk menghapus simbol peubah yang dipilih pada daerah-5. 8 : tombol ‘Hapus Semua’ untuk menghapus semua simbol peubah pada daerah-5. 9 : tombol ‘Hitung’ untuk mendapatkan hasil minimisasi secara langsung dan ditampilkan di textbox pada daerah-10.
10 : textbox ‘Hasil Minimisasi’ sebagai tempat menampilkan hasil minimisasi. 11 : textbox ‘Input Nomor Minterm’, sebagai tempat pengisian nomor-nomor term pada fungsi Boolean.
12 : tombol ‘Refresh’ untuk mengubah bentuk minterm yang telah di-input ke bentuk fungsi Boolean.
13 : textbox ‘Fungsi Boolean’, sebagai tempat untuk menampilkan fungsi Boolean. 14 : tombol ‘Tahapan – Tahapan Proses Pembelajaran’ untuk menampilkan Form Pembelajaran Quine-McCluskey.
15 : tombol ‘Load’ untuk membuka file input (*.QMC) yang telah disimpan sebelumnya.
16 : tombol ‘Save’ untuk menyimpan input fungsi ke dalam bentuk file (*.QMC). 17 : tombol ‘About’ untuk menampilkan Form About.
18 : tombol ‘Exit’ untuk keluar dari perangkat lunak.
b. Form Pembelajaran Quine-McCluskey
Form Pembelajaran Boolean berfungsi sebagai form untuk menampilkan
langkah-langkah minimisasi fungsi yang telah di-input dengan metode
Quine-McCluskey. Pada form ini, setiap langkah minimisasi dapat ditelusuri langkah per
Quine-Mc-Cluskey
Input Boolean
Gambar 3.10. Rancangan form pembelajaran Quine-McCluskey
Bagian-bagian:
1 : title bar, berisikan tulisan ‘Quine-McCluskey’.
2 : tombol ‘Close’, berfungsi untuk menutup Form Pembelajaran Quine-McCluskey. 3 : label, untuk menampilkan input fungsi Boolean.
4 : textbox, untuk menampilkan langkah-langkah yang dilakukan.
5 : textbox, untuk menampilkan hasil eksekusi langkah-langkah yang dilakukan. 6 : vertical scrollbar, untuk menggulung textbox pada daerah-5 secara vertikal. 7 : horizontal scrollbar, untuk menggulung textbox pada daerah-5 secara horizontal. 8 : tombol ‘Format Text’, untuk menampilkan form langkah-langkah penyederhanaan dalam bentuk text.
9 : tombol ‘Langkah Sebelumnya’, untuk menampilkan langkah sebelumnya. 10 : tombol ‘Langkah Berikutnya’, untuk menampilkan langkah berikutnya. 11 : tombol ‘Keluar’, untuk keluar dari form dan kembali ke Form Input.
Format Text < Langkah Sebelumnya Langkah berikutnya > Keluar
c. Form Langkah–Langkah Penyederhanaan dalam Format Text
Form langkah–langkah penyederhanaan dalam format text berfungsi sebagai form untuk menampilkan langkah-langkah minimisasi terhadap input fungsi dalam
format text. Apabila langkah–langkah minimisasi pada form pembelajaran dijabarkan langkah per langkah, maka pada form ini ditampilkan semua hasil eksekusi langkah secara bersamaan (sekaligus). Hal ini dimaksudkan agar user dapat menyimpan langkah-langkah penyederhanaan dalam bentuk rich text file (*.rtf). File hasil penyimpanan dapat digunakan sebagai alat pendukung dalam kegiatan belajar mengajar, karena file dapat dibuka dan dicetak pada aplikasi Microsoft Word.
Gambar 3.11. Rancangan form langkah–langkah penyederhanaan dalam format text
Bagian-bagian:
1 : title bar, berisikan tulisan ‘Langkah–Langkah Penyederhanaan Fungsi Boolean dengan metode Boolean(Format Text)’.
2 : tombol ‘Close’, berfungsi untuk menutup form.
Langkah-Langkah Penyederhanaan Fungsi Boolean dengan Metode Quine-McCluskey
X
3 : vertical scrollbar, berfungsi untuk menggulung textbox pada daerah-5 secara vertikal.
4 : horizontal scrollbar, berfungsi untuk menggulung textbox pada daerah-5 secara horizontal.
5 : textbox, berfungsi sebagai tempat menampilkan langkah-langkah penyederhanaan fungsi Boolean.
6 : tombol ‘Simpan’, berfungsi untuk menyimpan langkah–langkah penyederhanaan dalam format rich text file (*.rtf).
7 : tombol ‘Keluar’, berfungsi untuk keluar dari form.
d. Form About
Form About berfungsi sebagai form untuk menampilkan informasi mengenai
pembuat perangkat lunak.
Gambar 3.12. Rancangan form about
Bagian-bagian:
1 : title bar, berisikan tulisan ‘Quine-McCluskey’. 2 : tombol ‘Close’, berfungsi untuk menutup form. 3 : logo atau gambar icon perangkat lunak.
4 : nama perangkat lunak.
Quine-McCluskey
OK
5 : identitas pembuat perangkat lunak.
6 : nama kampus, kota dan tahun pembuatan perangkat lunak. 7 : tombol ‘OK’ untuk menutup Form About.
3.2.3 Algoritma
Algoritma perancangan perangkat lunak bantu pemahaman minimisasi fungsi boolean dengan metode Quine-McCluskey dibagi menjadi 3 bagian yaitu:
a. Algoritma Pengecekan Data Input.
b. Algoritma Penghasil Tahapan–Tahapan Penyederhanaan Fungsi Boolean dengan metode Quine-McCluskey.
c. Algoritma Fungsi Pendukung.
a. Algoritma Pengecekan Data Input
Algoritma ini mengecek validitas input data, seperti: apakah banyak variabel yang di-input melebihi banyak variabel yang dipilih, apakah terdapat nomor term yang berada di luar batas ((2 ^ jumlah_variabel) – 1) dan apakah terdapat nomor term yang sama. Algoritma ini dirancang dalam bentuk fungsi (function) dengan nama ‘CekInput’. Apabila fungsi ini mengembalikan nilai True, maka input data valid dan proses akan dilanjutkan ke tahapan penyederhanaan. Apabila fungsi mengembalikan nilai False, maka fungsi akan memunculkan pesan kesalahan berkaitan dengan kesalahan yang telah dibuat dan user harus mengoreksi kesalahan untuk dapat melanjutkan ke proses berikutnya.
Berikut merupakan algoritma fungsi ‘CekInput’ yang mengembalikan nilai Boolean (true / false),
1. Set CekInput = True.
2. Jika jumlah item pada list tidak sama dengan jumlah peubah yang dipilih pada
combobox ‘Banyak peubah’, maka munculkan pesan kesalahan ‘Jumlah peubah
tidak sesuai’, set CekInput = False dan keluar dari fungsi. Jika tidak, maka lanjutkan ke algoritma berikutnya.
3. Penggal input nomor term berdasarkan huruf ‘;’ dan simpan hasilnya pada variabel array TTerm.
4. Jika jumlah array pada TTerm < 0, maka munculkan pesan kesalahan ‘Term belum diisi !’, set CekInput = False dan keluar dari fungsi. Jika tidak, maka lanjutkan ke algoritma berikutnya.
5. Selanjutnya untuk memeriksa apakah terdapat nomor term yang melebihi batas maksimal nomor term yaitu (2 ^ banyak_peubah) – 1, lakukan prosedur berikut.
a. Set Max = (2 ^ banyak_peubah) – 1.
b. Untuk T = 0 sampai jumlah array TTerm, lakukan prosedur berikut. i. Set TTerm(T) = Val(TTerm(T)).
ii. Jika Val(TTerm(T)) < 0 atau Val(TTerm(T)) > Max, maka munculkan pesan kesalahan ‘Input term di luar batas’, set
CekInput = False dan keluar dari fungsi.
6. Untuk memeriksa apakah terdapat nomor term yang sama, lakukan prosedur berikut. Untuk S = 0 sampai jumlah array TTerm, lakukan langkah berikut. Untuk T = 0 sampai jumlah array TTerm, cek Jika S <> T dan TTerm(S) =
TTerm(T), maka munculkan pesan kesalahan ‘Ditemukan term ‘” & Tterm (S) & “’ lebih dari 1 buah’, set CekInput = False dan keluar dari fungsi.
b. Algoritma Penghasil Tahapan–Tahapan Penyederhanaan Fungsi Boolean dengan metode Quine-McCluskey
Algoritma ini merupakan inti dari perangkat lunak. Fungsi dari algoritma ini adalah melakukan proses penyederhanaan terhadap input fungsi Boolean dengan metode
Quine-McCluskey dan sekaligus menghasilkan tahapan–tahapan penyederhanaan dalam
format text. Tahapan–tahapan penyederhanaan ini dimaksudkan sebagai fasilitas pembelajaran bagi user. Tahapan penyederhanaan ini juga dapat disimpan (format rich
text file (*.rtf)), dibuka dengan aplikasi Word Processing seperti Microsoft Word atau WordPad, dan dicetak ke printer. Algoritma ini dirancang dalam bentuk fungsi dengan
nama ‘ProsesQuineMcCluskey’. Fungsi ini menghasilkan tahapan–tahapan penyederhanaan, menyimpannya ke variabel array cLangkah dan mengembalikan hasil minimisasi. Algoritma dari fungsi ‘ProsesQuineMcCluskey’ adalah sebagai berikut.
1. Untuk mengerjakan langkah-1 dari metode Quine-McCluskey, lakukan langkah berikut. Untuk N1 = 0 sampai jumlah array InputTerm.
a. Set MTerm(N1).Term = InputTerm(N1), set MTerm(N1).Bit = bilangan biner dari InputTerm(N1) dengan panjang bilangan sebesar banyak_peubah, set MTerm(N1).Level = 1, set MTerm(N1).Kelompok = banyak jumlah bit ‘1’ dari bilangan biner, set MTerm(N1).Check = False. b. Set POS(N1) = N1.
c. Untuk langkah penyelesaian, set cLangkah(1) = cLangkah(1) & vbCrlf & MTerm(N1).Term & “ = “ & MTerm(N1).Bit.
2. Untuk mengerjakan langkah-2 sampai langkah-5 dari metode Quine McCluskey, set nLevel1 = 1. Selama bSederhana = False (masih bisa dikelompokkan atau belum sederhana), lakukan langkah berikut.
a. Set nLevel = nLevel + 1.
b. Periksa apakah terdapat term yang memiliki perbedaan bit sebanyak 1 buah untuk level yang sama. Apabila ada, maka bentuk sebuah bentuk prima yang baru. Untuk N1 = 0 sampai jumlah array dari MTerm, lakukan prosedur berikut.
i. Jika MTerm(N1).Level = nLevel maka lakukan looping dari N2 = N1 + 1 sampai jumlah array MTerm, cek jika MTerm(N2).Level = nLevel maka lakukan langkah berikut.
1. Ambil banyak perbedaan bit, dengan men-set DF = GetDifference(MTerm(N1).Bit, MTerm(N2).Bit).
2. Jika DF.Banyak = 1(jumlah bit yang berbeda sebanyak 1 buah), maka lanjutkan ke poin 3.
3. Set MTerm(N1).Check = True, set MTerm(N2).Check =
True.
4. Set N3 = jumlah array MTerm + 1. Bentuk ulang dimensi
array dari MTerm menjadi N3.
5. Set MTerm(N3).Term = MTerm(N1).Term & “,” & MTerm(N2).Term. Ini adalah bentuk prima yang baru. 6. MTerm(N3).Bit = Left(MTerm(N1).Bit, DF.POSisi – 1) &
“-“ & Mid(MTerm(N1).Bit, DF.POSisi + 1, Len(MTerm(N1).Bit) – DF.POSisi).
7. Set MTerm(N3).Check = False 8. Set MTerm(N3).Level = nLevel + 1.
9. Set MTerm(N3).Kelompok = MTerm(N1).Kelompok. 10. Set nLevel1 = nLevel + 1
c. Set bSederhana = True.
d. Cek apakah masih bisa disederhanakan lagi. Untuk N1 = 0 sampai jumlah
array dari MTerm, lakukan langkah berikut.
i. Jika MTerm(N1).Level = nLevel + 1, maka lakukan looping dari N2 = N1 + 1 sampai jumlah array MTerm, lakukan langkah berikut.
1. Jika MTerm(N2).Level = nLevel + 1, maka set DF = GetDifference(MTerm(N1).Bit, MTerm(N2).Bit).
2. Jika DF.Banyak = 1 maka set bSederhana = False dan keluar dari looping.
ii. Jika bSederhana = False, maka keluar dari looping.
3. Ambil semua bentuk prima yang tidak memiliki tanda check dan update ke bentuk prima (Langkah 6.1 dari metode Quine McCluskey). Algoritmanya adalah sebagai berikut.
a. Set N5 = 0.
b. Bentuk ulang dimensi array variabel Prima menjadi 0.
c. Untuk N1 = 0 sampai jumlah array dari MTerm, lakukan langkah berikut. i. Jika MTerm(N1).Check = False maka lakukan langkah berikut,
1. Urutkan term dengan men-set cTemp =
2. Cek apakah bentuk prima sudah pernah ada dengan set bSama = False, lakukan looping dari N2 = 1 sampai jumlah array dari variabel Prima, jika Prima(N2).Term = cTemp maka set bSama = True dan keluar dari looping. 3. Jika bSama = False, maka lakukan langkah berikut.
a. Set N3 = Ubound(Prima) + 1.
b. Bentuk ulang dimensi array Prima menjadi N3. c. Set Prima(N3).Term = cTemp.
d. Set Prima(N3).Check = False. e. Set Prima(N3).Nilai = 0.
f. Jika panjang dari Prima(N3).Term > N5 maka, set N5 = panjang dari Prima(N3).Term.
4. Beri tanda ‘x’ untuk setiap term yang tercakup di dalam bentuk prima yang terpilih. Algoritmanya adalah sebagai berikut.
a. Bentuk ulang dimensi array variabel MTermP menjadi jumlah array dari variabel InputTerm.
b. Untuk N1 = 0 sampai jumlah array variabel InputTerm, lakukan langkah berikut.
i. Set MTermP(N1).Term = InputTerm(N1). ii. Set MTermP(N1).BanyakX = 0.
iii. Set MTermP(N1).Check = False. iv. Set MTermP(N1).Bintang = False.
c. Untuk N1 = 1 sampai jumlah array variabel Prima, lakukan langkah berikut.
i. Untuk N2 = 0 sampai jumlah array variabel MTermP, cek jika MTermP(N2).Term terdapat di dalam list dari Prima(N1).Term) maka set MTermP(N2).BanyakX = MTermP(N2).BanyakX + 1. 5. Tandai ‘*’ untuk semua MTermP yang memiliki 1 buah tanda ‘x’ (Langkah 7.a.1
dari metode Quine McCluskey). Algoritmanya adalah sebagai berikut,
Untuk N1 = 0 sampai jumlah array dari variabel MTermP, cek jika MTermP(N1).BanyakX = 1 maka set MTermP(N1).Bintang = True.
6. Beri tanda check pada semua bentuk prima yang mencantumkan term yang memiliki tanda ‘*’ (Langkah 7.a.2 dari metode Quine McCluskey). Algoritmanya adalah sebagai berikut.
a. Untuk N1 = 0 sampai jumlah array dari variabel MTermP, lakukan langkah berikut,
i. Jika MTermP(N1).Bintang = True, maka lakukan looping dari N2 = 1 sampai jumlah array dari variabel Prima, cek jika MTermP(N1).Term tercantum di dalam Prima(N2).Term, maka set Prima(N2).Check = True.
7. Beri tanda check di MTermP untuk semua MTermP yang tercantum dalam bentuk prima yang memiliki tanda check (Langkah 7.b dari metode Quine
McCluske). Algoritmanya adalah sebagai berikut.
Untuk N1 = 0 sampai jumlah array dari variabel Prima, lakukan langkah berikut. Jika Prima(N1).Check = True, maka lakukan looping dari N2 = 0 sampai jumlah array variabel MTermP, cek jika MTermP(N2).Term tercantum di dalam Prima(N1).Term, maka set MTermP(N2).Check = True.
8. Periksa apakah masih ada MTermP yang belum ter-check, apabila ada, maka pilih bentuk prima yang mencakup paling banyak MTermP yang belum ter-check (Langkah 7.c & 7.d dari metode Quine McCluskey). Algoritmanya adalah sebagai berikut.
a. Set bAllCheck = FAllCheck(MTermP).
b. Jika bAllCheck = False, maka lanjutkan algoritma pada poin c. c. Set cTemp = “”.
d. Untuk N1 = 0 sampai jumlah array dari variabel MTermP, lakukan langkah berikut,
Jika MTermP(N1).Check = False, maka
1. Jika cTemp <> “” maka cTemp = cTemp & “, “. 2. Set cTemp = cTemp & MTermP(N1).Term.
3. Untuk N2 = 1 sampai jumlah array dari variabel Prima, cek jika MTermP(N1).Term tercantum di dalam Prima(N2).Term maka Prima(N2).Nilai = Prima(N2).Nilai + 1.
e. Bentuk ulang dimensi array variabel POS menjadi jumlah array dari variabel Prima.
f. Untuk N1 = 1 sampai jumlah array dari variabel POS, set POS(N1) = N1. g. Kemudian, lakukan pengurutan variabel Prima berdasarkan nilai yang
dimiliki. Pengurutan yang dilakukan menggunakan metode buble sort. i. Untuk N1 = 1 sampai jumlah array dari variabel POS – 1, lakukan
ii. Untuk N2 = N1 + 1 sampai jumlah array dari variabel POS, lakukan langkah berikut.
iii. Jika Prima(POS(N1)).Nilai < Prima(POS(N2)).Nilai, maka 1. Set N3 = POS(N1).
2. Set POS(N1) = POS(N2). 3. Set POS(N2) = N3.
iv. Jika Prima(POS(N1)).Nilai = Prima(POS(N2)).Nilai, maka pilih bentuk prima yang paling panjang.
1. Cek jika UBound(Split(Prima(POS(N1)).Term, ",")) < UBound(Split(Prima(POS(N2)).Term, ",")), maka tukar
POSisi.
a. Set N3 = POS(N1). b. Set POS(N1) = POS(N2). c. Set POS(N2) = N3. h. Set cPrima = “”.
i. Set N1 = 0.
j. Selama bAllCheck = False, lakukan langkah berikut. i. Set N1 = N1 + 1.
ii. Set Prima(POS(N1)).Check = True.
iii. Jika cPrima <> “” maka set cPrima = cPrima & “, “.
iv. Untuk N2 = 0 sampai jumlah array dari variabel MTermP, lakukan langkah berikut.
Jika MTermP(N2).Check = False, maka cek jika MTermP(N2).Term t ercantum dalam Prima(POS(N1)).Term) maka set MTermP(N2).Check = True.
v. Set bAllCheck = FAllCheck(MTermP). 9. Set HasilMinimisasi = “”.
10. Ambil bentuk prima yang ter-check dan ubah menjadi bentuk kanonik. Algoritmanya adalah sebagai berikut.
a. Untuk N1 = 1 sampai jumlah array dari variabel Prima, lakukan langkah pada poin b berikut.
b. Jika Prima(N1).Check maka,
i. Set Prima(N1).BentukKanonik = PrimaToKanonik(Prima(N1).Term). ii. Jika cBentuk = “SOP”, maka,
1. Jika HasilMinimisasi <> “” maka set HasilMinimisasi = HasilMinimisasi & “ + “.
2. Set HasilMinimisasi = HasilMinimisasi & Prima(N1).BentukKanonik.
iii. Jika cBentuk = “POS”, maka,
1. Set HasilMinimisasi = HasilMinimisasi & Prima(N1).BentukKanonik.
11. Kembalikan hasil minimisasi.
c. Algoritma Fungsi Pendukung
Fungsi-fungsi pendukung yang digunakan dalam proses penyederhanaan adalah sebagai berikut.
1. Fungsi ‘GetDifference(pBit1 As String, pBit2 As String)’ mengembalikan banyak dan POSisi bit yang berbeda dari pBit1 dan pBit2.
a. Untuk F1 = 1 sampai panjang dari variabel pBit1, lakukan langkah berikut, i. Jika Mid(pBit1,F1,1) <> Mid(pBit2, F1, 1) maka set nBeda = nBeda
+ 1, set nPOSisi = F1. b. Set GetDifference.Banyak = nBeda. c. Set GetDifference.POSisi = nPOSisi.
2. Fungsi ‘Urutkan (pcDeretAngka As String)’ mengembalikan deretan angka yang terurut. Pengurutan dilakukan dengan menggunakan metode bubble-sort.
a. Pisah pcDeretAngka berdasarkan huruf “,” dan simpan hasilnya ke A1. b. Untuk nU1 = 0 sampai jumlah array dari variabel A1 -1, lakukan langkah
berikut.
Untuk nU2 = nU1 + 1 sampai jumlah array dari variabel A1, lakukan langkah berikut.
Jika A1(nU1) > A1(nU2), maka tukar POSisi dengan men-set nU3 = A1(nU1), set A1(nU1) = A1(nU2) dan set A1(nU2) = nU3.
c. Untuk nU1 = 0 sampai jumlah array dari variabel A1, lakukan langkah berikut.
i. Jika nU1 > 0, maka set Urutkan = Urutkan & “,”. ii. Urutkan = Urutkan & A1(nU1).
3. Fungsi ‘IsInList(pcAngka As String, pcDeretan As String)’ mengembalikan nilai
boolean, apakah pcAngka berada di dalam pcDeretan.
a. Set bFound = False.
b. Pisah pcDeretan berdasarkan huruf “,” dan simpan ke dalam variabel array AList.
c. Untuk F1 = 0 sampai jumlah array dari variabel AList, lakukan langkah berikut,
Jika pcAngka = AList(F1), maka set bFound = True, dan keluar dari looping. d. Set IsInList = bFound.
4. Fungsi ‘FAllCheck(pMTermP() As TMTermP)’ melakukan pengecekan apakah semua term pMTermP sudah ter-check.
a. Set FAllCheck = True.
b. Untuk F1 = 0 sampai jumlah array dari pMTermP, lakukan langkah berikut, Jika pMTermP(F1).Check = False, maka set FAllCheck = False dan keluar dari looping.
5. Fungsi ‘GetBit1(pcBit as String)’ mengembalikan banyak bit ‘1’ dari pcBit. a. Untuk F1 = 1 sampai panjang dari pcBit, lakukan langkah berikut.
Jika karakter ke-F1 dari pcBit = “1”, maka set nByk = nByk + 1. b. Set GetBit1 = nByk.
6. Fungsi ‘PrimaToKanonik(pcBentukPrima As String)’ mengembalikan hasil konversi dari bentuk prima ke bentuk kanonik SOP/POS.
a. Pisah pcBentukPrima berdasarkan huruf “,” dan simpan ke variabel array TmpBit.
b. Untuk F1 = 0 sampai jumlah array dari TmpBit, set TmpBit(F1) = Bilangan biner dari TmpBit(F1).
c. Bentuk ulang dimensi array dari variabel BitSama menjadi jumlah peubah. d. Untuk F1 = 1 sampai jumlah peubah, set BitSama(F1) = True.
e. Untuk F1 = 1 sampai jumlah peubah, lakukan langkah berikut, i. Untuk F2 = 0 sampai jumlah array pada TmpBit,
1. Jika F2 <> 0 dan karakter ke-F1 dari TmpBit(F2) <> cLast maka set BitSama(F1) = False, dan keluar dari looping.
2. Set cLast = karakter ke-F1 dari TmpBit(F2).
f. Untuk F1 = 1 sampai jumlah array pada variabel Peubah, lakukan langkah berikut.
i. Jika BitSama(F1) = True, maka lakukan langkah pada poin (ii). ii. Jika cBentuk = “SOP”, maka,
1. Set Hasil = Hasil & Peubah(F1).
2. Jika karakter ke-F1 dari TmpBit(0) = “0”, maka set cHasil = cHasil & “’ “.
iii. Jika cBentuk = “POS”, maka,
1. Jika Hasil <> “” maka set Hasil = Hasil & “ + “. 2. Set Hasil = Hasil & Peubah(F1).
3. Jika karakter ke-F1 dari TmpBit(0) = “1”, maka set cHasil = cHasil & “’ “.
g. Jika cBentuk = “POS”, maka set Hasil = “(“ & Hasil & “)”. h. Set PrimaToKanonik = Hasil.