İç içe döngüler (Nested Loops)

Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerinde hemen hemen bütün programlama dillerinde kullanılan döngülerin iç içe kullanılmasına (kucak kucağa, nested) verilen isimdir. Buna göre bir döngü (loop) bir dönüşünü tamamlamadan diğer bir veya birkaç döngü dönme işlemi gerçekleştirebilir.

Örneğin aşağıdaki kod parçasını ele alalım:

for(int i = 0 ;i<5;i++){ // dış döngü

for(int j = 0;j<5;j++){ //iç döngü

işlem

}

}

Yukarıdaki kodda, işlem satırı toplamda 25 kere çalışacaktır. Bunun sebebi dıştaki döngünün her dönüşünde içteki döngünün tam dönüş yapmasıdır. Yani dıştaki döngü toplamda 5 dönüş yapacaktır ancak her dönüşünde içerideki döngü de 5 kere dönecektir.

İç içe döngüler genellikle çok boyutlu işlemlerde kullanılır. Örneğin ekrana basit bir kara çizdiren kod yazılmak isteyelim:

for(int i = 0 ;i<5;i++){ // dış döngü

for(int j = 0;j<5;j++){ //iç döngü

printf(“*”);

}

printf(“\n”);

}

Yukarıdaki C kodunda ekrana aşağıdaki kare basılır:

*****

*****

*****

*****

*****

Yukarıdaki 5 x 5 boyutlarındaki kare için toplam 25 yıldız basılmıştır. Bu yıldızların her satırı için içerideki döngü bir tam dönüş yapar, ardından iç döngü biterek alt satıra geçirme kodu olan printf(“\n”); satırı çalışır. Sonra dışarıdaki döngü bir dönüş daha yapar. Dışarıdaki döngünün her dönüşünde bir satır basılır.

Yukarıdaki kare için döngü kodunda i değişkeni (dıştaki döngü) satırları ve j değişkeni (içteki döngü) sütunları belirler.

Yukarıdaki örnekten anlaşılacağı üzere 2 boyutlu bir kare bastırmak için iç içe iki döngü şarttır. Tek bir döngüyle yukarıdaki işlem yapılamaz. Her ne kadar döngülerdeki esneklik yukarıdaki kodu tek döngü ile yapmamıza izin verse de kodlama mantığı aslında iki döngü olarak çalışır.

Örneğin iki boyutlu bir dizi (array) işlemek için de benzeri bir şekilde iç içe iki döngü kullanılması gerekir:

for(int i = 0 ;i<5;i++){ // dış döngü

for(int j = 0;j<5;j++){ //iç döngü

printf(“%d”,a[i][j]);

}

printf(“\n”);

}

Yukarıdaki kodda, a isminde iki boyutlu dizinin (array) içeriği ekrana basılmıştır. Dizinin indisleri olan i ve j döngüler tarafından belirlenmekte ve her seferinde değiştirilmektedir.

Yukarıdaki örneğe benzer şekilde 4 boyutlu bir diziyi ekrana bastırmak istersek:

for(int i = 0 ;i<5;i++){

for(int j = 0;j<5;j++){

for(int k=0;k<5;k++){

for(int l = 0;l<5;l++){

printf(“%d”,a[i][j][k][l]);

}

}

}

}

Yukarıdaki kod 4 boyutlu 5x5x5x5 boyutlarına sahip bir diziyi ekrana basmaya yaramaktadır. Görüldüğü üzere yapılan işin boyut sayısı arttıkça kullanılan döngü sayısı da paralel olarak artmaktadır.

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


1,002 views

4 responses to “İç içe döngüler (Nested Loops)”
  1. hilkat says:

    ıyı gunler,
    ben java ıle chat programı yapmak ıstıyorum.nelerı kullanmam gerekıyor.aynı zamanda sayfa ıcerısıne oyun da gommek ıstıyorum hangı yapıları kullanmam gerekıyor.yardımcı olursanız sevınırım.

  2. Şadi Evren ŞEKER says:

    Bahsettiğiniz sohbet programları için aynı anda birden fazla kişinin erişimi esastır. Yani genelde sunucu/istemci (client/Server) tipi bir mimari ile merkezde bir sunucu, sohbet etmek isteyen kişilerin bağlanmasına izin verirken, her bağlanan için bir işlem (process) oluşturur.

    Bahsettiğiniz durumda JAVA dilinde işlem (process) oluşturma şansımız olmadığı için bu problem liflerle (threads) çözülür.

    Yani javada sohbet programı için en çok kullanılan yol istemci sunucu mimarisi üzerinde çoklu lifli (multithreaded) bir uygulama yazmaktır.

    Basit bir uygulama yazıp siteye ekledim. İlgili yazıya aşağıdaki adresten erişebilirsiniz:
    http://www.bilgisayarkavramlari.com/2009/11/20/java-ile-sohbet-istemcisunucusu/

    başarılar

  3. ahmet hancı says:

    selam. ben programımda duruma göre n kez içiçe döngü gerektiren bir prosedür kullanmak istiyorum. içiçe döngü sayısına göre label’lar kullanarak bunu yaptım ancak kod gereksiz şekilde uzadı. nasıl yaparım?

  4. Şadi Evren ŞEKER says:

    Yazdığınız kodu bilmiyorum ancak sizin için iç içe döngüleri de içeren ve etiketler ile (label) nasıl kod yazılacağını içeren bir yazıyı siteye ekledim, belki bu yazının bir faydası olur.

    Başarılar

Leave a Reply


- 1 = üç

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'İç içe döngüler (Nested Loops)' isimli yazı 02 Nov 2009 tarihinde, saat: 14:26 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam1,002 defa okunmuştur.

Benzer yazıları Uncategorized kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: Uncategorized