პროგრამირების საფუძვლები › დამწყები › ციკლები
while ციკლი
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ იწერება და ნაბიჯ-ნაბიჯ როგორ სრულდება
while - როდის ჯობს
while, როცა გამეორებების რაოდენობა წინასწარ არ იცი - რით განსხვავდება
do...while
სანამ პირობა სრულდება
while ინგლისურად ნიშნავს „სანამ“. ციკლი ასე იკითხება: „სანამ პირობა ჭეშმარიტია, შეასრულე ბლოკი“.
while (პირობა) {
// ბლოკი, რომელიც მეორდება
}ყოველი იტერაციის წინ კომპიუტერი პირობას ამოწმებს. თუ true-ა, ბლოკს ასრულებს და ისევ თავში ბრუნდება. თუ false-ა, ციკლს ტოვებს და }-ის შემდეგ მდგომ კოდზე გადადის. თუ პირობა თავიდანვე false-ა, ბლოკი ერთხელაც არ შესრულდება.
როცა რაოდენობა არ იცი
while-ის ძალა ისაა, რომ წინასწარ არ გჭირდება იმის ცოდნა, რამდენჯერ გაიმეორებ. მაგალითად, ყოველ კვირას 15 ლარს ზოგავ. რამდენ კვირაში დააგროვებ 100 ლარს?
let money = 0;
let weeks = 0;
while (money < 100) {
money += 15;
weeks++;
}
console.log("კვირა:", weeks, "ფული:", money);მივყვეთ ნაბიჯ-ნაბიჯ:
| იტერაცია | პირობა money < 100 | money შემდეგ | weeks შემდეგ |
|---|---|---|---|
| 1 | 0 < 100 ✔ | 15 | 1 |
| 2 | 15 < 100 ✔ | 30 | 2 |
| … | … | … | … |
| 7 | 90 < 100 ✔ | 105 | 7 |
| — | 105 < 100 ✘ | ციკლი მთავრდება |
იბეჭდება კვირა: 7 ფული: 105. პასუხი ციკლმა თვითონ იპოვა: ჩვენ მხოლოდ წესი დავწერეთ.
ასეთი ცხრილით კოდის „ხელით“ შესრულება კარგი ჩვევაა. როცა ციკლი არ აკეთებს იმას, რასაც ელი, ცხრილი ზუსტად გიჩვენებს, რომელ იტერაციაზე აირია საქმე.
უსასრულო ციკლის თავიდან აცილება
while-ში ბიჯი შენ თვითონ უნდა დაწერო ბლოკის შიგნით. თუ დაგავიწყდა, ან ცვლადი ისე იცვლება, რომ პირობა ვერასოდეს გახდება false, ციკლი არ დამთავრდება. სანამ გაუშვებ, ჰკითხე საკუთარ თავს: „რა იცვლება ყოველ იტერაციაზე და რატომ გახდება ოდესმე პირობა false?“ თუ პასუხი არ გაქვს, ციკლი სავარაუდოდ უსასრულოა.
do...while: ჯერ გააკეთე, მერე იკითხე
while-ს ერთი ნათესავი ჰყავს, do...while. ის პირობას ბლოკის შემდეგ ამოწმებს, ამიტომ ბლოკი სულ მცირე ერთხელ ყოველთვის სრულდება:
let n = 10;
do {
console.log("შესრულდა, n =", n);
n++;
} while (n < 5);პირობა 10 < 5 თავიდანვე false-ა, მაგრამ ხაზი მაინც ერთხელ დაიბეჭდება. ასეთი ციკლი იშვიათად გჭირდება, მაგრამ კარგია იცოდე, რომ არსებობს.
სცადე თავად
გაუშვი, მერე შეცვალე დანაზოგი კვირაში და მიზანი. რამდენ კვირაში დააგროვებ 250 ლარს, თუ კვირაში 20-ს ზოგავ?
ხშირი შეცდომები
- ბიჯი ბლოკის გარეთ. თუ
i++}-ის შემდეგ დაწერე, ის ციკლს არ ეკუთვნის და ციკლი უსასრულოა. - პირობა, რომელიც ვერასოდეს შეიცვლება.
while (money !== 100)15-ის ბიჯით არასოდეს დამთავრდება, რადგან 15-ის ჯერადები 100-ს ზუსტად არ ემთხვევა: 90-ის შემდეგ 105 მოდის. ზუსტი ტოლობის ნაცვლად<ან>გამოიყენე. - წერტილ-მძიმე
while (...)-ის შემდეგ.while (i < 5);ცარიელ ციკლს ქმნის, რომელიც სამუდამოდ ტრიალებს.
სავარჯიშო
რიცხვი 64 გაყავი ორზე იმდენჯერ, სანამ 1 არ გახდება. დათვალე, რამდენი გაყოფა დაგჭირდა, და დაბეჭდე გაყოფა: 6.
💡 მინიშნება
პირობაა n > 1. ბლოკში n = n / 2 (ან n /= 2) და steps++.
✅ ამოხსნის ნახვა
let n = 64;
let steps = 0;
while (n > 1) {
n /= 2;
steps++;
}
console.log("გაყოფა:", steps);მინი-ქვიზი
1როდის ამოწმებს while პირობას?
ამიტომ შეიძლება ბლოკი ერთხელაც არ შესრულდეს. პირობას შემდეგ do...while ამოწმებს.
2რამდენჯერ შესრულდება ბლოკი? let x = 10; while (x < 5) { x++; }
პირობა 10 < 5 თავიდანვე false-ა.
3რატომ არის while (money !== 100) { money += 15; } სახიფათო, თუ money 0-დან იწყება?
90-ის შემდეგ მოდის 105. უსაფრთხოა money < 100.
შეჯამება
while (პირობა) { ... }ბლოკს იმეორებს, სანამ პირობაtrue-ა, და პირობას ყოველი იტერაციის წინ ამოწმებს.- ის კარგია, როცა გამეორებების რაოდენობა წინასწარ არ იცი.
- ბიჯი ბლოკის შიგნით თვითონ უნდა დაწერო. ზუსტი ტოლობის პირობები სახიფათოა.
do...whileბლოკს ერთხელ ყოველთვის ასრულებს.