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

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

جزء من قسم الأساسيات في رحلة Swift على Coddy — الدرس 49 من 86.

إن الحلقة المتداخلة هي ببساطة حلقة داخل حلقة أخرى. تكمل الحلقة الداخلية جميع تكراراتها لكل تكرار واحد للحلقة الخارجية.

for row in 1...3 {
    for col in 1...2 {
        print("Row \(row), Col \(col)")
    }
}
// المخرجات:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2

لكل قيمة من قيم row، تعمل الحلقة الداخلية بالكامل عبر جميع قيم col. لذا، مع 3 تكرارات خارجية وتكرارين داخليين، يتم تشغيل الكود الموجود بالداخل 6 مرات إجمالاً (3 × 2).

تُستخدم الحلقات المتداخلة بشكل شائع للتعامل مع الهياكل التي تشبه الشبكة أو لإنشاء الأنماط.

إليك مثال يطبع مستطيلاً بسيطاً من النجوم:

for row in 1...2 {
    for col in 1...4 {
        print("*", terminator: "")
    }
    print("")  // الانتقال إلى السطر التالي
}
// المخرجات:
// ****
// ****

يمنع terminator: "" الـ print من إضافة سطر جديد، لذا تظهر النجوم في نفس الصف. بعد انتهاء الحلقة الداخلية، ينتقل print("") إلى السطر التالي.

challenge icon

التحدي

سهل

اقرأ عددين صحيحين من المدخلات: rows و cols. استخدم الحلقات المتداخلة لطباعة شبكة من الأرقام حيث تعرض كل خلية حاصل ضرب رقم الصف في رقم العمود.

ستتلقى المدخلات التالية:

  • السطر الأول: عدد الصفوف (على سبيل المثال، "3")
  • السطر الثاني: عدد الأعمدة (على سبيل المثال، "4")

المتطلبات:

  • استخدم حلقة خارجية للصفوف (من 1 إلى rows)
  • استخدم حلقة داخلية للأعمدة (من 1 إلى cols)
  • اطبع حاصل ضرب أرقام الصف والعمود الحاليين
  • افصل بين القيم في نفس الصف بمسافة
  • يجب أن يكون كل صف في سطر مستقل

تلميح: استخدم terminator: " " لإبقاء القيم في نفس السطر، ثم استخدم print("") بعد الحلقة الداخلية للانتقال إلى السطر التالي.

على سبيل المثال، إذا كان rows هو 3 و cols هو 4، يجب أن تكون المخرجات:

1 2 3 4 
2 4 6 8 
3 6 9 12 

ورقة مرجعية

الحلقة المتداخلة (nested loop) هي حلقة داخل حلقة أخرى. تُكمل الحلقة الداخلية جميع تكراراتها لكل تكرار واحد من الحلقة الخارجية.

for row in 1...3 {
    for col in 1...2 {
        print("Row \(row), Col \(col)")
    }
}
// المخرجات:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2

مع وجود 3 تكرارات خارجية و2 من التكرارات الداخلية، يتم تشغيل الكود 6 مرات في المجموع (3 × 2).

تُعد الحلقات المتداخلة مفيدة للهياكل والأنماط الشبيهة بالشبكة:

for row in 1...2 {
    for col in 1...4 {
        print("*", terminator: "")
    }
    print("")  // الانتقال إلى السطر التالي
}
// المخرجات:
// ****
// ****

استخدم terminator: "" لمنع print من إضافة سطر جديد، مما يحافظ على المخرجات في نفس السطر. استخدم print("") بعد الحلقة الداخلية للانتقال إلى السطر التالي.

جرّب بنفسك

let rows = Int(readLine()!)!
let cols = Int(readLine()!)!

// مهام: اكتب الكود الخاص بك أدناه
// استخدم الحلقات المتداخلة لطباعة شبكة الضرب
// الحلقة الخارجية: التكرار عبر الصفوف (من 1 إلى rows)
// الحلقة الداخلية: التكرار عبر الأعمدة (من 1 إلى cols)
// اطبع ناتج ضرب الصف * العمود
// استخدم print(..., terminator: " ") لإبقاء القيم في نفس السطر
// استخدم print("") بعد الحلقة الداخلية للانتقال إلى السطر التالي
quiz iconاختبر نفسك

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

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