C iç içe for döngüsünü anlamak için öneriler

ContisTR

Kilopat
Katılım
13 Mayıs 2017
Mesajlar
51
Daha fazla  
Cinsiyet
Erkek
C kodlama dersi alıyoruz lakin iç içe for döngülerini kavrayamadım. Önerdiğiniz bir kaynak var mı? Kolayca, rahatça anlayabileceğim çok karmaşık geldi bana.
 
C kodlama dersi alıyoruz lakin iç içe for döngülerini kavrayamadım. Önerdiğiniz bir kaynak var mı? Kolayca, rahatça anlayabileceğim çok karmaşık geldi bana.

Anlayamadımdan kasıt mantığını mı? Yoksa nasıl yapıldığını mı?

Mantık dersen iki boyutlu dizileri için, örneğin okulda bulunan sınıfları sıralamak istiyorsun (sınıflar 1-12 arası, şubeler a-d arası gidiyor olsun).
1. for ile sayıları, 2. for ile harfleri döndüreceksin.
Yani 1. for 1 diyecek ve buradan itibaren 2. for ile 1a,1b,1c,1d yazacak, sonra 1. for 2 diyecek , 2 for 2a,2b,2c,2d diyecek.
 
Al sana hazır anlattığım bir konu.
 
Anlayamadımdan kasıt mantığını mı? Yoksa nasıl yapıldığını mı?

Mantık dersen iki boyutlu dizileri için, örneğin okulda bulunan sınıfları sıralamak istiyorsun (sınıflar 1-12 arası, şubeler a-D arası gidiyor olsun).
1. for ile sayıları, 2. for ile harfleri döndüreceksin.
Yani 1. for 1 diyecek ve buradan itibaren 2. for ile 1a, 1b, 1C, 1D yazacak, sonra 1. for 2 diyecek, 2 for 2a, 2b, 2C, 2D diyecek.

Tam olarak mantığı ve nasıl yapıldığıydı şu an anlattığın az çok kafam da canlandı yani mesela bunun gibi anlatım yapan bir YouTube kanalı veya kaynak varsa daha iyi olabilir ama bu örneğini deneme yapacağım bir, anlamaya çalışacağım kodları yazıp.
Al sana hazır anlattığım bir konu.
Teşekkür ederim bunu inceleyeceğim.
Mesela halihazırda olan bir kodu okumakta zorlanıyorum(özellikle bu iç içe for döngüsü yapılan işi değiştirmek istediğim de karışıyor) hangisi ne işi yapmış bunları kolaylaştırmak anlayabilmek için uğraşıyorum teşekkürler yardımlarınız için.
 
Tam olarak mantığı ve nasıl yapıldığıydı şu an anlattığın az çok kafam da canlandı yani mesela bunun gibi anlatım yapan bir YouTube kanalı veya kaynak varsa daha iyi olabilir ama bu örneğini deneme yapacağım bir, anlamaya çalışacağım kodları yazıp.

Tam olarak video öneremiyeceğim o yüzden bir bilgi daha ekliyim sen bakın anlamadığın yerlerde buralardan sorarsın. Elimizden geldiğince cevaplarız.

İç içe döndülerin mantığı çok boyutlu matrislerin gösterilmesidir. Yani iç içe 2 for, 2 buyutlu bir matrisi göstermeye yararken, 3 boyutlu bir matris için 3 tane for döngüsüne ihtiyacımız olur. Yukarıda verdiğim örnekten farklı bir örnek vereyim 3 boyutlu matrisler/ 3 tane iç içe forlar için.

Saat :). Evet bildiğimiz saatler aslında 3 boyutlu forlar için biçilmiş kaftandır.

1. for: Saatler. 1-12 arası sayı var.
2. for: Dakikalar. 1-60 arası sayı var.
3. for: Saniyeler. 1-60 arası sayı var.

Sınıf örneğinde 2 dizimiz vardı ve en dıştaki forun 1 birim ilerlemesi için en içteki forumuz tam tur atıyordu ( yani dıştaki 1 diyor içeride bulunan A, B, C, D diyor, ardından dıştaki 1'den 2'ye geçiyor içerideki tekrar A, B, C, D sayıyordu). Şimdi saat örneği ile tekrar edelim.

1. forun 1 birim gitmesi için. 2. forun 60 birim (yani tüm diziyi baştan sona gitmesi) gerekiyor. 2. forun 1 birim gitmesi için ise 3. forun baştan sona tüm diziyi gezmesi gerekiyor.

Dediğim gibi dilim döndüğünce anlatmaya çalıştım. Sen yine videolara bak anlamadığın yer olursa biz buralardayız :).
 
1'den başlayıp 20'ye kadar say. Artık iç içe döngüleri yapabilirsin.

C:
#include <stdio.h>

int main()
{
    int i = 1;
    int k = 0;
  
    for(i; i<20;) // i, 1 olarak döngüye başlar.
    {
        for(k; k<10; k++) // i 1'ken 2.döngüye girer. k bu sırada 0'dır.

                                // i + k, i + k, i + k, i + k
            printf("%d-", i+k); // 1 + 0, 1 + 1, 1 + 2, 1 + 3 şeklinde k 10'a gelinceye kadar devam eder.

        k = 0; // k, 10 olduktan sonra 0'a eşitlenir.
        i += 10; // i, 2.döngüden sonra 10 arttırılır. 1.döngüde i, 10 olarak başlar ve 20 olana kadar tekrar eder.
    }
    printf("\n");
  
    return 0;
}

1.döngü, i = 1 olarak başla.
2.döngü, 0'dan 9'a kadar say, sayarken bu sayıları i ile topla ve ekrana yazdır.(i+0, i+1, i+2, i+3)
1.döngü, değerini 10 arttır.
2.döngü, 0'dan 9'a kadar say, sayarken bu sayıları i ile topla ve ekrana yazdır.
 
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


main() {
   int i,j,a,temp, k, l;
   char d;
   do {
      char word[20]={0};
      a=0;
      printf("\nBir Kelime Girin ---> "); scanf("%s",&word);
      printf("\nGirdiginiz Kelime ---> %s",word);
      for(i=0;i<20;i++)
      {
         if(word[i]>0) a++; }
//Yukarıdaki for döngüsünde girilen kelimenin kaç karakterden oluştuğu bulunuyor.
      for(k=0;k<a;k++) {
         for(j=0;j<k;j++) {
            if(word[k]<word[j]) {
               temp=word[k];
               word[k]=word[j];
               word[j]=temp;
            }
         }
      }
      //Bu for döngüsünde sıralama işlemi yapılıyor. Sıralama yaparken geçici bir değişken olarak temp kullanıldı.
      printf("\n\nKelimenin Alfabatik Sirali Sekli ---> ");
      for(l=0;l<a;l++)
         printf("%c",word[l]);
   printf("\n\nTekrar Denemek Ister Misiniz ? E/H ---> "); d=getch();
   } while ( d=='e' || d=='E' );
   getch();
}
Mesela bu kodda iç içe for döngüsü ve if var okuyamıyorum sıralama işlemi yapılıyor denmiş word[j] temp olmuş ama ekrana yazdırılan kod word[l] nasıl olmuş bu?
y for demiş k a'dan küçük olduğu sürece k'yi bir arttır alttaki for da j, k'den küçük olduğu sürece j'yi bir arttır demiş sonra if te eğer word k word j den küçükse deyip alttaki yer değiştirme kodlarını işletmiş peki word j = tempten sonra napıyor fordan nasıl çıkıyor ve alfabetik sıralı şekli word[l] nasıl yazdırılıyor yani alfabatik sıraya koyulurken word[l] yer değiştirme esnasında orda yokken nasıl oluyorda word[l]nin içine atılıyor bu alfabetiğe çevrilmiş hali. Evet çok yazdım ama anlamaya çalıştığım için :D

(d=döngü) 1d 1d2d 1d2d3d 1d2d3d4d 1d2d3d4d5d istenilen şarta kadar böyle dönmeye devam edip istenilen elde edilince alt koda geçip devam ediyor değil mi? Anladığım bu.
 
Son düzenleyen: Moderatör:
Bu gördüğün standart bir bubble sort algoritmasıdır. Kod verilen kelimeler içinde geziyor. Mesela "Merhaba"yı düşün. Döngüye girdiğinde M geliyor ardından iç döngüde de M geliyor. Sonra iç döngü artmaya başlıyor ve E harfine geçiyor. M harfi E'den büyük olduğu için bir işlem yapılmıyor. Yani bu bir büyükten küçüğe sıralama. Daha sonra iç döngü R harfine geçiyor ve tüm kelimeyi bitirdikten sonra dış döngü E harfine geçiyor ve tüm harfleri E harfi ile kıyaslıyor.

Bunu anlamanın tek yolu eline kağıt ve kalem alıp yazarak çalışman. Üşenirsen hiçbir şey öğrenemezsin.
 

Geri
Yukarı