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

السؤال

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله،

تبدأ المصفوفات بالفهرس 0 بدلا من 1 في معظم لغات البرمجة فمن الناحية التقنية يمثل فهرس المصفوفة إزاحة من عنوان الذاكرة الأساسي هنا العنصر الأول ليس له إزاحة (0)، والعنصر الثاني مزاح بمقدار حجم عنصر واحد وهكذا.

في الرياضيات غالبا ما تستخدم النطاقات فترات نصف مفتوحة مثل [0,n) بمعنى "0 إلى n-1 ضمنا" هذا يجعل الحسابات أنظف إذا كان لدينا مثلا مصفوفة بطول n، فإن الفهارس الصالحة هي من 0 إلى n-1.

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

موقع العنصر = عنوان البداية + (الفهرس × حجم العنصر)

للعنصر الأول لا نحتاج إلى أي إزاحة عن نقطة البداية، لذلك تكون الإزاحة 0، وهكذا يكون الفهرس 0.

يمكنك تخيل أن المصفوفة مثل صف من المنازل على شارع، المنزل الأول هو على بعد 0 متر من بداية الشارع، والمنزل الثاني على بعد 10 أمتار، والثالث على بعد 20 مترا وهكذا لذلك نشير إلى المنازل باستخدام المسافة المنزل في المسافة 0، المنزل في المسافة 10 وهكذا.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

السبب الرئيسي هو كيفية تعامل الكمبيوتر مع الذاكرة وعلم الحاسوب بشكل عام. حيث في بداية صناعة الكمبيوتر ونظم التشغيل . كان يتم التعامل مع الذاكرة مباشرة .

حيث حينما تقوم بإنشاء مصفوفة يتم تخصيص كتلة متجاورة من الذاكرة لتخزين العناصر فمثلا لو لديك قائمة ب 10 عناصر فإنه يتم البحث في الذاكرة لمكان فارغ يحوى 10 block متجاورة ويتم حجز ذلك المكان لتلك المصفوفة .

وال index يمثل الإزاحة (offset) من عنوان الذاكرة الأساسي للمصفوفة . ولذلك إذا بدأنا العد من 0، فإن:

  • العنصر الأول يكون عند العنوان: base address + 0
  • العنصر الثاني يكون عند العنوان: base address + 1

وهكذا هذا يجعل العمليات الحسابية على العناوين أسهل وأسرع و أكثر كفاءة.

وأيضا في علوم الحاسوب العد يبدا من 0 وهو يعود إلى الرياضيات والمنطق حيث يكون هذا الترقيم أكثر فعالية في التعبير عن الخوارزميات.

  • 0
نشر

نبدأ العد من الصفر في المصفوفات لأن ذلك يتماشى مع كيفية تخزين البيانات في الذاكرة، ويجعل العمليات الحسابية على الفهارس أبسط وأسرع عندما تعرّف مصفوفة في C يتم تخزين العناصر بجانب بعضها في الذاكرة، لكل عنصر عنوان في الذاكرة لنفترض أن أول عنصر موجود في العنوان 1000 في الذاكرة، وأضفنا أربعة عناصر جديدة بعده على افتراض أنّه إذا كان كل عنصر يأخذ 4 بايت، فكل عنصر جديد يبدأ بعد 4 بايت من السابق ومنه ستكون كالتالي:

  • 1004
  • 1008
  • 1012
  • 1016

فعندما تشير إلى المصفوفة arr فإن arr هو في الواقع العنوان الأول في الذاكرة 1000 وكل من:

  • arr[0] تعني "العنصر الأول بدءا من العنوان الأساسي" أي: 1000 + 0 * 4 = 1000
  • arr[1] تعني "العنصر الثاني بدءا من العنوان الأساسي" أي: 1000 + 1 * 4 = 1004
  • arr[2] تعني "العنصر الثالث بدءا من العنوان الأساسي" أي: 1000 + 2 * 4 = 1008

لاحظ أن الصيغة بسيطة عند استخدام الصفر: عنوان العنصر = العنوان الأساسي + الفهرس × حجم العنصر
أما إذا بدأنا الفهرس من 1، فستصبح الصيغة أكثر تعقيدا (ستحتاج إلى index - 1 في كل مرة) مما يجعل الحساب أصعب.

  • 0
نشر

تبدأ الفهرسة (indexing) في معظم لغات البرمجة من الصفر (0) بدلاً من الواحد (1) لعدة أسباب منطقية ورياضية كما تم شرحها بالتعليق السابق ومع ذلك كان لتصميم لغة C تأثير كبير في تشكيل معايير البرمجة الحديثة. صممت لغة C المصفوفات للفهرسة من الصفر، وتبعتها الكثير من اللغات اللاحقة مثل Java وC++ وJavaScript وPython.

كما أنه من اهم الأسباب للفهرسة من الصفر هي الحلقات (Loops) فإذا اخترنا أن تكون الفهارس من 1، سنضطر إلى استخدام نطاق مثل 1 ≤ i < N+1، وهو ما يُعتبر أقل وضوحاً.

أما الفهرسة من 0 فتتيح لنا استخدام النطاق 0 ≤ i < N، مما يجعل الحسابات أبسط وأكثر اتساقًا.

  • 0
نشر

يبدأ الفهرس في المصفوفات من 0 بدلا من 1 لعدة أسباب تتعلق بالكفاءة وإدارة الذاكرة، فعند تخصيص مصفوفة في الذاكرة، يتم تخزين عناصرها في مواقع متتالية، ويتم حساب عنوان كل عنصر باستخدام معادلة تعتمد على الفهرس، إذا بدأ الفهرس من 0، فإن أول عنصر يكون في العنوان الأساسي للمصفوفة دون أي إزاحة، مما يجعل العمليات الحسابية أكثر كفاءة، أما لو بدأ من 1 فسيحتاج كل عنصر إلى عملية طرح إضافية index - 1، مما يزيد من تعقيد الحسابات، وأيضا هذا النهج يتوافق مع طريقة عمل المؤشرات في لغات مثل C وC++، حيث يكون اسم المصفوفة مرادفا لعنوان أول عنصر، مما يسهل التعامل مع البيانات دون الحاجة إلى تعويضات إضافية، و اعتمدت لغات البرمجة المبكرة مثل C هذا الأسلوب نظرا لكفاءته العالية، وأصبح فيما بعد المعيار الافتراضي في معظم اللغات الحديثة.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...