Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

repeat و break

جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 49 من 64.

repeat تُعيد تشغيل جسمها مرة تلو الأخرى حتى يوقف break الموجود بداخلها الحلقة. وهي تناسب حلقة لا يُعرَف شرط خروجها إلا في منتصف الجسم:

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

الناتج:

[1] 64

تُعدّ متتالية كولاتز مثالًا: اقسم الأعداد الزوجية إلى النصف، وحوّل الأعداد الفردية إلى 3n + 1، وتوقّف عند 1. عدد الخطوات غير معروف مسبقًا:

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)

المخرجات:

[1] 8

تتخطى next بقية التكرار الحالي وتبدأ التكرار التالي. وهي تعمل في حلقات repeat وwhile وfor:

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

الإخراج:

1 2 4 5 7 8 

حلقة repeat من دون تعليمة break يمكن الوصول إليها لا تنتهي أبدًا. احتفظ بعدّاد كحدّ أمان عندما يعتمد الخروج على البيانات:

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

الناتج:

[1]  6 21
challenge icon

التحدي

سهل

أكمل digital_root(n). استبدل n بمجموع أرقامه حتى يتبقى رقم واحد، وأعد <result> after <steps> steps: تعطي 9875 القيمة 2 after 3 steps (9875، 29، 11، 2). الرقم الذي يتكون من رقم واحد بالفعل يحتاج إلى 0 خطوات.

تجمع sum(as.numeric(strsplit(as.character(n), "")[[1]])) أرقام n.

يقرأ الكود المزوَّد n ويطبع القيمة المُعادة.

جرّب بنفسك

digital_root <- function(n) {
  # اكتب الكود الخاص بك هنا
  ""
}

# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم R عبر الإنترنت