اذهب إلى المحتوى
  • 0

أريد شرح عن "الحلقات المتداخلةNested Loops"

Zaid Hafi

السؤال

Recommended Posts

  • 0

أنت تقصد في في جافاسكريبت، صحيح؟

 عامًة نستخدم"nested loops" أو الحلقات المتداخلة لإجراء تكرارات داخل بعضها البعض، مم يعني أنك تستطيع وضع حلقة داخل حلقة أخرى، وهو أمر مفيد عندما تحتاج إلى تنفيذ إجراءات متعددة ومتداخلة للوصول إلى البيانات الخاصة بك.

ولنفترض أن لدينا مصفوفة متداخلة (nested array) تحتوي على قائمة بعض الأشخاص وأعمارهم، ونريد عرض جميع الأشخاص مع أعمارهم باستخدام nested loops، كالتالي:

const people = [
  { name: "John", age: 25 },
  { name: "Jane", age: 30 },
  { name: "Bob", age: 22 },
];

// استخدام nested loops لعرض الأشخاص مع أعمارهم
for (let i = 0; i < people.length; i++) {
  const person = people[i];
  console.log(`الشخص رقم ${i + 1}: ${person.name عمره ${person.age} سنة.`);
}

لاحظ أن لدينا حلقة خارجية تتعامل مع العناصر الخارجية في المصفوفة people، وحلقة داخلية تتعامل مع الخصائص الداخلية لكل عنصر (اسم الشخص وعمره)، ويتم تنفيذ الحلقتين معًا، بحيث تعمل الحلقة الداخلية لكل تكرار من الحلقة الخارجية.

والنتيجة هي:

الشخص رقم 1: John، عمره 25 سنة.
الشخص رقم 2: Jane، عمره 30 سنة.
الشخص رقم 3: Bob، عمره 22 سنة.

مثال آخر ليتضح الأمر لك:

لنفرض أن لدينا مصفوفة متداخلة تحتوي على درجات طلاب في مادتين، ونريد حساب المجموع الإجمالي لكل طالب وطباعته:

const grades = [
  [85, 90],
  [70, 80],
  [95, 88],
];

// حساب المجموع الإجمالي لكل طالب وطباعته
for (let i = 0; i < grades.length; i++) {
  const studentGrades = grades[i];
  let totalGrade = 0;

  for (let j = 0; j < studentGrades.length; j++) {
    totalGrade += studentGrades[j];
  }

  const averageGrade = totalGrade / studentGrades.length;
  console.log(`طالب رقم ${i + 1}: المجموع = ${totalGrade المعدل = ${averageGrade}`);
}

في المثال السابق يوجد حلقة خارجية تتعامل مع كل طالب في المصفوفة grades، وحلقة داخلية تتعامل مع الدرجات المختلفة لكل طالب، ثم حساب المجموع الإجمالي لدرجات كل طالب وتحديد المعدل الحسابي له.

والنتيجة هي:

طالب رقم 1: المجموع = 175، المعدل = 87.5
طالب رقم 2: المجموع = 150، المعدل = 75
طالب رقم 3: المجموع = 183، المعدل = 91.5

وتستطيع البحث على اليوتيوب عن "الحلقات المتداخلة Nested Loops" ثم اسم اللغة وستجد شروحات كثيرة.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بعض النظر لغة البرمجة التي تستعملها فإن المفهوم الخاص بالتداخل دائماً يمكنك تخيله كما يلي:

ما الفرق بين حلقة داخل حلقة أو حلقة عادية؟ في الواقع لا فرق من ناحية المبدأ، حيث أن الحلقة ما هي إلى تكرار للكود، و يمكنك التفكير بتكرار واحد لفهم بقية التكرارات، أي اعتبر الحلقة الخارجية عند لفة معينة (قيمة عداد معينة) و تعامل معه و كأنه متغير معرف قبل الحلقة الداخلية، أي ما الفرق بين كتابة ما يلي:

for (int i = 0 ; i < 10 ; ++i){
	for (int j = 0 ; j < 5 ; ++i){
    	...
    }
}

و بين ما يلي:

int i;  // لنعتبر أن له قيمة ما لا نعرفها حالياً أو نعرف على الأقل مجموعة القيم التي من الممكن أن يأخذها
for (int j = 0 ; j < 5 ; ++i){
	...
}

في الواقع لا فرق من وجهة نظر الحلقة الداخلية، فالحلقة الخارجية ما هي إلى تكرار للكود الثاني كل مرة بقيمة i مختلفة.

و لذلك دائماً يمكنك التفكير ببعض من التجريد في ذلك، أي نثبت قيمة معينة للمتغير (أو المتغيرات الخارجية) و نتعامل مع الحلقة الداخلية على أنها تقوم بعمل ما من أجل هذه المتغيرات.

أنصحك بالقيام ببعض التمارين لمحاولة فهم ذلك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الحلقات المتداخلة (Nested Loops) عموما كمفهوم برمجيا هي هيكل برمجي يتم فيه وضع حلقة (Loop) داخل حلقة أخرى. بمعنى آخر، عند استخدام الحلقات المتداخلة، يتم تكرار تنفيذ كود ما داخل حلقة، وداخلها نجد حلقة أخرى تقوم بتكرار تنفيذ كود آخر. هذا النمط يسمح لنا بتكرار العمليات والتحكم في التكرار بشكل أكثر تعقيدًا ومنظمًا.

 

لنقم بإعطاء مثال بسيط جداً باستخدام لغة JavaScript:

فرض لدينا الهدف هو طباعة جميع الأرقام من 1 إلى 9 بالترتيب في صف واحد باستخدام حلقتين متداخلتين:

// استخدام حلقتين متداخلتين لطباعة الأرقام من 1 إلى 9 بالترتيب
for (let i = 1; i <= 3; i++) {
  for (let j = 1; j <= 3; j++) {
    const number = (i - 1) * 3 + j;
    console.log(number + " ");
  }
}

// ستظهر النتيجة كالتالي: 1 2 3 4 5 6 7 8 9

في هذا المثال، لدينا حلقتين متداخلتين. الحلقة الخارجية تبدأ من 1 وتستمر حتى 3. بينما الحلقة الداخلية أيضًا تبدأ من 1 وتستمر حتى 3. يتم تحديد قيمة المتغير number بناءً على قيم المتغيرين i و j ليتم طباعة الرقم بالترتيب في نفس السطر باستخدام console.log().

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

للحصول على فيديو حول Nested Loops (النستد لوب)، يمكنك البحث في مواقع مشاركة الفيديو مثل YouTube عن مواضيع مثل:

1. Nested Loops in JavaScript.
2. Using Nested Loops in Programming.
3. Introduction to Nested Loops.

كلمة المفتاح هي "Nested Loops" أو "النستد لوب" وهكذا ستتمكن من العثور على الفيديوهات التي تشرح هذا الموضوع بشكل مفصل وبطريقة بصرية.

الحلقات المتداخلة (Nested Loops) هي مصطلح في علوم الحاسوب والبرمجة يشير إلى استخدام حلقة داخل حلقة أخرى. في لغات البرمجة مثل جافاسكريبت وC++ وجافا وغيرها، يمكنك تضمين حلقة داخل حلقة أخرى لتكرار الأوامر بشكل أكثر تفصيلًا.

لنفهم الأمر بشكل أفضل، دعنا نستعرض مثالًا بسيطًا. لنفترض أننا نرغب في طباعة جميع الأرقام من 1 إلى 5 مع كل رقم يطبع عدد من النجوم يمثل قيمة الرقم. النمط المطلوب سيكون مثل التالي:

*
**
***
****
*****

لحل هذه المشكلة باستخدام nested loops، يمكننا استخدام حلقتين، حيث تحتوي الحلقة الخارجية على متغير يمثل الرقم الحالي، والحلقة الداخلية تستخدم هذا المتغير لطباعة النجوم.

for (let i = 1; i <= 5; i++) {
  let stars = '';
  for (let j = 1; j <= i; j++) {
    stars += '*';
  }
  console.log(stars);
}

في هذا الكود، الحلقة الخارجية for تستخدم المتغير i لتمثيل الرقم الحالي من 1 إلى 5. بداخل الحلقة الخارجية، لدينا الحلقة الداخلية for التي تستخدم المتغير j لإضافة نجمة واحدة في كل تكرار حتى تصبح عدد النجوم مساويًا لقيمة i. ثم يتم طباعة سلسلة النجوم في كل تكرار للحلقة الخارجية.

*
**
***
****
*****

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...