darsga qaytish

Min dan max gacha bo'lgan tasodifiy tamsayi son

Tasodifiy tamsayı sonini min dan max gacha, shu jumladan min va max qiymatlarini ham hosil qiladigan randomInteger(min, max) funktsiyasini yarating.

min..max intervalidan istalgan raqam bir xil ehtimollik bilan paydo bo’lishi kerak.

Uning ishining namunalari:

alert(randomInteger(1, 5)); // 1
alert(randomInteger(1, 5)); // 3
alert(randomInteger(1, 5)); // 5

Siz oldingi topshiriq yechimini asos sifatida ishlatishingiz mumkin.

Oddiy, ammo noto’g’ri yechim

Eng sodda, ammo noto’g’ri yechim, min dan max" gacha qiymat hosil qilish va uni yaxlitlash:

function randomInteger(min, max) {
  let rand = min + Math.random() * (max - min);
  return Math.round(rand);
}

alert(randomInteger(1, 3));

Funktsiya ishlaydi, ammo bu noto’g’ri. min va max chekka qiymatlarini olish ehtimoli boshqalarga nisbatan ikki baravar kam.

Yuqoridagi misolni bir necha bor takrorlasangiz, 2 ning tez-tez paydo bo’lishini osongina ko’rasiz.

Buning sababi, Math.round() tasodifiy sonlarni 1..3 oralig’idan oladi va ularni quyidagicha yaxlitlaydi:

1 ... dan 1.4999999999 gacha qiymatlar 1 ga aylanadi
1.5 ... dan 2.4999999999 gacha qiymatlar 2 ga aylanadi
2.5 ... dan 2.9999999999 gacha qiymatlar 3 ga aylanadi

Endi aniq ko’rishimiz mumkinki, 1 qiymati 2 dan ikki baravar kamroq qiymatga ega bo’ladi. Va 3 ham shunday.

To’g’ri yechim

Vazifani hal qilishning ko’plab to’g’ri yechimlari mavjud. Ulardan biri intervalli chegaralarni sozlashdir. Xuddi shu intervallarni ta’minlash uchun biz 0,5 dan 3,5 gacha qiymatlarni yaratishimiz mumkin, shu bilan kerakli ehtimollarni qirralarga qo’shamiz:

function randomInteger(min, max) {
  // endi  (min-0.5) dan (max+0.5) gacha
  let rand = min - 0.5 + Math.random() * (max - min + 1);
  return Math.round(rand);
}

alert( randomInteger(1, 3) );

Shu bilan bir qatorda tasodifiy son uchun Math.floor min dan max + 1 gacha foydalanish mumkin:

function randomInteger(min, max) {
  //bu yerda min dan (max+1) gacha
  let rand = min + Math.random() * (max + 1 - min);
  return Math.floor(rand);
}

alert( randomInteger(1, 3) );

Endi barcha intervallar quyidagicha ishlaydi:

1 ... dan 1.9999999999 gacha qiymatlar 1 ga teng
2 ... dan 2.9999999999 gacha qiymatlar 2 ga teng
3 ... dan 3.9999999999 gacha qiymatlar 3 ga teng

Barcha intervallar bir xil uzunlikka ega bo’lib, yakuniy taqsimot bir xil bo’ladi.