R Donguler

Dr. Kubra Atalay Kabasakal

Aralık 2021

Döngüler

# Ergul,O. Guide to Programming and Algorithms Using R, Springer
# dedication
dedicate <- function (reader){
  if (reader == "mywife") print ("To my wife...")
  else if (reader== "myparents") print ("To my parents...")
  else  print ("To all programmers...")
}

dedicate("mywife")
dedicate("myparents")
dedicate("reader")

while()

Kullanımı

while(kosul){
  kosul saglanana kadar gerceklesecek kisim
}

Kosulun saglanması

counter <-1
while(counter <5){
  counter <- counter +1
  print("Merhaba")
}
## [1] "Merhaba"
## [1] "Merhaba"
## [1] "Merhaba"
## [1] "Merhaba"

Kosulun saglanmaması - Sonsuz Dongu

Aşağıdaki kodun durması için koşullu sağlayacak bir işlem gerekli

counter <-1
while(counter <12){
  print("Merhaba")
}

while()

Koşulun sağlanması için koşulun değeri döngü içinde değiştirilmeli!

Döngünün içinde geçen iki satırın yeri değiştirildiğinde ne olur?

counter <-1
while(counter <5){
  print(counter)
  counter <- counter +1

}
## [1] 1
## [1] 2
## [1] 3
## [1] 4

while()

Döngü sadece bir kere çalışmış

x = 4
while(x < 5){
  x = x+10
  print(x)
}
## [1] 14

while()

Eğer koşul sağlanmazsa çıktı elde edilmeyecektir.

y <- 8

while(y >10){
  y <- y+1
  y
}

while()

i <- 1

while (i <= 100) {
  print(3 * i)
  if ( (3 * i) %% 8 == 0) {
    break
  }
  i <- i + 1
}
## [1] 3
## [1] 6
## [1] 9
## [1] 12
## [1] 15
## [1] 18
## [1] 21
## [1] 24

while()

Yazacağınız döngü 100’den başlayarak 5’er 5’er geri geri gitsin. Ne zamanki oluşan sayı hem 7 e hem de 5 e tam bölünüyosa döngü çalışmayı durdursun.

Ornek

sayi <- 100

while (sayi >= 0) {
  if (  sayi %% 5 == 0 & sayi %% 7 == 0) {
    break
  }
sayi <- sayi - 5 
}

print(sayi)
## [1] 70

while()

y ~ N(0,1) , 1000 tane değer üretip, mutlak değerini alalım. Bu veri setinin ilk kaç elamanında 2’den büyük üç tane elaman vardır sorusuna while ile çözüm üretilim.

set.seed(2)
y <- abs(rnorm(100))
y
##   [1] 0.896914547 0.184849185 1.587845331 1.130375674 0.080251757 0.132420284
##   [7] 0.707954729 0.239698024 1.984473937 0.138787012 0.417650751 0.981752777
##  [13] 0.392695356 1.039668977 1.782228960 2.311069085 0.878604581 0.035806718
##  [19] 1.012828692 0.432265155 2.090819205 1.199925820 1.589638200 1.954651642
##  [25] 0.004937777 2.451706388 0.477237303 0.596558169 0.792203270 0.289636710
##  [31] 0.738938604 0.318960401 1.076164354 0.284157720 0.776675274 0.595660499
##  [37] 1.725979779 0.902584480 0.559061915 0.246512567 0.383586228 1.959103175
##  [43] 0.841705060 1.903547467 0.622493930 1.990920436 0.305483725 0.090844235
##  [49] 0.184161452 1.198767765 0.838287148 2.066301356 0.562247053 1.275715512
##  [55] 1.047572627 1.965878241 0.322971094 0.935862527 1.139229803 1.671618767
##  [61] 1.788242207 2.031242519 0.703144333 0.158164763 0.506234797 0.819995106
##  [67] 1.998846995 0.479292591 0.084179904 0.895486611 0.921275666 0.330449503
##  [73] 0.141660809 0.434847762 0.053722626 0.907110376 1.303512232 0.771789776
##  [79] 1.052525595 1.410038341 0.995984590 1.695764903 0.533372143 1.372269451
##  [85] 2.207919779 1.822122519 0.653393411 0.284681219 0.386949604 0.386694975
##  [91] 1.600390852 1.681154956 1.183606388 1.358457254 1.512670795 1.253104899
##  [97] 1.959357077 0.007645872 0.842615198 0.601160105
sum(y>2)
## [1] 6
y[c(16,21,26)]
## [1] 2.311069 2.090819 2.451706
k <- 0
i <- 0
while( k<3 & i<100){ 
  i <- i+1
  temp <- y[i]
  k <- k+ (temp>2)
}
i

Alıştırma 1

Hız yapmayı seven bir kişinin arabasında bulanan bir alet 140 km/saat hızı aştığında hızını en az 120km/saate düşürmelisin uyarısını versin. Bu alet kişinin hızı 120 km/saat ve altinda ise saattaki hızını en az 20 km/saat azaltmalısın yazsın. Bu alet kişinin hızı 100 km/saat civarında ise biraz daha yavaslamayı deneyebilirsin desin. 82 km/saat ve altında ise güvendesin boyle devam edebilirsin diyebilir.

speed <- 120 
  while (speed > 82) { 
  print(paste("Hızınız:", speed, "Lütfen yavaşlayın!" )) 
  speed <- speed - 7 
  if(speed <= 82) { 
  print(paste("Hızınız:", speed, "Böyle devam edebilirsin!")) 
  break 
  } 
}
## [1] "Hızınız: 120 Lütfen yavaşlayın!"
## [1] "Hızınız: 113 Lütfen yavaşlayın!"
## [1] "Hızınız: 106 Lütfen yavaşlayın!"
## [1] "Hızınız: 99 Lütfen yavaşlayın!"
## [1] "Hızınız: 92 Lütfen yavaşlayın!"
## [1] "Hızınız: 85 Lütfen yavaşlayın!"
## [1] "Hızınız: 78 Böyle devam edebilirsin!"

Alıştırma 1

speed <- 140
while (speed >= 140) {
  print(paste("Hızınız:", speed,"Hızını en az 120km/saate düşürmelisin")) 
  speed = speed -20 
  if (speed >= 120) print(paste("Hızınız:", speed,"Saatteki hızını en az 20 km/saat azaltmalısın")) 
    speed <- speed - 20
  if (speed >= 100) print(paste("Hızınız", speed,"biraz daha yavaslamayı deneyebilirsin!")) 
      speed <- speed - 20 
  if(speed <=82) print("Boyle devam et!") 
}
## [1] "Hızınız: 140 Hızını en az 120km/saate düşürmelisin"
## [1] "Hızınız: 120 Saatteki hızını en az 20 km/saat azaltmalısın"
## [1] "Hızınız 100 biraz daha yavaslamayı deneyebilirsin!"
## [1] "Boyle devam et!"

Alıştırma 1

speed <- 140
while (speed >= 140) {
  print(paste("Suanki hızın", speed))
  print("hızını en az 120km/saate düşürmelisin")
  speed = speed -20
  if (speed >= 120) {
    print("saattaki hızının en az 20 km/saat azaltmalısın")
    speed <- speed - 20
  }
  if (speed >= 100){
    speed <- speed - 20
    print("Biraz daha yavaslamayı deneyebilirsin!")
  } 
  if(speed <=82){
    print("Boyle devam et!")
  }
}
## [1] "Suanki hızın 140"
## [1] "hızını en az 120km/saate düşürmelisin"
## [1] "saattaki hızının en az 20 km/saat azaltmalısın"
## [1] "Biraz daha yavaslamayı deneyebilirsin!"
## [1] "Boyle devam et!"
  speed
## [1] 80

while()

Kcal <- 0
while (Kcal <= 2000){
  if (Kcal < 1500) print(paste("Aldığınız günlük kcal:",Kcal))
  if (Kcal >= 1500) print(paste("Aldığınız günlük kcal:",Kcal,"Kcal limitine yaklaşmak üzeresin!"))
  if (Kcal >= 2000) print(paste("Aldığınız günlük kcal:",Kcal, "Uyumayı deneyebilirsin!"))
  Kcal <- Kcal + 100
}
## [1] "Aldığınız günlük kcal: 0"
## [1] "Aldığınız günlük kcal: 100"
## [1] "Aldığınız günlük kcal: 200"
## [1] "Aldığınız günlük kcal: 300"
## [1] "Aldığınız günlük kcal: 400"
## [1] "Aldığınız günlük kcal: 500"
## [1] "Aldığınız günlük kcal: 600"
## [1] "Aldığınız günlük kcal: 700"
## [1] "Aldığınız günlük kcal: 800"
## [1] "Aldığınız günlük kcal: 900"
## [1] "Aldığınız günlük kcal: 1000"
## [1] "Aldığınız günlük kcal: 1100"
## [1] "Aldığınız günlük kcal: 1200"
## [1] "Aldığınız günlük kcal: 1300"
## [1] "Aldığınız günlük kcal: 1400"
## [1] "Aldığınız günlük kcal: 1500 Kcal limitine yaklaşmak üzeresin!"
## [1] "Aldığınız günlük kcal: 1600 Kcal limitine yaklaşmak üzeresin!"
## [1] "Aldığınız günlük kcal: 1700 Kcal limitine yaklaşmak üzeresin!"
## [1] "Aldığınız günlük kcal: 1800 Kcal limitine yaklaşmak üzeresin!"
## [1] "Aldığınız günlük kcal: 1900 Kcal limitine yaklaşmak üzeresin!"
## [1] "Aldığınız günlük kcal: 2000 Kcal limitine yaklaşmak üzeresin!"
## [1] "Aldığınız günlük kcal: 2000 Uyumayı deneyebilirsin!"

while()

400’den küçük olan Fibonacci dizisinin elemanlarını while() döngüsü ile yazma

##  [1]   1   1   2   3   5   8  13  21  34  55  89 144 233 377
##  [1]   1   1   2   3   5   8  13  21  34  55  89 144 233 377

while odev

Aşağıdaki üçgen çıktısını olusturacak olan kodu döngü kullanarak yazınız.

##                     * 
##                   * * * 
##                 * * * * * 
##               * * * * * * * 
##             * * * * * * * * * 
##           * * * * * * * * * * * 
##         * * * * * * * * * * * * * 
##       * * * * * * * * * * * * * * *

while odev

Aşağıdaki kare çıktısını oluşturacak olan kodu döngü kullanarak yazınız.

##     * * * * * 
##     * * * * * 
##     * * * * * 
##     * * * * * 
##     * * * * *

while odev

Aşağıdaki kare çıktısını oluşturacak olan kodu döngü kullanarak yazınız.

##     * * * * * * * 
##     * * * * * * * 
##     * * * * * * * 
##     * * * * * * * 
##     * * * * * * * 
##     * * * * * * * 
##     * * * * * * *

while odev

Aşağıdaki dikdortgen çıktısını oluşturacak olan kodu döngü kullanarak yazınız.

Dikdörtgeni uzun ve kısa kenar icin deger girilerek de olusturabilirsiniz.,

##       * * * * * * * * * * 
##       * * * * * * * * * * 
##       * * * * * * * * * * 
##       * * * * * * * * * *