Her programlama dilinde olduğu gibi pic c programlamada da karar yapıları ile programımızı isteğimize göre yönlendirebilirz. Karar yapıları bir şartın doğru olup olmadığını kontrol ederek doğru olduğu sürece bir takım işlemler, doğru olmadığı sürece ise başka işlemler yapmamıza yardımcı olur
İki çeşit karar yapısı bulunur. Birincisi if-else yapısı, ikincisi ise switch-case yapısıdır.
İf – else yani Türkçe ifade ile Eğer – Değilse yapısı bir sınama sonucunda dönen değerin True (doğru) ya da False (yanlış) olmasına bakar. Eğer sınama doğru ise if küme parantezi arasındaki işlemleri yapar, eğer sınama sonucu yanlış dönerse else parantezi arasındaki işlemleri yapar.
Sözdizimi;
1 2 3 4 5 6 |
if(sınama){ // sınamayı kontrol et // eğer sınama doğru ise // buradaki kodları çalıştır }else{ // değilse, eğer sınama yanlış ise // buradaki kodları çalıştır } |
Bu yapılarda sınama mantıksaldır. Yani yapı sınmanın doğru mu yoksa yanlış mı döndüğüne bakar. Eğer sınama TRUE (doğru) sonuç döndürüryorsa if küme parantezi içerisindeki kodlar çalışır, hayır sonuç FALSE (yanlış) dönüyorsa else küme parantezi içerisindeki kodlar çalışır. Genellikle karşılaştıma ve mantıksal operatörlerle birlikte kullanılır. Kullanılabilir karşılaştırma operatörleri listesi aşağıda verilmiştir.
Operatörün her iki tarafındaki değer birbirine eşit ise True (doğru) sonuç döndür. Diğer durumlarda False (yanlış) değeri döndürür.
Sözdizimi; sayi1 == sayi2
Operatörün sağındaki ile solundaki değer birbirine eşit değil ise TRUE (doğru) sonuç döndürür, diğer durumlarda FALSE (yanlış) sonuç döndürür.
Sözdizimi; sayi1 != sayi2
Operatörün solundaki değer sağındaki değerden büyük ise TRUE (dğru) sonuç döndürür, diğer durumlarda yanlış sonuç döndürür.
Sözdizimi; sayi1 > sayi2
Operatörün solundaki değer sağındaki değerden küçük ise TRUE (doğru) sonuç döndürür, diğer durumlarda FALSE (yanlış) sonuç döndürür.
Sözdizimi; sayi1 < sayi2
Operatörün solundaki değer sağındaki değerden büyükse ya da her iki değer birbirine eşitse TRUE sonuç döndürür. Diğer durumlarda FALSE (yanlış) sonuç döndürür.
Sözdizimi; sayi1 >= sayi2
Operatörün solundaki değer sağındaki değerden küçükse ya da her iki değer birbirine eşitse TRUE sonuç döndürür. Diğer durumlarda FALSE (yanlış) sonuç döndürür.
Sözdizimi; sayi1 <= sayi2
Karşılaştırma operatörleri ile if-else yapısının kullanılmasına bakalım;
1 2 3 4 5 6 7 8 |
int sayi1 = 15; int sayi2 = 15; if(sayi1 == sayi2){ // sayi1, sayi2'ye eşit ise output_high(pin_d1); // port D'nin 1 nolu pinini 1 yap } else { // değilse output_low(pin_d1); // port D'nin 1 nolu pinini 0 yap } |
Yukarıda verdiğimiz kodlarda ilk iki satırda iki adet değişken tanımladık ve değişkenlerimize 15 değerini atadık. Dördüncü satırda if karar yapımızı oluşturduk. İki değişkenin değerinin birbirine eşit olup olmadığını kontrol ettik. Eğer değerler birbirine eşit ise if küme parantezi içerisindeki kolar çalışacaktır, eğer eşit değil ise else küme parantezi içerisindeki kodlar çalışacaktır. if(sayi1 == sayi2) kodumuzda if parantezi arasında sınama yapılmıştır ve sınama bize TRUE sonucunu döndürmüştür. Sonuç TRUE döndüğü için if küme parantezi içerisindeki kodlarımız çalışacak ve D1 çıkışımız 1 (aktif) olacaktır.
Bir başka örnek yapmak gerekirse;
1 2 3 4 5 6 7 8 |
int sayi1 = 15; int sayi2 = 22; if(sayi1 > sayi2){ output_high(pin_d1); } else { output_high(pin_d2); } |
Yukarıdaki örnekte ise sayi1 değişkeni değerinin sayi1 değişkeni değerinin sayi2 değişkeni değerinden büyük olup olmadığına bakılır. Eğer büyük ise if küme parantezi içerisindeki kodlar çalışır. Yani D1 pini aktif edilir. Büyük değilse else küme parantezi içerisindeki kodlar çalışır. Yani D2 pini aktif edilir.
Yukarıda gördüğünüz üzere sayi1 değişkeni değeri sayi2 değişkeni değerinden büyük değil. O halde D2 çıkışımız aktif olur.
Switch – Case yapısı, switch bölümünde belirtilen değerin her bir case adımında kontrol edilmesi mantığıyla çalışır. Case yapılarının herhangi birinde eşitleme sağlanırsa break komutu ile karşılaştırma sona erer.
Sözdizimi;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
switch(sayi1){ // sayi 1 değişkenini kontrool et case 1: // eğer değeri 1 ise //buradaki kodları çalıştır break; // kontrolden çık case 2: // eğer değeri 2 ise //buradaki kodları çalıştır break; // kontrolden çık case n: // eğer değeri n ise // buradaki kodları çalıştır break; // kontrolden çık default: // eğer yukarıdaki case'lerde eşitlik sağlanmazsa //buradaki kodları çalıştır break; // kontrolden çık } |
Şimdi bir örnek ile switch case yapısını inceleyelim.
“cikis” adında integer türü bir değişken oluşturalım ve değişkene atadığımız değere göre çıkış pinlerini aktif edelim;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
int cikis=5; switch(cikis){ case 0: output_high(pin_d0); break; case 1: output_high(pin_d1); break; case 2: output_high(pin_d2); break; case 3: output_high(pin_d3); break; case 4: output_high(pin_d4); break; case 5: output_high(pin_d5); break; case 6: output_high(pin_d6); break; case 7: output_high(pin_d7); break; default: output_d(255); break; } |
Yukarıdaki programımızda D5 numaralı pin çıkış verir. Çünkü değişken değerimiz 5’tir ve “case 5” komutumuz TRUE sonuç döndürmüştür. Dolayısıyla “case 5: “komutu altındaki “output_high(pin_d5);” komutumuz çalışmıştır. Ardından “break;” komutu ile karşılaştırma bitirilmiştir. Biz “cikis” değişkenine hangi numarayı verirsek, o numaraya ait case alanı çalışacaktır. Eğer biz cikis değişkenine 0-7 arası değerden farklı bir değer vermiş olsaydık, “default” bölümündeki kodlar çalışacaktı ve “output_d(255);” komutu ile D portunun tüm çıkışları aktif olacaktı.
Evet arkadaşlar bu dersimizi burada bitiriyoruz. Aklınızda kalan soru işaretlerini aşağıdaki yorumlar bölümünde yazarsanız yardımcı olmaya çalışırız.
Selametle…