arkaplan

C Programlama Dili İç İçe Döngüler

Merhaba arkadaşlar, bir önceki yazımızda c programla dilinde döngülerderden bahsetmiştik, bu yazımızda ise bu döngülerin nasıl iç içe kullanılabileceğinden bahsedeceğiz. Öncelikle daha önceki döngüler yazımızı okumadıysanız öncelikli olarak o yazıyı okuyup daha sonra bu yazıya geçiş yapmanız konuyu anlamanız açısından daha verimli olacaktır.

Programlama aşamalarında genellikle tek bir döngü kullanmak özellikle de gelişmiş bir şeyler yazmaya çalışırken bize yeterli olmaz ve bu durumlarda iç içe döngüler kullanmamız gerekebilir, örneğin bir for döngüsünün içerisinde başka bir for döngüsü veya bir while döngüsünün içerisinde başka bir while döngüsü bulunabileceği gibi bir for döngüsünün içerisinde bir while döngüsü veya bir while döngüsünün içerisinde de bir for döngüsü bulunabilir, iç içe istediğiniz kadar döngü kullanabilirsiniz. İç içe döngülerde unutmamanız gereken tek şey işlemler yapılırken öncelikli olarak içte ki döngü tamamlanır daha sonra dışta ki döngüye geçilir, olayın temel mantığı budur. Bunu daha iyi anlamanız için aşağıda ki örneği inceleyelim.

REKLAM

#include <stdio.h>
int main(){
	int i,j;
	for (i=0;i<3;i++){
		for (j=0;j<3;j++){
			printf("i degeri = %d - j degeri = %d \n",i,j);
		}
	}
        return 0;
}

İnceleyeceğimiz programa ait kaynak kod yukarıda ki gibidir, çıktısı ise aşağıda ki gibi olacaktır. Kodun mantığından bahsetmek gerekirse, öncelikli olarak görebileceğiniz gibi iç içe iki tane for döngüsü kullanılmış, bu durumda az önce yukarıda da bahsettiğimiz gibi içte ki for döngüsü tamamlanacak daha sonra dışta ki for döngüsü tamamlanacaktır.  Kodun çalışma şekli;

  1. Öncelikli olarak i=0 değeri için program dışta ki döngüye girdi ve içte ki döngü ile karşılaştı.
  2. Bu noktada j=0 değerini aldı ve i,j değerlerini ekrana yazdırdı, daha sonra içte ki döngünün indisi (j değeri) bir artarak 1 değerini aldı ve tekrar i,j değerleri ekrana yazdırıldı, son olarak da içte ki döngünün indisi 2 değerini aldı ve i,j değerleri ekrana yazdırıldıktan sonra içte ki for döngüsü tamamlandı ve dışta ki döngüye tekrar geçildi.
  3. Bu noktada ise i indisi bir artarak i=1 değerini aldı ve bu değer içinde içteki döngüye girerek yukarıda ki işlemleri gerçekleştirdi ve i,j değerlerini ekrana yazdırdı.
  4. Son olarak da dışta ki döngü de i=2 değerini aldı ve madde ikideki işlemleri tekrar gerçekleştirdi, bu sayede dışta ki döngü de tamamlanmış oldu ve program sona erdi.
i degeri = 0 - j degeri = 0
i degeri = 0 - j degeri = 1
i degeri = 0 - j degeri = 2
i degeri = 1 - j degeri = 0
i degeri = 1 - j degeri = 1
i degeri = 1 - j degeri = 2
i degeri = 2 - j degeri = 0
i degeri = 2 - j degeri = 1
i degeri = 2 - j degeri = 2

Şimdide satır ve sütun sayısı kullanıcı tarafından girilecek olan ve ekrana girilen değerlere göre c dilinde çarpım tablosu oluşturan örneğimizi inceleyelim.

#include <stdio.h>
int main(){
	int i,j,satir,sutun;
	printf("Satir Sayisi: ");
	scanf("%d",&satir);
	printf("Sutun Sayisi: ");
	scanf("%d",&sutun);
	for (i=1;i<=satir;i++){
		for (j=1;j<=sutun;j++){
			printf("%dx%d=%d	", i, j, i*j);
		}
		printf("\n");
	}
        return 0;
}

Kullanıcının gireceği satır sayısının 10, sütun sayısının 5 olduğunu kabul edersek, oluşacak olan çıktı aşağıda ki gibi gözükecektir. Sonuçlardan da görebileceğiniz gibi, öncelikle dış tarafta ki for döngüsü i=1 (çarpım tablosu oluşturduğumuz için i vej değerlerini 0 yerine 1 den başlattık.) değerini alıyor ve daha sonra da program içte ki döngüye geçerek j değerinin sırasıyla 1,2,3,4,5 almasını sağlıyor ve her değerde ilgili çarpım değeri hesaplanıp ekrana yazdırılıyor, içteki döngü tamamlandıktan sonra ise i değeri 1 arttırılıyor ve oluşan yeni i değeri için içte ki döngü tekrar çalıştırılıyor, bu sayede de aşağıda ki çıktı da görebileceğiniz bir çarpım tablosu oluşturabiliyoruz.

Satir Sayisi: 10
Sutun Sayisi: 5
1x1=1           1x2=2           1x3=3           1x4=4           1x5=5
2x1=2           2x2=4           2x3=6           2x4=8           2x5=10
3x1=3           3x2=6           3x3=9           3x4=12          3x5=15
4x1=4           4x2=8           4x3=12          4x4=16          4x5=20
5x1=5           5x2=10          5x3=15          5x4=20          5x5=25
6x1=6           6x2=12          6x3=18          6x4=24          6x5=30
7x1=7           7x2=14          7x3=21          7x4=28          7x5=35
8x1=8           8x2=16          8x3=24          8x4=32          8x5=40
9x1=9           9x2=18          9x3=27          9x4=36          9x5=45
10x1=10         10x2=20         10x3=30         10x4=40         10x5=50

Şimdi de iç içe iki farklı döngü çeşidinin kullanımına göz atalım, örneğin aşağıda ki gibi bir görüntüyü iç içe döngü kullanarak elde etmeye çalışalım.

Satir Sayisi: 10

 *
 *  *
 *  *  *
 *  *  *  *
 *  *  *  *  *
 *  *  *  *  *  *
 *  *  *  *  *  *  *
 *  *  *  *  *  *  *  *
 *  *  *  *  *  *  *  *  *

Öncelikle görebileceğiniz gibi 10 adet satırdan oluşan bir dik ikizkenar üçken elde ediliyor, ikizkenar dik üçgeni elde etmek için takip etmemiz gereken mantık şu şekilde olacaktır;

  • Her satırla beraber i değeri artıyor ancak her satırda sadece i değeri kadar * sembolü gösteriliyor, yani 1. satırda bir tane * sembolü, 2. satırda 2 tane * sembolü şeklinde bir algoritma geliştirmemiz lazım.
  • Öncelikle kullanacağımız döngülere karar vermemiz lazım, satır sayısı görebileceğiniz gibi kullanıcıdan alındığı yani sonu belli bir değer olduğu için satırları oluşturmak için for döngüsü kullanmalıyız, diğer yandan sütunlarda ise * sembolü sayısı satır sayısına bağlı olduğu için belli bir sabit son değere sahip değildir ve karşılaştırma işlemi gerektiği için while döngüsü kullanmamız uygun olacaktır.
  • Dış döngüde for yapısını, iç döngüde ise while yapısını kullanmaya karar verdikten sonra artık işlemlere geçebiliriz, dışta ki for  döngüsünün değerinin sırasıyla artarak kullanıcının girdiği değere kadar gideceğini biliyoruz, içte ise while döngüsünü çalıştırmak için yani * sembolünü ekrana bastırmak için bir şart kullanmamız gerekiyor, bu örnekte ise görebileceğiniz gibi içte ki döngünün indisi dıştaki döngünün indisinden küçük olduğu sürece ekrana * sembolünü basıyor, yani while döngüsünün şartı bu olmalı, eğer şart sağlanıyor ise döngüye girilmeli ve indis değeri şart sağlanmayana kadar birer birer arttırılmalıdır.
  • Oluşması gereken kod aşağıda ki gibi olacaktır.
#include <stdio.h>
int main(){
	int i,j,satir;
	printf("Satir Sayisi: ");
	scanf("%d",&satir);
	for (i=0;i<satir;i++){
		j=0;
		while (j<i){
			printf(" * ");
			j++;
		}
		printf("\n");
	}
        return 0;
}

Böylelikle bu dersimizinde sonuna geldik, iç içe döngüler daha çok iki ders sonra göreceğimiz matris yapıları ile birlikte sıkça görülmektedir, eğer konu hakkında daha fazla örneğe ihtiyaç duyarsanız c dili örnek sorular kategorisinden daha fazla örneğe ulaşabilirsiniz, bir sonra ki dersimizde dizilerden bahsedeceğiz.