Operasi Modulo tidaklah sama dengan persentase meskipun lambang dari keduanya adalah dua buah bulatan yang dipisahkan oleh sebuah garis miring. Singkatnya, modulo adalah sisa hasil bagi. Kemudian apa fungsionalitasnya? Pertanyaan bagus!
Pengaplikasian dasarnya untuk dijadikan contoh, modulo dari 8 dibagi 5 adalah 3 dikarenakan sisa pembagian dari 8 dengan 5 adalah 3. Pernyataan tersebut jika ditulis dengan kalimat matematika adalah :
8 % 5 = 3 atau 8 mod 5 = 3
Berikut contoh yang lainnya :
24 mod 7 = 3
164 mod 13 = 8
53333 mod 2013 = 125
dan lain sebagainya…
Kadang soal-soal sulit berpangkat seperti contoh terakhir muncul dalam olimpiade sekolah bahkan semenjak tingkat SMP. Teori dasarnya pun tidak sulit, namun pertanyaan terbesar adalah, untuk apa kita mempelajari ini semua? Mungkin beberapa saya akan coba jabarkan beberapa dari sisi pemrograman komputer.
Bagaimana jika ada suatu kasus di mana jika sebuah variabel bilangan harus diketahui ganjil-genapnya? Misalnya, jika bilangan variabel itu ganjil maka harus melakukan perintah tertentu. Maka modulo adalah salah satu solusinya.
Teori dasarnya yaitu segala sesuatu bilangan bulat yang habis dibagi 2 adalah bilangan genap.
if (bilangan % 2 == 0) { //bilangan genap } else { //bilangan ganjil }
Sebenarnya jika memang kita ingin menulis suatu kode yang tidak perlu orang lain tahu, maka cukup ditulis dengan bilangan-bilangan tertentu kemudian modulo dengan bilangan prima. Misalnya, kita ingin jikalau variabel murid hanya dapat menulis dan membaca sebuah tulisan, sementara variabel guru dapat melakukan semua hal. Maka,
/* Berikut adalah daftar variabel, tidak perlu dideklarasikan menulis = 2; membaca = 3; mengecek = 5; menghapus = 7; Di mana untuk hak akses pada sistem, cukup dengan modulo variabel murid dan guru dengan status di atas. Jika hasil modulo 0 atau habis dibagi, itu artinya variabel diperbolehkan untuk mengakses salah satu dari ke-empat fitur di atas. */ // Maka status murid adalah int murid = 6; //murid hanya dapat membaca dan menulis karena 6 habis dibagi 2 dan 3. // dan status guru adalah int guru = 210; //guru dapat melakukan semua hal.
Adapun alternatif dalam menggunakan pengecekan status di atas adalah dengan menggunakan bitwise AND untuk yang telah memahami.
Pernahkah kita melihat suatu tampilan menu baik itu di telepon selular ataupun di komputer bahkan dalam permainan sekalipun, jika kita berada pada menu yang paling bawah dan kita tekan tombol bawah, maka sorotan menu tersebut kembali lagi ke atas atau sebaliknya? Bagi programmer pemula mungkin masih menggunakan :
// Jika tombol bawah ditekan if (posisiMenu > banyakMenu) { posisiMenu = 0; //sorotan menu pindah ke awal } else { posisiMenu++; //posisiMenu bertambah sebanyak 1 } // Jika tombol atas ditekan if (posisiMenu < 0) { posisiMenu = banyakMenu; // sorotan menu pindah ke akhir } else { posisiMenu--; //posisiMenu berkurang sebanyak 1 }
Sebaiknya hal itu ditinggalkan karena hanya akan membuat kode terlihat lebih panjang. Menggunakan modulo adalah pilihan yang paling tepat.
// Jika tombol bawah ditekan posisiMenu ++; // Jika tombol atas ditekan posisiMenu --; posisiMenu %= banyakMenu; //akhirnya, posisi menu dimodulo sebanyak banyakMenu
Sebenarnya tak hanya di pemrograman saja hal ini berlaku. Beberapa soal olimpiade juga banyak yang memakai hal ini. Contohnya adalah, berapa digit terakhir dari 123456 ?
Maka jawabannya adalah cukup modulo soal tadi dengan 10 sehingga menjadi :
123456 mod 10
Mengapa harus mod 10? Karena banyaknya digit untuk bilangan desimal dari 0-9 adalah 10 buah.
OO> Teori Dasar <OO
Sebenarnya teori modulo cukup mudah untuk dipahami, berikut adalah beberapa dari teorinya :
Jika a, b adalah bilangan bulat dan n adalah bilangan asli, maka:
Contoh : (6+11+16) mod 5
= (6 mod 5 + 11 mod 5 + 16 mod 5) mod 5
= (1+1+1) mod 5
= 3 mod 5
= 3
Berapakah digit terakhir dari (1996 x 1997 x 1998 x 1999)?
(1996 x 1997 x 1998 x 1999) mod 10 (ingat poin terakhir di atas)
= ((1996 mod 10) x (1997 mod 10) x (1998 mod 10) x (1999 mod 10)) mod 10
= (6 x 7 x 8 x 9) mod 10
= (42 x 72) mod 10
= (2 x 2) mod 10
= 4
21000 mod 7
= 2(3×333 + 1) mod 7
= 2 x (23)333 mod 7
= 2 x (8)333 mod 7
= 2 x (7+1)333 mod 7
= 2 x (7 mod 7 + 1333 mod 7) mod 7
= 2 x (0 + 1) mod 7
= 2 mod 7
= 2
Semoga Bermanfaat
Terima kasih sharingnya.
Saat ini saya lagi belajar sendiri desain aplikasi web tapi pengetahuan matematika saya seperti anak SD,
jadi kebingungan setengah mati kalo ketemu dengan rumus-rumus matematika seperti ini.
Contohnya sekarang lagi belajar PHP dan ada hubungannya dengan operasi modulo, ada kode seperti ini:
<?php
for ($i=0; $i<=5; $i++) {
if ($i % 2 == 0) { continue; }
for ($k=0; $k<=5; $k++) {
echo $i . "-".$k."”;
}
}
?>
dan kalau di preview outputnya seperti ini:
1-0
1-1
1-2
1-3
1-4
1-5
3-0
3-1
3-2
3-3
3-4
3-5
5-0
5-1
5-2
5-3
5-4
5-5
Yang mau saya tanyakan, apakah betul variable $i=0 tidak sampai masuk ke echo callback karena 0 mod 2 = 0 atau 0%2=0 ??
Terima kasih kembali atas kunjungan dan komentarnya. Iya, mas sudah betul bahwa sisa hasil bagi dari 0 dibagi 2 adalah 0. Dan ini juga berlaku bagi semua bilangan kecuali 0.
Intinya, setiap nol yang dibagi dengan seluruh bilangan selain nol memiliki hasil bagi yang juga nol. Ini sekaligus membuktikan bahwa nol juga termasuk bilangan genap seperti yang telah disebutkan di poin paling awal.
Semoga penjelasan saya mudah dipahami. Terima kasih sekali lagi. 🙂