You are on page 1of 36

TEKRARLI YAPILAR

DÖNGÜ YAPILARI(LOOPS)
•for(;koşul;){}
•do-while(koşul){}
•while(koşul){}

1
2
GÜNDEM
1. for Döngü Yapısı
2. while Döngü Yapısı
3. do-while Döngü Yapısı
4. İçiçe Döngü Yapıları

3
TEKRARLI YAPILAR
DÖNGÜ YAPILARI(LOOPS)
Birçok programlama dilinde de var olan bu
yapıların çalışma mantığının ortak yönleri
kısaca şöyledir:
Bir koşula bağlı olarak, koşulun mantıksal sonucu doğru-
true-1 olduğu sürece (diğer deyişle, koşulun mantıksal
sonucu yanlış-false-0 olana kadar) bir veya daha fazla komut
tekrar tekrar uygulanır, koşulun mantıksal sonucu yanlış
olduğunda döngü sona erer ve program döngüden sonraki
komutlara geçer.
Farlılıkları aşağıda açıklanacaktır:
4
DÖNGÜ YAPILARI(LOOPS)
for döngüsü
1.for Döngü Yapısı:
for (baslangic_ifadesi; koşul; degisim_ifadesi)
{
/*döngü içi komutlar. Bu komutlar koşulun mantıksal sonucu doğru(1-true) olduğu
sürece tekrar tekrar uygulanır.*/
deyim_1;
deyim_2
……
deyim _n;
}
//Döngü sonu komutları
/* Döngü bitimi: koşulun mantıksal sonucu yanlış(0-false). Programın akışı sıradaki
komutlarla devam eder*/

5
DÖNGÜ YAPILARI(LOOPS)
for döngüsü

E(true-doğru-1)

6
for döngüsü
Örnek for cümleleri:
for(int k=1;k<=100;k++) for(int x=5;x<=20;x+=2)
{ {
/*döngü içi deyimler*/ /*döngü içi deyimler*/
} }
//döngü dışı deyimler //döngü dışı deyimler

for(int x=15;x>=5;x=x-5)
{
/*döngü içi deyimler*/
}
//döngü dışı deyimler
7
for döngüsü
Örnek for cümleleri:
for(int x=15;x>20;x-=2)
{
/*döngü içi deyimler*/
//MANTIK HATASI
//döngü içi deyimler hiç çalışmaz
}
//döngü dışı deyimler
for(int x=35;x>=20;x+=5)
{
/*döngü içi deyimler*/
//MANTIK HATASI
//sonsuz döngüye neden olur
}
8
//döngü dışı deyimler
for döngüsü
Uygulama Örnekleri-Örnek-1
#include<stdio.h> #include <iostream>
#include<conio.h> #include<conio.h>
main(){ using namespace std;
main(){
/*1-50 arasındaki sayılardan sadece
/*1-50 arasındaki sayılardan sadece çift sayı
çift sayı olanları ekrana yan yana
olanları ekrana yan yana yazdıran C programı*/
yazdıran C programı*/ for(int i=2;i<=50;i+=2)
for(int i=1;i<=50;i++){ cout<<i<<"-";
if(i%2==0) printf("%d -",i); //dikkat {} yok.Olmasa da döngü doğru çalışır
} cout<<"\nProgram Bitti\nDevam icin bir
printf("\nProgram Bitti\nDevam icin tusa basiniz...";
bir tusa basiniz..."); getch();
getch(); return 0;
}
return 0;
}

SORU: Her iki programda döngü sonunda i’nin değeri ne olur?


9
for döngüsü
Uygulama Örnekleri-Örnek-2
1. #include<stdio.h> 15. printf(“0-Hangi rastgele sayi
2. #include<conio.h>
istiyorsunuz?\n");
16. scanf("%d",&aralik);
3. /*aşağıdaki kütüphanelere dikkat*/
17. for(int a=1;a<=adet;a++){
4. #include<stdlib.h>
18. b=rand()%aralik;
5. #include<time.h>
19. printf("sayi:%d\n",b);
6. /*bu program kullanıcının istediği adette rastgele üretilen
20. topla+=b;
sayıların toplamını ve ortalamasını hesaplamaktadır*/
21. }
7. int main()
22. printf("\n rastgele say
8. { toplami:%ld",topla);
9. int a,b,adet,aralik; 23. printf("\n rastgele say
10. long topla=0; ortalamasi:%f",(float)topla/adet);
11. /*program farklı zamanlarda çalıştırıldığında farklı 24. getch();
sayılar üretmesi için*/ 25. }
12. srand(time(NULL));
13. printf("kac adet rastgele sayi istiyorsunuz?\n");
14. scanf("%d",&adet);

10
for döngüsü
Uygulama Örnekleri-Örnek-3
1. #include<iostream>
2. #include<conio.h>
3. /*aşağıdaki kütüphanelere dikkat*/
4. #include<stdlib.h>
5. #include<time.h>
6. using namespace std;
7. int main()
8. {
9. /*bu program 6 rakamlı Milli Piyango çekilişleri yapmaktadır*/
10. /*program farklı zamanlarda çalıştırıldığında farklı sayılar üretmesi için*/
11. srand(time(NULL));
12. cout<<"Milli Piyango en buyuk ikramiye cikan numara: ";
13. int b;
14. for(int k=1;k<=6;k++){
15. b=rand()%10;/*rastgele 0-9 arasi tamsayı yani rakam üretiliyor...*/
16. cout<<""<<b;
17. }
18. cout<<"\n devam icin bir tusa basiniz";
19. getch();
20. }
11
for döngüsü
Uygulama Örnekleri-Örnek-4
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
/*toplama kuralına göre çarpma islemi yapan program*/
cout<<"Carpma islemi yapilacak iki sayi giriniz ";
int x,y;
cin>>x>>y;
long carpim=0;
for(int k=1;k<=y;k++)
carpim+=x; //carpim=carpim+x
cout<<x<<"*"<<y<<"="<<carpim;
cout<<"\n devam icin bir tusa basiniz";
getch();
}

12
for döngüsü
Uygulama Örnekleri-Örnek-5
1. #include<iostream>
2. #include<conio.h>
3. using namespace std;
4. int main()
5. {
6. /*kullanıcı e/E tusuna bastigi surece girilen
notlarin ortalamasini hesaplayan program*/
7. //cout<<"Carpma islemi yapilacak iki sayi
giriniz ";
8. int notu;//notlar icin
9. int adet=0;//kac adet not girildigini takip
etmek icin
10. long nt=0;//not toplamlari icin

13
for döngüsü
Uygulama Örnekleri-Örnek-5-devam
11. char devam='e';//giris islemine devam edlip
edilmeyecegini sorgulamak icin
12. for(;devam=='e'||devam=='E';)
13. {
14. not_oku:
15. cout<<"\n Not (0-100)giriniz";cin>>notu;
16. if(notu<0||notu>100) goto not_oku;//girilen
not 0-100 arasinda degilse notu tekrar oku
17. nt+=notu;
18. adet++;
19. cout<<"\n not girisine devan icin e/E bitirmek
icin herhangi bir tusa basiniz...";
20. devam=getch();//tus oku
21. }

14
for döngüsü
Uygulama Örnekleri-Örnek-5-devam
22. cout<<"\n*n Girilen Notlarin toplami:"<<nt;
23. cout<<"\n\n Girilen Notlarin
Adeti:"<<adet;
24. cout<<"\n\n Girilen Notlarin
Ortalamasi:"<<(float)nt/adet;
25. cout<<"\n\n devam icin bir tusa basiniz";
26. getch();
27. }
15
While Döngüsü
while(koşul)
{
/*döngü içi deyimler*/

..

koşul değiştirme ifadesi;


}
/*döngü dışı deyimler*/

Döngü içi deyimler koşul true-1-doğru olduğu sürece


uygulanır, koşul false-0-yanlış olduğunda döngü biter
ve programın işleyiş sırası döngü dışı deyimlere geçer.
16
While Döngüsü-Örnek1
1. #include<iostream>
2. #include<conio.h>
3. using namespace std;
4. int main()
5. {
6. /*klavyeden girilen bir sayının faktöriyelini hesaplayan program*/
7. int n;
8. cout<<"\n Faktöriyeli hesaplanacak sayiyi giriniz";
9. cin>>n;
10. if(n<0)
11. {cout<<"\n\n negatif sayilarin faktoriyeli hesaplanamaz...\nUzgunum program
kapatiliyor...";
12. getch();
13. return 0;
14. }

17
While Döngüsü-Örnek1-devam
15. else{
16. int k=2;long fak=1;
17. while(k<=n)
18. {fak=fak*k;
19. k++;
20. }
21. cout<<n<<" sayisinin Faktoriyeli:"<<fak;
22. getch();
23. return 0;
24. }
25. }

18
While Döngüsü-Örnek1-döngünün
tekrar yazılması
else{
int k=1;long fak=1;
while(++k<=n)
{fak=fak*k;
// k++;
}
cout<<n<<" sayisinin Faktoriyeli:"<<fak;
getch();
return 0;
}}

19
While Döngüsü-Örnek1-döngünün
for ile tekrar kodlanması
else{
long fak=1;
for(int k=2;k<=n;k++)
{fak=fak*k;}
cout<<n<<" sayisinin Faktoriyeli:"<<fak;
getch();
return 0;
}
}

20
While Döngüsü-Örnek2
1. #include<iostream>
2. #include<conio.h>
3. using namespace std;
4. /*5 öğrencinin notunun ortalamasını hesaplayan program*/
5. int main()
6. {
7. int toplam=0,kisi=1, notu;
8. float ortalama;
9. while (kisi<=5 )
10. {
11. cout<<kisi<<". Ogrencinin Notu giriniz: ";
12. cin >>notu;
13. if(notu>=0&&notu<=100){
14. toplam = toplam + notu;
18. ortalama = (float)toplam /5;
19. cout << "Not Ortalamasi = " << ortalama <<
15. kisi++;
endl;
16. }
20. getch();
17. }
21. return 0;
22. } 21
While Döngüsü-Örnek3
1. #include<stdio.h>
2. #include<conio.h>
3. using namespace std;
4. /*d/D tusuna basıldıgı surece girilen notların ortalamasını hesaplayan program*/
5. int main()
6. {
7. int toplam=0,kisisay=0, notu;
8. float ortalama;
9. char devam='d';
21. ortalama = (float)toplam /kisisay;
10. while (devam=='d'||devam=='D') 22. printf( "\n Not Ortalamasi = %.2f",
11. { ortalama);
12. printf(" \n Ogrencinin Notu giriniz: ");
13. scanf("%d",&notu); 23. getch();
14. if(notu>=0&&notu<=100){ 24. return 0;
15. toplam = toplam + notu;
16. kisisay++;
25. }
17. }
18. printf("\n devam için d/D tusuna, bitirmek icin herhangi bir tusa basiniz..");
19. devam=getch();
20. }

22
While Döngüsü-Örnek4
15. else{
16. int k=n;long fak=1;
1. #include<stdio.h> 17. while(k>=1)
2. #include<conio.h> 18. {fak=fak*k;
3. int main() 19. k--;
4. { 20. }
21. printf("%d sayisinin Faktoriyeli: %ld",n
5. /*klavyeden girilen bir sayının faktöriyelini
22. getch();
6. hesaplayan program*/ 23. return 0;
7. int n; 24. }}
8. printf("\n Faktöriyeli hesaplanacak sayiyi giriniz");
9. scanf("%d",&n);
10. if(n<0)
11. {printf("\n\n negatif sayilarin faktoriyeli
hesaplanamaz...\nUzgunum program kapatiliyor...");
12. getch();
13. return 0;
14. }
23
do-while() Döngüsü
• Bazı döngülerde koşul belirlenmeden
döngü içi deyimlerin bir kez işletilmesi ve
daha sonra koşulun kontrol edilmesi
gerekebilir.
• Bu durumda öncelikle deyimi bir kez
işleten ardından kontrol eden do while()
döngü yapısı kullanılır.

24
do-while() Döngüsü
do
{
/*döngü içi deyimler;*/
}while (koşul);
/*döngü dışı deyimler;*/

25
do-while() Döngüsü-Örnek-1
1. #include<stdio.h>
2. #include<conio.h>
3. int main()
4. {
5. /*klavyeden girilen bir sayının basamakları toplamını
hesaplayan program*/
6. int n;
7. do{
8. printf("\n Pozitif bir Sayiyi giriniz");
9. scanf("%d",&n);
10. }while(n<=0);
11. int x,kalan,toplam=0;
26
do-while() Döngüsü-Örnek-1-devam
12. x=n;
13. while(x>0){
14. kalan=x%10;
15. printf("\n su anki basamak:%d",kalan);
16. toplam+=kalan;
17. x=x/10;
18. }
19. printf("\n %d sayisinin basamaklari toplami: %d",n,toplam);
20. getch();
21. return 0;
22. }

27
do-while() Döngüsü-Örnek-2
1. #include<iostream>
2. #include<conio.h>
3. using namespace std;
4. int main()
5. {
6. int bas,son,degis;
7. cout<<"Baslangıc sayisini GIRINIZ:";
8. cin>>bas;
9. cout<<"Bitis sayisini GIRINIZ:";
10. cin>>son;
11. if(bas>son){
12. //yer değistir
13. int ara=bas;
14. bas=son;
15. son=ara;
16. }

28
do-while() Döngüsü-Örnek-2-devam
17. do{
18. cout<<"Degisim araligini GIRINIZ:";
19. cin>>degis;
20. }while(degis<=0);
21. int sayac=bas;
22. do{
23. cout<<"\n sayi:"<<sayac;
24. sayac=sayac+degis;
25. }while(sayac<=son);
26. getch();
27. return 0;
28. }

29
İç içe Döngüler
İçiçe döngülerin gerekli olabileceği noktalardan
bazıları şu şekilde ifade edilebilir :
• Matris işlemlerinde 1 adet döngü yeterli olmaz. Her
satır ile her sütunun kesişmesinde bulunan
değerleri alabilmek için 2 içiçe döngü gerekir.

• Sınıftaki 20 öğrencinin her birinin 3 adet notunu alıp


ortalama hesaplamak istediğimizde tek bir döngü
yeterli olmaz. Tek döngü yalnızca öğrencileri ifade
eder. Notlar için bir döngü daha gerekir.

30
İç içe Döngüler
• 1’den n’e kadar olan sayıların birbiriyle
çarpımından oluşan bir çarpım tablosu
yazmak istediğimizde bir adet döngü
yeterli olmayacaktır.

31
İç içe Döngüler

32
İç içe Döngüler

33
İç içe Döngüler-Örnek-1
1’den 5’e kadar olan sayıların çarpım tablosu :

…………
1 for(i = 1; i<6 ; i++)
2{
3 for(j = 1; j<6 ; j++)
4 {
5 printf(“%d * %d = %d\n”, i,j,i*j);
6 }
7 printf(“\n”);
8}

34
İç içe Döngüler-Örnek-2
1. #include<iostream>
2. #include<conio.h>
3. using namespace std;
4. int main()
5. {
6. /*1 den N'e kadar olan sayıların faktöriyelini hesaplayan program*/
7. int n;
8. cout<<"\n Faktöriyeli hesaplanacak sayiyi giriniz";
9. cin>>n;
10. if(n<0)
11. {cout<<"\n\n negatif sayilarin faktoriyeli hesaplanamaz...\nUzgunum program
kapatiliyor...";
12. getch();
13. return 0;
14. }

35
İç içe Döngüler-Örnek-2-devam
15. else{
16. for(int i=1;i<=n;i++){
17. int k=2;long fak=1;
18. while(k<=i)
19. {fak=fak*k;
20. k++;
21. }
22. cout<<i<<" sayisinin Faktoriyeli:"<<fak<<endl;}
23. cout<<" devam icin bir tusa basiniz...";
24. getch(); }
25. return 0;
26. }

36

You might also like