If you're seeing this message, it means we're having trouble loading external resources on our website.

თუ ვებფილტრს იყენებთ, დარწმუნდით, რომ *.kastatic.org და *.kasandbox.org დომენები არ არის დაბლოკილი.

ძირითადი მასალა

კურსი: კომპიუტერული პროგრამირება > თემა 1

გაკვეთილი 10: ლოგიკა და if დებულებები

შემთხვევითი რიცხვები

ისწავლეთ შემთხვევითი რიცხვების დაგენერირება ProcessingJS-ში random() ფუნქციის გამოყენებით და შეამოწმეთ მათი მნიშვნელობები if პირობებით.
ჩვენ ვიყენებდით ჩვენს if პირობებს გარემოს შესახებ მნიშვნელობების შესამოწმებლად, როგორიცაა მომხმარებლის მაუსის მიმდინარე ადგილმდებარეობა, და გეგმიურად ვრეაგირებდით.
მაგრამ რა ხდება იმ შემთხვევაში, როცა არაპროგნოზირებადობა გვინდა? რა ხდება მაშინ, როცა გვინდა, რომ ჩვენი პროგრამა ყოველ ჯერზე განსხვავებულად იქცეოდეს?
შემთხვევითობა გადაგვარჩენს!
შეგვიძლია, დავაგენერიროთ შემთხვევითი რიცხვები და გამოვიყენოთ if და else if პირობები ჩვენი პროგრამის შემთხვევითი მნიშვნელობების მიხედვით ქცევის შესაცვლელად.
მაგალითად:
var randNum = random(0, 10);
if (randNum < 5) {
   text("Trick!", 200, 200);
} else {
   text("Treat!", 200, 200);
}
შემთხვევების ნახევარში პროგრამას ეკრანზე გამოაქვს „Trick!", ხოლო მეორე ნახევარში - „Treat!".
როგორ მუშაობს:
  • randNum ცვლადს ენიჭება შემთვევითი რიცხვი 0-იდან 10-მდე. დაბრუნებული მნიშვნელობები შეიძლება, იყოს 0, 0,2, 3,3, 4, 5,5, 6,9, 8, 9 ან 9,99, მაგრამ არა — 10.
  • პირობა ამოწმებს, არის თუ არა რიცხვი 5-ზე ნაკლები. თუ რიცხვი 5-ზე ნაკლებია, ეკრანზე გამოაქვს „Trick!", წინააღმდეგ შემთხვევაში — „Treat!".
ზოგჯერ უფრო ადვილია მთელ რიცხვებთან მუშაობა, ვიდრე მცურავ მძიმიან რიცხვებთან (ინგლ. floating point numbers), რათა ზუსტი მნიშვნელობები შევამოწმოთ. აი, რამდენიმე ფუნქცია, რომელიც მცურავ მძიმიან რიცხვებს მთელ რიცხვებად აქცევს:
  • round(): ამრგვალებს რიცხვს მასზე ნაკლებ უდიდეს მთელ რიცხვამდე, თუკი ამ რიცხვის არამთელი ნაწილი 0.5-ზე ნაკლებია, და ამრგვალებს მას მასზე დიდ უმცირეს მთელ რიცხავმდე, თუკი ამ რიცხვის არამთელი ნაწილი 0.5-ზე მეტი ან ტოლია.
  • ceil(): ყოველთვის ამრგვალებს რიცხვს მის მომდევნო მთელ რიცხავმდე.
  • floor(): ყოველთვის ამრგვალებს რიცხვს მის წინა მთელ რიცხვამდე.
ზოგადად, ისეთი შემთხვევითი რიცხვების გენერირება გვინდა, რომლებიც დაახლოებით თანაბრადაა ამორჩეული. მაგალითად, თუ მონეტის აგდების სიმულაციას ვაკეთებთ, გვინდა, რომ „ავერსი" და „რევერსი" თანაბარი ალბათობით მოვიდეს.
ეს კოდი აღწევს ამ მიზანს:
var randFlip = floor(random(0, 2));
if (randFlip === 0) {
   text("Heads", 200, 200);
} else {
   text("Tails", 200, 200);
}
ცვლადი randFlip ყოველთვის არის 0 ან 1, რადგან ის იძახებს floor() ფუნქციას random(0, 2)-ის დაბრუნებულ მნიშვნელობაზე.
იმისთვის, რომ ინტუიციურად გაგააზრებინოთ, ასე რატომ ხდება, აი, floor()-ის გამოძახების შედეგი random(0, 2)-ის სხვადასხვა მნიშვნელობაზე:
random(0, 2)floor(result)
0,00
0,217…0
0,542…0
0,973…0
1,01
1,332…1
1,589…1
1,999…1
random() -ის დაბრუნებული მნიშვნელობები შემთხვევითია, ამიტომ ისინი შეიძლება, ისე თანაბრად განაწილებული არ იყვნენ, როგორც ზემოთ მოცემულ ცხრიშია. თუ მონეტის აგდების კოდს გაუშვებთ 10-ჯერ, შეიძლება, ყველა „ავერსი" ან ყველა „რევერსი" მიიღოთ. მიუხედავად ამისა, თუ მას რამდენიმე ათასჯერ გაუშვებთ და თან დაითვლით, ნახავთ, რომ „ავერსიც" და „რევერსიც" შემთხვევების დაახლოებით 50%-ში მიიღეთ.
ზოგადად, როცა ჩვენი მიზანია მთელი რიცხვების თანაბარი განაწილების მიღება, საუკეთესო ვარიანტია floor()-ის გამოყენება random()-თან.
random() ფუნქცია თქვენი პროგრამისათვის მრავალფეროვნების შესამატებლად იდეალური ვარიანტია. მიუხედავად ამისა, ფრთხილად იყავით: გაარკვიეთ დიაპაზონი, რომელშიც რიცხვებს დააგენერირებთ, გადაწყვიტეთ, გჭირდებათ თუ არა რიცხვების დამრგვალება და შეამოწმეთ მნიშვნელობები შესაფერისად.
ამის თქვენით ცდა შეგეძლებათ შემდეგ პროექტში!

გსურთ, შეუერთდეთ დისკუსიას?

პოსტები ჯერ არ არის.
გესმით ინგლისური? დააწკაპუნეთ აქ და გაეცანით განხილვას ხანის აკადემიის ინგლისურენოვან გვერდზე.