PROGRAMLAMA Döngüler

PROGRAMLAMA Döngüler
1
673
Forum sitemizde mesaj sayısı kasmak için oto mesaj yanıtlayıcı programlar kullanmak kesinlikle yasaktır.
Lütfen yorum yaparken ( ty,tyty, +++++, up up, asasdasf ) vb. anlamsız ifadeler kullanmayalım. Bu şekilde yorum yapan üyelerin üyelikleri durdurulacaktır.
Spam mesajlar atan kişileri RAPOR butonu ile bize bildiriniz!

Mia

28 Nis 2020
930
188
314
Giriş

Döngü (loop) deyimleri, bir kümenin belli bir koşul altında tekrar edilmesi için kullanılır. C programlama dilinde, while, do...while ve for olmak üzere üç tip döngü deyimi vardır. Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir.


7.1 while Döngüsü

Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden yapılır. Koşul olumlu olduğu sürece çevrim yinelenir. Bu deyimin kullanımı Program 7.1 de gösterilmiştir. Genel yazım biçimi:

while(koşul)
{
...
döngüdeki deyimler; [küme]
...
}

Program 7.1: while döngüsü
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız


Program 7.1, 0-10 arasındaki sayıları ekrana yazdırmaktır. 9. satırdaki while deyiminden sonra { işareti kullanılmamıştır. Bu durumda, sadece takip eden satır (10. satır) döngünün içine dahil edilir.


Program 7.2: do-while döngüsü
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız


15. satırdaki koşul olumlu olduğu sürece (sayi>0 olduğu sürece), klavyeden yeni bir değer 12. satırda okunur. Aksi takdirde (sayi<=0 ise) çevrimin sona erdiğine dair mesajla program sonlanır.

Program 7.3: for döngüsü
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız


Program da faktoriyel hesabı 16. satırda gerçekleştirilmiştir. Faktöriyel, bilindiği gibi n! = 1x2x3x ... xn tanımlanır. Gerçekte 15! = 1307674368000 olmasına rağmen, program 15! = 2004310016 olarak hesaplamıştır. Sizce bunun sebebi nedir? Cevap için bkz: Bölüm 2.

Program 7.3'de döngüye girilmeden, faktor = 1 atması yapılmıştır.

faktor = 1;
for(i=1; i<=n; i++)
faktor *= i;

Bu döngü öncesi ilk değer ataması, döngünün başlangıç kısmında şu şekilde de yapılabilir:

for(faktor=1, i=1; i<=n; i++)
faktor *= i;

printf fonksiyonu ile desimal (taban-10) sayılarıların nasıl yazdırılacağı bundan önceki kısımlarda gösterilmişti. Program 7.4'te 0-15 arası desimal sayıların Oktal (taban-8) ve Heksadesimal (taban-16) karşılıkları ile printf kullanılarak yazdırılması gösterilmiştir.

Program 7.4: Sayı sistemi
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız

7.4 İç içe Geçmiş Döngüler

Bir program içinde birbiri içine geçmiş birden çok döngü de kullanılabilir. Bu durumda (bütün programlama dillerinde olduğu gibi) önce içteki döngü, daha sonra dıştaki döngü icra edilir.

Üç basamaklı, basamaklarının küpleri toplamı kendisine eşit olan tam sayılara Armstrong sayı denir. Örneğin: 371 bir Armstrong sayıdır çünkü 3^3 + 7^3 + 1^3 = 371. Program 7.5'de iç içe geçmiş üç for döngüsü ile bütün Armstrong sayıları bulup ekrana yazar. İnceleyiniz.

Program 7.5: iç-içe for döngüleri
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız


7.5 Sonsuz Döngü

Bir döngü işlemini sonsuz kere tekrarlarsa bu döngü sonzuz döngü olarak adlandırılır. Böyle bir döngü için, koşul çok önemlidir. Örneğin while döngüsü için:

...
while(1)
{
printf("Sonsuz döngü içindeyim...\n");
}
...

yada
...
while(7>3)
{
printf("Sonsuz döngü içindeyim...\n");
}
...

Her iki durumda da çevrimler, sonsuz döngü durumundadır. Çünkü while(1) ve while(7>3) ifadelerdeki koşullar daima olumludur. Bu durumda çevrim sonsuz döngüye girer.

for döngüsünde, başlangıç, koşul ve artım parametrelerinden herhangi birini kullanmak isteğe bağlıdır. Her hangi biri verilmediğinde döngünün nasıl davranacağı iyi yorumlanmalıdır. Örneğin for döngüsünün hiçbir parametresi verilmezse, döngü sonsuz çevrime girer. Yani:

for(;;)
printf("Sonsuz döngü içindeyim...\n");

gibi.

7.6 break Deyimi

Bir C programında, bir işlem gerçekleştirilirken, işlemin sona erdirilmesi bu deyim ile yapılır. Örneğin, döngü deyimleri içindekiler yürütülürken, çevrimin, koşuldan bağımsız kesin olarak sonlanması gerektiğinde bu deyim kullanılır. Mesela:

...
do{
scanf("%d",&x);

if(x==0) break;

printf("%f",1.0/x);

}while(1);
...

Yukarıdaki program parçasında, do ... while döngüsündeki koşul daima olumludur. Bu durumda döngü sonsuzdur. Fakat döngü içinde if deyimindeki koşul gerçekleşirse, döngü koşuluna bakılmaksızın terkedilir. Bu işlemi sağlayan break deyimidir.

Program 7.6 klavyeden girilen sayı pozitif olduğu sürece sayının faktoriyelini hesaplar. Sayı negatif olduğunda döngü break ile sonlandırılır. Inceleyiniz.

Program 7.6: break deyiminin kullanımı
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız


7.7 continue Deyimi

Bir döngü içerisinde continue deyimi ile karşılaşılırsa, ondan sonra gelen deyimler atlanır ve döngü bir sonraki çevrime girer. Örneğin:

...
for(x=-50;i<=50;x++)
{
if(x<0) continue; /* x<0 ise alttaki satırı atla */
printf("%d\t%f",x,sqrt(x));
}
...

Program parçasının çıktısı:
0 0.000000
1 1.000000
2 1.414213
3 1.732050
. .
. .
. .
50 7.071067

Program 7.7, x, y'den farklı olmak üzere |x|+|y|<=3 eşitsizliğini sağlayan tamsayı çiftlerini bulup ekrana yazar. Bu eşitsizliği sağlayan toplam 22 çift vardır. Programda, her bir çift parantez içinde yazdırılmıştır. İnceleyiniz.

Program 7.7: continue deyiminin kullanımı
Resimleri görmek için kayıtlı olmalısınız


ÇIKTI
Resimleri görmek için kayıtlı olmalısınız
 

xreal13x

Üye
12 May 2021
42
5
22
sen her şeyde en iyisisin, her gün büyümemize yardımcı olabilecek değerli bilgileri paylaştığın için çok teşekkür ederim
 
Forum sitemizde mesaj sayısı kasmak için oto mesaj yanıtlayıcı programlar kullanmak kesinlikle yasaktır.
Lütfen yorum yaparken ( ty,tyty, +++++, up up, asasdasf ) vb. anlamsız ifadeler kullanmayalım. Bu şekilde yorum yapan üyelerin üyelikleri durdurulacaktır.
Spam mesajlar atan kişileri RAPOR butonu ile bize bildiriniz!