Files

147 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

---
baslik: kir ve devam
bolum: Akış denetimi
ozet: Döngüden erken çıkmak ve bir turu atlamak
---
Bazen döngünün sonuna kadar gitmek gerekmez: aradığını bulmuşsundur ya da bu turdaki öğe seni ilgilendirmiyordur. `kir` döngüden tümden çıkar, `devam` yalnız bu turu atlar.
## kir: döngüden çık
Listede ilk başarısız notu arayalım. Bulunca aramaya devam etmenin anlamı yok.
```kbl
notlar = [62, 81, 48, 77, 35]
dongu n icinde notlar:
eger n < 50:
yazdir(f"İlk başarısız not: {n}")
kir
yazdir(f"{n} geçti")
```
```cikti
62 geçti
81 geçti
İlk başarısız not: 48
```
`kir` çalışınca döngü hemen biter; 77 ve 35'e hiç bakılmaz.
## devam: bu turu atla
`devam`'a gelince turun geri kalanı atlanır, döngü bir sonraki öğeyle sürer.
```kbl
dongu i icinde 1..10:
eger i % 3 == 0:
devam
konsol.yaz(f"{i} ")
yazdir()
```
```cikti
1 2 4 5 7 8 10
```
Burada `konsol.yaz` kullandık: `yazdir` gibidir ama satırı bitirmez, böylece sayılar yan yana dizilir. En sondaki boş `yazdir()` satırı kapatır.
## iken dogru ile kir
Kaç tur süreceği belli olmayan bir döngüyü `iken dogru:` ile başlatıp koşul sağlanınca `kir` ile bitirebilirsin.
```kbl
n = 27
adim = 0
iken dogru:
eger n == 1:
kir
eger n % 2 == 0:
n = n // 2
degilse:
n = 3 * n + 1
adim += 1
yazdir(f"27, {adim} adımda 1'e ulaştı.")
```
```cikti
27, 111 adımda 1'e ulaştı.
```
> **Dikkat:** `iken dogru:` yazdıysan döngünün içinde mutlaka bir `kir` olmalı ve ona bir gün ulaşılmalı. Yoksa döngü sonsuza dek döner.
## İç içe döngüde kir
`kir` yalnız **içinde bulunduğu** döngüden çıkar; dıştaki döngü devam eder.
```kbl
dongu satir icinde 1..3:
dongu sutun icinde 1..3:
eger sutun > satir:
kir
konsol.yaz(f"{satir}{sutun} ")
yazdir()
```
```cikti
11
21 22
31 32 33
```
## Hepsi bir arada: asal sayılar
Bir sayı, 1 ve kendisinden başka böleni yoksa asaldır. Her aday için bölen arıyoruz; bulunca `kir` ile içteki döngüden çıkıyoruz.
```kbl
dongu aday icinde 2..30:
asal = dogru
bolen = 2
iken bolen * bolen <= aday:
eger aday % bolen == 0:
asal = yanlis
kir
bolen += 1
eger asal:
konsol.yaz(f"{aday} ")
yazdir()
```
```cikti
2 3 5 7 11 13 17 19 23 29
```
## Alıştırma
```alistirma
`urunler` listesinde ilk `"süt"`ü bul: bulunduğu sırayı (1'den sayarak) `süt 3. sırada` biçiminde yazdır ve döngüden çık.
%%%
urunler = ["ekmek", "peynir", "süt", "yumurta", "süt"]
sira = 0
dongu u icinde urunler:
sira += 1
# buraya yaz
%%%
urunler = ["ekmek", "peynir", "süt", "yumurta", "süt"]
sira = 0
dongu u icinde urunler:
sira += 1
eger u == "süt":
yazdir(f"süt {sira}. sırada")
kir
%%%
süt 3. sırada
```
```alistirma
1'den 20'ye kadar sayıları gez. Çift sayıları `devam` ile atla, tek sayıların toplamını bulup yazdır.
%%%
toplam = 0
dongu i icinde 1..20:
# buraya yaz
yazdir(toplam)
%%%
toplam = 0
dongu i icinde 1..20:
eger i % 2 == 0:
devam
toplam += i
yazdir(toplam)
%%%
100
```