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

الاستمرار في حلقة محددة

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 3 من 68.

تماماً كما يمكنك استخدام التسميات (labels) مع break للخروج من حلقات تكرارية معينة، تسمح لك لغة Go أيضاً باستخدام التسميات مع جملة continue. تقوم جملة continue ذات التسمية بتخطي التكرار الحالي للحلقة المحددة والانتقال إلى التكرار التالي لها.

هذا مفيد بشكل خاص في الحلقات المتداخلة عندما تريد تخطي بقية التكرار الحالي لحلقة خارجية من داخل حلقة داخلية، بدلاً من مجرد الاستمرار في الحلقة الداخلية.

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 0 {
            continue outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
    fmt.Println("End of outer loop iteration")
}

في هذا المثال، عندما يكون i == 1 && j == 0، فإن عبارة continue outer تتخطى بقية التكرار الحالي للحلقة الخارجية، بما في ذلك الحلقة الداخلية ورسالة "End of outer loop iteration". ينتقل البرنامج بعد ذلك مباشرة إلى التكرار التالي للحلقة الخارجية حيث تصبح i قيمتها 2.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

في هذا التحدي، ستتدرب على استخدام بيانات continue المسماة (labeled) للتحكم في تنفيذ الحلقات المتداخلة. أنت تقوم ببناء نظام لمعالجة البيانات يحتاج إلى تخطي تكرارات معينة في الحلقة الخارجية بناءً على شروط موجودة في الحلقات الداخلية.

ستتلقى مدخلين:

  • سلسلة نصية تمثل عدد الصفوف المراد معالجتها (على سبيل المثال، "4")
  • سلسلة نصية تمثل رقم شرط التخطي (على سبيل المثال، "3")

يتم تزويدك بمصفوفة البيانات ثنائية الأبعاد التالية:

data := [][]int{
    {1, 2, 3, 4, 5},
    {6, 7, 8, 9, 10},
    {11, 12, 13, 14, 15},
    {16, 17, 18, 19, 20},
    {21, 22, 23, 24, 25}
}

مهمتك هي:

  1. تحليل عدد الصفوف من المدخل الأول لتحديد عدد الصفوف التي سيتم معالجتها
  2. تحليل رقم شرط التخطي من المدخل الثاني
  3. استخدام حلقات متداخلة مع continue مسماة لمعالجة البيانات
  4. لكل صف، تحقق من قيمة كل عمود في ذلك الصف
  5. إذا وجدت رقم شرط التخطي في أي عمود من الصف، استخدم continue المسماة لتخطي بقية معالجة ذلك الصف والانتقال إلى الصف التالي
  6. بالنسبة للصفوف التي لا تحتوي على رقم شرط التخطي، اطبع "Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"
  7. بالنسبة للصفوف التي تحتوي على رقم شرط التخطي، اطبع "Skipping row [row_number] due to condition"

يجب الإبلاغ عن أرقام الصفوف باستخدام فهرسة تبدأ من الصفر (الصف الأول هو 0). قم بمعالجة عدد الصفوف المحدد في المدخل الأول فقط، وتحقق فقط من الأعمدة الخمسة الأولى من كل صف.

ورقة مرجعية

استخدم التسميات (labels) مع continue لتخطي التكرار الحالي لحلقة معينة في الحلقات المتداخلة:

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 0 {
            continue outer
        }
        fmt.Printf("i=%d, j=%d\n", i, j)
    }
    fmt.Println("End of outer loop iteration")
}

عند تنفيذ continue outer، فإنه يتخطى بقية التكرار الحالي للحلقة الخارجية وينتقل مباشرة إلى التكرار التالي للحلقة المسماة.

جرّب بنفسك

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // قراءة المدخلات
    var rowsInput string
    var skipConditionInput string
    fmt.Scanln(&rowsInput)
    fmt.Scanln(&skipConditionInput)
    
    // تحليل المدخلات
    numRows, _ := strconv.Atoi(rowsInput)
    skipCondition, _ := strconv.Atoi(skipConditionInput)
    
    // مصفوفة البيانات ثنائية الأبعاد المقدمة
    data := [][]int{
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11, 12, 13, 14, 15},
        {16, 17, 18, 19, 20},
        {21, 22, 23, 24, 25},
    }
    
    // TODO: اكتب الكود الخاص بك أدناه
    // استخدم الحلقات المتداخلة مع "labeled continue" لمعالجة البيانات
    // افحص كل صف بحثاً عن رقم شرط التخطي
    // اطبع الرسائل المناسبة بناءً على ما إذا تم العثور على الشرط
    
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow