C tasodifiy sonlar
Tasodifiy sonlar
C tilida tasodifiy sonlarni <stdlib.h> kutubxonasidagi rand() funksiyasi yordamida hosil qilishingiz mumkin.
Standart holatda rand() dasturni har safar ishga tushirganingizda bir xil sonlar ketma-ketligini beradi. Har bir ishga tushirishda turli natijalar olish uchun srand() yordamida "boshlang‘ich nuqta"ni (u seed deb ataladi) ham belgilashingiz mumkin. Siz hozirgina sana va vaqt haqida o‘rgandingiz, endi seed sifatida joriy vaqtdan foydalanishingiz mumkin (chunki u doimo o‘zgarib turadi). Buning uchun dasturingizga <time.h> sarlavha faylini ulaysiz.
Oddiy tasodifiy son
rand() funksiyasi tasodifiy butun son qaytaradi.
Misol
#include <stdio.h>
#include <stdlib.h>
int main() {
int r = rand();
printf("%d\n", r);
return 0;
}
Eslatma: Agar bu dasturni bir necha marta ishga tushirsangiz, har safar bir xil sonlarni ko‘rasiz. Buning sababi — biz hali seed belgilamaganmiz.
Tasodifiy sonlar generatoriga seed berish
Dasturni har safar ishga tushirganingizda turli sonlar olish uchun rand()ga boshlang‘ich nuqta (seed) berishingiz kerak.
Buni srand() yordamida bajarasiz. Keng tarqalgan usul — seed sifatida joriy vaqtdan foydalanish, chunki vaqt doimo o‘zgarib turadi:
Misol
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL)); // seed with current time
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
Maslahat: srand()ni faqat bir marta, main boshida chaqiring. Uni sikl ichida qayta chaqirmang.
Muayyan oraliqdagi tasodifiy son
Ko‘pincha sizga kichikroq oraliqdagi, masalan, 0 dan 9 gacha bo‘lgan sonlar kerak bo‘ladi. Buni qoldiqli bo‘lish (modulo) operatori % yordamida bajarishingiz mumkin:
Misol
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int x = rand() % 10; // 0..9
printf("%d\n", x);
return 0;
}
Hayotiy misol: zar tashlash
Tasodifiy sonlarning hayotdagi keng tarqalgan qo‘llanilishlaridan biri — olti yoqli zar tashlash. Buni simulyatsiya qilish uchun rand() % 6 yordamida 0 dan 5 gacha sonlarni olamiz, so‘ng oraliq 1 dan 6 gacha bo‘lishi uchun 1 qo‘shamiz:
Misol
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int dice1 = (rand() % 6) + 1;
int dice2 = (rand() % 6) + 1;
printf("You rolled %d and %d (total = %d)\n", dice1, dice2, dice1 + dice2);
return 0;
}
Dasturni har safar ishga tushirganingizda, xuddi hayotda ikkita zar tashlagandek, 1 dan 6 gacha bo‘lgan ikkita tasodifiy son olasiz.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
