BİLGİSAYAR programlama II Program Dallandırma Komutları BİLGİSAYAR programlama II
şartli deyİm
Şartlı deyim Kullanımı: şart ? deyim1 : deyim2 şart: mantıksal bir deyim Eğer şart değeri doğru ise (sıfır değilse) sonuç olarak deyim1 verilir, eğer şart değeri yanlış ise (sıfırsa) sonuç olarak deyim2 verilir.
Örnek: cout << ( (Ortalama >= SinirDeger) ? “Gecer” : “Kalir” ); Eğer (Ortalama >= SinirDeger) şartı doğru (1) ise ekrana şunu yazacaktır: Gecer Eğer (Ortalama >= SinirDeger) şartı yanlış (0) ise ekrana şunu yazacaktır: Kalir
Örnek: cout << “\nKirlilik degeri = “ << Deger << “: “; if (Deger < Limit) cout << “Guvenli durum.\n”; else cout << “Zararli durum!\n”;
Aynı programın şartlı deyim ile yazımı cout << “\nKirlilik degeri = “ << Deger << “: “ << ((Deger < Limit) ? “Guvenli durum.\n” : “Zararli durum!\n”);
Örnek: Girilen sayının tersini hesaplama Tersi = (x == 0) ? 0 : 1/x; x değeri 0 olduğunda 1/x hesaplanamayacağından yukarıdaki ifade güvenlidir, dolayısıyla “divide-by-zero” hatasına neden olmaz.
Örnek: Girilen iki sayıdan büyük olanın bulunması int Deger1, Deger2, Buyuk; if (Deger1 > Deger2) Buyuk = Deger1; else Buyuk = Deger2; veya Buyuk = ( (Deger1 > Deger2) ? Deger1 : Deger2 );
Örnek: İki sayıdan büyüğünü bulan program. #include <iostream.h> #include <conio.h> #define max(x,y) (x>y) ? x : y main() { int a=7, b=9; int c = max(a, b); cout << c; getch(); }
SORULAR Klavyeden girilen iki sayı arasındaki mutlak farkı şartlı deyim kullanarak hesaplayan programı yazın. Klavyeden girilen iki sayıdan, büyük olandan küçük olanı çıkararak sonucu ekrana yazan programı yazın.
Klavyeden girilen iki sayıdan ilkini sonrakine bölerek sonucu ekrana yazan programı yazın. (Sıfıra bölme hatası vermemesi için şartlı deyim kullanılacaktır.)
Bir akaryakıt istasyonu alınan akaryakıt miktarı 20 litre ve üstünde olduğunda indirim %10 indirim yapmaktadır. Alınan yakıt miktarı (lt) ve yakıt litre fiyatı (TL) girildiğinde ödenmesi gereken tutarı hesaplayan programı ŞARTLI DEYİM kullanarak yazınız. KDV oranı %18’dir.
If-else
Koşula bağlı olarak programın bir parçasını aktif hale getirir. Kullanımı: if (koşul) deyim #1; else deyim #2; Koşul doğru ise deyim #1 aktif hale gelir, yanlış ise deyim #2 aktif hale gelir.
Veya if (koşul) { deyimler #1; } else deyimler #2; Koşul doğru ise 1 Veya if (koşul) { deyimler #1; } else deyimler #2; Koşul doğru ise 1. bloktaki komutlar (deyimler #1) aktif hale gelir, yanlış ise 2. bloktaki (deyimler #2) aktif hale gelir.
Örnek: if (ortalama >= 65) cout << “ gecti”; else cout <<”kaldi”; if (ortalama >= 50 && ortalama <= 65) cout <<” CC aldi”
Örnek: Klavyeden bilgisayara vize ve final notları girildiğinde, vizenin %40’ını, finalin %60’ını alarak başarı notunu hesaplayan, başarı notu 50 ve üzerinde ise ekrana geçti, aksi halde kaldı yazan program yazınız.
#include <iostream. h> #include <conio #include <iostream.h> #include <conio.h> main() { int vize, final, ortalama; cout << "vizeyi girin= "; cin>>vize; cout << "finali girin= "; cin >> final; ortalama = 0.4 * vize + 0.6 * final; cout << "ortalama= " << ortalama << endl; if (ortalama >= 50) cout << "gecti"; else cout << "kaldi"; getch(); }
Not: Program sonunda kullanılan getch() komutu, klavyeden bir tuşa basılmasını ve basılan tuşun okunabilmesini sağlayan komuttur. conio.h kütüphanesinde bulunmaktadır. Burada kullanılmasının nedeni, program sona erdiğinde program çalışma ekranının kapanmadan önce ekranı görebilmek içindir.
Örnek: Gün, ay ve yıl olarak girilen iki tarih arasındaki farkı yine gün, ay ve yıl olarak hesaplayan program. Not: 1 ay 30 gün kabul edilecektir.
Programı yazmadan önce iki tarih arasındaki fark nasıl hesaplanır inceleyelim: Örnek olarak büyük olan tarih 12.09.2009 olsun. Önceki (küçük olan) tarih ise 25.12.2000 olsun.
İki tarih arasındaki farkı hesaplarken önce günler, sonra aylar ve sonra yıllar arasındaki farklar hesaplanır. Dolayısıyla tersten yazmak gerekir:
Büyük tarih: 2009 09 12 Küçük tarih: 2000 12 25 Görüldüğü gibi 12 den 25 çıkmaz, aylardan (09) bir alınarak günlere (30 gün olarak) eklenir:
Büyük tarih: 2009 08 42 Küçük tarih: 2000 12 25 ------------------------------------ 17 Sıra ay farklarına geldiğinde aynı durum söz konusu. 8 den 12 çıkmaz, yıl bir azaltılarak aylara 12 eklenir.
Büyük tarih: 2008 20 42 Küçük tarih: 2000 12 25 ------------------------------------ 8 08 17 Fark 8 yıl, 8 ay, 17 gündür. Program yazılırken de bu kontrollerin yapılması gerekmektedir. Program şu şekildedir:
#include<iostream. h> #include<conio #include<iostream.h> #include<conio.h> main() { int GunB,AyB,YilB; int GunK,AyK,YilK; int GunFark,AyFark,YilFark; cout<<”Buyuk Tarih (gg aa yyyy): ”; cin >> GunB >> AyB >> YilB; cout<<”Kucuk Tarih (gg aa yyyy): ”; cin >> GunK >> AyK >> YilK;
if (GunB<GunK) { GunB=GunB+30; AyB=AyB-1; } if (AyB<AyK) if (AyB<AyK) AyB=AyB+12; YilB=YilB-1;
if (YilB>=YilK) { GunFark=GunB-GunK; AyFark=AyB-AyK; YilFark=YilB-YilK; cout<<”Aradaki fark” <<GunFark<<”gun,”; cout<<AyFark <<”ay, ”; cout <<YilFark<<”yildir…”; } else cout<< ”Bu fark hesaplanamaz…”; getch();
Örnek: Bir ayın her bir gününe ait sıcaklık değerleri girildiğinde (30 ün), aylık ortalama sıcaklığı hesaplayan, o aya ait en düşük ve en yüksek sıcaklık değerlerini ait oldukları günle birlikte belirleyen ve bu bilgileri ekrana yazan program.
#include<iostream. h> #include<conio #include<iostream.h> #include<conio.h> void main() { int i,Sic,Top; int EnK,EnB; int EnKGun,EnBGun; float Ort; clrscr(); Top=0; EnK=99; EnB=-99;
for (i=1; i<=30; i++) { cout<<i<<" . gun sicaklik degeri: "; cin>>Sic; Top=Top+Sic; if (Sic<EnK) { EnK=Sic; EnKGun=i; } if (Sic>EnB) { EnB=Sic; EnBGun=i;
Ort=Top/30; cout<<"En dusuk sicaklik: "<<EnK<<endl; cout<<"Gunu: "<<EnKGun<<endl; cout<<"En yuksek sicaklik: "<<EnB<<endl; cout<<"Gunu: "<<EnBGun<<endl; cout<<"Ortalama sicaklik: "<<Ort; getch(); }
SORULAR: Başarı notu girildiğinde aşağıdaki tabloya göre, notlara karşılık gelen harf cinsinden notu ekrana yazdıran programı yazınız. 0-49 FF 50-55 DD 56-60 DC 61-65 CC 66-70 CB 71-85 BB 86-90 BA 90-100 AA
Yapılan hız girildiğinde ödenmesi gereken cezayı bulan programı yazınız. HIZLAR CEZA ÜCRETİ -120 km - 121-130 km 100 TL 131-140 km 150 TL 141-150 200 TL 151+ 300 TL
Gelir bilgisi girildiğinde ödenecek vergi ve net ücreti bulan programı yazınız. 10.000 TL ye kadar %18 10.000 – 15.000 %25 15.000 – 20.000 %30 20.000 – 30.000 %35 30.000 + %45
Klavyeden girilen iki sayıyı seçiminize göre toplayan, farkını hesaplayan, çarpan, bölümünü bulan programı yazın.
Bir araç kiralama şirketi 50 TL’lik sabit ücret üzerine 100 km’ye kadar her bir km için 50 kuruş, 100 km’den uzun kullanımlar için her bir km için 40 kuruş ek ücret almaktadır. Seyahat edilecek uzaklık km cinsinden girildiğinde ödenmesi gerekli ücreti hesaplayan programı yazın.
İkinci derece bir denklemin köklerini bulan programı yazınız. ( sqrt() kütüphanesi math.h ) ax2+bx+c D=b2-4ac D>0 ise x1=-b-sqrt(D)/(2a) x2=-b+sqrt(D)/(2a) D=0 ise x1=x2=-b/(2a) D<0 ise kök yok
İlk endeks, son endeks ve abone türü girildiğinde ödenmesi gereken elektrik faturasını hesaplayan programı yazınız. Birim ücretler: Ev türü için 1,5 TL/kWh İşyeri için 1,75 TL/kWh KDV oranları: Ev için %18 İşyeri için %9
Girilen iki sayıdan büyük olanını if veya if-else ile bulan programı yazınız.
switch
{ case Sabit1 : KomutListesi1 break; case Sabit2 : KomutListesi2 . Kullanımı: switch ( değişken) { case Sabit1 : KomutListesi1 break; case Sabit2 : KomutListesi2 . case Sabitn : KomutListesin default: KomutListesin+1 }
değişken, tamsayı veya tamsayı uyumlu değişken Sabiti, tamsayı veya tamsayı uyumlu bir değer default, seçeneğe bağlı (olması zorunlu değil) KomutListesii, komutlar dizisi
switch deyimi çalıştırıldığında değişken değerlendirilir switch deyimi çalıştırıldığında değişken değerlendirilir. değişken’in değeri case listesinde varsa KomutListesii, break deyimine, return deyimine veya switch deyimi sonuna kadar çalıştırılır. değişken’in değeri case listesinde yoksa default deyimindeki KomutListesin+1 çalıştırılır. default deyimi bulunmuyorsa çalıştırma işlemi switch bloğundan sonra devam eder.
Örnek: Herhangi bir ayın numarası girildiğinde (1-12) o ayın adını yazan program. #include <iostream.h> #include <conio.h> main() { int AyNo; cout<<"Kacinci ay: "; cin>>AyNo;
switch (AyNo) { case 1: cout<<"Ocak"; break; case 2: cout<<"Subat"; break; case 3: cout<<"Mart"; break; case 4: cout<<"Nisan"; break; case 5: cout<<"Mayis"; break; case 6: cout<<"Haziran"; break; case 7: cout<<"Temmuz"; break; case 8: cout<<"Agustos"; break; case 9: cout<<"Eylul"; break; case 10: cout<<"Ekim"; break; case 11: cout<<"Kasim"; break; case 12: cout<<"Aralik"; break; default: cout<<"Yanlis giris!..."; } getch();
Ekran çıktısı: Kacinci ay: 5 Mayis
Yukarıdaki programda switch bloğu aşağıdaki gibi (break komutları unutulmuş olsun) yazılmış olsun. switch (AyNo) { case 1: cout<<"Ocak"; case 2: cout<<"Subat"; case 3: cout<<"Mart"; case 4: cout<<"Nisan"; case 5: cout<<"Mayis"; case 6: cout<<"Haziran"; case 7: cout<<"Temmuz"; case 8: cout<<"Agustos"; case 9: cout<<"Eylul"; case 10: cout<<"Ekim"; case 11: cout<<"Kasim"; case 12: cout<<"Aralik"; default: cout<<"Yanlis giris!..."; }
Bu durumda ekran çıktısı: Kacinci ay: 10 EkimKasimArlikYanlis giris Bu durumda ekran çıktısı: Kacinci ay: 10 EkimKasimArlikYanlis giris!... Case 1: case 2: Case 3: cout << ‘’***’’;
Örnek: Öğrencinin ortalama notu (0-100) girildiğinde harf cinsinden karşılık gelen notunu bulup yazan program. Ortalama Harf --------------- ------ Ort>=90 A 80<=Ort<90 B 70<=Ort<80 C 60<=Ort<70 D Ort<60 F
#include <iostream.h> #include <conio.h> main() { float Ort; char HarfNot; cout<<"Ortalama not: "; cin>>Ort;
switch ( int (Ort/10) ) // Sonucu int yapmak icin { case 10: case 9: HarfNot = 'A'; break; case 8: HarfNot = 'B'; case 7: HarfNot = 'C';
case 6: HarfNot = 'D'; break; default: HarfNot = 'F'; } cout<<"Harf not: "<<HarfNot; getch();
Ekran çıktısı: Ortalama not: 78 Harf not: C
Örnek: Basit 4 işlem yapan programı yazınız. #include <iostream.h> #include <conio.h> main() { float a, b, sonuc; char islem; cout << “1. sayi: “; cin >> a; cout << “2. sayi: “; cin >> b; cout << “Istenen islem (+, -, *, /): “; cin >> islem;
switch( islem ) { case ‘+’: sonuc = a + b; break; case ‘-’: sonuc = a - b; case ‘*’: sonuc = a * b; case ‘/’: sonuc = a / b; } cout << a << “ “ << islem << “ “ << b << “= “ << sonuc; getch();
Istenen işlem (+, -, /, *): + 3 + 5= 8 Ekran çıktısı: 1. sayi: 3 2. sayi: 5 Istenen işlem (+, -, /, *): + 3 + 5= 8
Aynı programın farklı yazımı #include <iostream.h> #include <conio.h> main() { float a, b, sonuc; char islem; cout << “islem: “; cin >> a >> islem >> b;
switch( islem ) { case ‘+’: sonuc = a + b; break; case ‘-’: sonuc = a - b; case ‘*’: sonuc = a * b; case ‘/’: sonuc = a / b; } cout << “Sonuc: “ << sonuc; getch();
Ekran çıktısı: islem: 3 + 5 Sonuc: 8
SORULAR: Fahrenheit’ten Celsius’a, Celsius’tan Fahrenheit’a, Fahrenheit’tan Kelvin’e, Kelvin’den Fahrenheit’e, Celsius’tan Kelvine’e veya kelvin’den Celsius’a sıcaklık dönüşümü yapan bir program yazınız. Not: switch kullanılacak ve aşağıdaki ekran çıktısı görümüne sahip olacak.
Ekran: Dönüştürmek istediğiniz sıcaklık değeri: 212 Seçenekler: A- Fahrenheit’tan Celsius’a B- Celsius’tan Fahrenheit’a C- Fahrenheit’tan Kelvin’e D- Kelvin’den Fahrenheit’a E- Kelvin’den Celsius’a F- Celsius’tan Kelvine’e Seçiminiz: A Dönüştürülen sıcaklık: 100
Dönüşümler: C = (F-32) / 1.8 C = K – 273; K = (F-32)/1.8 + 273
Girilen bir sayının pozitif, negatif veya sıfır olup olmadığını bildiren programı yazın. Not: switch kullanılacaktır.
İki sayı ve istenen işlemden biri (+ - İki sayı ve istenen işlemden biri (+ - * /) girildiğinde işlemi yapıp sonucu yazan programı yazın. Not: switch ile