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();
}
შეიძლება დაიქრეშოს თუკი კარელს კედლამდე კენტი რაოდენობის ნაბიჯი დარჩა. რადგან ყოველ ჯერზე ის ორ-ორ ნაბიჯს დგამს ხოლმე.