MAK 1005 Bilgisayar Programlamaya Giriş Karşılaştırma Komutları (Switch ve? Operatörü) Prof. Dr. Necmettin Kaya
KARŞILAŞTIRMA KOMUTLARI - SWITCH SWITCH: Program akışı bir çok seçenekten birine yönlendirilir. Genel yazım biçimi: switch(değişken) case sabit1:... komutlar;... case sabit2:... komutlar;... case sabitn:... komutlar;... default:... hata mesajları veya varsayılan komutlar;... case deyiminden sonra değişkenin durumu belirlenir ve takip eden gelen satırlar işleme konur. Bütün durumların aksi söz konusu olduğunda gerçekleştirilmesi istenen komutlar default deyiminden sonraki kısımda bildirilir.
KARŞILAŞTIRMA KOMUTLARI - SWITCH Örnek 1: Ekran Çıktısı: #include <stdio.h> char kr; main() printf("lutfen bir karakter girin\n"); kr = getchar(); /* tek bir karakterin okunması */ switch (kr) case 'a': printf("a harfine bastiniz\n"); case 'b': printf("b harfine bastiniz\n"); default: printf("a veya b ye basmadiniz\n"); system("pause"); İlk ekran çıktısında görüldüğü gibi kr değişkeni için a karakteri girildiğinde b harfine bastiniz ve a veya b ye basmadiniz mesajlarıda yazılmıştır. Bu durumu önlemek için break komutu kullanılmalıdır:
KARŞILAŞTIRMA KOMUTLARI - SWITCH #include <stdio.h> char kr; main() printf("lutfen bir karakter girin\n"); kr = getchar(); /* tek bir karakterin okunması */ switch (kr) case 'a': printf("a harfine bastiniz\n"); break; case 'b': printf("b harfine bastiniz\n"); break; default: printf("a veya b ye basmadiniz\n"); break; system("pause"); Ekran Çıktısı:
KARŞILAŞTIRMA KOMUTLARI - SWITCH Örnek 2: #include <stdio.h> #include <conio.h> #include <stdlib.h> İnt secim; float x,y,sonuc; main() printf("iki sayi girin: "); scanf("%f %f",&x,&y); puts("*** Menu ***"); puts("[1] Toplama"); puts("[2] Cikarma"); puts("[3] Carpma"); puts("[4] Bolme"); printf("seciminiz: "); scanf("%d",&secim); switch( secim ) case 1: sonuc = x + y; printf("toplam = %f\n",sonuc); break; case 2: sonuc = x-y; printf("fark = %f\n",sonuc); break; case 3: sonuc = x * y; printf("carpim = %f\n",sonuc); break; case 4: sonuc = x/y; printf("oran = %f\n",sonuc); break; default: puts("yanlis secim!\a"); system("pause"); Ekrana yazdırılacak ifade bir karakter topluluğu ise, printf()'e alternatif olarak puts() fonksiyonu kullanılabilir Ekran Çıktısı:
KARŞILAŞTIRMA KOMUTLARI - SWITCH? (Şart operatörü): Bir şartın gerçekleşip gerçekleşmemesine göre iki deyimden birini seçer. deyim1? deyim2 : deyim3 Burada öncelikle deyim1 değerlendirilir. Sonuç doğruysa deyim2, yanlışsa deyim3 seçilir. Basit bir örnekle, iki sayıdan küçüğünü seçmek için şöyle bir kod kullanılabilir: if (x < y) z = x; else z = y; yerine z = x < y? x : y; kullanılabilir.
MAK 1005 Bilgisayar Programlamaya Giriş ÖRNEK SORU ve CEVAPLARI
Örnek Soru ve Cevapları Soru 1: Bir yerleşim bölgesinde bulunan 1250 abonenin ödeyecekleri elektrik ücretlerini hesaplatmak için; - Abonenin adı ve soyadı, elektrik kullanım yeri (1: Ev, 2: Ticarethane) ve kullanılan elektrik miktarı (kw/saat) bilgileri verilmektedir. Abonelerin ödeyecekleri ücretler: - Ticari yerlerde 100 kw/saat ten az ise her kw/saat için 0,5 TL, 100 kw/saat ten fazla olması durumunda her fazla kw/saat için 0,2 TL -Evlerde 50 kw/saat ten az ise her kw/saat için 0,3 TL, 50 kw/saat ten fazla olması durumunda her fazla kw/saat için 0,4 TL dır. Buna göre, bilgileri okutup, her abonenin ödeyeceği ücreti, toplam ödenilen ücreti ve en fazla ödeme yapan abonenin adı soyadını bulup ekrana yazan programın algoritmasını yazınız, akış diyagramını çiziniz.
Örnek Soru ve Cevapları CEVAP 1: Algoritma (Akış diyagramları yazılan algoritmadan faydalanılarak çizilebilir. Cevap anahtarında A0: Başla verilmemiştir) A1: TOPÜCRET 0, EB -9999 A2: Döngü başlangıcı, I 1,1250 A3: ADSOYAD ı, EK ve KEM i gir. A4: Eğer EK=1 ise, Eğer KEM<50 ise ÜCRET KEM*0.3 Eğer KEM 50 ise ÜCRET 50*0.3+(KEM-50)*0.4 A5: Eğer EK=2 ise, Eğer KEM<100 ise ÜCRET KEM*0.5 Eğer KEM 100 ise ÜCRET 100*0.5+(KEM-100)*0.2 A6: TOPÜCRET TOPÜCRET +ÜCRET A7: Eğer ÜCRET>EB ise EB ÜCRET, EBADSOYAD ADSOYAD A8: ÜCRET i yaz. A9: Döngü sonu. A10: TOPÜCRET i ve EBADSOYAD ı yaz. A11: Dur.
Örnek Soru ve Cevapları Soru 2: 180 öğrencinin bulunduğu sınıfta Matematik ve Bilgisayar derslerinden sınav yapılıyor. Sınava giren öğrencilerin, her iki dersten aldıkları notları klavyeden girerek, aşağıdaki işlemleri yapan programın, algoritmasını yazınız, akış diyagramını çiziniz. Her iki dersin en büyük ve en küçük notlarını hesaba katmadan her iki dersin not ortalamasını hesaplayıp yazdırınız. Matematik dersi sınavından 0-40, 41-70 ve 71-100 puan arasında not alanların yüzdesini bulup yazdırınız. Her iki dersten 60 puan üzerinde not alanların sayısını bulup yazdırınız.
Örnek Soru ve Cevapları CEVAP 2: Algoritma A0: Başla A1: S1 0, S2 0, YS1 0, YS2 0, YS3 0 A2: MTOP 0, BTOP 0 A3: EBM -9999, EKM 9999, EBB -9999, EKB 9999 A4: Döngü başlangıcı, I 1,180 A5: MNOT ve BNOT u gir. A6: Eğer MNOT>EBM ise EBM MNOT A7: Eğer MNOT<EKM ise EKM MNOT A8: Eğer MNOT>60 ise S1 S1+1 A9: Eğer MNOT>0 ve MNOT 40 ise YS1 YS1+1 A10: Eğer MNOT 41 ve MNOT 70 ise YS2 YS2+1 A11: Eğer MNOT 71 ve MNOT 100 ise YS3 YS3+1 A12: MTOP MTOP+MNOT A13: Eğer BNOT>EBB ise EBB BNOT A14: Eğer BNOT<EKB ise EKB BNOT A15: Eğer BNOT>60 ise S2 S2+1 A16: BTOP BTOP+BNOT A17: Döngü sonu A18: MORT (MTOP-EBM-EKM)/178 A19: BORT (BTOP-EBB-EKB)/178 A20: Y1 YS1*100/180 A21: Y2 YS2*100/180 A22: Y3 YS3*100/180 A23: MORT, BORT, Y1, Y2, Y3, S1 ve S2 yi yaz. A24: Dur.
Örnek Soru ve Cevapları Soru 3: Verilen x değerine karşılık y fonksiyon değerini hesaplayan C programını yazınız. -10 x 0 1 x 10 y y 12 x x 1 1 x 1 2 3 1 4 3x x Bu aralıkların dışında y 1
Örnek Soru ve Cevapları CEVAP 3: #include <stdio.h> #include <math.h> float x,y; int main() printf("x="); scanf("%f",&x); if (x>=-10 && x<=0) y=-(x-pow(x,12))/(1-(1/(x-1))); else if (x>=1 && x<=10) y=1+sqrt(4+3*x*x)+pow(x,3); else y=1; printf("y=%8.1f",y); system("pause"); Ekran Çıktısı:
Örnek Soru ve Cevapları Soru 4: Aşağıda verilen C programının çalışması sonucunda elde edilen çıktıları yazınız. İşlem adımlarınızı (değişkenlerin aldıkları değerleri) gösteriniz. #include <stdio.h> int a,b,c,d; main() a=5; b=a-2; c=2*a-4; a=b+3; d=2*c+a-7; if (b+c>d-1) c=b-a+2; d=c-3; b=a+b-4; else c=b+a-2; d=c+3; b=a+b-c+3; if (c+3<a+2) b=a-2*c+d; else b=2*c+d+3; a=b-c+5; if (a+b>20) if (c>20) a=b-c+2; else b=d-c+2; c=a-d+3; else d=a+2*b-5;b=a-b+2; if (a+3>b-3 && c>d-1) b=2*c-b+3; a=3*d-6; else b=2*a+c-7; printf("a=%d\t b=%d\t c=%d\t d=%d", a,b,c,d); system("pause");
Örnek Soru ve Cevapları CEVAP 4: A B C D 5 3 6 11 6 5 7 10 25 27 18 24 5 34 Ekran çıktısı:
LABORATUVAR UYGULAMASI Uygulama 1: Seçime göre bir dairenin alanını ve bir çemberin çevresini hesaplayan C programını yazınız. Programda ilk önce daire veya çember seçimi yapılacak, seçime göre daire için alan hesabı, çember için ise çevre hesabı yapılarak sonuç ekrana yazdırılacaktır (switch yapısı). Uygulama 2: Seçime göre bir dikdörtgenin alan ve çevresi ve bir dairenin alan ve çevresini hesaplayan C programını yazınız. Programda ilk önce dikdörtgen veya daire seçimi yapılacak, daha sonra alan veya çevre seçimi yapılarak sonuç ekrana yazdırılacaktır (iç içe switch yapısı).