141 lines
2.4 KiB
Markdown
141 lines
2.4 KiB
Markdown
---
|
|||
|
|
baslik: iken döngüsü
|
||
|
|
bolum: Akış denetimi
|
||
|
|
ozet: Koşul doğru olduğu sürece tekrar etmek
|
||
|
|
---
|
||
|
|
|
||
|
|
Bir işi defalarca yapmak için aynı satırı tekrar tekrar yazmazsın; döngü kullanırsın. `iken` döngüsü, koşul doğru olduğu **sürece** bloğunu tekrarlar.
|
||
|
|
|
||
|
|
## Temel kullanım
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
sayac = 1
|
||
|
|
iken sayac <= 5:
|
||
|
|
yazdir(sayac)
|
||
|
|
sayac += 1
|
||
|
|
yazdir("Bitti")
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
1
|
||
|
|
2
|
||
|
|
3
|
||
|
|
4
|
||
|
|
5
|
||
|
|
Bitti
|
||
|
|
```
|
||
|
|
|
||
|
|
Her turdan önce koşul sorulur. `sayac` 6 olunca koşul yanlış çıkar ve döngü biter.
|
||
|
|
|
||
|
|
## Geri sayım
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
kalan = 3
|
||
|
|
iken kalan > 0:
|
||
|
|
yazdir(f"{kalan}...")
|
||
|
|
kalan -= 1
|
||
|
|
yazdir("Kalkış!")
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
3...
|
||
|
|
2...
|
||
|
|
1...
|
||
|
|
Kalkış!
|
||
|
|
```
|
||
|
|
|
||
|
|
## Toplam biriktirmek
|
||
|
|
|
||
|
|
Döngüde bir değişkene her turda ekleme yaparak toplam bulursun.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
toplam = 0
|
||
|
|
n = 1
|
||
|
|
iken n <= 100:
|
||
|
|
toplam += n
|
||
|
|
n += 1
|
||
|
|
yazdir(f"1'den 100'e kadar toplam: {toplam}")
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
1'den 100'e kadar toplam: 5050
|
||
|
|
```
|
||
|
|
|
||
|
|
## Kaç turda biteceğini bilmediğin işler
|
||
|
|
|
||
|
|
`iken`, tekrar sayısını önceden bilmediğin durumlar için idealdir. Yıllık %40 faizle 10.000 TL kaç yılda iki katını geçer?
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
para = 10_000.0
|
||
|
|
yil = 0
|
||
|
|
iken para < 20_000.0:
|
||
|
|
para = para * 1.40
|
||
|
|
yil += 1
|
||
|
|
yazdir(f"{yil} yıl sonra: {para:,.2f} TL")
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
3 yıl sonra: 27,440.00 TL
|
||
|
|
```
|
||
|
|
|
||
|
|
Bir sayının basamaklarını tek tek ayırmak da böyle bir iştir.
|
||
|
|
|
||
|
|
```kbl
|
||
|
|
n = 4729
|
||
|
|
basamak_toplami = 0
|
||
|
|
iken n > 0:
|
||
|
|
basamak_toplami += n % 10
|
||
|
|
n = n // 10
|
||
|
|
yazdir(basamak_toplami)
|
||
|
|
```
|
||
|
|
```cikti
|
||
|
|
22
|
||
|
|
```
|
||
|
|
|
||
|
|
> **Dikkat:** Koşulu bir gün yanlış yapacak satırı unutursan döngü **sonsuza dek** döner. Aşağıdaki kodda `sayac` hiç artmıyor; program durmaz (IDE belli bir süre sonra onu keser).
|
||
|
|
|
||
|
|
```kbl goster
|
||
|
|
sayac = 1
|
||
|
|
iken sayac <= 5:
|
||
|
|
yazdir(sayac)
|
||
|
|
# sayac += 1 unutuldu!
|
||
|
|
```
|
||
|
|
|
||
|
|
## Alıştırma
|
||
|
|
|
||
|
|
```alistirma
|
||
|
|
`iken` ile 2'nin kuvvetlerini yazdır: 1, 2, 4, 8, ... 1000'i geçmeyenleri, her biri ayrı satırda.
|
||
|
|
%%%
|
||
|
|
kuvvet = 1
|
||
|
|
# buraya yaz
|
||
|
|
%%%
|
||
|
|
kuvvet = 1
|
||
|
|
iken kuvvet <= 1000:
|
||
|
|
yazdir(kuvvet)
|
||
|
|
kuvvet *= 2
|
||
|
|
%%%
|
||
|
|
1
|
||
|
|
2
|
||
|
|
4
|
||
|
|
8
|
||
|
|
16
|
||
|
|
32
|
||
|
|
64
|
||
|
|
128
|
||
|
|
256
|
||
|
|
512
|
||
|
|
```
|
||
|
|
|
||
|
|
```alistirma
|
||
|
|
Bir kumbarada 0 TL var. Her hafta 35 TL atılıyor. Kumbara 500 TL'ye ulaşana ya da geçene kadar kaç hafta gerektiğini ve son tutarı `X hafta, Y TL` biçiminde yazdır.
|
||
|
|
%%%
|
||
|
|
kumbara = 0
|
||
|
|
hafta = 0
|
||
|
|
# buraya yaz
|
||
|
|
%%%
|
||
|
|
kumbara = 0
|
||
|
|
hafta = 0
|
||
|
|
iken kumbara < 500:
|
||
|
|
kumbara += 35
|
||
|
|
hafta += 1
|
||
|
|
yazdir(f"{hafta} hafta, {kumbara} TL")
|
||
|
|
%%%
|
||
|
|
15 hafta, 525 TL
|
||
|
|
```
|