Aynı işlemi tekrar tekrar yapmak istiyorsak döngüleri kullanıyoruz.

goto

goto deyimi bir satırdan başka bir satıra atlamak için kullanılır. Aşağıdaki kodda loop: bir etikettir. Etikette farklı bir isim de kullanabiliriz. goto loop; ifadesin çalıştığında programımız etiketin bulunduğu satırdan çalışmaya devam edecek.

#include <iostream>
using namespace std;

int main() {
	int sayac = 0; 

loop:
	cout << sayac << endl;
	sayac++;

	if (sayac < 5) goto loop;

}
// Çıktı: 
// 0
// 1
// 2
// 3
// 4

goto deyimini yasak elma gibi düşünebilirsiniz. Evet goto yu kullanabilirsiniz ama bu devamında sizi cennetten atabilir.

https://stackoverflow.com/questions/24451/are-there-any-legitimate-use-cases-for-goto-in-a-language-that-supports-loops

while

En basit döngümüzden başlayalım.

while(koşul){
  //kodlar
}

Koşul doğru oldukça kodlar tekrar tekrar çalışacaktır. Aşağıdaki döngü sonsuza kadar duraksamadan çalışacaktır. Böyle bir durumda konsol ekranında CTRL+C tuşlarına basarak interrupt sinyali gönderip programı sonlandırabilirsiniz.

	int i = 0; 
	while (true){
		cout << i++ << "\n";
	}

Şimdi [0,10) aralığındaki sayıları yazdıralım

	int i = 0; 
	while (i<10){
		cout << i << "-";
		i++;
	}
// 0-1-2-3-4-5-6-7-8-9-

şimdi ise bir üçgen yazdıralım

	int i = 1; 
	while (i<10){

		int j = 0;
		while (j < i) {
			cout << "*";
			j++;
		}

		cout << "\n";
		i++;
	}
	
// *
// **
// ***
// ****
// *****
// ******
// *******
// ********
// *********

for

while döngüsünün daha kompakt halidir. Aşağıdaki her iki döngü aynı işi yapacaktır.

int main() {
	int i = 0;
	while (i < 10) {
		cout << i << "-";
		i++;
	}
	cout << endl;
	for (int i = 0; i < 10; i++) {
		cout << i << "*";
	}
}

yapısı

for(ilk değer ataması; koşul; son-ifade){
  // kodlar
}
  • İlk değer atamasında döngüde kullanacağımız değişkenleri atıyoruz
  • daha sonra döngü koşulumuzu yazıyoruz
  • en sonunda ise her döngü çevriminin sonunda çalışacak ifadeyi yazıyoruz.

break & continue

şimdi 1 den 100 e kadar olan asal sayıları bulalım:

#include <iostream>
using namespace std;

int main() {
	for (int i = 2; i <= 100; i++) { // 2 den 100 e kadar tek tek gidiyoruz

		bool kontrol = true; 
		// Eğer sayı kendisi ve 1 den başka bir sayıya bölünmüyorsa asaldır
		for (int j = i-1; j >= 2; j--)
			if (i % j == 0) { // i nin j ye bölümünden kalan 0 ise 
				kontrol = false; 
				break; // donguden çık 
			}
		
		// Eğer asalsa ekrana bastır
		if (kontrol)
			cout << i << ", ";
	}
}

burada break ifadesi çalıştığında içinde bulunduğu döngüden çıkar. Artık döngüye geri dönmez.

	int i = 0; 
	while (true){
		cout << i++ << ", ";

		if (i > 10)
			break;
	}
	
	// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

Yukarıdaki örnekte her adımda/iterasyonda i değeri 1 artar. Eğer i değeri 10 dan büyük olursa break ifadesi çalışır ve döngüden çıkar. Bu örneğimize continue deyimini de ekleyelim.

int main() {
	int i = 0; 
	while (true){
		i++; 

		if (i % 2 == 0) // eğer i nin ikiden bölümünden kalan 0 ise
			continue; // bu adımı atla 
			
		cout << i << ", ";

		if (i > 10)
			break;

	}
}
//1, 3, 5, 7, 9, 11,

continue deyimi break deyiminin tek bir adım/iterasyon için olanıdır. O iterasyon atlanır ve sonraki iterasyondan kaldığı gibi devam edilir.

do while

while döngüsünün en az bir kere çalışan hali.

int main() {
	do{
		cout << "do-while" << endl;
	} while (false);
}
// do-while

Yukarıdaki kodla aşağıda kod aynı:

	cout << "do-while" << endl;
	while (false) {
		cout << "do-while" << endl;

	}

Farkettiyseniz aynı satırı 2 kere yazmak mecburiyetinde kaldık. İşte bu durumu önlemek için do-while döngüsü var.

range based for loop

liste şeklindeki yapıların elemanlarını sıralı bir şekilde çeker. Örneğin:

#include <iostream>
#include <vector>
using namespace std;

int main() {
	vector<int> vec{ 5,10,12,13,27,321 };

	for (int i : vec)
		cout << i << ", ";
	// 5, 10, 12, 13, 27, 321,
}

Tabi merak edip kurcalarsanız şu durumu farkedeceksiniz. i=5; gibi bir ifade vector içindeki değişkenleri değşitirmeyecektir. Çünkü aslında arka planda bir koplayama oluyordur. Bunu önlemek için şu şekilde yazıyoruz:

	vector<int> vec{ 5,10,12,13,27,321 };

	for (int& i : vec)
		i = 5; 

	for (int& i : vec)
		cout << i << ", ";
		
// 5, 5, 5, 5, 5, 5,


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *