back to top

C++ 5.Ders (Akış Kontrolü)

Bu yazıda programlama süreçlerinde, programın belirli kontroller neticesinde ne yapacağına karar vermesini, çeşitli döngülere girmesini, ihtiyacımız doğrultusunda yönlendirilmesini sağlayan akış kontrolü konusundan bahsedeceğim. Ayrıca konunun anlatımının daha anlaşılır olabilmesi için pek çok kod örneği de yazı içerisinde mevcuttur.

Koşul İfadeleri

if-else

if-else yapısı ile bir durum gerçekleştiğinde veya gerçekleşmediğinde programın hangi işlemi yapacağını tanımlayabiliriz. if-else yapılarını operatörler ile birlikte kullanarak, daha karmaşık kontrol işlemlerini yerine getirebilirsiniz. Aşağıda if-else yapılarının temel çalışma mantığına yer verilmiştir. Sadece birer adet if ve else kullanarak daha basit, sadece bir durumun gerçekleşip gerçekleşmediğini kontrol eden bir kullanımda sağlayabilirsiniz. Ayrıca if-else yapılarını birbiri içerisinde de tanımlayabilirsiniz. if-else her ne kadar kullanışlı olsa da gereksiz yere çok fazla kullanılması, program geliştirme süreçlerinizi altından kalkılamaz bir hale getirebilir.

if ( şart 1 ) { şart 1 sağlanırsa gerçekleşecek işlem} else if ( şart 2 ) { şart 2 sağlanırsa gerçekleşecek işlem} else if ( şart 3 ) { şart 3 sağlanırsa gerçekleşecek işlem} … else { eğer şartlardan hiçbiri sağlanmazsa gerçekleşecek işlem}

Aşağıdaki kod bloğunda, std::cin >> x ifadesi yardımı ile istediğimiz değerleri atadığımız a, b ve c değişkenlerini kullanarak, if-else yapısı yardımı ile gerçekleşecek işlemi seçmemiz sağlanmıştır.

#include <iostream>

void main()
{
	double a, b;
	char c;
	std::cout << "isleme girecek birinci degeri giriniz:" << std::endl;
	std::cin >> a;
	std::cout << "toplama icin +, cikarma icin -, carpma icin *, bolme icin /:" << std::endl;
	std::cin >> c;
	std::cout << "isleme girecek ikinci degeri giriniz:" << std::endl;
	std::cin >> b;
	if (c == '+') { 
		std::cout << "sonuc:" << a + b;
	}
	else if (c == '-') {
		std::cout << "sonuc:" << a-b;
	}
	else if (c == '*') {
		std::cout << "sonuc:" << a*b;
	}
	else if (c == '/') {
		std::cout << "sonuc:" << a/b;
	}
	else {
		std::cout << "islem hatali";
	}
}

Yukarıdaki kodu çalıştırdıktan sonra klavyeden sırasıyla 3,/,5 girip enter’a basmanız halindeki ekran çıktısı: isleme girecek birinci degeri giriniz:
3
toplama icin +, cikarma icin -, carpma icin *, bolme icin /:
/
isleme girecek ikinci degeri giriniz:
5
sonuc:0.6

Yukarıdaki kodu çalıştırdıktan sonra klavyeden sırasıyla 10,a,18 girip enter’a bastığınızdaki ekran çıktısı: isleme girecek birinci degeri giriniz:
10
toplama icin +, cikarma icin -, carpma icin *, bolme icin /:
A
isleme girecek ikinci degeri giriniz:
18
islem hatali

Aşağıdaki kod bloğunda, std::cin >> x ifadesi yardımı ile istediğimiz değerleri atadığımız a, b ve c değişkenlerini kullanarak, if-else yapısı yardımı ile gerçekleşecek işlemi seçmemiz sağlanmış ve iç içe if-else yapısı oluşturularak karar yapısının ayrıntısı artırılmıştır.

#include <iostream>

void main()
{
	double a, b;
	char c;
	std::cout << "isleme girecek birinci degeri giriniz:" << std::endl;
	std::cin >> a;
	std::cout << "toplama icin +, cikarma icin -, carpma icin *, bolme icin /:" << std::endl;
	std::cin >> c;
	std::cout << "isleme girecek ikinci degeri giriniz:" << std::endl;
	std::cin >> b;
	if (c == '+') {
		std::cout << "toplama islemi yapmak istediginize eminseniz + yazin:" << std::endl;
		std::cin >> c;
		if (c == '+') {
			std::cout << "sonuc:" << a + b;
		}
		else {
			std::cout << "islem iptal edildi";
		}
	}
	else if (c == '-') {
		std::cout << "cikarma islemi yapmak istediginize eminseniz - yazin:" << std::endl;
		std::cin >> c;
		if (c == '-') {
			std::cout << "sonuc:" << a - b;
		}
		else {
			std::cout << "islem iptal edildi";
		}
	}
	else if (c == '*') {
		std::cout << "carpma islemi yapmak istediginize eminseniz * yazin:" << std::endl;
		std::cin >> c;
		if (c == '*') {
			std::cout << "sonuc:" << a * b;
		}
		else {
			std::cout << "islem iptal edildi";
		}
	}
	else if (c == '/') {
		std::cout << "bölme islemi yapmak istediginize eminseniz / yazin:" << std::endl;
		std::cin >> c;
		if (c == '/') {
			std::cout << "sonuc:" << a / b;
		}
		else {
			std::cout << "islem iptal edildi";
		}
	}
	else {
		std::cout << "islem hatali";
	}
}

Yukarıdaki kodu çalıştırdıktan sonra klavyeden sırasıyla 8, -, 1, – girip enter’a bastığınızdaki ekran çıktısı: isleme girecek birinci degeri giriniz:
8 toplama icin +, cikarma icin -, carpma icin *, bolme icin /: – isleme girecek ikinci degeri giriniz:
1 cikarma islemi yapmak istediginize eminseniz – yazin: – sonuc:7

Yukarıdaki kodu çalıştırdıktan sonra klavyeden sırasıyla 8, -, 1, E girip enter’a bastığınızdaki ekran çıktısı: isleme girecek birinci degerleri giriniz:
8 toplama icin +, cikarma icin -, carpma icin *, bolme icin /: – isleme girecek ikinci degerleri giriniz:
1 cikarma islemi yapmak istediginize eminseniz – yazin: E islem iptal edildi

Aşağıdaki kod bloğunda, std::cin >> a ifadesi yardımı ile istediğimiz değeri atadığımız a değişkenini kullanarak, sistemin a değişkenin değerine göre yapacağı işleme karar vermesi sağlanmıştır.

#include <iostream>

void main()
{
	double a;
	std::cout << "uretilecek parca adetini giriniz:" << std::endl;
	std::cin >> a;

	if ( a >= 0 && a <= 10) {
		std::cout << "adet sistemin calısma maliyeti için cok duşuk.";
	}
	else if (a > 10 && a < 100) {
		std::cout << a << " adet urunun uretimi baslatilmistir.";
	}
	else if (a >= 100) {
		std::cout << "adet sistemin uretmesi için cok fazla.";
	}
	else {
		std::cout << "deger hatalı";
	}
}

Yukarıdaki kodu çalıştırdıktan sonra klavyeden 69 sayısını girip enter’a bastığınızdaki ekran çıktısı: uretilecek parca adetini giriniz:
69
69 adet urunun uretimi baslatilmistir.

switch-case

if-else yapısına benzer bir kullanımı vardır. switch-case yapısı kullanılırken, program switch parantezi içerisinde yer alan değişkenin içindeki veriye göre ilgili durumu bulur ve çalıştırır. case yani durum ifadelerinden sonra break komutunu kullanmak gerekir, aksi takdirde sonrasındaki bütün durumlar çalıştırılır. break komutu ile sistemin içinde bulunduğu işlemden çıkmasını sağlayabilirsiniz. default yapısı durumlardan hiçbiri sisteme giren veriler ile eşleşmez işe gerçekleştirilecek alternatif işlemdir.

Aşağıdaki kod ile klavyeden girilen işarete göre, program uygun olan case’i yani durumu bularak, o case’i çalıştırmaktadır. Uygun case çalıştıktan sonra, program break’e düşmekte ve switch yapısından çıkarak switch yapısının devamındaki ifade dizinini çalıştırmaya devam etmektedir.

#include <iostream>

void main()
{
	char operasyon;
	int a, b;
	std::cout << "isleme girecek birinci degeri giriniz:" << std::endl;
	std::cin >> a;
	std::cout << "toplama icin +, cikarma icin -, carpma icin *, bolme icin /, alfa islemi icin A:" << std::endl;
	std::cin >> operasyon;
	std::cout << "isleme girecek ikinci degeri giriniz:" << std::endl;
	std::cin >> b;

	switch (operasyon)
	{
	case '+':
		std::cout << a << "+" << b << "=" << a + b;
		break;
	case '-':
		std::cout << a << "-" << b << "=" << a - b;
		break;
	case '*':
		std::cout << a << "*" << b << "=" << a * b;
		break;
	case '/':
		std::cout << a << "/" << b << "=" << a / b;
		break;
	case '%':
		std::cout << a << "%" << b << "=" << a % b;
		break;
	case 'A':
		std::cout << a << "-" << b << "-" << a << "+" << b << "=" << a - b - a + b;
		break;
	default:
		std::cout << "hatalı işlem girişi";
	}

	std::cout << std::endl << "switch islemi bitti.";
}

Yukarıdaki kodu çalıştırdıktan sonra klavyeden sırasıyla 10, A, 18 girip enter’a bastığınızdaki ekran çıktısı: isleme girecek birinci degeri giriniz:
10
toplama icin +, cikarma icin -, carpma icin *, bolme icin /, alfa islemi icin A:
A
isleme girecek ikinci degeri giriniz:
18
10-18-10+18=0
switch islemi bitti.

Döngüler

For

For döngüsü yardımı ile belirli bir değerden başlayarak, belirli bir şart sağlandığı sürece belirtilen ilerleme miktarınca değişken değerini artırarak, içerisindeki işlemi şart sağlandığı sürece gerçekleştiren bir yapı oluşturulabilir. Ayrıca for döngülerini birbiri içerisinde de tanımlayabilirsiniz. Aşağıda for döngüsünün temel çalışma mantığına yer verilmiştir.

for ( değişken başlangıç değeri; döngünün gerçekleşme şartı; değişken artış miktarı ) { şart sağlandığı sürece gerçekleştirilecek işlem }

Aşağıdaki örnek kod ile ekrana 1 2 3 4 5 yazdırılmıştır.

#include <iostream>

void main()
{
	for (int i = 1; i <= 5; i++)
	{
		std::cout << i << " ";
	}
}

Aşağıda iç içe for döngüleri tanımlanarak, 6*6’lık bir alana sağ yarım piramit şekli çizdirilmiştir.

#include <iostream>

void main()
{
	int z = 7;
	int* zptr = &z;
	for (int y = 1; y <= 6; y++)
	{
		z-=2;
		for (int z = *zptr ; z <= 6; z += 2)
		{
			std::cout << "*";
		}
		std::cout << std::endl;
	}
}

While

While döngüsünde bir şart vardır ve bu şart yerine geldiği sürece döngü devam eder.

Aşağıdaki kod ile ekrana yan yana on tane yıldız yazdırılır.

#include <iostream>

void main()
{
	int x = 0;
	while ( x < 10) {
		x++;
		std::cout << "*";
	}
}

while (true) veya while ( 0==0 ) gibi her zaman doğru çıkacak bir koşul oluşturursanız sonsuz bir döngü elde edebilirsiniz. Aynı şekilde while (false) veya while ( 0==1 ) gibi hiç bir zaman sağlanmayacak bir koşul oluşturursanız döngünüz hiçbir zaman çalışmayacaktır. Aşağıdaki kod ile ekrana sonsuz defa 0100010101110010 yazdırılacaktır.

#include <iostream>

void main()
{
	while (true) {
		std::cout << "0100010101110010 ";
	}
}

Aşağıdaki kod içerisinde while ve for döngülerini birlikte kullanarak, sağa doğru yönelen projektör ışığı şeklinde bir görüntü oluşturduk.

#include <iostream>

void main()
{
	int y(0), z(12), x(0);
	while (y <= 6)
	{
		y++;
		z-=2;
		x++;
		int* xptr = &x;
		int* zptr = &z;
		for ( int x = *xptr; x >= 0; x--) {
			std::cout << " ";
		}
		for ( int z = *zptr; z <= 12; z++) {
			std::cout << "*";
		}
		for (int x = *xptr; x >= 0; x--) {
			std::cout << " ";
		}
		std::cout << std::endl;
	}
}
Yukarıdaki kodun ekran çıktısı aşağıdaki gibidir:                                                                              
  ***
   *****
    *******
     *********
      ***********
       *************                                                                                           
        ***************

Do While

Do while döngüsünün while döngüsünden farkı, while döngüsünde her döngüden önce işlemin gerçekleşip gerçekleşmeyeceği kontrol edilirken, do while döngüsünde içerdeki işlem bir kere yapıldıktan sonra döngü işlemin gerçekleşip gerçekleşmeyeceğini kontrol etmeye başlar.

Aşağıdaki döngü bir while döngüsü olsaydı hiç çalışmaması gerekirdi ama bu döngü bir do while döngüsü olduğu için ekrana bir kere dongu calisti yazdırıldı.

#include <iostream>

void main() 
{
	do{
		std::cout << "dongu calisti";
	} while (false);
}

Continue Break Goto

Program continue komutunu görünce içerisinde bulunduğu döngünün başına döner. Program break komutunu görünce programı içinde bulunduğu döngüden çıkarır. Program goto komutunu görünce goto komutunun yanında yazan etiketin bulunduğu yere programın atlamasını ve o noktadan itibaren ilgili işlemleri gerçekleştirmesini sağlar.

Aşağıdaki kod ile continue, break ve goto kullanımı aynı örnek içerisinde ele alınmıştır.

#include <iostream>

void main()
{
	char a;
	while (true) {
		std::cout << "11111111";
		d:
		std::cin >> a;
		if ( a == 'c') {
			continue;
		}
		else if (a == 'b') {
			break;
		}
		else if (a == 'g') {
			goto d;
		}
		std::cout << "00000000" << std::endl;
	}
	std::cout << "stop";
}

Yukarıdaki kodu çalıştırıp klavyeden sırasıyla c, c, g, g, c, T, q, b girip enter’a bastığınızdaki ekran çıktısı: 11111111c
11111111c
11111111g
g
c
11111111T
00000000
11111111q
00000000
11111111b
stop

Bir sonraki dersimizde görüşmek üzere…

Önceki İçerik
Sonraki İçerik

Son Çıkan Yazılar

1 Yorum

  1. hey there and thank you for your information – I have definitely picked up anything new from right here. I did however expertise a few technical points using this site, as I experienced to reload the web site a lot of times previous to I could get it to load correctly. I had been wondering if your hosting is OK? Not that I am complaining, but sluggish loading instances times will sometimes affect your placement in google and can damage your quality score if advertising and marketing with Adwords. Anyway I am adding this RSS to my email and can look out for much more of your respective exciting content. Ensure that you update this again very soon..

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz