الحلقات المتداخلة
جزء من قسم الأساسيات في رحلة 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("") المؤشر إلى السطر التالي.
التحدي
سهلاقرأ عددين صحيحين من الإدخال: 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("") بعد الحلقة الداخلية للانتقال إلى السطر التالييتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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)تدرّب بنفسك: Playground لـ Swift