Anda di halaman 1dari 5

Dalam bahasa C, terdapat fungsi tersendiri untuk mengacak angka yang

bernama rand(). Sebagai sebuah fungsi bawaan dari bahasa C, tentunya


fungsi rand() tersebut mempunyai header dong. Fungsi tersebut terdapat di dalam
header <stdlib.h>.

Nah setelah berbasa-basi sedikit mengenai siapa rand(), berikut adalah penerapan nya
dalam bentuk code :

Maka beginilah output nya :

      Scaling : Apa sih scaling? Lalu buat apa sih?


Agar gampang dimengerti, fungsi rand() itu akan mengembalikan sebuah nilai integer.
Namun, nilai yang di return itu bervariasi mulai dari 0 sampai sekian sekian sekian (saya
sendiri belum tahu pasti max nilai yang di return). Nah, dalam kehidupan sehari-hari,
angka yang ingin kita acak memiliki nilai minimal dan maksimal tersendiri.

Contoh : jika kita ingin membuat program mengacak dadu, maka kita hanya perlu
mengacak nilai dari 1 sampai 6. Nah disinilah peran Scaling, yaitu membatasi nilai yang
akan diacak.

Lalu, apa gunanya % 6 + 1 pada code di atas?


Begini, kalian pasti sudah pada tahu apa itu modulus pembagian atau yang sering
disebut mod (% dalam bahasa C).
Buat yang belum tahu, mod itu adalah hasil bagi dari suatu operasi pembagian 2 buah
bilangan.
Misal:
10 % 5 hasilnya adalah 0, karena 10 HABIS dibagi oleh 5
10 % 4 hasilnya adalah 2, karena 10 TIDAK HABIS dibagi oleh 4 dan menyisakan 2.

Dari penjelasan di atas kita sudah mengerti apa itu modulus dan dengan kata lain, hasil
dari operasi mod suatu bilangan PASTI tidak lebih besar dari bilangan pembagi.
Misal : X % 3, berapapun nilai X, hasil nya pasti selalu di bawah 3, entah itu 0 atau 1
atau 2
Nah dari situ kita bisa tahu apa fungsi dari  + 1  bukan?
Benar sekali, karena hasil nya dari 0 sampai angka n-1 (n adalah bilangan pembagi)
maka kita perlu menambahkan satu agar range bilangan yang diacak dimulai dari 1
sampai n.

Nah, mudah kan.


*Wah, ternyata Random itu gak sesulit seperti yang di bayangkan toh
Betul
*Thanks ya gan, berarti saya sudah bisa melakukan random donk
Eits, jangan senang dulu, itu masih kurang lengkap bos
*Lho? apanya yang kurang lengkap?
Simak baik-baik ya
*Oke deh

Coba kalian ulangin program di atas sekali, dua kali, dan seterusnya.
Kalian pasti menemukan suatu ke anehan
*Wah iya, saya ulang terus menerus, tapi kok angka ke 1 sampai ke 10 nya itu-itu terus
ya?

Nah untuk itu kita memerlukan seed.


Fungsi rand() itu akan memerlukan seed untuk melakukan random, apa itu seed?
Seed itu adalah titik awal dimana random dimulai.

Jika kalian pernah berkumpul di kelas, lalu mengadakan undian dengan cara memutar
pulpen, dan jika pulpen tersebut mengarah ke salah satu peserta, maka peserta tersebut
akan menang atau dihukum.

Seed itu ibaratnya adalah posisi awal dari sebuah pulpen tersebut, jika terdapat 5 orang,
yaitu A,B,C,D,E.
Jika pada undian yang pertama, posisi awal pulpen menghadap ke arah A, dan setelah
putaran dilakukan ternyata yang kena adalah B

*Wah, si B kena hukum donk, apa hukuman nya

Kita tidak akan membahas hal tersebut disini, dan jika undian kedua dilakukan, jika
posisi awal tetap menghadap ke A dan jika pulpen di putar ke arah dan tenaga yang
sama seperti putaran pertama, pulpen tersebut sudah pasti kembali menghadap ke arah
B bukan?

Begitu pula dengan rand(), fungsi ini mempunyai seed default, sehingga setiap kali kita
mengulang program tersebut, maka hasil nya akan selalu sama.

*Bagaimana dong supaya hasil nya gak sama terus?


Kita memerlukan fungsi tambahan yang bernama srand().
srand() adalah fungsi untuk menentukan seed atau posisi awal dalam sebuah
pengacakan.
Kita hanya perlu menggunakan srand() sekali saja, yaitu sebelum fungsi rand()
dipanggil.

Syntax : srand(seed_number);

seed_number bisa diganti dengan angka yang diinginkan maupun dengan variabel


integer yang nilai nya bisa di input sendiri oleh user, namun sama halnya seperti konsep
diatas.
Jika user memasukan seed_number yang sama, maka hasil pengacakan nya juga
memiliki pola yang sama

*Terus saya harus bagaimana?

Nah untuk itu, kita perlu memakai fungsi time(NULL) dari header <time.h>.


*Itu fungsi apalagi mas?

Fungsi time(NULL) adalah fungsi yang mengembalikan nilai sesuai dengan banyak nya


detik sejak tanggal 1 January 1970 yang artinya bisa dipakai
sebagai seed_number. Mengapa? karena jika saya menjalankan program pada jam 7
malam lalu saya akan menjalankan nya kembali pada pukul 7.30 malam, total detik yang
dihitung sejak 1 Januari 1970 itu pasti sudah berbeda. Oleh karena itu,
kemungkinan seed_number sama tidak akan terjadi karena waktu yang terus berjalan
sehingga membuat jumlah detik nya menjadi berbeda.

Berikut adalah contoh code nya :


Berikut adalah output ketika program pertama kali di jalankan :

   Berikut adalah output nya ketika program dijalankan kembali :


Sangat berbeda bukan?
Sekian tips dari saya seputar melakukan random sederhana pada bahasa C.

Terima kasih

Anda mungkin juga menyukai