الحلقات المتداخلة
جزء من قسم الأساسيات في رحلة 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تتحكم الحلقة الخارجية في الصفوف، بينما تتولى الحلقة الداخلية معالجة كل عمود ضمن ذلك الصف. بعد إكمال كل صف، نطبع سطرًا جديدًا للانتقال إلى السطر التالي.
التحدي
سهلاقرأ عددين من الإدخال: 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() لطباعة القيم مفصولة بمسافات، مع سطر جديد بعد كل صفيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الثاني
المعاملات المنطقية (AND, OR)المعاملات المنطقية - الجزء الثاني (NOT)مراجعة - المنطق البسيطالمنطق المتجهي - الجزء الأولالمنطق المتجهي - الجزء الثاني2المتغيرات وأنواع البيانات
نوع البيانات الرقمينوع البيانات الصحيحنوع البيانات الحرفينوع البيانات المنطقيالتحقق من أنواع البياناتقواعد التسميةالقيم المفقودة: NAملخص - إنشاء المتغيرات8الحلقات التكرارية
حلقة Forحلقة Whileجملة Breakجملة Next (Continue)مراجعة - المضروب (Factorial)توليد المتتاليات (seq, :)الحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)3المعاملات - الجزء الأول
المعاملات الحسابيةقسمة الأعداد الصحيحة وباقي القسمةمعاملات الإسنادملخص - عمليات رياضية بسيطةمعاملات المقارنة6أساسيات الإدخال والإخراج
طباعة المخرجاتاستخدام Cat للمخرجاتالمخرجات مع المتغيراتقراءة المدخلات باستخدام readline()أساسيات تحويل أنواع البياناتمراجعة - حاسبة العمرمراجعة - صح أم خطأتدرّب بنفسك: مترجم R عبر الإنترنت