Menu
CoddyTech

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

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

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

let rows = 3
let cols = 2
for row in 1...rows {
    for col in 1...cols {
        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، من 1 إلى cols. لذا، عندما تكون قيمة rows = 3 وقيمة cols = 2، يُنفَّذ الكود الموجود داخلها 6 مرات إجمالًا (3 × 2). لا تتغير قيمتا rows وcols أبدًا؛ فهما تخبران الحلقات فقط متى تتوقف.

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

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

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 

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

جرّب بنفسك

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

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

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

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

تدرّب بنفسك: Playground لـ Swift