Membuat Kode Random

Jadi gini, saya mau buat angka (random) untuk dibuat sebagai pengganti kopyokan (anggep aja dadu) dengan bahasa c. idenya, setiap anak dikelas bisa mendapatkan nomor acak yang berbeda - beda dalam 1 kali (kopyokan/lempar dadu) yang bernilai 18. tapi masalah nya, saya nggak bisa merealisasikannya. saya cari tau di gugel , saya coba ini itu masih gak bisa. bisa sih, tapi angka nya ada yang mengulang. misal:

saat saya menjalankan kode yang saya buat, saya akan mendapatkan beberapa angka random:

17, 3, 5, 3, 12, 7, 22, 2, 1, 10, 21, 11, 24, 30, 36, 21, 2, 1,

pada hasil diatas kan ada beberapa angka yang sama, 3;

saya cari di gugel mentok, dan saya tanyakan di forum ini. harap bantuannya.

ini kode saya :

//random milih ukk
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int acak;
int angka;

int main()
{
    printf("=============================\n");
    printf("Random Pemilihan Paket UKK!!!\n");
    printf("=============================\n");

    //paket 1 & 2 @max 18
    srand(time(0));

    printf("yang dapat paket 1\n");
    for(int i=1; i<=18; i++){
    angka = rand()%36 + 1;
      if( acak != angka ){
        printf("%d, ",acak);
      }
    acak = angka;
    }

    printf("\n=============================\n");
    printf("===========Selesai===========\n");
    printf("=============================\n");

}

avatar HabibulUmam
@HabibulUmam

59 Kontribusi 10 Poin

Diperbarui 5 tahun yang lalu

3 Jawaban:

Jawaban Terpilih

Itu karena kamu ngecekya cuma antara dua variabel angka sebelum yang kamu generate makanya kembar, disimpan dulu kearray terus dicek. Kalo masih kurang jelas, tanyakan komentar dibawah ya. <pre> #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt;

int main() { const int count_data = 18; // jumlah data, untuk memudahkan jika jumlahnya mau diubah int rand_numb[count_data] = { 0 }; // inisiasi array untuk menyimpan data, isi semua dengan 0

printf(&quot;=============================\n&quot;);
printf(&quot;Random Pemilihan Paket UKK!!!\n&quot;);
printf(&quot;=============================\n&quot;);

//paket 1 &amp; 2 @max 18
srand(time(0)); 

printf(&quot;yang dapat paket 1\n&quot;);
for (int i = 0; i &amp;lt; count_data; i++) {
	int single_rand = 0;
	bool exist; // kondisi untuk pengulangan
	do {
		exist = false;
		single_rand = rand() % 36 + 1;
		for (int j = 0; j &amp;lt; count_data; j++) { // cek apakah data sudah ada
			if (rand_numb[j] == single_rand) {
				exist = true; // data eksis, break loop generate number baru
				break;
			}
		}
	} while (exist); // ulangi jika eksis true
            
	rand_numb[i] = single_rand; // masukkan ke array jika data belum eksis
}

for (int i = 0; i &amp;lt; count_data; i++) { // tampilkan semua data
	printf(&quot;%d &quot;, rand_numb[i]);
}

printf(&quot;\n=============================\n&quot;);
printf(&quot;===========Selesai===========\n&quot;);
printf(&quot;=============================\n&quot;);
system(&quot;pause&quot;); // biar console nggak close
return 0; // int main jangan lupa return 0!

} </pre>

avatar DennyKurniawan
@DennyKurniawan

62 Kontribusi 22 Poin

Dipost 5 tahun yang lalu

Tanggapan

mantappp,,, makasih bantuannya.

eh,, rand_numb[count_data] = {0} itu gimana ya ?

avatar HabibulUmam
@HabibulUmam

59 Kontribusi 10 Poin

Dipost 5 tahun yang lalu

Itu maksudnya semua arraynya diisi angka 0 dulu, waktu inisiasinya jadi sama seperti <pre> int rand_numb[count_data] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; </pre>

avatar DennyKurniawan
@DennyKurniawan

62 Kontribusi 22 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban