İçeriğe geç

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

Yöntem
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.
Çıktı
   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

Yöntem
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.
Çıktı
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

Yöntem
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.
Çıktı
9875 sayısının basamakları toplamı: 29
ELMA ARMUT KİRAZ
1 2 4 5 7 8 10

Belirli sayıda tekrar: kez tekrarla

Yöntem
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.
Çıktı
*
**
***
****

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. 1’den 100’e kadar sayıları yazan, ama 3’ün katları yerine Fizz, 5’in katları yerine Buzz, ikisinin de katları yerine FizzBuzz yazan bir program yazınız.
  2. Kullanıcıdan 0 girilene kadar sayılar okuyup en sonda toplamı ve ortalamayı yazan bir program yazınız.