• Sonuç bulunamadı

Denetim Yapıları Program Akışının Yönlendirilmesi. Şekil 11.1: Akışı Koşullu Yönlendirme

N/A
N/A
Protected

Academic year: 2022

Share "Denetim Yapıları Program Akışının Yönlendirilmesi. Şekil 11.1: Akışı Koşullu Yönlendirme"

Copied!
20
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Denetim Yapıları 11

Şekil 11.1: Akışı Koşullu Yönlendirme

11.1 Program Akışının Yönlendirilmesi

Her programlama dilinde, program akışı hiç bir koşula bağlı olmaksızın doğrusal gidiyorsa, deyimler programda yazıldığı sıra ile işlenir. Ama, ge-

(2)

nellikle büyük programlarda böyle olamaz. Çünkü, akış sırasında karşıla- şılacak durumlara bağlı olarak işlenecek deyimler değişebilir. Örneğin, bir ücret bordrosu programında, gelir vergisi kesintisi düşük ücretlerde az, yük- sek ücretlerde çoktur. Öyleyse düşük ücretlerde gelir vergisi hesabı yapan deyimler ile yüksek ücretlerde gelir vergisi hesabı yapan deyimler farklı olmalıdır. Hangi deyimin hangi ücretler için işleyeceğini belirleyen yöntem- lerin olması gerekir.

Program akışının yönünü değiştirerek, belirlenen koşulların gerektir- diği deyimlere yönlendiren karar vericiler birer boolean (mantıksal) deyim- dir (bkz. 7). Karar verici boolean deyimi doğru (true) değer alıyorsa prog- ram akışı bir yöne, yanlış (false) değer alıyorsa başka yöne gider. Karar vericiye yönlendirici dememizin nedeni budur. Yönlendiriciler ait oldukları dil içinde belirli birer sözdizimine sahiptirler. O nedenle, onları ilgili prog- ramlama dili içinde özel yapılar olarak görmek gerekir (bkz. [2]).

Hemen her programlama dilinde if ve if-else yönlendiricileri vardır.

if ve else deyimleri içiçe yuvalanabilirler. Böylece daha karmaşık mantık- sal ifadeler oluşur. Ancak en karmaşık mantıksal yönlendirmelerin if ve else deyimleriyle kurulabildiğini bilmek, konuyu basitleştirecektir. Başka bir deyişle if ve if-else yapılarının program akışını nasıl yönlendirdiklerini bilmek, onların karmalarını oluşturmak için yeterlidir.

Bu iki yapının program akışını nasıl yönlendirdiği, akış şemaları çizi- lerek kolayca görülebilir.

11.1.1 if . . . Yönlendiricisi

Şekil 11.2: if yönlendirmesi

(3)

if . . . karar yapısı, program akışını ya ana doğrultuda devam ettirir ya da karar noktasında if blokuna saptırır. Program akışı ana doğrultu boyunca doğrusal akarken (kodlar yazıldığı sırada işlenirken) karar verici deyime gelince, akış önce boolean deyiminin değerini bulur. Karar nokta- sındaki boolean ifadesinin değeri (bkz. Şekil 11.2);

1. true (doğru) ise, program akışı karar noktasında ana akış doğrultu- sundan sapar if blokuna yönelir. if bloku içindeki deyimleri sırayla işledikten sonra tekrar ana doğrultuda saptığı yerden sonraki ilk de- yime döner. Ondan sonra ana doğrultuda doğal akışını sürdürür.

2. false (yanlış) ise, program akışı ana doğrultudan sapmaz. Ana doğrul- tuda karar noktasından sonraki deyime geçer ve sonra doğal akışını sürdürür; yani program akışı if blokuna girmez.

if denetimin üç sözdizimi Liste 11.1 içinde numaralı olarak gösterimiştir.

Liste 11.1.

[ 1 ]

i f b o o l e a n

3 deyim ( l e r ) e n d

[ 2 ]

i f b o o l e a n t h e n deyim ( l e r ) e n d

8

[ 3 ]

i f b o o l e a n ; deyim ( l e r ) e n d

[1] biçeminde boolean ifade satırbaşı (newline) ile sonrakilerden ayrılmıştır.

[2] biçeminde boolean ifade then anahtar sözcüğü ile sonrakilerden ayrıl- mıştır. [3] biçeminde boolean ifade (;) ile sonrakilerden ayrılmıştır.

Örnekler:

Liste 11.2.

i f x > 0

p r i n t ( ’ x p o z i t i f t i r ’ ) e n d

5 i f x > 0 t h e n p r i n t ( ’ x p o z i t i f t i r ’ ) e n d i f x > 0 ; p r i n t ( ’ x p o z i t i f t i r ’ ) e n d

Liste 11.3.

(4)

i f x < 0

p r i n t ( ’ x n e g a t i f t i r ’ )

3 e n d

i f x < 0 t h e n p r i n t ( ’ x n e g a t i f t i r ’ ) e n d i f x < 0 ; p r i n t ( ’ x n e g a t i f t i r ’ ) e n d

end Sınırlaması

if bloku end ile sınırlanır. Blok içine istenildiği kadar deyim yazılabilir.

Ama end sınırı konulmazsa, if bloku tamamlanmadığı için, Ruby aşağıdaki uyarıyı verir:

syntax e r r o r , unexpected end−o f −i n p u t , e x p e c t i n g keyword_end

Program 11.1.

x = −3 i f x >= 0

p r i n t ( ’ x ya p o z i t i f t i r ’ )

4 p r i n t ( ’ ya da s ı f ı r d ı r ’)

1 /∗ ∗

syntax e r r o r , unexpected end−of−input , e x p e c t i n g keyword_end

∗/

Liste 11.4.

x = −3

2 i f x >= 0

p r i n t ( ’ x ya p o z i t i f t i r ’ ) p r i n t ( ’ ya da s ı f ı r d ı r ’) e n d

Liste 11.5.

x =10

i f x == 10

p r i n t " x 12 d i r \n "

e n d

Liste 11.6.

1 d e f p o z i t i f m i x = 8

i f x >= 0

puts "#{x} ya p o z i t i f t i r "

puts " ya da s ı f ı r d ı r "

6 e n d

e n d

puts p o z i t i f m i

(5)

Liste 11.7.

1 x =10 i f x == 10

p r i n t " #{x} on ’ dur \n "

e n d

11.1.2 Ard arda if

Ard arda if deyimlerinin her birisi kendi başına bir yönlendiricidir. Program 11.2’deki ilk if blokunun ikinci if-else bloku ile ilişkisi yoktur. Birbirlerinden bağımsız çalışırlar. Eğer, ilk if denetimine bağlı olarak ikincinin çalışması isteniyorsa else ya da elsif denetimleri kullanılmalıdır.

Program 11.2.

1 ad = " Anday "

i f ad == " Anday "

puts " Merhaba Anday "

e n d

6

i f ad == " Alper "

puts " A d ı n ı z ı bilmiyorum "

e l s e

puts " K i m s i n i z "

11 e n d

/∗ ∗

Merhaba Anday K i m s i n i z

4 ∗/

11.2 if . . . then . . . denetimi

• if-end bloku belirli bir mantıksal ifade (boolean) doğru ise işlenecek deyim ya da deyimleri içerir.

• Mantıksal deyimin () parantezi içine alınması gerekmez. Mantıksal deyimin bittiğini belirtmek için yeni satır (newline) (;) ya da then anahtarı kullanılır.

• if-end blokunda işlenecek deyimlerim { } parantezi içine alınması gerekmez. Ancak, kaynak programın kolay okunurluğunu sağlamak istersek, işlenecek deyimleri { } parantezi içine alabiliriz.

(6)

Şekil 11.3: if-then yönlendiemesi

• if blokunun deyim(leri) ayrı satırlara yazılıyorsa, then anahtarı ge- rekli değildir. Yazılsa da yazılmasa da olur. Ama if . . . then . . . end bloku tek bir satıra yazılıyorsa, then anahtarı zorunlu olur. then anahtarı yerine (;) da kullanılabilir.

• Tek satıra birden çok deyim yazılıyorsa, deyimler (;) ile birbirlerinden ayrılır.

Liste 11.8 örneğinde [1],[2],[3] denetim yapıları doğrudur, ama dördüncü sıradaki [4] yapısı yanlıştır

Liste 11.8.

1 [ 1 ] x = −7

i f x < 0

puts x n e g a t i f t i r e n d

6

[ 2 ]

i f x < 0 t h e n puts (" x n e g a t i f t i r ") e n d

[ 3 ]

11 x = −7

i f ( x < 0) ; puts (" x n e g a t i f t i r ") e n d

[ 4 ]

i f x < 0 puts (" x n e g a t i f t i r ") e n d

Liste 11.9 ile 11.10 denk iş yaparlar. Bir satırda birden çok deyim olduğunda deyimlerin (;) ile birbirlerinden ayrıldığına dikkat ediniz.

Liste 11.9.

(7)

x = 0 i f x < 10 x += 1 puts x

5 e n d

Liste 11.10.

x = 3

i f x < 10 t h e n x += 1 ; puts x e n d

11.2.1 if . . . else . . . Yapısı

Şekil 11.4: if-else Yönlendirmesi

Program akışının, karar noktasında ana doğrultudan ayrılıp iki se- çenekten yalnızca birisine yönlenmesi gerektiği durumlarda kullanılan yön- lendiricidir. Bu yapının çizgel görüntüsü Şekil 11.1 ile verilmiştir. if . . . else . . . yapısının sözdizimi şöyledir:

Liste 11.11.

i f b o o l e a n deyimA1

3 . . .

deyimAn e l s e:

deyimB1 . . .

8 deyimBr

Bu yapıda program akışı önce karar noktasındaki boolean deyimini işler. Çıkan değer

(8)

1. true ise if blokuna yönlenir ve oradaki deyimA1, . . . , deyimAn de- yimleri işler. else blokuna geçmeden karar yapısından çıkar ve ana akış doğrultusunda karar noktasından sonraki ilk deyime gider. Ora- dan doğal akışını sürdürür.

2. false ise, program akışı if blokuna yönelmez; else blokuna girer ve oradaki deyimB1, . . . , deyimBr deyimleri işler. else blokundaki de- yimleri bitirince ana akış doğrultusunda karar noktasından sonraki ilk deyime gider. Oradan doğal akışını sürdürür.

if-elseyapısında, program akışı ya if blokunu ya da else blokunu işler. Her ikisini işlemez.

ifve else bloklarındaki deyim sayıları için bir kısıtlama yoktur. Hiç deyim içermeyebilecekleri gibi, istenildiği kadar deyim içerebilirler. Ruby, bir blok içindeki deyimlerin paranteze alınmasını gerektirmez. Ancak, kay- nak programın kolay algılanabirliğini sağlamak için bloklar { } parantezleri ile sınırlanabilir.

Örnekler:

Liste 11.12.

#e n c o d i n g UTF−8

2

gün = ’ S a l ı ’

i f gün == ’ Cumartesi ’ o r gün == ’ Pazar ’ p r i n t ( ’ Hafta son u nd as ı n . Dinlen ’ ) e l s e

7 p r i n t ( ’ Hafta i ç i n d e s i n ’) p r i n t ( " Ç a l ı ş ! \ n " ) e n d

1 /∗ ∗

Hafta i ç i n d e s i n . Ç a l ı ş !

∗/

Liste 11.13.

x = 23

2 i f x > 0

p r i n t ( ’ x p o z i t i f t i r ’ ) e l s e

p r i n t ( ’ x ya n e g a t i f t i r ’) p r i n t ( " ya da s ı f ı r d ı r \n " )

7 e n d

/∗ ∗x p o z i t i f t i r

3 ∗/

(9)

Liste 11.14.

x = −23

2 i f x > 0

p r i n t ( ’ x p o z i t i f t i r ’ ) e l s e

p r i n t ( ’ x ya n e g a t i f t i r ’) p r i n t ( " ya da s ı f ı r d ı r \n " )

7 e n d

/∗ ∗

x ya n e g a t i f t i r ya da s ı f ı r d ı r

3 ∗/

Liste 11.15.

x = 27

2 i f x % 2 ==0

p r i n t ( "#{x } , ç i f t t i r \n ") e l s e

p r i n t ( "#{x } , t e k t i r \n ") e n d

/∗ ∗ 27 t e k t i r

∗/

Liste 11.16.

x = t r u e

2 i f x == t r u e

puts ( ’ x doğrudur ’ )

e l s e

p r i n t ( ’ x doğru d e ğ i l d i r ’) e n d

/∗ ∗

x doğrudur

∗/

elsif yapısı

else’den sonra if deyiminin gelişini ifade eden bir yapıdır. Bazı dillerde yani else-if ifadesi elif diye adlandırılır. Bu yalnızca bir adlandırmadır; yeni bir yapı değildir. Gerektiği kadar else if deyimleri ard arda kullanılabilir.

Liste 11.17.

(10)

x = 9

2 i f x == 1

p r i n t (" b i r ") e l s i f x == 2

p r i n t (" i k i ")

7 e l s i f x == 3 p r i n t (" üç ") e l s e

p r i n t (" h i ç b i r i d e ğ i l \n ") e n d

Liste 11.18.

x = 9 i f x == 1

4 p r i n t (" b i r ") e l s e i f x == 2

p r i n t (" i k i ") e l s e i f x == 3

p r i n t (" üç ")

9 e l s e

p r i n t (" h i ç b i r i d e ğ i l \n ") e n d

Program 11.3, a sayısının değerine göre akışı yönlendiriyor. if koşulu sağlandığı için, akışın elsif ve else bloklarına hiç girmediğine dikkat ediniz.

Program 11.3.

a = 30 i f a >= 21

puts (" i f blokundayım ")

4 e l s i f a >= 21

puts (" e l s i f blokundayım ") e l s e

puts (" e l s e blokundayım ") e n d

/∗ ∗

2 i f blokundayım

∗/

Burada a nın değerini değiştirerek akışın öteki bloklara girmesini sağlayınız.

Program 11.4, 2 yaşından küçüklere ücretsiz, 2-12 yaş arasındakilere yarı ücret ve 12 yaşından büyüklere tam bilet kesen bir havayolu şirketinin, kim için hangi bileti keseceğini belirliyor.

Program 11.4.

(11)

# b i l e t . rb

2 #e n c o d i n g UTF−8 puts (’ Kaç y a ş ı n d a ? ’) s t r = g e t s ( )

yaş = s t r . to_i

7 i f yaş <= 2

puts (’ ü c r e t s i z ’)

e l s i f 7 <= yaş a n d yaş < 13 puts (’ y a r ı ü c r e t ’) e l s e

12 puts (’ tam ü c r e t ’) e n d

/∗ ∗

2 Kaç y a ş ı n d a ? 7

y a r ı ü c r e t

∗/

11.2.2 İçiçe elsif

Bazen birden çok koşuldan seçim yapmak için elsif bloklarını içiçe kul- lanmak gerekebilir. if-else arasına istenildiği kadar elseif bloku konu- labilir. elsif bloklarından birisi koşulu sağlayıp çalışırsa, akış ondan sonraki iç bloklara girmez, if blokundan çıkar; sonraki deyimle ana yolda devam eder.

Program 11.5’da elsif bloklarının içiçe olduğunu göstermek için, her blok girintili gösterilmiştir. Ruby böyle girintiye gerek görmez.

Program 11.5.

# puan . rb

#e n c o d i n g UTF−8

puts (’ Kaç puan a l d ı n ı z ’)

5 s t r = g e t s ( ) puan = s t r . to_i

i f puan >= 90 puts (’ P e k i y i ’)

e l s i f puan >=80

10 puts ’ İ y i ’

e l s i f puan >=70 puts ’ Orta ’

e l s i f puan >=60

puts ’ Geçer ’

15 e l s i f puan >=50

puts ’ Z a y ı f ’ e l s e

puts (’ Çok z a y ı f ’) e n d

(12)

1 /∗ ∗ Ç ı k t ı :

Kaç puan a l d ı n ı z 93

P e k i y i

6 s e r v e r : i f ti murkar acay$ ruby puan1 . rb Kaç puan a l d ı n ı z

85 İ y i

s e r v e r : i f ti murkar acay$ ruby puan1 . rb

11 Kaç puan a l d ı n ı z 72

Orta

s e r v e r : i f ti murkar acay$ ruby puan1 . rb Kaç puan a l d ı n ı z

16 66 Geçer

s e r v e r : i f ti murkar acay$ ruby puan1 . rb Kaç puan a l d ı n ı z

55

21 Z a y ı f

s e r v e r : i f ti murkar acay$ ruby puan1 . rb Kaç puan a l d ı n ı z

34

Çok z a y ı f

26 ∗/

Program 11.6.

o r d e r = { : s i z e => " o r t a " }

d e f ş e k e r l i _ k a h v e

4 puts " Khveye i k i ş e k e r koy "

e n d

d e f orta_kahve

puts " Kahveye b i r ş e k e r koy "

e n d

9 d e f sade_kahve

puts " Kahveye h i ç ş e k e r koyma "

e n d

14

i f o r d e r [ : s i z e ] == " ş e k e r l i "

ş e k e r l i _ k a h v e

e l s i f o r d e r [ : s i z e ] == " o r t a "

orta_kahve

19 e l s i f o r d e r [ : s i z e ] == " sade "

sade_kahve e l s e

puts " Çay yap "

e n d

/∗ ∗

2 Kahveye b i r ş e k e r koy

∗/

(13)

Program 11.7.

p r i n t " B i r s a y ı g i r i n i z : "

2

num = g e t s . to_i i f num < 0

7 puts "#{num} n e g a t i f t i r "

e l s i f num == 0

puts "#{num} s ı f ı r d ı r "

e l s i f num > 0

12

puts "#{num} p o z i t i f t i r "

e n d

1 /∗ ∗

B i r s a y ı g i r i n i z : −34

−34 n e g a t i f t i r B i r s a y ı g i r i n i z : 0

6 0 s ı f ı r d ı r

B i r s a y ı g i r i n i z : 17 17 p o z i t i f t i r

∗/

11.2.3 if değiştiricileri

if modifiers

Ortaya çıkacak koşullara bağlı olarak, if denetimi farklı biçemlerde ifade edilebilir. Bunlara if değiştiricileri ya da karma yönlendiriciler diyo- ruz.

Örnekler:

Karma yönlendiricileri bazı örneklerle açıklamaya çalışacağız.

unless

Bazen if yerine unless kullanılabilir. Buna if denetiminin değişik biçemi (if modifier) denilir:

Liste 11.19.

çocuk = f a l s e u n l e s s çocuk

puts " yemek v e r "

e l s e

5 puts " s ü t v e r "

e n d

(14)

Bazen unless yerine if ! kullanılabilir. Buna if denetiminin tersyüzü (reverse) denilir:

Liste 11.20.

çocuk = f a l s e i f ! çocuk

puts " yemek v e r "

4 e l s e

puts " s ü t v e r "

e n d

Karar noktasında ikiden çok seçenek oluşuyorsa, Adına zincir koşulu denilen yapı oluşur. Örneğin x ile y sayılarını karşılaştıran bir boolean ifade şöyle olabilir:

(x > y) or (x < y) or (x == y)

Bu bileşik mantıksal deyimi oluşturan basit bileşenlerden ancak birisi sağ- lanabilir; yani (x > y) , (x < y) , (x == y) ifadelerinden ancak birisi gerçekleşebilir. O zaman karar verici yapıyı if . . . elsif . . . else . . . gibi dü- şünebiliriz:

Liste 11.21.

x = 5 y = 23

i f x > y

4 puts ( ’ x s a y ı s ı y den büyüktür ’ ) e l s i f x < y

puts ( ’ x s a y ı s ı y den küçüktür ’) e l s e

puts ( ’ x i l e y b i r b i r l e r i n e e ş i t t i r ’)

9 e n d

1 /∗ ∗

x s a y ı s ı y den küçüktür

∗/

11.2.4 ?: operatörü if a then b else c end ≡ a ? b : c

Çoğu dilde if-else denetini tek satırda yazmaya yarayan ?: opera- törü vardır. Buna koşullu (conditional), üçleme (ternary) adları da verilir.

Sözdizimi Liste 11.22 ile verilen biçemler gibi olabilir.

Liste 11.22.

(15)

puts (i f 1 t h e n 2 e l s e 3 e n d) # => 2

2

puts 1 ? 2 : 3 # => 2

x = i f 1 t h e n 2 e l s e 3 e n d

puts x # => 2

7

puts t r u e ? " t r u e " : " f a l s e "

=> " t r u e "

12

puts f a l s e ? " t r u e " : " f a l s e "

=> " f a l s e "

/∗ ∗x s a y ı s ı y den küçüktür

∗/

Program 11.8.

p r i n t " B i r s a y ı g i r i n i z : "

2 x = g e t s . to_i

puts " G i r d i ğ i n i z s a y ı " +

( x > 12 ? " 12 den büyüktür " : " 12 den küçüktür ")

1 /∗ ∗

B i r s a y ı g i r i n i z : 4

G i r d i ğ i n i z s a y ı 12 den küçüktür

∗/

Program 11.9.

1 adet = 3

d e ğ i ş t i r = adet <= 3 ? " i s e s a y a r a k a l " : " i s e t a r t a r a k a l "

puts "#{adet } #{ d e ğ i ş t i r } . "

/∗ ∗

3 i s e s a y a r a k a l .

3 ∗/

begin . . . end

11.3 Alıştırmalar

Bazen karar verici boolean deyim daha çok basit bileşenlerine ayrılabilir.

Örneğin, bir x sayısının ilk beş asal sayıya bölünüp bölünemediğini bulan bir mantıksal ifade

(16)

( x % 2 == 0) o r ( x % 3 == 0) o r ( x % 5 == 0) o r ( x % 7 == 0) o r ( x % 11 == 0)

biçiminde yazılabilir. Bu deyimi kullanarak x sayısının ilk beş asal sayıya bölünüp bölünemediğini bulan bir programı şöyle yazabiliriz:

Program 11.10.

x = 12345 i f x % 2 == 0

puts ( ’ x s a y ı s ı 2 i l e b ö l ü n e b i l i r ’)

4 e l s i f x % 3 == 0

puts ( ’ x s a y ı s ı 3 i l e b ö l ü n e b i l i r ’ ) e l s i f x % 5 == 0

puts ( ’ x s a y ı s ı 5 i l e b ö l ü n e b i l i r ’) e l s i f x % 7 == 0

9 puts ( ’ x s a y ı s ı 7 i l e b ö l ü n e b i l i r ’) e l s i f x % 11 == 0

puts ( ’ x s a y ı s ı 11 i l e b ö l ü n e b i l i r ’) e l s e

puts ( ’ x s a y ı s ı i l k beş a s a l s a y ı i l e bölünemez ’)

14 e n d

1 /∗ ∗

x s a y ı s ı 3 i l e b ö l ü n e b i l i r

∗/

Bu yapıya dikkat edersek, elsif deyimi birden çok kez tekrarlanıyor. Bu durumda, elif deyimleri içiçe yuvalanıyor. Bu yapıda bir tek sonuç çıkar.

Üstteki bir deyim sağlanırsa, programın bu blok içindeki akışı kesilir. kalan deyimleri işlemeden, akış, blok dışına çıkar ve ana doğrultudaki ana yola döner. Bloklar kurulurken, daima blok oluşturma kuralına uymalıyız ([6], [9], [10]).

Program 11.11, bir işçinin haftalık ücretini hesaplıyor. 40 saate kadar işçiye normal ücret ödeniyor. 40 saatten fazla çalışan işçiye, fazla çalıştığı her saat için normal ücretin 1.5 katı ödeniyor. toplamSaat, işçinin hafta içinde çalıştığı toplam saattir. saatÜcreti, normal çalışmaya ödenen saat ücretidir.

Program 11.11.

d e f f a z l a M e s a i H e s a p l a ( toplamSaat , s a a t Ü c r e t i )

2 i f toplamSaat <= 40

toplamÜcret = s a a t Ü c r e t i ∗ toplamSaat e l s e

f a z l a M e s a i = toplamSaat − 40

toplamÜcret = s a a t Ü c r e t i ∗40 + ( 1 . 5 ∗ s a a t Ü c r e t i ) ∗ f a z l a M e s a i

7 r e t u r n toplamÜcret

d e f main ( )

(17)

s a a t = f l o a t ( i n p u t (’ İ ş ç i kaç s a a t ç a l ı ş t ı ? ’) ) ü c r e t = f l o a t ( i n p u t (’ s a a t ü c r e t i n e d i r ? ’) )

12 t o t a l = f a z l a M e s a i H e s a p l a ( saat , ü c r e t ) p r i n t (’ Toplam ü c r e t : ’, t o t a l )

main ( )

Ç ı k t ı :

İ ş ç i kaç s a a t ç a l ı ş t ı ? 48 s a a t ü c r e t i n e d i r ? 10 Toplam ü c r e t : 5 2 0 . 0

Program 11.11’deki if...else... yapısını Program 11.12’de olduğu gibi de yazabiliriz. Deneyiniz.

Program 11.12.

1 d e f f a z l a M e s a i H e s a p l a ( toplamSaat , s a a t Ü c r e t i ) i f toplamSaat <= 40

normalSaat = toplamSaat f a z l a M e s a i = 0

e l s e:

6 f a z l a M e s a i = toplamSaat − 40 normalSaat = 40

r e t u r n s a a t Ü c r e t i ∗ normalSaat + ( 1 . 5 ∗ s a a t Ü c r e t i ) ∗ f a z l a M e s a i

11 d e f main ( )

s a a t = f l o a t ( i n p u t (’ İ ş ç i kaç s a a t ç a l ı ş t ı ? ’) ) ü c r e t = f l o a t ( i n p u t (’ s a a t ü c r e t i n e d i r ? ’) ) t o t a l = f a z l a M e s a i H e s a p l a ( saat , ü c r e t ) p r i n t (’ Toplam ü c r e t : ’, t o t a l )

16

main ( ) /∗ ∗ Ç ı k t ı :

3 İ ş ç i kaç s a a t ç a l ı ş t ı ? 48 s a a t ü c r e t i n e d i r ? 10 Toplam ü c r e t : 5 2 0 . 0

∗/

Program 11.13.

d e f karneNotu ( puan ) i f puan >= 90

harfNotu = ’A ’

4 e l i f puan >= 80 harfNotu = ’B ’ e l i f puan >= 70

harfNotu = ’C ’ e l i f puan >= 60

9 harfNotu = ’D ’

(18)

e l s e:

harfNotu = ’F ’ r e t u r n harfNotu e n d

14 d e f not_yaz

s t r = g e t s ( p r i n t (’ Puanı g i r i n i z ’) ) puan = s t r . to_i

harfNotu = karneNotu ( puan ) p r i n t ( harfNotu )

19

not_yaz

Ç ı k t ı :

Puanı g i r i n i z 87 B

Program 11.14.

p r i n t (" Saat kaç ? ")

2 s a a t = g e t s ( ) . to_i

i f s a a t < 10

puts (" Günaydın ! ")

7 e l s i f s a a t < 12

puts (" Öğlen yemeği zamanı y a k l a ş ı y o r . ")

e l s i f s a a t < 18

puts (" İ y i g ü n l e r ! ")

12

e l s i f s a a t < 22

puts (" İ y i akşamlar ! ")

e l s e

17 puts (" İ y i g e c e l e r ! ") e n d

/∗ ∗

2 Ç ı k t ı l a r : Saat kaç ? 9 Günaydın !

Saat kaç ? 13

7 İ y i g ü n l e r ! Saat kaç ? 17 İ y i g ü n l e r !

12 Saat kaç ? 20 İ y i akşamlar ! Saat kaç ? 23 İ y i g e c e l e r !

17 ∗/

(19)

Program 11.15’i yazıp yürütünüz. Deyimlerin işlevlerini tek tek açık- layınız.

Program 11.15.

# y a z a r . rb

3 ad = " D o s t o y e v s k i "

i f ad == " T o l s t o y "

p r i n t " Merhaba T o l s t o y ! | n "

e l i f ad == " John "

8 p r i n t " Merhaba John ! | n "

e l i f ad == " D o s t o y e v s k i "

p r i n t " Merhaba D o s t o y e v s k i ! \ n "

e l s e

p r i n t " Herkese selam ! \ n "

13 e n d

/∗ ∗

2 Herkese selam !

∗/

Program 11.16, doğacak çocuklarına cinsiyetine göre ad takacak ana- babnın kararını bildiriyor.

Program 11.16.

n = rand ( 2 )

2

i f n==0

p r i n t (" Çocuğa Alper a d ı v e r i l e c e k ! \ n ") e l s e

p r i n t (" Çocuğa Bahar a d ı v e r i l e c e k \n ")

7 e n d

/∗ ∗ 0

3 Çocuğa Alper a d ı v e r i l e c e k !

∗/

Uyarı:

Ruby’de seçkisiz (random) sayılar Kernel.rand metodu ta- rafından üretilir.

1 rand # 0 . 0 i l e 1 . 0 a r a s ı n d a s e ç k i s i z b i r f l o a t ü r e t i r rand ( 1 0 0 ) # 0 i l e n a r a s ı n d a s e ç k i s i z b i r tamsayı ü r e t i r

Alıştırmalar 11.1.

(20)

11.4 case yönlendirmesi

Program 11.17.

#! / u s r / bin / ruby

3 p r i n t " Enter top l e v e l domain : "

domain = g e t s . chomp

c a s e domain

8 when " us "

puts " United S t a t e s "

when " de "

puts " Germany "

when " sk "

13 puts " S l o v a k i a "

when " hu "

puts " Hungary "

e l s e

puts " Unknown "

18 e n d

Program 11.18.

student_grade = 8

2 c a s e student_grade

when 0

puts " Çok kötü "

when 1 . . 4

puts " B a ş a r ı s ı z "

7 when 5 . . 7 puts " İ y i "

when 8 . . 9

puts " Çok İ y i "

when 10

12 puts " Super "

e n d

Program 11.19.

computer = " c64 "

2 y e a r = c a s e computer when " c64 " t h e n " 1982 "

when " c16 " t h e n " 1984 "

when " amiga " t h e n " 1985 "

e l s e

7 " Tarih b i l i n m i y o r "

e n d

puts "#{computer } ç ı k ı ş y ı l ı #{y e a r } "

12# c64 ç ı k ı ş y ı l ı 1982

Referanslar

Benzer Belgeler

5- Mustafa ÖZEN’in dilekçesi okundu; dilekçede, Fenese Yukarı mahallesinde bulunan 263 ada 3 nolu parseldeki 1763 m2 tarlasının Belediye su deposuna gitmek

MADDE 5 – (1) Belediye itfaiye teşkilatı; 29/11/2005 tarihli ve 2006/9809 sayılı Bakanlar Kurulu Kararı ile yürürlüğe konulan, Belediye ve Bağlı Kuruluşları ile Mahalli

break koyduğuz takdirde, uygun koşul sağlandıktan sonra, daha fazla kontrol yapılmayacak ve aynen if – else if yapısında olduğu gibi program orada

Üniversiteye ait ağ ve sunucu bilgisayarlar uygunsuz, müstehcen, rahatsız edici görüntülerin üretilmesi ve dağıtılması (akademik ve bilimsel araştırma amaçlı

Cemal KAYA- Mustafa UÇAR- Ersel YAZICI- Hasan BACIOĞLU -Emine DEMİRCİ- Ahmet KÜÇÜK- Muharem Aziz ZENGİN- Mehmet AYTEKİN -Selda GİDİŞ UZKAN - Havva DEMİRTAŞ (Katılmadı)-

ilkelerin, ulaşım sistemlerini ve problemlerinin çözümü gibi hususları göstermek ve uygulama imar planlarının hazırlanmasına esas olmak üzere 1/2000 veya 1/5000

_______ : 1/1000 ölçekli uygulama imar planında cami kullanım alanı olarak belirlenen 16089 ada 1 sayılı parselde &#34;imar hakkının emsal:0,30'dan 0,60'a çıkarılması ve

kullanımına ayrılan 1.345 m2 yüzölçümlü 16190 ada 1 sayılı parselin kullanım amacına &#34;sağlık&#34;' fonksiyonu da ilave edildiği, parsel alanı ile inşaat alanının