პროგრამირების საფუძვლები › დამწყები › ციკლები
ჩადგმული ციკლები
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ სრულდება ციკლი სხვა ციკლის შიგნით
- როგორ დახატო მართკუთხედი და სამკუთხედი სიმბოლოებით
- როგორ დაითვალო, რამდენჯერ შესრულდება შიდა ბლოკი
საათის ისრები
ჩადგმული ციკლი საათს ჰგავს. წუთის ისარი მთელ წრეს აკეთებს, სანამ საათის ისარი ერთი ნაბიჯით გადაიწევს. ჩადგმულ ციკლშიც (nested loop) ასეა: გარე ციკლის ყოველ ერთ იტერაციაზე შიდა ციკლი მთლიანად, თავიდან ბოლომდე სრულდება.
for (let row = 1; row <= 3; row++) {
for (let col = 1; col <= 2; col++) {
console.log("რიგი", row, "სვეტი", col);
}
}იბეჭდება ექვსი ხაზი: ჯერ რიგი 1 სვეტით 1 და 2, მერე რიგი 2 სვეტით 1 და 2, ბოლოს რიგი 3. გარე ციკლი სამჯერ ბრუნავს, შიდა ყოველ ჯერზე ორჯერ: სულ 3 × 2 = 6 იტერაცია.
ეს წესი ყოველთვის მოქმედებს: შიდა ბლოკი სრულდება იმდენჯერ, რამდენიც არის გარე იტერაციების რაოდენობა გამრავლებული შიდაზე. 100 × 100 უკვე 10 000-ია, ამიტომ ჩადგმულ ციკლებში ფრთხილად იყავი დიდ რიცხვებთან.
ხატვა სიმბოლოებით
ჩადგმული ციკლით მარტივად „დახატავ“ ფიგურებს. მართკუთხედი 3 რიგი × 5 სიმბოლოა: გარე ციკლი რიგებს ითვლის, შიდა სიმბოლოებს ერთ რიგში.
for (let row = 1; row <= 3; row++) {
let line = "";
for (let col = 1; col <= 5; col++) {
line += "#";
}
console.log(line);
}ყურადღება მიაქციე line-ს: ის გარე ციკლის შიგნით, მაგრამ შიდა ციკლის წინ იქმნება. ყოველ რიგზე ცარიელ სტრიქონს ვიწყებთ, შიდა ციკლი მას ხუთ სიმბოლოს უმატებს, და მზა რიგს ვბეჭდავთ.
ახლა სამკუთხედი. აქ შიდა ციკლის სიგრძე გარე ციკლის ცვლადზეა დამოკიდებული: პირველ რიგში ერთი ვარსკვლავია, მეორეში ორი და ასე შემდეგ.
for (let row = 1; row <= 4; row++) {
let line = "";
for (let s = 1; s <= row; s++) {
line += "*";
}
console.log(line);
}შიდა ციკლის პირობაა s <= row, ამიტომ რიგი 1-ში ის ერთხელ ბრუნავს, რიგი 4-ში ოთხჯერ. ეს ჩადგმული ციკლების მთავარი ხრიკია: შიდა ციკლი გარე ციკლის ცვლადს იყენებს.
სცადე თავად
გაუშვი, მერე ისე შეცვალე, რომ სამკუთხედი თავდაყირა გამოვიდეს: ჯერ ოთხი ვარსკვლავი, ბოლოს ერთი.
ხშირი შეცდომები
- ერთი და იგივე ცვლადი ორივე ციკლში. თუ შიდა ციკლსაც
iჰქვია, ის გარეi-ს „დაფარავს“ და ციკლები აირევა. სხვადასხვა სახელი გამოიყენე:rowდაcol, ანiდაj. - დამგროვებელი არასწორ ადგილას. თუ
let line = "";ორივე ციკლის წინ წერია, რიგები ერთმანეთს მიეწებება და ყოველ რიგზე სულ უფრო გრძელი ხაზი დაიბეჭდება. breakორივე ციკლის შესაწყვეტად.breakმხოლოდ იმ ციკლს წყვეტს, რომელშიც პირდაპირ წერია, ანუ შიდას. გარე ციკლი გაგრძელდება.
სავარჯიშო
დაბეჭდე გამრავლების პატარა ცხრილი 1-დან 4-მდე: ოთხი ხაზი, თითოეულში რიგის რიცხვის ნამრავლები 1-დან 4-მდე, ინტერვალით გამოყოფილი. პირველი ხაზია 1 2 3 4, ბოლო 4 8 12 16.
💡 მინიშნება
შიდა ციკლში დაამატე line += row * col + " ";. ხაზის ბოლოს ზედმეტი ინტერვალი დარჩება, ეს არ არის პრობლემა.
✅ ამოხსნის ნახვა
for (let row = 1; row <= 4; row++) {
let line = "";
for (let col = 1; col <= 4; col++) {
line += row * col + " ";
}
console.log(line);
}მინი-ქვიზი
1რამდენჯერ შესრულდება შიდა ბლოკი, თუ გარე ციკლი 3-ჯერ ბრუნავს, შიდა 4-ჯერ?
გარე იტერაციების რაოდენობა გამრავლებული შიდაზე: 3 × 4.
2სამკუთხედის მაგალითში რამდენი ვარსკვლავი იქნება მესამე რიგში?
შიდა ციკლის პირობაა s <= row, ხოლო მესამე რიგში row = 3.
3შიდა ციკლში დაწერილი break რომელ ციკლს წყვეტს?
break იმ ციკლს წყვეტს, რომელშიც პირდაპირ წერია.
შეჯამება
- ჩადგმულ ციკლში გარე ციკლის ყოველ იტერაციაზე შიდა ციკლი მთლიანად სრულდება.
- შიდა ბლოკი სრულდება გარე × შიდა რაოდენობაჯერ.
- შიდა ციკლს შეუძლია გარე ციკლის ცვლადი გამოიყენოს, მაგალითად სამკუთხედის დასახატად.
- ციკლებს სხვადასხვა ცვლადის სახელი უნდა ჰქონდეს.