Menu
CoddyTech

الحلقات المتداخلة

جزء من قسم الأساسيات في رحلة R على Coddy. الدرس 44 من 78.

يمكنك وضع حلقة داخل حلقة أخرى لإنشاء حلقة متداخلة. تُنفَّذ الحلقة الداخلية بالكامل في كل تكرار للحلقة الخارجية، ما يجعل هذا مفيدًا عند التعامل مع التوليفات أو الأنماط الشبيهة بالشبكة.

rows <- 3
cols <- 2
for (i in 1:rows) {
  for (j in 1:cols) {
    cat("i =", i, ", j =", j, "\n")
  }
}

المخرجات:

i = 1 , j = 1 
i = 1 , j = 2 
i = 2 , j = 1 
i = 2 , j = 2 
i = 3 , j = 1 
i = 3 , j = 2

لكل قيمة من i، تمرّ الحلقة الداخلية على جميع قيم j. عندما تكون i تساوي 1، تتراوح قيمة j من 1 إلى 2. ثم تصبح i تساوي 2، وتبدأ j من جديد وتتراوح من 1 إلى 2 مرة أخرى. لا تتغير rows وcols أبدًا؛ فهما تخبران الحلقتين فقط متى تتوقفان.

من الأمثلة العملية إنشاء نمط ضرب بسيط:

for (row in 1:3) {
  for (col in 1:3) {
    cat(row * col, " ")
  }
  cat("\n")
}

الناتج:

1  2  3  
2  4  6  
3  6  9

تتحكم الحلقة الخارجية في الصفوف، بينما تتولى الحلقة الداخلية معالجة كل عمود ضمن ذلك الصف. بعد إكمال كل صف، نطبع سطرًا جديدًا للانتقال إلى السطر التالي.

challenge icon

التحدي

سهل

اقرأ عددين من الإدخال: rows وcols.

استخدم حلقات متداخلة لطباعة مستطيل من الأرقام، بحيث تحتوي كل خلية على مجموع رقم صفها ورقم عمودها. تُرقّم الصفوف من 1 إلى rows، وتُرقّم الأعمدة من 1 إلى cols.

اطبع كل صف في سطر مستقل، مع فصل القيم بمسافة واحدة. استخدم cat() للإخراج، وأضف سطرًا جديدًا بعد كل صف.

على سبيل المثال، إذا كان الإدخال 3 و4، فيجب أن يكون الإخراج:

2 3 4 5 
3 4 5 6 
4 5 6 7

في الصف الأول (الصف 1)، تكون القيم 1+1=2 و1+2=3 و1+3=4 و1+4=5. في الصف الثاني (الصف 2)، تكون القيم 2+1=3 و2+2=4 و2+3=5 و2+4=6، وهكذا.

تضع cat() مسافة بين القيم التي تمررها إليها، لذا فإن cat(row + col, "") تطبع الرقم متبوعًا بمسافة واحدة بالضبط.

استخدم عدّادًا جديدًا لكل حلقة (مثلًا row للصفوف وcol للأرقام في الصف) وقارنه مع rows أو cols. لا تغيّر rows وcols نفسيهما: فكل صف يحتاج إلى cols من جديد.

جرّب بنفسك

# اقرأ المدخلات
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)

# TODO: اكتب الكود الخاص بك أدناه
# استخدم حلقات متداخلة لطباعة مستطيل تحتوي كل خلية فيه على مجموع الصف والعمود
# استخدم cat() لطباعة القيم مفصولة بمسافات، مع سطر جديد بعد كل صف
quiz iconاختبر نفسك

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

جميع دروس الأساسيات

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