Kitaplar / Yöntem ile Programlamaya Giriş / Bölüm 5 — Döngüler
Bölüm 5 — Döngüler
Döngüler bir işi tekrar tekrar yapar. Yöntem’de beş döngü vardır ve hepsi Türkçe cümle düzenine uyar: önce neyin üzerinde dönüleceği, en sonda eylem gelir.
| Döngü | Ne zaman kullanılır? |
|---|---|
1'den 10'a kadar her i için … |
Bir sayaç belli bir aralıkta dolaşacaksa |
liste içindeki her x için … |
Bir listenin, metnin ya da sözlüğün her elemanı için |
5 kez tekrarla … |
Bir iş belli sayıda yapılacaksa |
koşul iken … |
Koşul doğru olduğu sürece; hiç çalışmayabilir |
tekrarla … koşul olana dek |
Koşul doğru olana dek; en az bir kez çalışır |
Ekler. Sayaçlı döngüde başlangıç değeri ayrılma ekiyle (1'den, 3'ten, n'den), bitiş değeri yönelme ekiyle (10'a, 7'ye, n'e) yazılır. Ek, kesme işaretiyle sayıya, ada ya da kapanış parantezine bitişik yazılır: (n - 1)'e. Yöntem ses uyumunu denetlemez, ama doğru eki yazmak programı okunur kılar.
Gövde kuralı. Döngü başlığından sonra gelen tek komut döngünün gövdesidir. Birden çok komut tekrarlanacaksa başla … bitir arasına alınır. tekrarla … olana dek kendi sınırlarını taşıdığı için başla istemez.
Sayaçlı döngü: … kadar her i için
program ÇarpımTablosu
değişken
i, j: tamsayı
başla
1'den 5'e kadar her i için
başla
1'den 5'e kadar her j için
yaz(Biçimle('{:4}', i * j))
yaz('', 1)
bitir
yaz('Geri sayım: ')
10'dan 0'a adımda 2 azalan her i için
yaz(i + ' ')
yaz('Ateş!', 1)
bitir. 1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Geri sayım: 10 8 6 4 2 0 Ateş!İç içe iki döngü bir tablo üretti. {:4} her sayıyı 4 karakterlik alana sağa yaslayarak yazdı. Son döngüdeki adımda 2 azalan, sayacın ikişer ikişer azalacağını söyler.
Sayan döngünün dört biçimi vardır:
| Yazım | Ne yapar |
|---|---|
1'den 10'a kadar her i için |
Birer birer artar |
10'dan 1'e kadar her i için |
İki sınır da sabit sayıysa yön sınırlardan anlaşılır: birer birer azalır |
a'dan b'ye adımda c artan her i için |
c’şer artar |
b'den a'ya adımda c azalan her i için |
c’şer azalır |
Sınırlardan biri değişkense kadar her zaman artarak sayar; başlangıç bitişten büyükse döngü hiç çalışmaz. Değişken sınırlarla geriye saymak için yönü açıkça yazmanız gerekir: n'den 1'e adımda 1 azalan her i için. Adım her zaman pozitif bir tamsayıdır; yönü artan ya da azalan sözcüğü belirler.
iken döngüsü: sayı tahmin oyunu
program SayıTahmini
değişken
gizli, tahmin, deneme: tamsayı
başla
Rastgeleştir(7) // her çalıştırmada aynı sayı (deneme için)
gizli := Rastgele(1, 100)
deneme := 0
tahmin := -1
tahmin <> gizli iken
başla
yaz('Tahmininiz: ')
oku(tahmin, 1)
deneme += 1
eğer tahmin < gizli ise yaz('Daha büyük.', 1)
değilse eğer tahmin > gizli ise yaz('Daha küçük.', 1)
bitir
yaz('Bildiniz! ' + deneme + ' denemede.', 1)
bitir.Tahmininiz: 50
Daha küçük.
Tahmininiz: 25
Daha büyük.
Tahmininiz: 37
Daha büyük.
Tahmininiz: 43
Daha küçük.
Tahmininiz: 40
Daha büyük.
Tahmininiz: 42
Bildiniz! 6 denemede.Rastgele(1, 100) 1 ile 100 arasında bir tam sayı üretir. Rastgeleştir(7) üreteci sabit bir tohumla başlatır; böylece program her seferinde aynı sayıyı seçer. Gerçek oyunda bu satırı Rastgeleştir; yapabilirsiniz.
tekrarla, her, kır ve devam
program Döngüler2
değişken
n, toplam, i: tamsayı
meyve: metin
başla
// tekrarla: gövde en az bir kez çalışır
n := 9875
toplam := 0
tekrarla
toplam := toplam + n mod 10
n := n böl 10
n = 0 olana dek
yaz('9875 sayısının basamakları toplamı: ' + toplam, 1)
// her: bir koleksiyonun elemanları üzerinde dolaşır
['elma', 'armut', 'kiraz'] içindeki her meyve için
yaz(meyve.BüyükHarf + ' ')
yaz('', 1)
// kır ve devam
1'den 20'ye kadar her i için
başla
eğer i mod 3 = 0 ise devam // 3'ün katlarını atla
eğer i > 10 ise kır // 10'u geçince döngüden çık
yaz(i + ' ')
bitir
yaz('', 1)
bitir.9875 sayısının basamakları toplamı: 29
ELMA ARMUT KİRAZ
1 2 4 5 7 8 10tekrarla … olana dekgövdesinde birden çok komut olabilir,başla … bitirgerekmez.devamdöngünün o turunu atlayıp bir sonrakine geçer;kırdöngüyü tamamen bitirir.BüyükHarfTürkçe kurallarını bilir:kiraz→KİRAZ.
Belirli sayıda tekrar: kez tekrarla
program Yıldızlar
değişken
satır: tamsayı
başla
1'den 4'e kadar her satır için
başla
satır kez tekrarla yaz('*')
yaz('', 1)
bitir
bitir.*
**
***
****satır kez tekrarla yaz('*') yıldızı satırın numarası kadar yazar. Bir sayaca ihtiyacınız yoksa en kısa ve en doğal biçim budur.
Alıştırmalar
- 1’den 100’e kadar sayıları yazan, ama 3’ün katları yerine
Fizz, 5’in katları yerineBuzz, ikisinin de katları yerineFizzBuzzyazan bir program yazınız. - Kullanıcıdan 0 girilene kadar sayılar okuyup en sonda toplamı ve ortalamayı yazan bir program yazınız.