الحلقات المتداخلة
جزء من قسم الأساسيات في رحلة 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("") إلى السطر التالي.
التحدي
سهلاقرأ عددين صحيحين من المدخلات: 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("") بعد الحلقة الداخلية للانتقال إلى السطر التالييتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمةالإسناد المركبمراجعة - عمليات رياضية بسيطةمعاملات المقارنة7أساسيات الإدخال والإخراج
دالة الطباعةتضمين النصوصإدخال ReadLineتحويل الأنواعمراجعة - حتى 120مراجعة - True أو False10الدوال
تعريف دالةالمعاملات والوسائطقيم الإرجاعتسميات الوسائطمراجعة - دالة Sigmaمراجعة - دالة Validationالقيم الافتراضية2المتغيرات
Let مقابل Varتوصيف الأنواع (Type Annotations)الأرقامStringBooleanقواعد التسميةمراجعة - تهيئة المتغيرات5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالثالمعامل الثلاثي (Ternary Operator)8حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على المدخلات3القيم الاختيارية (Optionals)
ما هي القيم الاختياريةفك القيم باستخدام If Letاستخدام Guard Letمعامل دمج Nilمراجعة - فك القيم بأمان9حلقات التكرار
حلقة For-Inحلقة Whileحلقة Repeat-WhileBreakContinueمراجعة - المضروب (Factorial)النطاقات في حلقات التكرارالحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)