الحلقات المتداخلة
جزء من قسم Fundamentals في رحلة Rust على Coddy — الدرس 41 من 75.
الحلقة المتداخلة هي ببساطة حلقة داخل حلقة أخرى. ستكمل الحلقة الداخلية جميع تكراراتها لكل تكرار واحد للحلقة الخارجية. التشبيه الجيد لهذا هو الساعة: فلكل ساعة (الحلقة الخارجية)، يجب أن يكمل عقرب الدقائق (الحلقة الداخلية) دورته الكاملة المكونة من 60 دقيقة.
مثال على حلقة متداخلة:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// سيقوم هذا بطباعة:
// 0 0
// 0 1
// 1 0
// 1 1تعمل الحلقة الخارجية (x) مرتين، وفي كل مرة من تلك المرات، تعمل الحلقة الداخلية (y) مرتين.
التحدي
مبتدئاكتب برنامجاً يجد جميع الثلاثيات من الأرقام التي مجموعها يساوي n باستخدام أرقام من 1 إلى n - 1. يجب أن يعرض البرنامج جميع المجموعات الممكنة حيث يكون الرقم الأول أقل من أو يساوي الرقم الثاني، والرقم الثاني أقل من أو يساوي الرقم الثالث (أي بترتيب غير تناقصي). يضمن ذلك عدم وجود ثلاثيات مكررة مثل "1 2 7" و "2 1 7" التي تمثل نفس مجموعة الأرقام.
على سبيل المثال، إذا كان n = 10، يجب أن تكون المخرجات:
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4لأن:
1 + 1 + 8 = 10
1 + 2 + 7 = 10
1 + 3 + 6 = 10
1 + 4 + 5 = 10
2 + 2 + 6 = 10
2 + 3 + 5 = 10
2 + 4 + 4 = 10
3 + 3 + 4 = 10ترتيب الطباعة: يجب طباعة الثلاثيات بترتيب تصاعدي. يجب أن يتكرر الرقم الأول من الأصغر إلى الأكبر، ولكل رقم أول، يجب أن يتكرر الرقم الثاني من الرقم الأول إلى أقصى قيمة صالحة، مع ضمان أن a ≤ b ≤ c.
ورقة مرجعية
الحلقة المتداخلة (nested loop) هي حلقة داخل حلقة أخرى. تُكمل الحلقة الداخلية جميع تكراراتها لكل تكرار واحد من الحلقة الخارجية.
هيكل الحلقة المتداخلة الأساسي:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// المخرجات:
// 0 0
// 0 1
// 1 0
// 1 1تعمل الحلقة الخارجية بالكامل، ومع كل تكرار للحلقة الخارجية، تقوم الحلقة الداخلية بتشغيل دورتها الكاملة.
جرّب بنفسك
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// اكتب كودك بالأسفل
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)اختصارات العمليات الحسابيةمعاملات المقارنةمقارنة النصوص7أساسيات الإدخال والإخراج
الطباعة على الكونسولقراءة مدخلات المستخدممراجعة - حتى 120مراجعة - True أو False2المتغيرات - الجزء الأول
الأرقامالمحارف (Char)النصوص (String)القيم المنطقية (Boolean)المتغيرات القابلة للتغيير5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالث11الدوال
تعريف الدوالالمعاملات والوسائطقيم الإرجاعقيم إرجاع متعددةمراجعة - دالة Sigmaمراجعة - دالة التحقق14التكرار عبر المصفوفات
دليل النطاق (Range)حلقة For المحسنةالاستعارة في الحلقةعمليات المصفوفات الشائعة3المتغيرات - الجزء الثاني
التصريح عن النوعقواعد التسميةاستنتاج النوعمراجعة - تهيئة المتغيراتتحويل الأنواع9الحلقات التكرارية
For عبر السلاسلحلقة Whileجملة Breakجملة Continueالحلقات المتداخلةتسميات الحلقاتالحلقة اللانهائيةمراجعة - الإدخال الديناميكي