if/else SEÇİM YAPISI
if/else SEÇİM YAPISI
if yapısı, koşul doğru ise belirlenen işi yapıyor, yanlış ise
belirlenen işi atlıyordu. if/else yapısı, programcıya koşul doğruysa
belli işleri, yanlışsa belli başka işleri yaptırabilme fırsatı verir.
Örnek olarak, aşağıdaki sahte kodu inceleyelim.
Eğer ( if ) öğrencinin notu, 60 ya da daha büyükse
"Geçtiniz yazdır
aksi takdirde ( else )
"Kaldınız" yazdır
Bu kodla, notu 60 ya da 60' tan büyük olan öğrenciler için Geçtiniz mesajı, notu 60' tan küçük olan öğrenciler için ise Kaldınız mesajı yazdırılacaktır. Her iki koşulda da yazdırma gerçekleştirildikten sonra sıradaki sahte kod işlenir. else yapısının gövdesinin de içeriden başlatıldığına dikkat ediniz.
İyi Programlama Alıştırmaları 3.3
if/else yapısının gövdelerini içeriden başlatmak.
İyi programlama Alıştırmaları 3.4
Eğer birden fazla seviyede içeriden başlamanız gerekiyorsa, her seviye aynı miktarda içeriden başlatılmalıdır.
Yukarıda yazdığımız sahte kodu, C'de yazmak istersek:
if ( not >= 60 )
printf ( "Geçtiniz\n" );
else
printf ( "Kaldınız\n" );
yazarız. Şekil 3.3'deki akış grafiğinde, if/else yapısının kullanımı gösterilmiştir. Bir kez daha, bu akış grafiğinde yalnızca dikdörtgen ve elmas sembollerinin kullanıldığına dikkat ediniz. Karar/işlem modelini vurgulamaya devam ediyoruz. Bir C programı oluşturmak için gerekli olabilecek boş, çift seçimli yapılardan mümkün olabildiğince fazlasını düşünün. Programcının görevinin, seçim yapılarını diğer kontrol yapılarıyla birleştirerek, algoritmanın gerektirdiği biçimde dikdörtgen ve elmas sembollerinin içini işlem ve kararlardan uygun olanlarıyla doldurmak olduğunu hatırlayın.
C, if/else yapısına oldukça benzeyen koşullu operatörü (?:) kullanmamıza imkan sağlar. Bu operatör, C' in üçlü tek operatörüdür. Bu operatör, üç operand alır. İlk operand ve operatör, koşullu deyimi oluşturur. İlk operand koşulun kendisidir. İkinci operand koşul doğru ise tüm koşullu deyimin değeri, üçüncü operand koşul yanlış ise tüm koşullu deyimin değeridir. Örneğin, aşağıdaki printf ifadesi
printf ( "%s\n", not >= 60 ? "Geçtiniz" : "Kaldınız" );
"not >= 60" koşulu doğru ise "Geçtiniz" bilgisini işleme koyan, yanlış ise "Kaldınız" bilgisini işleme koyan bir koşullu deyim içermektedir. printf'deki biçim kontrol dizesi içinde yer alan %s dönüşüm belirteci bir karakter dizesini yazdırmak için kullanılır. Böylelikle az önceki printf ifadesi , if/else ifadesiyle aynı işlemi yapar.
Bir koşullu deyimdeki değerler, çalıştırılabilecek işlemler de olabilir. Örneğin, aşağıdaki koşullu deyim ;
not >= 60 ? printf ( "Geçtiniz\n") : printf ( "Kaldınız\n" );
"Eğer not 60'tan büyükse ya da 60'a eşitse printf ( "Geçtiniz\n" ) " , aksi takdirde " printf ("Kaldınız\n" ) " biçiminde okunur. Bu da, az önceki if/else yapısıyla karşılaştırılabilir. İleride, if/else ifadelerinin kullanılamayacağı fakat koşullu operatörlerin kullanılabileceği bazı durumlardan bahsedeceğiz.
Yuvalı if/else yapıları, if/else yapıları içerisine başka if/else yapıları yerleştirerek birden fazla koşulu aynı anda test etmemizi sağlar. Örneğin, aşağıdaki sahte kod, öğrencinin notu 90'a eşit ya da 90'dan büyükse A, 80' e eşit ya da 80'den büyükse B, 70' e eşit ya da 70'ten büyükse C, 60' a eşit ya da 60'tan büyükse D, diğer durumlarda F yazdıracak biçimde tasarlanmıştır.
Bu sahte kod C'de aşağıdaki biçimde yazılabilir:Eğer(if) öğrencinin notu 90'a eşit ya da 90'dan büyükse
"A" yazdır
Aksi takdirde(else)
Eğer(if) öğrencinin notu 80'a eşit ya da 80'dan büyükse
"B" yazdır
Aksi takdirde(else)
Eğer(if) öğrencinin notu 70'a eşit ya da 70'dan büyükse
"C" yazdır
Aksi takdirde(else)
Eğer(if) öğrencinin notu 60'a eşit ya da 60'dan büyükse
"D" yazdır
Aksi takdirde(else)
"F" yazdır
if ( not >= 90 )
printf("A\n");
else
if ( not >= 80 )
printf("B\n");
else
if (not >= 70)
printf ("C\n");
else
if ( not >= 60 )
printf ( "D\n" );
else
printf ("F\n" );
Eğer not, 90'a eşit ya da 90'dan büyükse ilk dört durumun tümü birden doğru olacak ancak sadece ilk karşılaştırmadan sonraki printf çalıştırılacaktır. Bu printf uygulandıktan sonra, if/else yapısının en dıştaki else kısmı atlanacaktır. Çoğu C programcısı, yukarıdaki if yapısını aşağıdaki biçimde yazmayı tercih eder:
if ( not >= 90 )
printf("A\n");
else if ( not >= 80 )
printf("B\n");
else if (not >= 70)
printf ("C\n");
else if ( not >= 60 )
printf ( "D\n" );
else
printf ("F\n" );
C derleyicileri, boşlukları atladığı için yukarıdaki iki if yapısı da birbirine eşittir. İkinci olarak yazdığımız if yapısı , kodun sürekli olarak sağa doğru ileriye gitmesini engellediği için daha çok tercih edilir. İlk gösterdiğimiz şekilde içeri doğru yazma bir satırda çok az boşluk kalmasına, bu sebepten de satırların ayrılmasına sebep olarak, programın okunulabilirliğini azaltır.
if seçim yapısı, gövdesinde yalnızca tek bir ifade bekler. Bir if yapısının gövdesinde, birden fazla ifade bulundurmak istiyorsak bu ifadeleri küme parantezinin içine almamız gerekir ({ }). Küme parantezleri içinde yer alan ifadelere birleşik ifade denir.
Yazılım Mühendisliği Gözlemleri 3.1
Birleşik ifade, bir programda tek bir ifadenin yerleştirilebileceği her yere yerleştirilebilir.
Aşağıdaki örneğimiz, if/else yapısının else kısmında birleşik ifade içermektedir
if ( not >= 60 )
printf ( "Geçtiniz\n" );
else {
printf (" Kaldınız\n" );
printf (" Bu dersi tekrar almalısınız\n" );
}
Bu durumda, not 60'tan küçük olduğunda program, else yapısının gövdesindeki iki printf ifadesini de çalıştıracak ve ekrana
Kaldınız.
Bu dersi tekrar almalısınız
yazdıracaktır. else kısmındaki iki ifadenin de küme parantezleri içerisine yazıldığına dikkat ediniz. Bu küme parantezleri önemlidir. Küme parantezleri olmadan
printf (" Bu dersi tekrar almalısınız\n ");
ifadesi, if / else yapısının else kısmının gövdesinin dışında kalacak ve notun 60'tan küçük ya da büyük olmasına bakmaksızın mutlaka çalıştırılacaktı.
Genel Programlama Hataları 3.1
Bir birleşik ifadenin yazımında küme parantezlerini unutmak.
Yazım hataları derleyici tarafından yakalanır. Mantık hataları ise çalışma zamanında ortaya çıkar. Ölümcül bir mantık hatası programın aniden sonlanmasına sebep olur. Ölümcül olmayan mantıksal hatalar, programın çalışmaya devam etmesine izin verir. Ancak yanlış sonuçlar üretir.
Genel Programlama Hataları 3.2
Tek seçimli if yapılarında koşuldan sonra noktalı virgül koymak bir mantık hatası, çift seçimli if yapılarında ise, bir yazım hatasıdır.
İyi Programlama Alıştırmaları 3.5
Bazı programcılar, birleşik ifadeler yazacaklarında ifadeleri yazmadan önce küme parantezlerini yazarlar. Daha sonrada, bu küme parantezlerinin arasına ifadeleri yerleştirirler. Böylece küme parantezlerini unutma durumundan kurtulmuş olurlar.
Yazılım Mühendisliği Gözlemleri 3.2
Birleşik ifadelerin tek bir ifadenin yerleştirilebileceği her hangi bir yere yazılabilmesi gibi , ifade yazmamak; yani boş bir ifade yazmakta mümkündür. Boş ifadeler, ifadenin olması gereken yere yalnızca noktalı virgül konarak oluşturulur.
Bu kısımda birleşik bir ifadenin yazım biçimini tanıttık. Birleşik bir ifade, bildirimler de içerebilir. ( main fonksiyonun gövdesinde yaptığımız gibi ) Eğer birleşik ifadede bildirim yapılırsa buna blok denir. Bir blokta bildirimler, herhangi bir işlem ifadesinden önceye yerleştirilmelidir. Blokların kullanımını 5.ünitede anlatacağız. 5. üniteye kadar, blokları kullanmaktan kaçınınız. ( main fonksiyonunun gövdesi hariç )
Bilinmesi Gerekli
Arduino

Arduino ile bilgisayar programlarınızı gerçek dünyaya taşıyabilirsiniz.
İlk Transistör

Bell laboratuvarlarında icat edilen ilk transistör







