Skip to content

Latest commit

 

History

History
39 lines (28 loc) · 7.44 KB

File metadata and controls

39 lines (28 loc) · 7.44 KB

while ციკლი

for ციკლის გამოყენება კარგია მაშინ, როდესაც გარკვეული ბრძანებების მიმდევრობის გამეორება გინდა და იცი, რამდენჯერ გინდა გაიმეორო. ამ დროს ბრძანებების მიმდევრობას წერ for ციკლის ტანში, for ციკლის თავში უთითებ რაოდენობას (კონკრეტულ რიცხვს), თუ რამდენჯერ გინდა გამეორება. ხშირად არის სიტუაცია, როდესაც რაღაცის გამეორება გინდა, მაგრამ ზუსტად არ იცი რამდენჯერ. ამ შემთხვევაში გამოგადგება while ციკლი. მაგრამ სანამ while ციკლამდე მიხვიდოდე, ჯერ სასწავლი გაქვს “პირობები”. კარელს თავისი სამყაროს შესახებ გარკვეული პირობების გაგება შეუძლია, მაგალითად, შეუძლია გაიგოს მის წინ არის თუ არა კედელი, აქვს თუ არა ბრილიანტები ჩანთაში, დგას თუ არა ბრილიანტზე და ა.შ. მაგალითად:

  • frontIsClear() - ამოწმებს არის თუ არა მის წინ სიცარიელე
  • beepersPresent() - ამოწმებს არის თუ არა ბრილიანტი იქ სადაც თვითონ დგას
  • beepersInBag() - აქვს თუ არა ბრილიანტები ჩანთაში

წარმოიდგინე, რომ კარელი პირველი გამზირის პირველ ქუჩაზე იმყოფება, ხოლო ბრილიანტი - ბოლო გამზირის პირველ ქუჩაზე და კარელს უნდა ამ ბურთის აღება. კარელმა არ იცის რამხელაა სამყარო და რამდენი გამზირია მასში. გასაგებია, რომ პირველი ქუჩის ბოლოში მისასვლელად move() ბრძანება უნდა გაიმეორო რამდენჯერმე. თუმცა პრობლემა იმაშია, რომ არ იცი ზუსტად რამდენჯერ. შესაბამისად, for ციკლი ამაში არ გამოგადგება(გაიხსენე, რომ for ციკლს კონკრეტული რიცხვი უნდა მიუთითო, რომელიც ახლა არ იცი). თუმცა, აქვეა while ციკლი, რომელიც for ციკლის მსგავსად თავისა და ტანისგან შედგება. while ციკლის ტანში უნდა ჩავწერო ბრძანებების მიმდევრობა, რომელთა გამეორებაც გინდა(ისევე, როგორც for ციკლის შემთხვევაში). while ციკლის თავში კი უნდა ჩაწერო პირობა, რის შედეგადაც while ციკლი გაიმეორებს ბრძანებების მიმდევრობას მანამ , სანამ პირობა სრულდება. while ციკლის ზოგადი ჩანაწერი ასეთია:

while (პირობა) {
    ბრძანებები რომელთა გამეორებაც გვინდა
}

ეს ნიშნავს გაიმეორე ბრძანებების მიმდევრობა, რომელიც while ციკლის ტანში წერია, მანამ სანამ while ციკლის თავში დაწერილი პირობა სრულდება. კარელი თავდაპირველად შეამოწმებს while ციკლის თავში დაწერილ პირობას თუკი პირობა სრულდება მაშინ ის შეასრულებს ბრძანებების მიმდევრობას, რომელიც while ციკლის ტანში წერია. ამის შემდეგ კარელი ისევ შეამოწმებს პირეობას, თუ პირობა კვლავ სრულდება, კარელი შეასრულებს ტანში დაწერილ ბრძანებებს და ა.შ. თუკი პირობა შესრულდა მაშინ ციკლი დამთავრდება და კარელი გააგრძელებს ციკლის ქვემოთ არსებული ბრძანებების შესრულებას.

მაგალითად შემდეგი კოდის შემთხვევაში

while (frontIsClear()) {
    move();
}

კარელი იმოძრავებს მანამ, სანამ მის წინ სიცარიელეა. შესაბამისად, იმოძრავებს მანამ, სანამ მის წინ კედელი არ იქნება, ანუ მიაღწევს პირველი ქუჩის ბოლოში.

ყურადღება მიაქციე იმ ფაქტს, რომ თუ პირობა სრულდება კარელი ყველა ბრძანებას შეასრულებს რომელიც ციკლის ტანში წერია, მიუხედავად იმისა, ამ ბრძანებების პროცესში მითითებული პირობა ირღვევა თუ არა. კარელი პირობას მხოლოდ დასაწყისში ამოწმებს, ბრძანაბების შუაში პირობა არ მოწმდება. შესაბამისად შემდეგი კოდი:

while (frontIsClear()) {
    move();
    move();
}

შეიძლება დაიქრეშოს თუკი კარელს კედლამდე კენტი რაოდენობის ნაბიჯი დარჩა. რადგან ყოველ ჯერზე ის ორ-ორ ნაბიჯს დგამს ხოლმე.