შესვლა

პროგრამირების საფუძვლები › დამწყები › ციკლები

ჩადგმული ციკლები

საშუალო⏱ 7 წთ+20 XP👑 Pro#ციკლები#ჩადგმა#ბადე

რას ისწავლი

  • როგორ სრულდება ციკლი სხვა ციკლის შიგნით
  • როგორ დახატო მართკუთხედი და სამკუთხედი სიმბოლოებით
  • როგორ დაითვალო, რამდენჯერ შესრულდება შიდა ბლოკი

საათის ისრები

ჩადგმული ციკლი საათს ჰგავს. წუთის ისარი მთელ წრეს აკეთებს, სანამ საათის ისარი ერთი ნაბიჯით გადაიწევს. ჩადგმულ ციკლშიც (nested loop) ასეა: გარე ციკლის ყოველ ერთ იტერაციაზე შიდა ციკლი მთლიანად, თავიდან ბოლომდე სრულდება.

JavaScript
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 სიმბოლოა: გარე ციკლი რიგებს ითვლის, შიდა სიმბოლოებს ერთ რიგში.

JavaScript
for (let row = 1; row <= 3; row++) {
  let line = "";
  for (let col = 1; col <= 5; col++) {
    line += "#";
  }
  console.log(line);
}

ყურადღება მიაქციე line-ს: ის გარე ციკლის შიგნით, მაგრამ შიდა ციკლის წინ იქმნება. ყოველ რიგზე ცარიელ სტრიქონს ვიწყებთ, შიდა ციკლი მას ხუთ სიმბოლოს უმატებს, და მზა რიგს ვბეჭდავთ.

ახლა სამკუთხედი. აქ შიდა ციკლის სიგრძე გარე ციკლის ცვლადზეა დამოკიდებული: პირველ რიგში ერთი ვარსკვლავია, მეორეში ორი და ასე შემდეგ.

JavaScript
for (let row = 1; row <= 4; row++) {
  let line = "";
  for (let s = 1; s <= row; s++) {
    line += "*";
  }
  console.log(line);
}

შიდა ციკლის პირობაა s <= row, ამიტომ რიგი 1-ში ის ერთხელ ბრუნავს, რიგი 4-ში ოთხჯერ. ეს ჩადგმული ციკლების მთავარი ხრიკია: შიდა ციკლი გარე ციკლის ცვლადს იყენებს.

სცადე თავად

გაუშვი, მერე ისე შეცვალე, რომ სამკუთხედი თავდაყირა გამოვიდეს: ჯერ ოთხი ვარსკვლავი, ბოლოს ერთი.

JavaScript · სცადე თავად

ხშირი შეცდომები

  • ერთი და იგივე ცვლადი ორივე ციკლში. თუ შიდა ციკლსაც i ჰქვია, ის გარე i-ს „დაფარავს“ და ციკლები აირევა. სხვადასხვა სახელი გამოიყენე: row და col, ან i და j.
  • დამგროვებელი არასწორ ადგილას. თუ let line = ""; ორივე ციკლის წინ წერია, რიგები ერთმანეთს მიეწებება და ყოველ რიგზე სულ უფრო გრძელი ხაზი დაიბეჭდება.
  • break ორივე ციკლის შესაწყვეტად. break მხოლოდ იმ ციკლს წყვეტს, რომელშიც პირდაპირ წერია, ანუ შიდას. გარე ციკლი გაგრძელდება.

სავარჯიშო

დაბეჭდე გამრავლების პატარა ცხრილი 1-დან 4-მდე: ოთხი ხაზი, თითოეულში რიგის რიცხვის ნამრავლები 1-დან 4-მდე, ინტერვალით გამოყოფილი. პირველი ხაზია 1 2 3 4, ბოლო 4 8 12 16.

JavaScript · სცადე თავად
💡 მინიშნება

შიდა ციკლში დაამატე line += row * col + " ";. ხაზის ბოლოს ზედმეტი ინტერვალი დარჩება, ეს არ არის პრობლემა.

✅ ამოხსნის ნახვა
JavaScript
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-ჯერ?

2სამკუთხედის მაგალითში რამდენი ვარსკვლავი იქნება მესამე რიგში?

3შიდა ციკლში დაწერილი break რომელ ციკლს წყვეტს?

შეჯამება

  • ჩადგმულ ციკლში გარე ციკლის ყოველ იტერაციაზე შიდა ციკლი მთლიანად სრულდება.
  • შიდა ბლოკი სრულდება გარე × შიდა რაოდენობაჯერ.
  • შიდა ციკლს შეუძლია გარე ციკლის ცვლადი გამოიყენოს, მაგალითად სამკუთხედის დასახატად.
  • ციკლებს სხვადასხვა ცვლადის სახელი უნდა ჰქონდეს.
📝 ჩემი შენიშვნა