Tekrarlayan işleri döngüyle yap: for ile Ohm tablosu, while ile kapasitör boşalması, break ve continue.
Aynı işlemi yüz kez yapman gerekirse yüz satır yazmazsın; bir döngü yazarsın. C++'ta üç temel döngü vardır: for, while ve do-while. Hangisini seçeceğin, kaç kere döneceğini önceden bilip bilmediğine bağlı.
for: sayısı belli tekrar
for üç parçalıdır: başlangıç, koşul ve her turdan sonra yapılacak adım. Sabit 12 V'luk bir kaynağa 1'den 5 ohm'a kadar direnç bağladığımızı düşün:
#include <iostream>
int main() {
for (int r = 1; r <= 5; ++r) {
double akim = 12.0 / r;
std::cout << "R=" << r << " ohm -> I=" << akim << " A\n";
}
// while: sayisi belli olmayan tekrar (kapasitor bosalmasi)
double v = 5.0;
int adim = 0;
while (v > 1.0) {
v *= 0.5;
++adim;
std::cout << "adim " << adim << ": " << v << " V\n";
}
// continue: ciftleri atla, tek sayilari topla
int toplam = 0;
for (int i = 1; i <= 10; ++i) {
if (i % 2 == 0) {
continue;
}
toplam += i;
}
std::cout << "Tek sayilar toplami: " << toplam << '\n';
return 0;
}
R=1 ohm -> I=12 A
R=2 ohm -> I=6 A
R=3 ohm -> I=4 A
R=4 ohm -> I=3 A
R=5 ohm -> I=2.4 A
adim 1: 2.5 V
adim 2: 1.25 V
adim 3: 0.625 V
Tek sayilar toplami: 25
for döngüsünün parçaları
- int r = 1: döngü başlamadan bir kez çalışır.
- r <= 5: her turdan önce kontrol edilir. Yanlışsa döngü biter.
- ++r: her turun sonunda çalışır.
r değişkeni yalnızca döngü içinde yaşar. Döngüden sonra erişmeye çalışırsan derleme hatası alırsın. ++r ile r++ sayaç olarak aynı işi görür; alışkanlık olarak önek biçimi tercih edilir.
while: koşul bitene kadar
Kapasitörün her adımda yarıya düştüğünü varsayan basit bir model yazdık. Kaç adım süreceğini önceden bilmiyoruz, sadece "1 V'un altına inene kadar" diyoruz; bu while için tipik bir durumdur. Koşul döngüye girmeden önce kontrol edilir. İlk kontrol yanlışsa gövde hiç çalışmaz.
do-while: en az bir kez
do-while koşulu turun sonunda sınar; yani gövde en az bir kez çalışır. Kullanıcıdan geçerli bir değer isterken kullanışlıdır:
int deger = 0;
do {
std::cout << "1-10 arasi bir sayi gir: ";
std::cin >> deger;
} while (deger < 1 || deger > 10);
Bu örnekte hatalı giriş yapıldığında soru tekrar sorulur. (Harf girişine karşı std::cin onarımı da gerekir; önceki dersteki clear ve ignore burada işe yarar.)
break ve continue
break: döngüyü hemen sonlandırır.continue: kalan satırları atlayıp bir sonraki tura geçer.
Yukarıdaki örnekte continue çift sayıları atladı: 1+3+5+7+9 = 25.
İç içe döngüler
Bir döngünün içine başka bir döngü yazabilirsin. Dıştaki bir kez dönerken içteki baştan sona döner. Çarpım tablosu ya da iki boyutlu veri taramak için kullanılır. Toplam tur sayısı, döngülerin tur sayılarının çarpımıdır: 100 x 100 iç içe döngü 10.000 tur eder.
Sonsuz döngü: koşulu hiç yanlış olmayan döngü programı kilitler. while (v > 1.0) döngüsünde v'yi değiştirmeyi unutursan sonsuza kadar döner. Gömülü sistemlerde bilinçli sonsuz döngü (while (true)) ana programın kendisidir; ama orada da her turda bir iş yapılır ve sistem takılmaz.
Ondalıklı sayaçla döngü kurma (for (double x = 0; x != 1.0; x += 0.1)). Birikmiş yuvarlama hatası yüzünden x hiçbir zaman tam 1.0 olmayabilir ve döngü bitmez. Sayaç için int kullan, ondalıklı değeri döngü içinde hesapla.
Kendin dene
- 1'den 100'e kadar sayıların toplamını
forile hesapla. (Cevap 5050 olmalı.) - Ohm tablosunu 24 V ve 10 ohm'dan başlayıp 10'ar artan dirençlerle yazdır.
- Kapasitör örneğinde başlangıç gerilimini 10 V yap; kaç adımda 1 V'un altına indiğini bul.
breakkullanarak 1'den başlayan sayılarda karesi 200'ü geçen ilk sayıyı bul.
// Mini sınav
Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.
Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.
İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.