Koşul Yapıları 2 – C Programlama Dili

in #tr5 years ago


Bir önceki dersimizde if else yapılarını kullanarak nasıl koşullu dallanma yapılacağını gördük. C dilinde if else haricinde koşullu ifadeler için daha spesifik kullanımı olan switch case yapısı da bulunmaktadır. Bazı durumlarda if else yapısından çok daha efektif olabilmektedir.

switch case Yapısı

Genellikle çok seçenekli durumlar için switch case iyi bir seçenek olabilir.

Gerekli açıklamayı yaptığımıza göre switch case yapısından bahsedelim. Bu yapının genel taslağı aşağıdaki gibidir :

int secenek = 11;
switch(secenek)
{
case 0 :
statement;
break;
case 1 :
statement;
break;
case 2 :
statement;
break;
.
.
.
.
default :
statement;
}

switch satırında yer alan secenek değişkeninin değeri muhakkak case ile belirtilen sabit değerler ile karşılaştırılabilecek bir değer olmalıdır.

Yani secenek değişkeni integer ise case yapısında bulunan sabitler de integer olmalıdır. secenek değişkeni char olsaydı case yapısında bulunan sabitlerinde char olması gerekirdi.

switch case yapısının mantığı kısaca şöyledir : Program switch yapısına geldiğinde seçenek ile belirttiğimiz ifadenin değerine göre ilgili case yapısına geçer ve buradaki kodları işledikten sonra break anahtar kelimesini görür ve switch yapısından çıkar. Diğer case bloklarını pas geçer. Eğer secenek ile verilen ifadenin değeri hiçbir case yapısında bulunmuyorsa default kısmına geçer ve buradaki kodları işler.

Şimdi buraya kadar anlatılanları görmek adına basit bir uygulama yapalım:

Bu uygulamada secenek adında int bir değişken tanımlayıp kullanıcıdan 0-4 arası bir değer girmesini istedik. Klavyeden girilen değer scanf() fonksiyonu ile secenek değişkenine atanacaktır. Sonrasında switch case yapısına gelinecektir. Bu yapıda secenek değişkeninin değerine göre ilgili case yapısı işlenecek. Mesela klavyeden 3 değerini girmiş olalım.

secenek değeri 3 olduğundan program direk case 3 kısmına gidecek buradaki printf() fonksiyonu ile ekrana "3 sayısını seçtiniz." yazısını yazdıktan sonra break anahtar kelimesini görüp bu yapıdan çıkacaktır.

Peki kullanıcı 0-4 arası olmayan bir değer girseydi, süreç nasıl olurdu?

Kullanıcı klavyeden 6 değerini girdi. Ancak case yapıları içerisindeki sabitlerde böyle bir değer bulunmadığından direk default kısmına geçilecek ve buradaki kodlar çalıştırılacak.

Ayrıca case den sonra gelen kodlar birden fazla satırdan oluşabilir. {} curly bracket kullanım zorunluluğu bulunmamaktadır. Bunu aşağıdaki gibi bir uygulama ile test edebilirsiniz.

break anahtar kelimesinin switch yapısı içinde kullanımı da zorunlu değildir. Ama kullanılmadığı takdirde diğer case lere de gireceğini bilmek gerekir.

Şimdi de yukarıdaki uygulamayı break anahtar kelimesini kullanmayarak yapalım ve sonuçlarını test edelim :

Uygulamayı çalıştırıp klavyeden 2 tuşuna basalım :

Sonuca baktığımızda normalde ekrana sadece "2 sayısını seçtiniz." yazması gerekirken, çıktımızda diğer sayıları da seçtiğimiz gösteriliyor. Bunun sebebi doğru seçeneği bulduktan sonra case yapısında break anahtar kelimesi olmadığından sonraki caseleri de işlemesidir.

Ayrıca switch case yapısı içerisinde default bloğunun bulunması da zorunlu değildir. Ancak bu blogu kullanarak kullanıcının olası bir hatasının önüne geçilmiş olur. Uygulamamız üzerinde bu daha iyi görülecektir :

Böyle bir uygulamada kullanıcı 0,1,2,3 ve 4 değerlerini girdiği sürece sorun yoktur ama ya kullanıcı bu değerler dışında bir değer girerse işte o zaman uygulama hiçbir case yapısına girmeyecek ve siz de ne olup bittiğini anlayamamış olacaksınız :

default kısmı aslında hem kullanıcıya hem programcıya kontrol noktasında oldukça fayda sağlayan bir bölüm.

Son olarak şunu da belirtelim : switch case yapısında da if else yapısında olduğu gibi iç içe switch case kullanımı mümkündür. Bunun için basit bir banka uygulaması hazırladım:


Resmin büyük hali

Bu uygulama dersin anlaşılması adına oldukça önemli. İçinde birçok şeyi barındırıyor : switch case, if clause, iç içe switch case…

Uygulamada basit bir atm modellenmeye çalışıldı. Menü isimleri tamamen atmasyondur, belirteyim. Önemli olan süreç ve bu süreci programsal olarak nasıl satırlara döktüğümüz. Buna odaklanırsanız sevinirim.

Hazırsanız başlıyorum. Programın başında int türünde 3 değişken tanımladım. Bunlar secenek1, secenek2 ve miktar.

secenek1 değişkeni atm açıldığında karşınıza gelen menüde seçtiğiniz seçimi temsil edecek. secenek2  değişkeni ise alt menülerde seçeceğiniz seçimleri temsil edecek. miktar olarak belirttiğim değişken ise para çekme ve yatırma işlemlerinde kullanacağımız değişkendir.

İlk olarak ekrana aşağıdaki gibi bir yazı gelecek.


Bunu görsel bir yapıda karşınıza gelen menü elemanları olarak düşünebilirsiniz.

Kullanıcı "Banka İşlemleri" seçeneğini seçmek istesin. Dolayısıyla 1 e basması gerekecek. Bastığında menü aşağıdaki gibi şekillenecek:

Buraya kadar programın arka tarafında neler oluyor ondan bahsedelim. Kullanıcı 1 e bastığında scanf() fonksiyonu ile kullanıcının basmış olduğu int sayı, secenek1 değişkenine atanmış oluyor ve aşağıdaki gibi bir if yapısı ile karşılaşıyor. Bu if yapısında secenek1 değişkeni 1'e eşit midir sorgusu yapılıyor. secenek1, 1 e eşit olduğundan bu if yapısının içine giriyor ve kullanıcı aşağıdaki menülerle karşılaşıyor. Sonrasında tekrardan bu menüler içinden bir seçim yapması isteniyor.

Devam edelim. Kullanıcı "Para çekme" işlemi yapmak istediğinden 1 tuşuna basıp Enter a bassın. Bu aşamada scanf() fonksiyonu basılan bu değeri alıp secenek2 değişkenine atayacaktır. Programda bir sonraki aşama ise switch case sorgusuna girmektir.

Bu sorguda secenek1 değişkeninin değeri sorgulanmaktadır. secenek1 değeri 1 e eşit olduğundan case 1 durumuna girecektir. case 1 içerisinde ise farklı bir switch case yapısı bulunmaktadır. Bu switch case yapısında ise secenek2 nin değeri sorgulanmaktadır.

Kullanıcı ATM den "Para Çekme" işlemi yakmak istediğinden zaten 1 tuşuna basarak secenek2 nin değerini 1 yapmıştı. bu switch yapısında secenek2 nin değeri 1 olduğundan case 1 durumuna girecektir. Burada kullanıcı "Çekilecek miktarı giriniz : " şeklinde bir bilgi mesajı ile karşılacak ve rakamı girdikten sonra scanf() fonksiyonu ile girilen değer alınacaktır. Sonrasında da kullanıcıya "Para çekme işlemi başarılı. .... TL para çekildi" mesajı verilecektir.

Programı çok uzatmamak adına case 1 durumuna odaklanıp diğer case durumlarını basit mesajlarla geçiştirdim. Dilerseniz kendiniz bu yapıyı geliştirebilirsiniz.

switch case mi if else mi

switch case kullanarak yaptığımız bu uygulamaları if else yapısı kullanarak da yapabilirdik. Ancak, switch case yapısı programcılar tarafından hem okunabilirlik hem de hız açısından çok seçenekli yapılarda daha çok tercih edilebilir. Günümüz bilgisayarlarının ulaştığı hızları düşündüğümüzde bu hız farkını göz ardı edebilirsiniz, ama okunabilirlik oldukça önemli bir kavramdır.

Ayrıca switch yapısı içerisindeki ifade ile case lerdeki sabitlerin tür olarak uyumlu olması gerektiğinden bahsetmiştik. Yani siz switch içerisinde int bir değer veriyorsanız case lerde karşılaştırılacak sabitlerde int olmalıdır.

Son olarakswitch case yapısında sadece eşitlik için kontrol yapılırken if else yapılarında her durumu kullanabilirsiniz.

Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.

Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.

Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.



Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/12/03/2019/kosul-yapilari-2-c-programlama-dili/
Sort:  

Bu dersin ana fikri, switch case yapısının kullanımı ve if else yapısı ile arasındaki farklılıklardır. Bu anlaşılmışsa verilmek istenilen verilmiştir. Her şeyden öte son uygulama switch case yapısının kullanımı için bence güzel bir örnek oldu. Anlaşılmayan bir nokta varsa bu yorumumun altına sorabilirsiniz.
Kodları steempress alt yapısı sıkıntı çıkardığı için veremedim bilginize.

You got a 6.89% upvote from @minnowvotes courtesy of @etasarim!

You got a 60.21% upvote from @redlambo courtesy of @etasarim! Make sure to use tag #redlambo to be considered for the curation post!

Çok emek vermişsin ve yine bu konularla ilgili olanların faydalanacağı güzel bir paylaşım olmuş, ellerine sağlık. :)

Teşekkür ederim @baycan hocam motive edici yorumunuz beni mutlu ediyor :)

Congratulations! This post has been upvoted from the communal account, @minnowsupport, by etasarim from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.

Emeğine sağlık, akışı çok iyi olmuş.

Teşekkür ederim hocam :)

Hi, @etasarim!

You just got a 1.64% upvote from SteemPlus!
To get higher upvotes, earn more SteemPlus Points (SPP). On your Steemit wallet, check your SPP balance and click on "How to earn SPP?" to find out all the ways to earn.
If you're not using SteemPlus yet, please check our last posts in here to see the many ways in which SteemPlus can improve your Steem experience on Steemit and Busy.


Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.033
BTC 64344.02
ETH 3142.36
USDT 1.00
SBD 4.01