BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.

Slides:



Advertisements
Benzer bir sunumlar
Karar Verme: Eşitlik ve Karşılaştırma Operatörleri
Advertisements

KOŞUL İFADELERİ onbirc.com/133.
switch - case Yapısı Döngü Yapıları
Bölüm 2: Program Denetimi
KOŞUL İFADELERİ GMGNKJG.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Karar ifadeleri ve Döngüler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
Operatörler.
Bölüm 3 – Yapısal Programlama
Yapısal Program Geliştirme – if, if-else
Program Kontrol İfadeleri
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Bilgisayar Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 8: Windows Formları
ALGORİTMALAR VE PROGRAMLAMAYA GİRİŞ
FONKSİYONLAR.
Koşul İfadeleri ve Akış Kontrolü Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir akış kontrolü oluşturabilmek için koşul ifadelerini.
Akış Kontrol Mekanizmaları
Kontrol Yapıları ve Döngüler
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 2: Koşula Göre İşlem Yapma
Çoklu dallanma seçimi: switch
PROGRAM DENETİM DEYİMLERİ
4. KONTROL VE DÖNGÜ KOMUTLARI
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 8.  Tamsayı Değerler (Integer) Tamsayılar, 10 tabanlı (decimal), 8 tabanlı (octal) veya 16 tabanlı (hexadecimal)
C++ Ders Notları 4.Ders (Kontrol ve Döngüler)
Bu Günkü Konular If yapısı ve karşılaştırma operatörleri
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
2. HAFTA 2. Hafta.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 5: Operatörler
3. HAFTA 3. Hafta.
BİLGİSAYAR programlama II
Döngü Komutları. for deyimi bir alt limitten, bir üst limite kadar programın belirli bir parçasını tekrar eder. for deyiminde sayaç artış oranı da verilmelidir.
BM-103 Programlamaya Giriş Güz 2012 (3. Sunu)
İnternet Programlama-I
Adım Adım Algoritma.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
5. HAFTA Mart Discussion: comp.soft-sys.matlab An unmoderated newsgroup that focuses on the.
Bölüm 4 Seçme Komutları Alıştırmalar
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
O R T L G İ M A A Ve Akış şemaları.
Algoritma ve Programlamaya Giriş Ders 5. C Programlama Dili - 2.
Algoritma ve Akış Şemaları
Bilgisayar Programlama BIL 107
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Dili Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H04
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
METHODLAR VE KOŞULLAR.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma
Excel’de VBA Programlama (Visual Basic Application)
PROGRAM KONTROL KOMUTLARI 1. if koşulu 2. if else koşulu
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Bilgisayar Programlamasına ve Veri Analizine Giriş
Bölüm 2: Program Denetimi
Discussion: comp.soft-sys.matlab
NİŞANTAŞI ÜNİVERSİTESİ
?: KARŞILAŞTIRMA OPERATÖRÜ
Sunum transkripti:

BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

Belirli bir koşula göre işlem yapılması istendiğinde en çok kullanılan komut kümesi if-else yapısıdır: if (koşul) koşul doğru ise yapılacak işlem else koşul yanlış ise yapılacak işlem Koşullar: büyük (>), küçük ( =), küçük eşit (<=), eşit (==), eşit değil (!=) NOT: => ve =< şeklinde yazım yanlıştır if - else

Başarı Notu Hesabı Programı #include main(){ unsigned int v, f, bn; printf("Vize Notu : "); scanf("%d", &v); printf("Final Notu : "); scanf("%d", &f); bn = v*0.3 + f* ; printf("Basari Notu = %d ", bn); if (bn >= 60) printf("basarili"); else printf("basarisiz"); } Başla "başarısız" Dur v f bn=v*0.3+f* bn>=60 Hayır Evet "başarılı" bn ? v, f ve bn değişkenlerini unsigned (yani işaretsiz) olarak tanımadık. Peki kullanıcı negatif değer girerse ne olur? printf içinde %d yerine %u kullanarak gözlemleyin.

Hafta 2, Örnek 3 (Klavyeden girilen 2 sayıdan birincisi büyük ise ikisini çarpan, değilse ikisini toplayan ve sonucu ekranda gösteren program) C Kodu ? Başla S Dur X Y S=X+Y X>Y Hayır Evet S=X*Y #include main(){ int X, Y, S; printf ("X : "); scanf("%d", &X); printf ("Y : "); scanf("%d", &Y); if (X > Y) S = X * Y; else S = X + Y; printf("S = %d", S); } C Kodu :

Kod Bloğu PASCAL ve C gibi yapısal programlama dillerinde program kodu bloklara ayrılır. PASCAL’da kod bloğu begin ile başlar end ile biter. C, C++, C# ve JAVA gibi dillerde ise { ile başar } ile biter. Şimdiye kadar bu işaretleri main() fonksiyonunun başını ve sonunu belirtmek için kullandık. Bazı durumlarda bir fonksiyonun içinde de bir kod bloğu oluşturmamız gerekebilir. Örneğin belirtilen koşul sağlandıysa (yada sağlanmadıysa) yapılacak iş birden fazla komutu içerdiği durumlarda blok içinde yazmamız gerekir: if (koşul) { koşul doğru ise yapılacak işlemler } else { koşul yanlış ise yapılacak işlemler }

Hafta 2, Örnek 3 (Farklı Çözüm) Başla S Dur X Y S=X+Y X>Y Hayır Evet S=X*Y #include main(){ int X, Y, S; printf ("X : "); scanf("%d", &X); printf ("Y : "); scanf("%d", &Y); if (X > Y) { S = X * Y; printf("X * Y = %d", S); } else { S = X + Y; printf("X + Y = %d", S); } S Aynı satırda iki yada daha fazla farklı ifade yer alabilir. Her ifade ; ile bittiği sürece hata vermez. Okunabilirliği arttırmak için kod bloğunun iç satırları dışındaki satırlardan 1 tab (~4 karakter) sağdan başlar.

Hafta 2, Örnek 13 (girilen 3 sayıdan hangisinin en büyük olduğunu bulan akış şeması) Başla a,b,c Dur En buyuk sayı a’dır a>b Evet Hayır a>c Evet Hayır b>c Evet Hayır En buyuk sayı b’dir En buyuk sayı c’dir #include main(){ int a, b, c; printf ("a : "); scanf("%d", &a); printf ("b : "); scanf("%d", &b); printf ("c : "); scanf("%d", &c); if (a > b) { if (a > c) { printf("en buyuk sayi a'dir"); } else printf("en buyuk sayi c'dir"); } else if (b > c){ printf("en buyuk sayi b'dir"); } else printf("en buyuk sayi c'dir"); }

Koşul içinde mantıksal operatörler Koşul bazen && (ve), || (veya), ! (değil) gibi mantıksal operatörleri içeren birleşik bir mantıksal ifade olabilir: if (bn >= 60 && bn < 70) printf ("CC"); if (bn >= 70 && bn < 80) printf ("CB"); if (bn >= 80 && bn < 90) printf ("BB"); if (bn >= 90 && bn < 95) printf ("BA"); if (bn >= 95) printf ("AA"); NOT: if (60 <= bn < 70) gibi bir ifade kullanılırsa derleyici hata vermez, fakat program hatalı çalışır. – Önce 60 <= bn karşılaştırmasını kontrol eder. Bunun sonucu ya true (1) yada false (0) olacaktır. Daha sonra 0 < 70 yada 1 < 70 kontrollerinden biri yapılacak ve her iki durumda da true üretilecektir. Koşulu her zaman true olacak olan bir if yazmak ile hiç yazmamak arasında bir fark yoktur. Koşul (bn >= 60 || bn < 70) olsaydı ???her durumda true olurdu

else if Önceki slaytta olduğu gibi koşul yanlış olduğunda yapılacak herhangi bir işlem yoksa, else ifadesini kullanmayabiliriz. Peki aşağıdaki gibi yazarsak ne olur: if (bn >= 60 && bn < 70) printf ("CC"); else if (bn >= 70 && bn < 80) printf ("CB"); else if (bn >= 80 && bn < 90) printf ("BB"); else if (bn >= 90 && bn < 95) printf ("BA"); else if (bn >= 95) printf ("AA"); Bu şekilde yazıldığında ilk koşul doğru ise diğer 4 koşulu kontrol etmez, ikinci koşul doğru ise altındaki 3 koşulu kontrol etmez, … Bu sayede program daha hızlı çalışır.

Dört İşlem Programı #include void main(){ int a,b,i; printf("ilk sayiyi girin : "); scanf("%d", &a); printf("ikinci sayiyi girin : "); scanf("%d", &b); printf("1)toplama, 2)cikarma, 3)carpma, 4)bolme"); printf("islemi secin [1-4]: "); scanf("%d", &i); if (i == 1) printf("sayilarin toplami : %d\n", a+b); else if (i == 2) printf("sayilarin farki : %d\n", a-b); else if (i == 3) printf("sayilarin carpimi : %d\n", a*b); else if (i == 4) printf("sayilarin bolumu : %d\n", a/b); } Yazılmasa da program çalışır ama gereksiz yere tüm if’ler kontrol edilir

switch-case Koşul Deyimi Çok seçenekli işlemlerde (menü gibi) birçok if / else if kullanmak yerine switch-case yapısı tercih edilebilir: switch (i) { case 1: …; break; case 2: …; break; case 3: …; break; case 4: …; break; … default: … }

switch-case ile dört işlem programı #include main(){ int a,b,i; printf("ilk sayiyi girin : "); scanf("%d", &a); printf("ikinci sayiyi girin : "); scanf("%d", &b); printf("1) toplama, 2) cikarma, 3) carpma, 4) bolme\n"); secim: printf("islemi secin [1-4]: "); scanf("%d", &i); switch(i){ case 1: printf("sayilarin toplami : %d\n", a+b); break; case 2: printf("sayilarin farki : %d\n", a-b); break; case 3: printf("sayilarin carpimi : %d\n", a*b); break; case 4: printf("sayilarin bolumu : %d\n", a/b); break; default: goto secim; } Kullanıcı 1 ile 4 arasında bir seçim yapmaz ise tekrar seçim yapılacak komut satırına goto ile yönlendiriliyor. Önceki programda son satırda else goto secim; yazarak benzer bir kontrolü sağlayabilirdik.

GoTo Goto komutunun kullanılabilmesi için program içinde yönlendirilecek olan satırdan önce bir etiket (label) tanımlanmalıdır. Bizim programımızda bu etiketin adı secim'dir. Etiket tanımı ; ile değil : ile biter. Farklı etiketler tanımlanabileceği gibi, aynı etikete birden çok yerden goto ile geri dönmek mümkün olabililir, fakat fazla goto kullanımı program akışının takibini zorlaştırır ve okunabilirliğini azaltır (spagetti kod adı verilen duruma neden olur). Bir sonraki dersimizde goto ile yapılan bu işi while döngüsü nasıl yapabileceğimizi göreceğiz (ve yapısal programlama kavramının gereği olarak, bundan sonra goto deyimini kullanmamaya gayret edeceğiz).

Programa Açıklama Satırı Ekleme Yazdığımız program kodunda değişkenleri, fonksiyonları, döngüleri, vs. ne için kullandığımızı açıkladığımız ilave satırlar yer alabilir. Bu satırları derleyicinin dikkate almaması için satırın başında // kullanırız (genellikle kod editörleri açıklama satırını farklı renkte gösterirler). Eğer açıklamamız kısa ise, yeni bir satır açmak yerine önceki satırın sonuna // ilave ederek açıklamayı yazmamız mümkündür (derleyici iki bölü işaretine yanyana gördüğü yerden itibaren satır sonuna kadar yazılanı göz ardı eder). scanf("%d", &i); //işlem seçimi yapılıyor Eğer birkaç satır uzunluğunda açıklama yazmak istiyorsak her satırın başına // koymak yerine ilk satırın başında /* ile başlayıp, son satırın sonunda */ ile bitirebiliriz. Yazdığımız programın bazı satırlarının göz ardı edilmesini istersek o satırları işaretleyip Dev C++'de Düzen menüsünden Yorumla seçiltiğimizde satırların başına // ekler.

Vücut kitle indeksi programı #include // Vücut kitle indeksi (VKİ), vücut ağırlığının (kg), // boy uzunluğunun (m) karesine bölünmesiyle hesaplanır main(){ float boy, kilo, vki; printf("boyunuz (cm) : "); scanf ("%f", &boy); printf("agirliginiz (kg) : "); scanf ("%f", &kilo); vki = kilo / (boy*boy/10000); printf("Vucut kitle ind. : %.1f ", vki); if (vki < 20) printf("(zayif)"); else if (vki >= 20 && vki < 25) printf("(normal)"); else if (vki >= 25 && vki < 30) printf("(kilolu)"); else if (vki >= 30 && vki < 35) printf("(sisman)"); else printf("(obez)"); } /* */

#include main(){ unsigned int sayi, tahmin, sayac = 1; srand (time(NULL));// bu satır silinirse aşağıdaki rand() // fonksiyonu hep aynı sayıyı üretir sayi = rand()%100;// rand fonksiyonunun ürettiği değerin // son iki hanesi sayi değişkenine atanır printf("0-99 arasi bir sayi tuttum"); tahmin: printf("\n%d. tahmin : ", sayac); scanf("%d", &tahmin); if (sayi > tahmin) { printf("tuttugum sayi daha buyuk"); sayac++; goto tahmin; } else if (sayi < tahmin) { printf("tuttugum sayi daha kucuk"); sayac++; goto tahmin; } else printf("Tebrikler, buldunuz"); } Sayı tahmin etme oyunu Bu slaydın notlar kısmında rand, srand ve time ile ilgili açıklamaları bulabilirsiniz.

NOT En çok yapılan hatalardan biri karşılaştırma operatörü olan == yerine = kullanmaktır. ÖRN: if (a=10) yazdığınızda derleyici hata vermez, ama karşılaştırma yapmak yerine a değişkenine 10 değerini atar ve if (10) karşılaştırması yapılır. C dilinde sıfır haricindeki tüm sayılar doğru (true) kabul edildiği için if bloğu içine girilir.

Örnek 1 : Ekran çıktısı ne olur? #include main(){ int a; printf("%d\n", a); printf("%d\n", a=5); if (a=10) printf("%d\n", a); printf("%d\n", a+=5); printf("%d\n", a==5); printf("%d\n", !a); printf("%d\n", true && false); printf("%d\n", !((1 || 0) && !1)); } a değişkenine 5 atanır a artık 10 a artık 15 a == 5 mi? false (0) 0 hariç tüm sayıların tersi 0'dır NOT: true ve false ifadeleri C++ dilinde kullanılabilir. Program kodunuzun dosya uzantısı cpp ise C++ için, c ise C dili için derlenir. C++ dilinde bool (1 bit) veri tipi de vardır. ~((1 ᴠ 0) ᴧ ~1)

Örnek 2 : Ekran çıktısı ne olur? #include int a = 5; main(){ int a = 10, b = 20; printf("%d\n", ++a); printf("%d\n", a++); printf("%d\n", a); printf("%d %d\n", a, b+=a); if (a = b) printf("%x", a); } Global olan a değişkeni tüm fonksiyonlar tarafından kullanılabilir. Ama main() içinde de bir a değişkeni olduğu için main() fonksiyonu kendi içindeki değişkeni kullanır. Önce a'nın değerini 1 arttırır sonra görüntüler Önce a'yı görüntüler sonra 1 arttırır (32) 10 = (20) 16 a = 32 b =

Ödev 1 Not Hesaplama Programını değiştirin: – Notlar arasında girilmezse uyarı mesajı görüntülenecek ve hatalı girilen vize yada final notu kullanıcıdan tekrar istenecek. – Öğrencinin Başarı Notu 60’tan az ise başarı notunun yanında sadece "Başarısız" değil, "Final sınavından en az … almalıydı" mesajı da görüntülenecek. – Programın sonunda “Devam ? [ E / H ]” sorusu sorulacak, eğer kullanıcı e yada E tuşuna basarsa program başa dönecek, başka bir tuşa basarsa program sonlanacak.

Ödev 2 Dört işlem programını değiştirin: – Ondalıklı sayılar ile işlem yapılabilsin. – Önce işlem seçimi yapılsın, sonra sayılar girilsin. – 5 numaralı işlem “çıkış” olarak tanımlansın. Kullanıcı 5’i seçmedikçe program başa dönerek çalışmaya devam etsin. – Programı hem if-else hem de switch-case ifadelerini kullanarak iki farklı şekilde yazın.

Ödev 3 Vücut kitle indeksi programını değiştirin: – Eğer girilen boy ve ağırlığa göre "zayıf" sonucu çıktıysa vki = 20 olması için alınması gereken kilo miktarı da yazılsın. – Eğer girilen boy ve ağırlığa göre normalin üzerinde bir sonuç çıktıysa vki = 24.9 olması için verilmesi gereken kilo miktarı da yazılsın.

Ödev 4 Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen programı yazın. Hafta 2, Örnek 14'te yer alan soldaki akış şemasına göre (kontrol ifadesiyle olan) çözümü yazınız. Programda goto kullanmanız gerekecektir. Önümüzdeki hafta döngüler anlatıldığında for döngüsü ile nasıl yapılacağı (sağdaki akış şemasına göre çözüm) gösterilecektir.