1 Eski Problemlerin Çözümleri 1. KK01. Kullanıcının gireceği saate göre aşağıdaki açıklamaları görüntüleyen C programını geliştirip, işletiniz. Program çalıştığında aşağıdaki örnek çalışmaya uygun olmalıdır. Çözüm: Program 1.1. Zaman İleti 1 Saat 6 iyi uykular 7 Saat 11 Gunaydin 12 Saat 17 Iyi gunler 18 Saat 22 iyi aksamlar 23 Saat 24 Iyi geceler Diğer Hatalı saat girdiniz! Tablo 1.1: Günün zamanları 1 #i n c l u d e <s t d i o. h> i n t s a a t ; p r i n t f ( " S a a t i g i r i n i z " ) ; 6 s c a n f ( "%d ", s a a t ) ; i f ( ( s a a t >=1)&&(saat <=6)) p r i n t f ( " i y i uykular " ) ; 11 e l s e i f ( ( s a a t >=7)&&(saat <=11)) p r i n t f ( " Gunaydin! ) " ) ;
2 BÖLÜM 1. ESKI PROBLEMLERIN ÇÖZÜMLERI 16 e l s e i f ( ( s a a t >=12)&&(saat <=17)) p r i n t f ( " i y i g u n l e r! ) " ) ; e l s e i f ( ( s a a t >=18)&&(saat <=22)) p r i n t f ( " i y i aksamlar! ) " ) ; e l s e i f ( ( s a a t >=23)&&(saat <=124) ) 21 p r i n t f ( " i y i g e c e l e r! ) " ) ; e l s e p r i n t f ( " h a t a l i g i r d i n i z " ) ; S a a t i g i r i n i z > 18 i y i aksamalar 2. kk02. Aşağıdaki çıktıyı veren algoritmayı switch/case yapısı ile tanımlayan bir C programı geliştirip işletiniz. 1 Algoritma : Oku puan ; yaz A e ğ e r puan = 90 i s e ; yaz B e ğ e r puan = 80 i s e ; yaz C e ğ e r puan = 70 i s e ; yaz D e ğ e r puan = 60 i s e ; 6 yaz E e ğ e r puan = 50 i s e ; yaz F h i ç b i r i d e ğ i l s e ; Dur. 2 Çözüm: Program 1.2. #i n c l u d e <s t d i o. h> i n t puan, p ; 7 p r i n t f ( " Puani g i r i n i z > " ) ; s c a n f ( "%d ", &puan ) ; p = puan / 1 0 ; s w i t c h ( p ) { c a s e 9 : p r i n t f ( "A" ) ; 12 c a s e 8 : p r i n t f ( "B" ) ; c a s e 7 : p r i n t f ( "C" ) ; c a s e 6 : p r i n t f ( "D" ) ; d e f a u l t : p r i n t f ( "F" ) ; 17 puani g i r i n i z > 89 3 B
3. kk03. Aşağıdaki çıktıyı veren algoritmayı switch/case yapısı ile tanımlayan bir C programı geliştirip işletiniz. 1 Algoritma : Oku kod ; e ğ e r kod = 1 i s e ; sayaca 1 ekle, k a r e s i n i a l ve s a y a c ı y a z d ı r. e ğ e r kod = 3 i s e ; sayaca 3 ekle, ve s a y a c ı y a z d ı r e ğ e r kod = 5 i s e ; sayaca 5 ekle, küpünü a l ve s a y a c ı y a z d ı r e ğ e r kod = 7 i s e ; sayaca 7 ekle, ve s a y a c ı y a z d ı r 6 e ğ e r kod = 9 i s e ; sayaca 9 ekle, ve s a y a c ı y a z d ı r Hiç b i r i d e ğ i l s e sayaca 0 e k l e ve y a z d ı r. Program 1.3. #i n c l u d e <s t d i o. h> 3 i n t kod, sayac ; p r i n t f ( " Puani g i r i n i z > " ) ; 8 s c a n f ( "%d ", &kod ) ; sayac = kod ; s w i t c h ( kod ) { c a s e 1 : sayac++ ; 13 sayac = sayac sayac ; c a s e 3 : 18 sayac = sayac + 3 ; c a s e 5 : 23 sayac = sayac + 5 ; sayac = sayac sayac sayac ; 28 c a s e 7 : sayac = sayac + 7 ; 33 c a s e 9 : sayac = sayac + 9 ; 3 38 d e f a u l t : sayac = sayac + 0 ;
4 BÖLÜM 1. ESKI PROBLEMLERIN ÇÖZÜMLERI 43 2 Kodu g i r i n i z > 7 14 4. a, b.c sayıları sırası ile (1,2,5)(2,1,3)(6,2,8)ve (4,1,1) verildiğinde; a+b*bc değerine göre switch/case işlemli bir C programı ile aşağıda belirlenen işlemleri gerçekleştiriniz. verilen a+b2-c ifadesinin sonucu:. 1 ise sayaca 10 ekle ( t=t+10; ) yaz: 2 ise sayaca 20 ekle 3 ise sayaca 30 ekle ve karesini, küpünü, ve onların yarılarını yazdır. hiçbiri değilse sayaca 1 ekle işlemini yap, Program 1.4. 1 #i n c l u d e <s t d i o. h> 6 i n t a, b, c ; i n t sec, sayac =0; p r i n t f ( " S ı r a y l a a, b, c s a y ı l a r ı n ı g i r i n i z > " ) ; s c a n f ( "%d%d%d ", &a, &b, &c ) ; 11 s e c = a + b b c ; sayac = s e c ; s w i t c h ( s e c ) { c a s e 1 : sayac = sayac + 10 ; 16 p r i n t f ( " \ nsayac = %d ", sayac ) ; c a s e 2 : sayac = sayac + 20 ; 21 p r i n t f ( " \ nsayac = %d ", sayac ) ; c a s e 3 : sayac = sayac + 30 ; 26 sayac = sayac sayac sayac ; p r i n t f ( " \ nsayacın k a r e s i = %d, k a r e s i n i n y a r i s i %d ", sayac sayac, sayac sayac /2) ; p r i n t f ( " \ nsayacın kupu = %d, kupunun y a r i s i %d ", sayac sayac sayac, sayac sayac sayac /2) ; 31 d e f a u l t : sayac = sayac +1 ; p r i n t f ( " \ nsayac = %d ", sayac ) ;
5 Kodu g i r i n i z > 7 14 5. kk05. Kullanıcının girdiği S,T,U,V,W kodlarından biri ve üç ( a,b,c) tamsayılarından küçük olan iki tanesi (a,c) ise; 1 V e r i l e n s e ç e n e k kodu = S i s e ; K = a + 2 c ac3 ; V e r i l e n Kod = T ve U i s e K = 2 ac = V i s e ; Eğer a> c i s e 2a/ c ; a< c i s e 2 c /a 6 V e r i l e n kod W i s e ; " % S e ç i l e n s a y ı l a r " a " ve " c " i ç i n bu s e ç i m l e r y a p ı l m a m ı ş t ı r % " c ü m l e s i n i görüldüğü g i b i Y a z d ı r ı n ı z! Not : P r o g r a m ı n ı z ı S,U,V,W i ç i n a y r ı a y r ı i ş l e t i n i z! Çözüm: Bu sorunun çözümünde char okuyan deyime dikkat etmek gerekiyor. Önce okutulan üç sayının sonuncusu girildikten sonra EN- TER e basılması, girdiye "\n" karakterinin eklenmesi demektir. Ondan sonra karakter okutulunca, ilk önce bu "\n" satırbaşı karakteri okunacaktır. Onun esas kod ile karışmaması için, önce onu getchar() ile okutup, sonra girilecek kodu okutmak gerekiyor. Programın 12. ve 17.satırlarında yapılan iş odur. Program 1.5. 1 #i n c l u d e <s t d i o. h> #i n c l u d e <s t d l i b. h> #d e f i n e min ( x, y ) ( x<=y )? x : y 6 c h a r kod, ch, c2, c3 ; i n t a, b, c ; i n t K; p r i n t f ( " S i r a y l a a, b, c s a y ı l a r ı n ı g i r i n i z > " ) ; 11 s c a n f ( "%d%d%d ", &a, &b, &c ) ; g e t c h a r ( ) ; // son %d i ç i n b a s ı l a n ENTER "\ n " k a r a k t e r i n i okur a = min ( a, b ) ; c = min ( b, c ) ; 16 p r i n t f ( " S, T, U, V, W kodlarindan b i r i s i n i g i r i n i z > " ) ; kod = g e t c h a r ( ) ; s w i t c h ( kod ) { c a s e S : 21 K = a + 2 c a c c c ; p r i n t f ( " \nk= %d ", K) ;
6 BÖLÜM 1. ESKI PROBLEMLERIN ÇÖZÜMLERI 26 c a s e T : c a s e U : K = 2 a c 2 ; p r i n t f ( " \nk= %d ", K) ; 31 c a s e V : i f ( a>c ) K= 2 a/ c ; i f ( a<c ) K = 2 c /a ; p r i n t f ( " \nk= %d ", K) ; 36 41 c a s e W : p r i n t f ( " \ n s e c i l e n %d ve %d s a y i l a r i i c i n bu s e c i m l e r y a p i l m a m i s t i r ", a, c ) ; d e f a u l t : p r i n t f ( " Y a n l i s h a r f g i r d i n i z " ) ; 46 r e t u r n 0 ; 2 Kodu g i r i n i z > 7 14