C PROGRAMLAMA Program AkıĢ Kontrol Yapıları Normal Ģartlarda C dilinde bir programın çalıĢması, komutların yukarıdan aĢağıya doğru ve sırasıyla iĢletilmesiyle gerçekleĢtirilir. Ancak bazen problemin çözümü, bir yada birden fazla koĢula bağlı olarak, yapılacak iĢ yada iĢlem adımlarına karar vermek suretiyle gerçekleĢtirilebilir. C dilinde bu amaçla kullanılan üç farklı koĢul (ġART) komutu bulunmaktadır. if deyimi ?: üçlü Ģart operatörü (ternary conditional) switch çoklu seçim deyimi (multiply selection stetement) if Deyimi Verilen durum yada koĢula göre istenilen iĢlem yada iĢlemleri gerçekleĢtirmek için kullanılır. DeğiĢik kullanım biçimleri vardır. Tek alternatifli if; Bu durumda koĢulun sonucu DOĞRU (true), baĢka bir deyiĢle EVET ise; koĢuldan hemen sonra gelen komut1 satırı veya satırları çalıĢır. KoĢulun sonucu YANLIġ (false), yani HAYIR ise; IF komutundan sonra gelen komut2 satırı çalıĢtırılır. KoĢul doğru olduğunda birden fazla komut satırı çalıĢacaksa bu komutlar blok { - } içinde yazılmalıdır. if Deyimi İki alternatifli if; Bu durumda koĢul doğru ise komut1 satırı veya satırları yanlıĢ ise komut2 satırı veya satırları çalıĢacaktır. Birden fazla komut satırları için blok iĢareti { - } kullanılmalıdır. if Deyimi - Örnek ?: Üçlü Ģart operatörü Bu operatör üç adet operand alır. C diline özgü bir operatördür. Genel kullanım biçimi Ģu Ģekildedir: operand1 ? operand2 : operand3 operand1 ifadesinin sonucu doğru (true) ise operand2, yanlıĢ (false) ise operand3 çalıĢtırılır. ortalama >= 60 ? printf(“Geçti”) : printf(“Kaldı”); Önemli bir nokta mantıksal iĢlemleri gerçekleĢtirirken dikkat edilemsi gereken önemli bir nokta vardır. Buda, mantıksal iĢlemlerde 0 (sıfır) yanlıĢı (false) ifade eder, sıfırdan farklı herhangi bir değer doğruyu (true) ifade etmesidir. Bu durumda aĢağıdaki kodun çıktısı ne olur ? switch çoklu seçim deyimi Bu deyim verilen ifadenin değerine göre verilen komut yada komut satırlarını çalıĢtırır. Verilen ifadenin değerinin sıralı giden (ordinal) olması gerekir. Bu ifade için kullanılacak değiĢken tipleri int ve char olabilir, float yada double gibi ondalık değerler olamaz. switch sözcüğünün yanındaki Ġfadenin değeri, blok içindeki case sözcüklerinin yanında verilen değerlerden hangisine uyuyorsa o satırdaki komut yada komutlar çalıĢtırılır. Switch – örnek program Görüldüğü üzere bu kodda bir problem var ? Switch – örnek program Bir önceki kodda break sözcüğü yazılmadığı için program, uygun case sözcüğündeki komutu çalıştırdıktan sonra, sırayla geri kalan tüm komutları da çalıştırmıştı. Burda ise her bir case sözcüğüne break ifadesini ekledik. Bu sayede program uygun case sözcüğündeki komutu çalıştırdı ve switc bloğu sonlandı. Döngüler (Loops) Algoritma içerisinde gerçekleĢtirilen belli adımların tekrarlanması sonucu problem çözümüne gidilebilir. Döngüler sayesinde geliĢtirilen program içerisinde gereksiz kod satırlarının giderilmesi sağlanır. Ġyi bir algoritma problemi olabilecek en kısa adımda ve en etkili biçimde çözebilendir. Örneğin programcının adını ekrana 10 kere yazan bir program düĢünelim. ġimdiye kadar öğrendiğimiz verilerle bu iĢlemi yandaki gibi gerçekleĢtirebiliriz. Fakat böyle bir iĢlemin 100 kere yada daha fazla tekrarla yapılması istendiğinde ne olacak ? Bu durumda döngüler bize yardımcı olacak Sayaç kontrollü döngüler Yapılacak tekrar miktarının bilindiği durumlarda döngü bir sayaç kullanılarak tasarlanabilir. Sayaç aslında tekrar edilme iĢleminin ne kadar yapıldığını tutan bir değiĢkendir. Böyle sayaç kontrollü bir döngüde olması gereken temel öğeler Ģunlardır. Döngüde bir sayaç değiĢkeni olmalıdır. Bu değiĢken döngü sayacı olarak bilinir. Döngü sayacına bir atama ifadesiyle ilk değer verilir. Döngü sayacının değerinin sınır değere gelip gelmediği kontrol edilir Döngünün gövdesinin her çalıĢmasından sonra, sayacın değeri bir artırma yada eksiltme iĢlemi ile değiĢtirilir. Sayaç kontrollü döngüler ġimdi programcının adını ekrana 10 kere yazdıran programı döngülerle tekrar gerçekleĢtirelim. Görüldüğü gibi döngüler sayesinde printf() fonksiyonunu bir sefer kullanarak programcının ismini ekrana 10 kere yazdırabildik. Artık bu iĢlemi 100 kerede tekrarlasak 1000 kerede tekrarlasak mevcut kod satırı sayısında bir değiĢiklik olmayacak. goto komutu programın yapısallığını ve okunabilirliğini azalttığı için programlamada pek tavsiye edilmez. While döngüsü Döngü oluĢturmanın C dilinde bir çok yolu vardır. Bunlardan en basiti while döngüsüdür. Gözcü kontrollü döngüler (sentinel controlled loops) ÇalıĢtırılması gereken adımların tekrar sayısının bilinmediği problemlerde program, kullanıcının dıĢarıdan belli bir değer veya değer gurubundan birini girdi olarak vermesiyle ya da program içerisinde üretilen belli bir değere göre sonlandırılır. Bu değer yada değerlere gözcü değeri (sentinel value) adı verilir. Gözcü kontrollü döngüler Burada kaç adet not girileceği belirtilmemiĢtir. Kullanıcı isterse 4 nottan sonra -1 , isterse de 100 nottan sonra -1 girebilir. Bu amaçla girilen not değeri, gözcü değeri ile kontrol edilir. Bu çözümde sınav notu olamayacak bir değer olan -1, kontrol değeri olarak seçilmiĢtir. for döngüsü for döngüsü özellikle tekrar edilen iĢlemlerin sayısı belli olduğunda kullanılan baĢka bir döngü yapısıdır. Bu tür durumlarda while deyiminden daha uygundur. Genel kullanım yapısı aĢağıdaki gibidir. Döngü içerisinde birden fazla komut tekrar edilecekse komutlar blok içerisine alınmalıdır. Programcının ismini ekrana 10 kez yazan programın for döngüsü ile yapılan versiyonu do – while döngüsü while döngüsü yapısına benzer. while döngüsünde koĢul en baĢta kontrol edilir ve koĢul sağlanmazsa döngü içine hiç girilmez. do-while döngüsünde ise koĢul en sonda kontrol edilir ve koĢul sağlanmazsa bile en az bir kez döngü içine girilir. Genel kullanım Ģekli aĢağıdaki gibidir. Ġç-içe Döngüler (Nested Loops) Bir döngü içerisinde baĢka bir döngü bulunuyorsa, bu tür yapılara iç-içe döngüler denir. Bu durumda içteki döngü dıĢtaki döngünün her adımında yeniden çalıĢtırılacaktır. DıĢtaki döngü 4 kere tekrarlanacaktır. Ġçteki döngü de dıĢtaki döngünün her tekrar ediliĢinde 3 kere tekrar edilecektir. Böylece içteki döngünün gövdesini oluĢturan atama ifadesi 12 kere tekrar edilmiĢ olacaktır. DıĢtaki for döngüsünden çıkıldığında, n değiĢkeni içerisindeki değer 12 olacaktır. break break Deyimi Bu komut daha önce switch – case yapısında kullanılmıĢtı. Döngü içinde kullanılan break komutunun amacı, çalıĢtığı anda döngüyü sonlandırarak döngü dıĢına çıkılmasını sağlamaktır. Programın iĢleyiĢi döngünün dıĢındaki ilk komuttan devam eder. continue continue Deyimi Döngü içinde kullanılan bu komutun amacı çalıĢtığı anda döngü içindeki geri kalan komutları iĢletmeden döngü baĢı yapılmasını sağlamaktır. Programın iĢleyiĢi döngü içindeki bu komuttan sonra verilen tüm ifadeler atlanarak döngü baĢına yönlendirilir.