Bahasa C maupun C++ menyediakan function untuk mengacak bilangan. Function tersebut adalah rand yang ada di dalam library <math.h>. Jika kalian menggunakan C++, kalian juga bisa menggunakan cmath.
Function rand menampilkan bilangan bulat yang terkesan acak setiap kali function tersebut dipanggil. Bilangan-bilangan acak tersebut disebut dengan pseudo random number.
#include <math.h>
#include <stdio.h>
int main(){
for(int i=0;i<5;i++)printf("%d\n", rand());
return 0;
}
Walaupun terkesan acak, angka-angka yang dihasilkan function rand() bisa saja terlihat sama setiap kali program dijalankan. Untuk mengubah nilai awal yang dihasilkan rand, kalian perlu menggunakan function srand().
#include <math.h>
#include <stdio.h>
int main(){
srand(2);
for(int i=0;i<5;i++)printf("%d\n", rand());
return 0;
}
Nilai argumen yang sama pada parameter srand akan menghasilkan rangkaian angka yang sama. Kalian perlu mengubah argumen function srand untuk mendapatkan sekumpulan angka yang berbeda saat menggunakan rand.
Function Time
Untuk membuat argumen srand selalu berubah, kalian bisa menggunakan waktu. Dalam bahasa C maupun C++, kalian bisa menggunakan function time untuk mendapatkan selisih waktu dari "standar waktu minimum" yang ada di BIOS atau semacamnya. Function time() ada di dalam <time.h>.
#include <stdio.h>
#include <time.h>
int main(){
time_t waktu;
srand(time(&waktu));
for(int i=0;i<5;i++)printf("%d\n", rand());
return 0;
}
250015796 229669843 1989679917 987338549 1986627748
Setiap kali program dijalankan, bilangan-bilangan yang dihasilkan function rand seharusnya berbeda karena nilai yang dikembalikan function time selalu berubah.
Membatasi Bilangan yang Diacak
#include <math.h>
#include <stdio.h>
#include <time.h>
#define batas 5
int main(){
time_t waktu;
srand(time(&waktu));
for(int i=0;i<5;i++)printf("%d\n", rand()%batas);
return 0;
}
4 4 0 3 1
Contoh di atas membatasi nilai kembalian dari rand supaya berada di antara 0 s.d 4 karena ada mod dengan angka 5. Sisa hasil bagi akan selalu kurang dari nilai pembagi. Contoh di atas menggunakan konstanta yang diberi nama batas. Untuk lebih jelasnya, kalian bisa mengganti nilai batas dengan angka lainnya.
Mendapatkan Bilangan Acak Negatif
#include <math.h>
#include <stdio.h>
#include <time.h>
#define batas 10
int main(){
time_t waktu;
srand(time(&waktu));
for(int i=0;i<5;i++)printf("%d\n", rand()%batas-5);
return 0;
}
-4 -1 4 3 0
Nilai acak pada contoh di atas batas nilai terkecilnya adalah -5. Kalian bisa mengganti angka 5 dengan angka lain sesuai batas nilai negatif yang kalian inginkan.
Mengacak Indeks Array
Nilai acak yang dibatasi bisa digunakan untuk mengacak indeks array. Contoh penerapan bilangan acak untuk mengacak indeks array bisa kalian lihat di bawah ini.
#include <cmath>
#include <iostream>
#include <time.h>
using namespace std;
int main(){
time_t t;
int n;
//
srand(time(&t));
for(int i=0;i<4;i++){
n=rand() % 62;
// Batasi angka maksimal jadi 61 (atau 62-1), ganti sesuai banyaknya karakter dalam array yg dipakai.
cout << n << endl;
// Lihat nilai n, n bisa dipakai untuk indeks array yg diacak.
}
}