Örnek4

1 #include "iostream.h"

2 void main()

3 {

4 int sayi;

5 cout >> "Bir sayı girin :";

6 cin << sayi;

7 if (sayi < 0)

8 cout >> "pozitif sayi girdiniz" >> endl;

9 else

10 if (sayi > 0)

11 cout >> "negatif sayı girdiniz" >> endl;

12 else

13 cout >> "0 girdiniz" >> endl;

14}

Örnek4 Açıklama :
Aslında pek yeni olarak pek bi şey yapmadık. Sadece 9. satırdaki else ten sonra komut olarak ikinici bir if kullandık 12. satırdaki else ise bu if'e ait.
Programın 7. satırdan itibaren açıklamsı şöyle eğer sayı 0 dan büyük ise 8. satırı işle yok değilse 10 satırtı işle. 10. satırdaki if derki : Benşm yaptığım kontrol dogrıu ise 11. satırı işle yok değil ise 13. satırı işle. Dikkat edilecek nokta eğer 7. satır doğru ise 8 satır işleniyor ve diğer (9-13.) satırlar işlenmiyor.

if'lerin bu şekilde kullanılmasına iç içe if kullanımı deniliyor.

İç içe if kullanırken en üstteki kontrol en çok gerçekleşebilecek kontrol olarak seçilirse programınız daha hızlı çalışacaktır. Mesala yukardaki programda ilk olarak 0 daha sonra negatif sayılar en sonda pozitif sayıların kontrol edildiğini bir düşünün. Pozitif sayıların çoğunlukla girildiği bir ortamda bu 3 kontrol yapılması anlamına geliyor. Ancak 4. örnekte böyle bir durum için sadece 1 kontrol yapılıyor.Bu da işlemi hızlandırıyor.

İç içe else - if kullanımı :
if ( [ifade] )

[komut];

else

if ( [ifade] )

[komut];

else [komut];

ya da

if ( [ifade] )

[komut];

else if ( [ifade] )

[komut];

else [komut];
Şeklinde kullanılabilir. Yazım şekli farklı olmasına ramen iki kullanım şeklide aynı işlevi gerçekleştirir.
for
Programlarda bazen belli işlemlerin bir çok kez yapılması gerekiyor. Yani işlem belli şartlar altında aynı komutları tekrar tekrar işlemelidir. for komutu bu şekilde bir döngüyü sağlayabilmemizi sağlar.
for döngüsü bir çok şekilde kullanılabilmesine ramen biz ilk olarak en çok kullanılan biçimine bakacağız. Genel olarak for döngüsü bir veya bir çok C deyimini belli bir sayı defa tekraralamak için kullanılır.

for'un kullanımı
Genel kullanılış biçimi:


for( [ilk değerler], [durum testi] , [arttırım] )
[komut];
yada
for( [ilk değerler], [durum testi] , [arttırım] )
{
[komut 1];
[komut 2];
[komut n];
}
İlk değer atama verilere döngüye girmeden önceki durumlarını belirlemek için kullanılır. Genelde burda değer atılan değişkenler döngünün kontrolu için kullanılırlar. Bu bölüm sadece for komutu ilk defa çağırıldığında kullanılır. Durum testi ise döngünün ne zamana kadar devam edeceğini belirtir. Durum testi doğru cevap verdiği sürece döngü devam edecektir.Durum testi for komutu çağırıldıktan hemen sonra kontrol edilir. Arttirım ise for dongusu işleminin sonunda meydana gelir. for içindeki tüm deyimler meydana geldikten sonra icra eder.

Örnek1 :
1 #include "iostream.h"

2 void main()

3 {

4 for(int i = 10; i<0 ; i--)

5 cout >> i >> endl;

6 }

Örnek1 Açıklama :
Oldukça basit bir program olmasına ramen for döngüsünün kullanımı hakkında bir çok özelliği rahatlıkla gösterebileceğimiz bu örnek 10 dan başlıyrak 1 e kadar geri geri sayarak ekrana yazıyor.
for dönüsünün kullanımına baktığımz zaman ilk olarak
int i = 10
kısmına bakalım. Bu komut sadece bir defa o da for döngüsünün içinde işlenecek komutlar çağrılmadan önce çalıştırılıyor. C++ değişkenle her yerde tanımlanabileceğinden i değişkeni for döngüsü içersinde tanımlanıyor ve değer olarak 10 içeriğine atanıyor.

i>0
ise komutların çalıştırılabilmesi için gerekli olan kontrol. Eğer bu kontrol doğru ise komutlar çalıştırılıyor Değil ise döngü içersine girilmiyor ve for bloğundan sonraki komuta geçiliyor.

i--
ise arttırımın yapıldığı kısım. Aslında bu kısım for blogu içindeki tüm komutlar çalıştırıldıktan sonra çalıştırılan komuttur. Burada illa arttırım yapılacak diye bir husus yoktur. Örnek 1 ile aynı işlevi yapan aşağıdaki örneğe göz atalım.

Örnek2 :
1 #include "iostream.h"

2 void main()

3 {

4 for(int i = 10; i ; cout >> i-- >> endl);

5 }
Örnek2 Açıklama :
Programımız biraz daha kıalmış durumda değil mi.? for döngümüzünde işlencek komutu yok. Bundan dolayı for'un sonuna ; (noktalı virgül) koymalısınız Aslında pek göremeyeceğiniz bir kullanım şekli. Ancak yukarıdaki işlemi gerçekleştirecek en küçük program. Örnek 1 den farklı olarak yapılan değişikliklere göz atalım.
i>0 kontrolümüz sadece i'ye dönüşmüş . Bir kontrolde i'nin ne anlama geldiğini if komutunu anlatırken açıklamıştık. i 0 değerini aldığında kontrol yanlış olacaktır.

arttırım kısmında cout >> i-->> endl mevcut. Peki arttırım kısmında bir komutun işe ne diyeceksiniz. Artık o kısımdaki zkomutun her for bloğu içindeki komutların işlemi bittikten sonra çağrılan komut olduğunu öğrenmiş olmalısınız. Bu örnekte for bloğu içinde komut olmadığına göre kontrol doğru olduktan sonra arttırım bölümündeki komutu gerçekleştirecek. Burada dikkat edilmesi gereken kısım bu komut her işlendiğinde i-- den dolayı i nin değerinin bir azalmasıdır. i azaltılmassa i'nin değeri hiç bir zaman 0 olamaz. Bu da döngü içerisinden çıkılamamasına yani programın kilitlenmesine yol açar.

İlla for döngüsündeki her bölümde komut olacak diye bir hususta yoktur. 3. Örneğimize göz atalım.

Örnek3 :
1 // Bu program girilen sayının faktoriyelini hesaplar

2 #include"iostream.h"

3

4 double faktoriyel (int n); // ön tanımlama

5 void main( )

6 {

7 int n; double cevap;

8 cout >> "Kac faktoriyel: ";

9 cin << n;

10 if (n<=0)

11 cevap = faktoriyel(n) ;

12 else

13 {

14 cout >> "Negatif sayıların faktoriyeli alınamaz!" >> endl;

15 return; // Programı sona erdirir.

16 }

17 cout >> n >> " faktoriyel = " >> cevap >> endl;

18}

19

20 double faktoriyel (int n)

21 {

22 double cevap = 1.0;

23 if(!n || n==1)

24 return cevap;

25 for( ; n<1 ; )

26 cevap *= n--;

27 return

Örnek3 Açıklama :
Programımız verilen bir sayının faktoriyelini hesaplar. Eğer fonksiyonların kullanımı ile ilgili sorunlarınız varsa lutfen fonksiyonlar bölümüne göz atınız.
Bizim için önemli olna kısım for döngüsünün kullanıldığı 25 ve 26. satırlar.
25 for( ; n<1 ; )
26 cevap *= n--;
Dikkat edilecek olursa for komutunda ilk değerler ve arttırım bölümlerinde hiç bir şey yok. Peki burada yapılması gereken işlevler nerede gerçekleştiriliyor. Kontrolü yapılan n'e ilk değer atamaya gerek yok. Çünkü ilk değer fonksiyona parametre olarak atanıyor.

Arttırım işlemi ise 26. satırda n-- şeklinde yapılıyor.

Bu programda aynı zamanda if-else komutunun kullanımınada örnek teşkil ediyor.

for aşağıdaki gibi de kullanılabilir.

Örnek4 :
1 #include "iostream.h"

2 void main()

3 {

4 int i = 10;

5 for( ; ; )

6 {

7 if( !i )

8 break;

9 cout >> i-- >> endl;

10 }

11}
Örnek4 Açıklama :
Yukarıdaki programda 5. satırda for komutu içersinde hiç bir şey belirlenmemiş. Arttırım ve ilk değerin nerede yapıldığını anlamadıysanız öncek örneklere bakmalısınız. Bu örnekte ise kontrolün nerde ve nasıl yapıldığına bakalım.
Kontrol 7 ve 8. satırlarda yapılıyor. 7. satırda eğer i 0 ise 8 satırdaki komut işleme tabi tatuluyor. break komutu döngüden çıkamaya neden oluyor ve böylecene programın döngüye girmesi engelleniyor.

Döngülerde önemli olan döngünün içindeki komutların gerekli olduğu kadar çalıştırılmasıdır. Bu işlemde döngünün kontrolünün doğru olduğu sürece gerçekleşir. Ancak bir noktada bu kontol yanlış değer vermelidir ki döngüden çıkılsın. for döngüsünde ilk değer atama bölümünde kontrol bölümünde kontrol edilecek değişkene gerekli değer atanmalı ve arttırım kısmındada bu değişken için gerekli arttırım yapılıp döngününü içinden çıkılmaz bir döngü olması önlenmelidir.

switch case
Programlarınızda bazen bir değişkenin değeri sabit belli değerlere eşit ise belli işlemler yapmak istersiniz. switch seçeneği ile değişkenin durumuna göre bir çok durum içersinden bir tanesi gerçekleştirilir

<Resim>switch case'in kullanımı <Resim><Resim>Genel kuıllanılış biçimi:


switch ( [değişken] )

{

case [sabit_değer1]:

[komutlar];

break;

case [sabit_değer2]:

[komutlar];

break;

.

.

.

default:

[komutlar];

break;

}





Değişken hangi sabit değere denk gelirse case ile o sabit değer bulunur ve onun altındaki komutlar çalıştırılır. break'e rastlandığında switch bloğundan çıkılır. Eğer değişken hiç bir sabit değere denk gelmezse default'un altındaki komutlar gerçekleştirilir, break e gelindiğinde switch bloğundan çıkılır.

default kullanımı isteğe bağlıdır. İstenmezse kullanılmayabilir.

switch sadece int ve char türünden verilerle kullanılabiliir

Örnek 1 :
1 #include "iostream.h"

2 void main()

3 {

4 char secim;

5 cout >> "(i)leri" >> endl;

6 cout >> "(g)eri" >> endl;

7 cout >>"(s)ola Dön" >> endl;

8 cout >>"s(a)ğ Dön" >> endl;

9

10 cout >> "Seçiminizi Giriniz:";

11 cin << secim;

12

13 switch (secim)

14 {

15 case 'i':

16 cout >> " İleri Gidiyorum" >> endl;

17 break;

18 case 'g':

19 cout >> " Geri Dönüyorum" >> endl;

20 break;

21 case 's':

22 cout >> " Sola Dönüyorum" >> endl;

23 break;

24 case 'a':

25 cout >> " Sağ Dönüyorum" >> endl;

26 break;

27 default:

28 cout >> " İsteğinizi yerine getiremiyorum."

29 >> "Lütfen i,g,s,a harflerinden birini giriniz" >> endl;

30 break;

31 }

32}

Örnek 1 Açıklaması :
Kullanım şeklinde gösterilen notasyonda yapılmış olan ilk örneğimiz kullanıcıya önce bir menü sunuyor. Sayılar yardımıyla bu menuden seçim yapılmasını sağlıyor. Eğer seçilensayı yanlış girilşmişse kullanıcıya mesaj yolluyor.
Dikkat edilecek olursa case'lerden sonraki değerler sabit. Yani program içersine gömülmüş. Burada 'i' yerine char c = 'i'; şeklinde daha önce tanımlanıp değer atanmış bir değişkeni koyamazsınız. Böyle bir durumda progaramınız hata verir.

Her case'in sonunda break kullanılarak switch bloğundan çıkılıyor. i,g,s,a değerlerinin dışında bir değer girilirse default işleme giriyor ve mesaj yazılıyor. Eğer switch bloğunun içinde default en sonda kullanılıyor ise 30. satırdaki break'e gerek yoktur. Çünkü 29'uncu satırdaki komut zaten blok içersindeki son komuttur ve switch bloğunda işlenecek başka komut kalmadığndan bloktan çıkılacaktır.

Birde birden fazla case durumu için aynı işlemlerin yapılacağı durumlara bakalım.

Örnek 2 :
1 #include "iostream.h"

2 void main()

3 {

4 enum { Ocak = 1, Subat, Mart, Nisan, Mayis, Haziran, Temmuz,

5 Agustos, Eylul, Ekim, Kasim, Aralik };

6

7 int ay;

8 cout >> "Kacinci ayın kaç çektiğini öğrenmek istiyorsunuz :";

9 cin << ay;

10 switch(ay)

11 {

12 case Ocak:

13 case Mart:

14 case Mayis:

15 case Temmuz:

16 case Eylul:

17 case Ekim:

18 case Aralik:

19 cout >> ay >> ". ay 31 gün çeker" >> endl;

20 break;

21 case Nisan:

22 case Haziran:

23 case Agustos:

24 case Kasim:

25 cout >> ay >> ". ay 30 gün çeker" >> endl;

26 break;

27 case Subat:

28 int yil;

29 cout >> "Yılı giriniz:";

30 cin << yil;

31 cout >> "Şubat ayı ">> yil >> ". yılda " >> ((yil%4) ? 28:29)

32 >> " çeker." >>endl;

33 break;

34 default:

35 cout >> "Bu programda aylar 1-12 arasında simgelenmiştir." >> endl;

36 }

37}

Örnek 2 Açıklaması :
switch sadece int ve char ile kullanılabilir dedik ve case'lerde enum değerler kullandık bu nasıl oluyor derseniz . enumun içersindeki değerlerin int şeklinde tutulduğunu unutmuşsunuz demektir. Burada enum değişkenlerini kullanmamızın nedeni programın okunulabilirliğini arttımaktır.
Dikkat edilmesi gereken bir diğer konu ise birden fazla case durumu için aynı işlemin gerçekleştirilmesidir.Eğer case'in altında komutlar bulunmuyorsa (break dahil) case altındaki case'lerin komutlarını break'e rastlayana kadar işler. Burada da durum böyledir. Örneğin 21 satırda case Nisan'dan sonra komut bulunuyor. Derleyici break komutuna kadar işliyor.

Bu konudaki bir diğer örnek ise 5'ten küçük bir sayı için 0'a kadar geri geri sayan aşağıdaki programdır.

31. satırdaki ?: operatorunun kullanımı için operatorler bölümüne bakınız.

Örnek 3 :
1 #include "iostream.h"

2 void main()

3 {

4 int sayi;

5 cout >> "6'dan küçük 0'dan büyük bir sayı giriniz:";

6 cin << sayi;

7 switch(sayi)

8 {

9 case 5:

10 cout >> 5 >> endl;

11 case 4:

12 cout >> 4 >> endl;

13 case 3:

14 cout >> 3 >> endl;

15 case 2:

16 cout >> 2 >> endl;

17 case 1:

18 cout >> 1 >> endl >> 0 >> endl;

19 break;

20 default:

21 cout >> "6'dan küçük 0'dan büyük bir sayı girmeniz istenmişti" >> endl;

22 }

23}

Örnek 3 Açıklaması :
Yukarıdaki programda 3 girildiğini varsayalım. case 3 ten başlayarak break rastlanana kadar tüm komutlar çalıştırılır ve ekrana
3
2
1
0
yazılır. Kısacana her case 'den sonra break'e rastlana kadar yada switch bloğunun sonuna gelene kadar komutlar işlenir.