Menu
Coddy logo textTech

repeat ve break

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 49 / 64.

repeat, içindeki bir break döngüyü durdurana kadar gövdesini tekrar tekrar çalıştırır. Çıkış koşulunun yalnızca gövdenin ortasında bilindiği döngüler için uygundur:

n <- 1
repeat {
  n <- n * 2
  if (n > 50) break
}
print(n)

Çıktı:

[1] 64

Collatz dizisi bir örnektir: çift sayıları ikiye bölün, tek sayıları 3n + 1 değerine dönüştürün ve 1'de durun. Adım sayısı önceden bilinmez:

n <- 6
steps <- 0
repeat {
  if (n == 1) break
  n <- if (n %% 2 == 0) n / 2 else 3 * n + 1
  steps <- steps + 1
}
print(steps)

Çıktı:

[1] 8

next geçerli yinelemenin geri kalanını atlar ve bir sonrakini başlatır. repeat, while ve for döngülerinde çalışır:

for (x in 1:8) {
  if (x %% 3 == 0) next
  cat(x, "")
}
cat("\n")

Çıktı:

1 2 4 5 7 8 

Ulaşılabilir bir break içermeyen bir repeat döngüsü asla sona ermez. Çıkış verilere bağlı olduğunda güvenlik sınırı olarak bir sayaç tutun:

total <- 0
tries <- 0
repeat {
  tries <- tries + 1
  total <- total + tries
  if (total >= 20 || tries == 100) break
}
print(c(tries, total))

Çıktı:

[1]  6 21
challenge icon

Görev

Kolay

digital_root(n) fonksiyonunu tamamla. Tek basamak kalana kadar n değerini basamaklarının toplamıyla değiştir ve <result> after <steps> steps döndür: 9875 değeri 2 after 3 steps verir (9875, 29, 11, 2). Zaten tek basamaklı olan bir sayı 0 adım sürer.

sum(as.numeric(strsplit(as.character(n), "")[[1]])), n değerinin basamaklarını toplar.

Sağlanan kod n değerini okur ve döndürülen değeri yazdırır.

Kendin dene

digital_root <- function(n) {
  # Kodunuzu buraya yazın
  ""
}

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi