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.

Yorumlar

  1. hilkat

    ı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 Article Author

    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ı

    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. Ozan

    Hocam simdi benım bu dizilerde ascii kod olayıyla ilgili bir sıkıntım var.yani orneğin bir dizi var iste elemanları 2 4 5 6 7 her eleman kadar * yazdırmam gerekiyor.simdi * 'ın ascii kodu 42 ben de sole bise yaptım ama bir turlu doğru olmadı:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    #include <stdio.h>
    #include <conio.h>
    int main(){
       int i;
       int j;
       int dizi[5];
       printf("Sayilari giriniz");
       for(i=0;i<5;i++){
          scanf("%d",&dizi[i]);
       }
       for(i=0;i<5;i++){
          printf("n");
          printf("n%d",dizi[i]);
          for(j=0;j<5;j++){

    burda tıkanıyorum sizce anlamadığım nokta nedir?

  5. Şadi Evren ŞEKER Article Author

    Kodunuz iç içe döngü şeklinde yazılabilir:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #include <stdio.h>
    #include <conio.h>
    int main(){
       int i;
       int j;
       int dizi[5];
       printf("Sayilari giriniz");
       for(i=0;i<5;i++){
          scanf("%d",&dizi[i]);
       }
       for(i=0;i<5;i++){
          printf("n");
          printf("n%d",dizi[i]);
          for(j=0;j<dizi[i];j++){
             printf("*");
          }
       }
    }

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


+ 9 = on