421 likes | 802 Views
BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 2 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). Konsol Üzerinde Türkçe Karakterler Görebilmek İçin…. İlişkisel Operat ö rler. İlişkisel operatörler test ettikleri durumun sonucuna göre 1 ( true ) veya 0 ( false ) değerini üretirler.
E N D
BM-104 Nesneye Yönelik Programlama Bahar2013 (2. Sunu) (Yrd. Doç. Dr. Deniz Dal)
İlişkiselOperatörler İlişkisel operatörler test ettikleri durumun sonucuna göre 1 (true) veya 0 (false) değerini üretirler.
Karar Verme (Basit “if” Yapısı) • if yapısıkullanılarak (birkoşul test edilerek - condition) bir program kararverebilirvefarklıişlemleryapabilir. Bu “koşullar”birsonraki slide ta görülebileceğigibiilişkiseloperatörlerkullanılarakoluşturulur. if(koşul) { } • Eger “koşul”“true”iseparanteziçindeki (gövdedeki) deyimlerişletilir. “false”ise eğer gövdedekideyimlerişletilmezve programın akışı kapananparantezdensonrakisatıraatlar. • Gövde tek bir deyimden oluşuyorsa parantezlerin kullanımı zorunlu değildir.
“if” Şartlı Deyimi (Karar Yapısı) if(not>=60) cout<<"gecti"; true not >= 60 “gecti” yazdir false “if” Karar Yapısı Akış Diyagramı (flowchart)
Dikkat!!!!! int a=3; if(a=6) cout<<"Bora"<<endl; Yukarıdaki kod parçasında if deyiminin koşulu olarak a==6 ilişkisel testi yerine sehven yapılan bir hata neticesinde a=6 atama deyimi kullanılmıştır. Atama deyimleri her zaman true olarak değerlendirilen bir işlem gerçekleştirirler. Dolayısıyla bu örnek için, yaptığımız hata yüzünden, if bloğunun içerisine girmiş oluruz. (Aynı zamanda da a değişkeninin değerini 6 olarak güncellemiş oluruz.)
UYGULAMA • Kullanıcıdan klavye yoluyla alacağı 3 tam sayının en büyüğünü bularak ekrana yansıtacak bir C++ konsol uygulaması yazınız.
“if-else” Karar Yapısı if(not>=60) cout<<"gecti"; else cout<<"kaldi"; not >= 60 true false “kaldi” yazdır “gecti” yazdır “if/else” Karar Yapısı Akış Diyagramı (flowchart)
“if-else” Deyimi Yerine Soru İşareti (?) ve İki Nokta Üst Üste (:) Operatörlerinin Birlikte Kullanımı if(sayi1<sayi2) enKucuk=sayi1; else enKucuk=sayi2; enKucuk=sayi1<sayi2?sayi1:sayi2;
“if-elseif-else” Örnekleri if(not >= 90) cout<<"A"; else if(not >= 80) cout<<"B"; else if(not >= 70) cout<<"C"; else if(not >= 60) cout<<"D"; else cout<<"F"; if(not >= 60) cout<<"DersiGectiniz.\n"; //tek deyim else { cout<<"Kaldiniz.\n"; //çoğul cout<<"Bu dersitekraralmalisiniz.\n"; //deyim }
SayaçKontrollü (counter-controlled) DöngüEsasları • Böylebir döngüiçin gerekliolanlar: • Kontrol değişkeni (sayaç veya loop counter) • Kontrol değişkeninin ilk ve son değerleri • Döngünün sonaerişini test edecek durum (condition) • Döngü değişkeninin her seferinde artırılmasıya da azaltılması
while Döngüsü ile Sayaç Kontrollü Tekrar //while Döngüsüİle SayaçKontrollüTekrar #include <iostream> using namespace std; int main() { intsayac=1; //Deklarasyon ve İlk Değer Atama while(sayac<=10) //Tekrarlama Şartı { cout<<sayac<<endl; sayac=sayac+1; //Artım Miktarı } return 0; }
“while” Döngüsü Akış Diyagramı (Flowchart) sayac=1 Kontrol değişkenine ilk değerini ata sayac<=10 true cout<<sayac <<endl; sayac=sayac+1; Döngünün gövdesi Kontrol değişkenini1 artır false
Örneğe Devam Biröncekiörneğimizde not sayacıolarak 10 değerinikullandık vekullanıcıyı 10 adet not girmeyezorladık. Kullanıcının istediği kadar not girmesinivebunların ortalamasınıbulanbir program yazmakisteseydik eğer, bir“bitiş değeri” (sentinel value)kullanarakkullanıcının sisteme artık dahafazlaverigirişi yapmakistemediğinibelirtmesineizinvermemiz gerekirdi. cout<<"NotuGirya da -1 YazarakCik: "; cin>>not; while(not != -1)//Bitiş Değeri=-1 { toplam=toplam+not; notSayaci=notSayaci+1; cout<<"NotuGirya da -1 YazarakCik: "; cin>>not; }
“static_cast<>” Operatörü Ortalamalarçoğu kez integer değere sahipolmazlar. 7.21ya da 8.397gibiondalık kısmada sahipolabilirler. Bizimbiröncekiörneğimizdeortalama değerinidepolayan değişken bir integer olduğu için ondalık kısımlar (varolsa bile) değerlendirmeye alınmadılar. Bu yüzdenbunaizinverendouble değişkenikullanmalıyız ortalama için. #include <iostream> //cout ve cinKullanımıİçin #include <iomanip> //setprecisionKullanımıİçin using namespace std; int toplam; intnotSayaci; double ortalama; ortalama=static_cast<double>(toplam)/notSayaci; //ortalama=(double)toplam/notSayaci; cout<<"SinifOrtalamasi"<<setprecision(3)<<ortalama;
Bileşik Atama Deyimleri toplam=toplam+sayac; ya da toplam+=sayac; “+=“operatörüsağındaki değişkenisolundaki değişkenin değeriiletoplarvesonucuyinesolundaki değişkeneatar. c+=7; d-=4; e*=5; f/=3; g%=9;
Örnek //Önce 1 Artır ve Sonra 1 Artır Operatörleri #include <iostream> using namespace std; int main() { int c; c=5; cout<<c<<endl; //Ekrana 5 Yazdır cout<<c++<<endl; //Ekrana 5 Yazdır veSonra cyi 1 Artır cout<<c<<endl<<endl; //Ekrana 6 Yazdır c=5; cout<<c<<endl; //Ekrana 5 Yazdır cout<<++c<<endl; //cyi 1 Artır veEkrana 6 Yazdır cout<<c<<endl; //Ekrana 6 Yazdır return 0; }
4 Farklı 1 Artırma Deyimi a=a+1; ya da a+=1; ya da a++; ya da ++a;
“for” Döngüsü //for DöngüsüileSayaçKontrollüTekrar //İlk Değer Atama, Tekrarlama Şartı ve Artım Miktarı for //Yapısının İçinde #include <iostream> using namespace std; int main() { for(intsayac=1;sayac<=10;sayac++) cout<<sayac<<endl; return 0; }
“for” Döngüsü “while” Döngüsüne Dönüştürülebilir (Ya da Tam Tersi) for(intsayac=1;sayac<=10;sayac++) { cout<<sayac<<endl; } intsayac=1; while(sayac<=10) { cout<<sayac<<endl; sayac++; }
“for” DöngüsüÖrnekleri • Kontrol değişkenini 1’den 100’e kadar tek tek artıran “for” döngüsü for(int i=1;i<=100;i++) • Kontrol değişkenini 100’den 1’e kadar tek tek azaltan “for” döngüsü for(int i=100;i>=1;i--) • Kontrol değişkenini 7’den 77’ye kadar 7’şer artıran “for” döngüsü for(int i=7;i<=77;i+=7)
“break” ve”continue” Deyimleri • Döngü içlerinde programın akış kontrolünü değiştirmek için bu deyimleri kullanırız. • “break” deyimi while, for veya switch yapılarının içinde kullanıldığında bu yapılar ani bir şekilde sonlandırılır. • “continue” deyimi fordöngüsü içerisinde kullanıldığında bu deyimden sonra gelen komutlar atlanır ve döngü bir sonraki iterasyona başlar.
Soru: Aşağıdaki program ekrana ne yazdırır? for(inti=1;i<=10;i++) { if(i==5) break; cout<<i<<" "; } Soru: Aşağıdaki program ekrana ne yazdırır? for(inti=1;i<=10;i++) { if(i==5) continue; cout<<i<<" "; }
Sonsuz Döngü (1. Versiyon) #include <iostream> using namespace std; int main() { while(true)//Sonsuz Döngü { ………. if(…….)//KullanıcıDoğruTahmindeBulunduysa break; } return 0; }
Sonsuz Döngü (2. Versiyon) #include <iostream> using namespace std; int main() { booldevamEt=true; while(devamEt)//Sonsuz Döngü { ………. if(…….)//KullanıcıDoğruTahmindeBulunduysa devamEt=false; } return 0; }
Sonsuz Döngü (3. Versiyon) #include <iostream> using namespace std; int main() { for(;;)//Sonsuz Döngü { ………. if(…….)//KullanıcıDoğruTahmindeBulunduysa break; } return 0; }
“switch-case” ile Çoklu Seçim cin>>secenek; secenek= toupper(secenek); switch(secenek) { case 'A': FunctionA(); break; case 'B': FunctionB(); break; case 'C': break; //Hiçbir Şey Yapma default: //Beklenen Bir Karakter Girilmediyse cout << "Uzgunum, " <<secenek<< " hicbir fonksiyona uymuyor. Lutfen tekrar dene.\n\n"; } if(secenek=='A') FunctionA(); else if(secenek=='B') FunctionB(); else if(secenek=='C') ; else cout<< "Uzgunum";
MantıksalOperatörler • Bazıkararvermedurumlarındailişkisel testlerin gerçekleştirebildiklerinden dahakomplekstestlere ihtiyaç duyabiliriz vebubasittestlerimantıksaloperatörler yardımıylabirleştirerekamacımızaulaşırız. • Bu mantıksaloperatörler: • MantıksalVE (AND) (&&) • Mantıksal VEYA(OR) (||) • Mantıksal DEĞİL(NOT) (!) Mantıksal operatörler test ettikleri durumun sonucuna göre 1 (true) veya 0 (false) değerini üretirler.
MANTIKSAL VE (&&) DoğrulukTablosu İFADE 1 İFADE2 İFADE1&&İFADE2 false false false false true false true false false true true true
MANTIKSAL VEYA (||) DoğrulukTablosu İFADE 1 İFADE2 İFADE1||İFADE2 false false false false true true true false true true true true
MANTIKSAL DEĞİL (!) DoğrulukTablosu İFADE !İFADE false true true false
Örnekler • if((isim=="Deniz") && (yas>=30)) • if((donemOrtalamasi>=90)||(finalSinavi>=90)) • if((secenek=='A')||(secenek=='a')) • Matematikselolarak 3<x<7 C++ dilinde (3<x && x<7) • if(!(rakam==bitisDegeri)) ya da if(rakam!=bitisDegeri)
SORULAR Kullanıcıdan klavye yoluyla aldığı bir sayının bölenlerini veya çarpanlarını bularak ekrana basan bir C++ programı yazınız. Kullanıcıdan klavye yoluyla aldığı bir sayının ASAL sayı olup olmadığını belirleyen ve eğer ASAL sayı ise ASAL çarpanlarını ekrana basan bir C++ programı yazınız. Kullanıcıdan klavye yoluyla aldığı belirli bir aralık içerisindeki bütün ASAL sayıları ve bu ASAL sayıların sayısını ekrana basan bir C++ programı yazınız. Kullanıcıdan klavye yoluyla aldığı iki sayının aralarında ASAL olup olmadığını bulan bir C++ programı yazınız. (4 ve 15 aralarında asaldır örneğin.) Kullanıcıdan klavye yoluyla aldığı 3 sayının En Büyük Ortak Bölenini (EBOB) bulacak bir C++ programı yazınız. Kullanıcıdan klavye yoluyla aldığı 3 sayının En Küçük Ortak Katını (EKOK) bulacak bir C++ programı yazınız. (15 sayısının katları: 15 30 45 60 75 ve 20 sayısının katları: 20 40 60tır. Dolayısıyla EKOK(15,20)=60 tır.) Kullanıcıdan klavye yoluyla aldığı 2 rasyonel sayıyı toplayıp en sade haliyle ekrana basacak bir C++ programı yazınız.