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

ياسر مسكين

الأعضاء
  • المساهمات

    2653
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    5

كل منشورات العضو ياسر مسكين

  1. إذا كان تطبيقك يتطلب سلوك خادم مخصص للغاية أو إذا كنت تدمج مع نظام Express قائم، فإن استخدام Express مع Next.js يمكن أن يكون مفيدا وبالنسبة للعديد من المشاريع الجديدة، فإن القدرات المدمجة في Next.js قوية بما يكفي للتعامل مع منطق الواجهة الأمامية والخلفية دون الحاجة إلى تعقيد إضافي لخادم خارجي. وباختصار إذا أردت استخدام Express مع Next.js يمكن ذلك إذا كنت بحاجة إلى وسائط متقدمة أو توجيه مخصص يتجاوز ما يقدمه Next.js أو إذا كنت تقوم بتكييف بنية خلفية تعتمد على Express أو تدمج مع خدمات Node.js أخرى. كما يمكنك الاكتفاء بالخادم المدمج في Next.js إذا كانت احتياجات تطبيقك تتم تلبيتها من خلال مسارات API وميزات SSR في Next.js، خاصة مع التحسينات الأخيرة فالنسخ الأحدث من Next.js قد حسنت مسارات API، وإمكانيات الوسائط، ودعم الخدمات بدون خادم (serverless) وبالنسبة للعديد من المشاريع، تعني هذه التحسينات أن الخادم المدمج كاف، مما يلغي الحاجة إلى إعداد خادم خارجي إلا إذا كانت المتطلبات محددة للغاية. يمكنك المراجعة أكثر من خلال موسوعة حسوب: Next.js أو من خلال المقالات والإجابات التالية:
  2. وعليكم السلام ورحمة الله وبركاته، ترتيب المسارات وحتى الدروس لم يتم وضعه عشوائيا فهذا الترتيب مهم لترابط الدروس ببعضها البعض، ولوجود مسارات للتطبيقات العملية ولأهميتها في ترسيخ المفاهيم الأولية بالنسبة للمبتدئين في المجال. فالانتقال من المسار الثالث إلى المسار الثامن مباشرة قد يتسبب في بعض اللبس في حال كان المتعلم مبتدئا ولا يملك خلفية عامة حول هذا المجال خاصة فيما يخص بكيفية التعامل مع البيانات، وتحليلها وتعلم الآلة فهي ضرروية لفهم دروس التعلم العميق. يمكنك تجاوز مسار التعامل مع البيانات وتحليل البيانات وتعلم الآلة في حال كانت لديك خلفية حولهما ثم الرجوع إليهما في وقت لاحق.
  3. المشكلة تظهر من مكتبة seaborn وهذه التحذيرات تتعلق باستخدام خاصية use_inf_as_na التي أصبحت مهجورة (deprecated) في pandas وستتم إزالتها في إصدارات مستقبلية. والخاصية use_inf_as_na تعامل القيم اللانهائية (Infinity) كقيم مفقودة (NaN) أي عندما تستخدم seaborn للرسم البياني، فإنه يستخدم هذه الخاصية داخليا، مما يسبب ظهور هذه التحذيرات. لإزالة هذه التحذيرات وضمان استقرار الكود في المستقبل، قم بإضافة السطرين التاليين في بداية الكود قبل عملية الرسم البياني: import numpy as np data = data.replace([np.inf, -np.inf], np.nan) ليصبح الكود النهائي كالتالي: import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd data = data.replace([np.inf, -np.inf], np.nan) plt.figure(figsize=(12, 6)) plt.subplot(1, 3, 1) sns.histplot(data['x_1'], kde=True) plt.title('Distribution of x_1') plt.subplot(1, 3, 2) sns.histplot(data['y_1'], kde=True) plt.title('Distribution of y_1') plt.subplot(1, 3, 3) sns.histplot(data['z_1'], kde=True) plt.title('Distribution of z_1') # Adjusts the layout to prevent overlapping of plots plt.tight_layout() # Display all plots plt.show()
  4. يمكنك حل المشكلة بطريقة مختلفة تجنب تعديل ملفات ال vendor مباشرة، وذلك عبر إنشاء ملف مساعد (helper) خاص بك يحتوي على تعريف الدالة ثم تضمينه ضمن autoload الخاص بالمشروع وبهذه الطريقة تعرف الدالة قبل أن يحتاج إليها كود Laravel دون تعديل أي ملف من ملفات الvendor. أولا أنشئ ملفا تحت مجلد المشروع مثلا داخل app/Helpers/ وليكن اسمه helpers.php وفي هذا الملف عرف دالة join_paths في النطاق (namespace) المناسب بحيث تحاكي تعريفها المطلوب. ثم قم بتحرير ملف composer.json وأضف مسار الملف ضمن القسم "autoload" تحت المفتاح "files" وهذا يضمن تحميل الملف تلقائيا عند بدء تشغيل التطبيق وبعد حفظ التغييرات، نفّذ الأمر: composer dump-autoload وهذا حتى يتم تحديث نظام autoload وتطبيق التعريف الجديد. ثم أعد تشغيل التطبيق وتأكد من أن الخطأ لم يعد يظهر، مما يعني أن الدالة أصبحت معرفة بشكل صحيح قبل استخدامها في كود Laravel.
  5. كما تمت الإشارة في التعليق الأول، يمكنك الوصول إلى المسارات الأولى من خلال الضغط على تبويبة "دوراتي" أعلى الصفحة: أو يمكنك الوصول إليها من خلال الضغط على هذا الرابط مباشرة: دوراتي. وستلاحظ أنّ المسارات الأولى هي كالتالي، كما يمكنك التوجه إليها من هنا مباشرة وهذا لتسهيل عملية الوصول : أساسيات بايثون أساسيات إدارة تطوير المنتجات مدخل إلى علوم الحاسوب أساسيات تطوير الويب أساسيات لغة بايثون Python أساسيات لغة JavaScript أساسيات لغة PHP أساسيات لغة روبي أساسيات تطوير الألعاب
  6. كما تم التطرق في الإجابات السابقة، فإنّ تقنية ال Face Recognition تعني التعرف على الوجه وهو عملية تحديد هوية شخص من خلال صورة أو فيديو عن طريق مقارنة الوجه المدخل بقاعدة بيانات كبيرة تحتوي على وجوه معروفة. تكون العملية عادة مقارنة من واحد إلى متعدد 1:N حيث يسأل النظام: "من هذا الشخص؟" على سبيل المثال قد تستخدم الجهات الأمنية التعرف على الوجه لتحديد مشتبه به في حشد من الأشخاص عبر مقارنة صورته مع قاعدة بيانات لصور المجرمين وهذا أمر مفيد للغاية بحيث يتم على هذا النحو: يكتشف النظام وجود وجه في الصورة (الكشف عن الوجه). يستخرج النظام المميزات الفريدة مثل المسافة بين العينين وشكل الفك وغيرها. ثم يقوم بمقارنة هذه المميزات مع قاعدة بيانات من القوالب المخزنة لإيجاد تطابق. بينما Face Verification هو تقنية التحقق من الوجه من خلال عملية مقارنة من واحد إلى واحد 1:1 أين تستخدم لتأكيد أن الشخص هو بالفعل من يدعي أنه هو بدلا من البحث في عدة صور، يتم مقارنة وجه حي بصورة مسجلة مسبقا نفس الفكرة عند فتح هاتفك باستخدام خاصية Face ID حيث تتم مقارنة وجهك مع الصورة المخزنة للتحقق من هويتك كالتالي: يلتقط النظام صورة للشخص. يستخرج قالبا بيومتريا من الصورة. يقوم بمقارنة هذا القالب مباشرة مع القالب المخزن أثناء عملية التسجيل. إذا كان القالبان متطابقين بدرجة كافية، يتم تأكيد هوية الشخص.
  7. نعم من الممكن تخزين بيانات المتجر الإلكتروني محليا على جهاز اللابتوب الخاص بك والفكرة الأساسية هي تشغيل نظام إدارة قواعد البيانات (DBMS) على جهازك بحيث تخزن كل بيانات التطبيق بشكل دائم على القرص الصلب. يمكنك تحميل وتثبيت خادم MySQL وأثناء عملية التثبيت ستلاحظين أن MySQL يقوم بإعداد مسار معين لتخزين كافة قواعد البيانات والجداول كملفات على القرص الصلب. كما يمكنك استخدام SQLite وهو محرك قاعدة بيانات مدمج لا يحتاج إلى تشغيل خادم منفصل، حيث تخزن قاعدة البيانات بأكملها في ملف واحد على القرص الصلب كما أنه لا يتطلب استخدامه إعداد خادم معقد مما يجعله خيارا ممتازا للتطبيقات الصغيرة أو أثناء التطوير والعديد من لغات البرمجة والأطر تدعم SQLite بشكل مدمج ويمكنك ببساطة الإشارة إلى مسار الملف الذي يحتوي على قاعدة البيانات في إعدادات التطبيق.
  8. في لغة بايثون القائمة المعرفة كالتالي: array = [1, 2, 3, 4, 5] ليست مصفوفة ثابتة بل هي مصفوفة ديناميكية مما يعني أنه بعد إنشاء القائمة يمكنك إضافة أو إزالة أو تعديل عناصرها دون الحاجة لتحديد حجم ثابت مسبقا على سبيل المثال يمكنك إضافة عنصر باستخدام array.append(6) فتصبح القائمة: array = [1, 2, 3, 4, 5, 6] أو إزالة عنصر باستخدام array.pop(). وفي لغات أخرى مثل C أو Java تكون المصفوفات الثابتة ذات حجم محدد عند إنشائها ولا يمكن تغييره دون إنشاء مصفوفة جديدة على سبيل المثال في لغة C يمكنك تعريف مصفوفة كالتالي: int array[5]، حيث لا يمكن تغيير حجمها لاحقا. لا تحتوي بايثون على نوع مدمج للمصفوفة الثابتة، إذ أن القوائم مصممة لتكون أكثر مرونة وإذا كنت بحاجة إلى تسلسل غير قابل للتعديل من العناصر، يمكنك استخدام ال tuple، والذي يتم تعريفه بالشكل التالي: tuple_array = (1, 2, 3, 4, 5) لاحظ استخدمنا الأقواس ( ) بدلا من [ ].
  9. المشكلة تكمن في الدالة someCode(). هذه ليست دالة موجودة أصلا في لغة جافاسكربت فجافاسكربت لديها دوال مدمجة كثيرة مثل parseInt()، console.log()، إلخ لكن someCode() ليست واحدة منها. عندما يظهر خطأ يقول "someCode is not defined" فهذا يعني أن جافاسكربت تبحث عن دالة بهذا الاسم ولم تجدها. ربما الكتاب يقصد أن تقوم أنت بكتابة هذه الدالة من الممكن أن يكون هذا تمرين في الكتاب، حيث يطلب منك كتابة دالة تسمى someCode() تأخذ تاريخ الميلاد وتحسب العمر لذلك يمكنك المحاولة في إنشاء هذه الدالة ثم اختبار الكود الخاص بك.
  10. من الأفضل أن تبدأ في دراسة أنماط التصميم (design patterns) بعد أن تتقن أساسيات البرمجة الكائنية (OOP) فدراسة أنماط التصميم ستساعدك في كتابة كود نظيف ومنظم مما يسهل صيانته وتحديثه ومنه حل المشكلات البرمجية بطرق مجربة حيث أنها تقدم حلولا متكررة للمشاكل الشائعة إضافة إلى تحسين فرصك المهنية فهي مهارة مطلوبة في العديد من الشركات، خاصة في تطوير التطبيقات الكبيرة والمعقدة. كما يمكنك أيضا تطبيق بعض هذه الأنماط في مشاريع الذكاء الاصطناعي التي تعمل عليها، مما سيساعدك على الربط بين المفاهيم النظرية والعملية. بالتدريج ومع زيادة خبرتك، ستجد أن فهم أنماط التصميم يعزز من قدرتك على تصميم وتطوير برمجيات متكاملة وأكثر كفاءة يمكنك دراستها من هنا: أنماط التصميم
  11. أرجو منك مراسلة مركز مساعدة أكاديمية حسوب فهو الوحيد المخول في دراسة الشؤون المالية الخاصة بالطلبة، يمكنك مراسلتهم وسيساعدونك أو يقترحون عليك حلولا لمشكلتك، إلى حين ذلك أرجو مراجعة هذه الإجابة:
  12. هل تقصد الملفات المصدرية والمرفقات التي يعمل بها المدرّب؟ إن كان كذلك فيمكنك الوصول إليها من خلال درس المقدمة عند مدخل كلّ مسار أين ستجد رابطا مباشرا لتحميل الملفات أو رابطا مباشرا نحو مستودع المشروع الخاص بالدورة التي اشتركت فيها، في حال لم تجده فهذا يعني أنّ المسار أو الدرس الذي أنت فيه ليس بحاجة إلى ملفات مصدرية ويجب التركيز فقط على محتوى الدرس والتطبيق المباشر مع المدرب. يمكنك الوصول إليها وتحميلها مثلما هو موضح في هذه الصورة: بخصوص الملخصات فالأكاديمية لا توفرها وهذا لدفع الطالب إلى عمل ملخصاته بنفسه لكي يسهُل عليه الرجوع إليها وتترسّخ في ذهنه أكثر، فأفضل الملخصات هي التي يعملها الإنسان بنفسه وأنصحك بمراجعة الأجوبة على نفس التساؤل من هنا:
  13. ينبغي أولا معرفة شروط التقدم للامتحان النهائي لأي دورة تشترك فيها وهي كالآتي: إتمام أربعة مسارات تعليمية على الأقل (لا يهم الترتيب) التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا يمكنك التقدم إلى امتحان الدورة، من خلال التواصل مع مركز مساعدة أكاديمية حسوب. ولو تركز على النقطة الثانية وهي توضح لنا أنّ التطبيق العملي شرط أساسي للتعلم في الدورة، ستجد في العديد من المسارات تطبيقات عملية مختلفة ستصادفها في مختلف الدروس، يمكنك القيام بها ومشاركتها معنا مباشرة لنصححها لك. كما توجد مسارات خاصة تُعنى بالتطبيق العملي من خلال إنشاء التطبيقات مباشرة، وهذا يعتمد على نوع الدورة التي اشتركت فيها.
  14. من خلال هذه الصفحة يمكنك التطرق إلى جميع محاور ومسارات الدورة وميزاتها وما يمكنك تعلمه وعمله من خلالها: https://academy.hsoub.com/learn/game-development/ وكما تلاحظ فإنّ مسار نشر الألعاب لم يتم إضافته بعد في الدورة، لكن هذا لا يعني عدم إضافته مستقبلا، يمكن أن يتم تحديث الدورة في أي لحظة ومن ميزات الدورة أنها تتيح لك وصولا مدى الحياة لها، وستحصل على تنبيه لحظة حدوث تحديث للدورة: يمكنك التعرف على مزايا دورات حسوب من هنا: فضلا عن العديد من المقالات التي تتناول هذا المجال: https://academy.hsoub.com/programming/game-development/ يمكنك البحث عن أي شيئ تريد من خلال شريط البحث: وعلى كلّ فإنه لنشر اللعبة على منصات متعددة، يجب اتباع إجراءات محددة تختلف من منصة لأخرى ففي حالة Android، تحتاج أولا إلى إنشاء حساب مطور عبر Google Play Console، ثم توليد ملف APK أو App Bundle واختباره باستخدام الأجهزة الحقيقية أو المحاكيات، وبعد التأكد من خلوه من الأخطاء، يتم رفعه للمراجعة أولا من قبل جوجل للنشر في المتجر. أما على iOS فالأمر يبدأ بالاشتراك في برنامج Apple Developer، ومن ثم إعداد اللعبة باستخدام Xcode مع توقيعها رقميا، يلي ذلك إجراء اختبارات دقيقة على الأجهزة الفعلية أو المحاكيات، ومن ثم رفع التطبيق عبر App Store Connect حيث تتم مراجعته من قبل آبل قبل النشر. وفيما يتعلق بأجهزة Sony مثل PS4 و PS5، يجب التسجيل كمطور عبر منصة PlayStation Partners والحصول على أدوات التطوير الخاصة بسوني، مع ضرورة تعديل اللعبة بما يتوافق مع معايير الجودة والأداء الخاصة بالمنصة، ثم تقديمها للمراجعة الفنية قبل الحصول على الموافقة النهائية للنشر.
  15. ليس هنالك شرط للتعلم بالترتيب بالنسبة لهذين المجالين، يمكنك تعلمهما كلاهما، سواء بدأت بنماذج اللغة الكبيرة أو بالرؤية الحاسوبية وكلّ ذلك يعتمد على رغبتك وعلى أهدافك من عملية التعلم، فإذا كنت مهتما بمعالجة اللغة والتفاعل مع النصوص يمكنك البدء بتعلم نماذج اللغة الكبيرة (LLMs) وتقنيات معالجة اللغة الطبيعية (NLP) هنا ستتعلم كيف يمكن للذكاء الاصطناعي فهم النصوص وكيف يتم إنشاء المحتوى وكيف يتم تحليل المعاني. أما إذا كنت تميل إلى العمل مع الصور والفيديوهات فأعتقد أنه يفضل البدء بتعلم الرؤية الحاسوبية (CV)، حيث ستتعرف على كيفية تحليل الصور والتعرف على الأشياء، وتطبيقات الواقع المعزز والذكاء الاصطناعي في المجالات البصرية. في الأخير إذا كنت مهتما بالتطبيقات المتعددة الوسائط يمكنك بعد الحصول على الأساسيات في أحد المجالين البدء بالتعرف على النماذج متعددة الوسائط (MLLMs) التي تدمج بين معالجة اللغة والرؤية معا. وفي حال كنت مشتركا في دورة الذكاء الاصطناعي فمؤخرا قد تمّ إضافة مسار خاص بالتطبيقات العملية باستخدام الرؤية الحاسوبية يمكنك تعلمها من هناك: هذه المقالة مفيدة أيضا:
  16. وعليكم السلام ورحمة الله وبركاته، Figma هو أداة تستخدم لتصميم الواجهات البصرية للمواقع، حيث تقوم بإنشاء نماذج توضيحية (UI) تظهر شكل الموقع بدون تحويلها إلى كود. ولجعل الموقع يعمل فعليا على الإنترنت، يجب أولا تحويل هذا التصميم إلى شفرة برمجية باستخدام HTML وCSS وJavaScript. إذا كان الموقع يعرض محتوى ثابت فقط، فيمكن الاعتماد على تحويل التصميم إلى صفحات ويب وأما إذا كان يتطلب تفاعلا مع المستخدمين أو إدارة بيانات عبر قاعدة بيانات، فستحتاج إلى تطوير جزء خلفي (backend) للتعامل مع هذه المتطلبات. بعد الانتهاء من تحويل التصميم إلى كود وبرمجته يتم رفع الملفات إلى خدمة استضافة مناسبة سواء كانت مجانية أو مدفوعة.
  17. توجد مقالة تشرح الفرق بينهما بشكل مفصل أنصحك وأقترح عليك مراجعتها من هنا: يمكنك إيجاد مقالات أخرى تتحدث عن Mongodb من هنا: https://academy.hsoub.com/devops/servers/databases/mongodb/
  18. كما تمّ التوضيح في التعليقات السابقة، فدورة علوم الحاسوب أُعدّت خصيصا لهكذا حالات، وما دمت لا تمتلك أيّ خبرة مسبقة بعد فالبدء مباشرة في الدورة لن يشكّل أيّ عائق للتعلم. كما أنّ هنالك ثلّة من المدربين سيحرصون على التواجد على مدار الساعة من أجل الردّ على استفساراتك وانشغالاتك. في حال لم تفهم مرحلة ما أو درسا بعينه، كلّ ما عليك فعله هو التوجه أسفل الدرس أين سيكون هنالك صندوق للتعليقات مشابه لهذا يمكنك طرح انشغالك هناك في أيّ وقت وحين. https://academy.hsoub.com/learn/computer-science/
  19. مشكلة النسيان مشكلة عادية وأيّ شخص معرّض لها، لا داعي للقلق أو الشعور بالتوتر من هذا الأمر، في البرمجة أنت لست مطالبا بالحفظ المهم أن تفهم المفاهيم التي يتم تدريسها وتطبق مع المدرب، وفي حال نسيت أمرا ما يمكنك طرح سؤالك أو البحث من خلال موسوعة حسوب أو من خلال تصفح التوثيقات الرسمية للمكتبات والتكنولوجيات وحتى لغات البرمجة وأطر العمل المختلفة، ولقد تمّت الإجابة عن تساؤلات مشابهة وسأرفق لك مجموعة من الإجابات يمكنك الاطلاع عليها:
  20. يمكنك حساب تاريخ الانتهاء المتوقع بإضافة عدد الأيام إلى تاريخ اليوم فرضا نستخدم لغة بايثون سيكون الأمر كالتالي: import datetime days_to_add = 15 today = datetime.date.today() expected_end_date = today + datetime.timedelta(days=days_to_add) print("تاريخ الانتهاء المتوقع:", expected_end_date) بحيث نستخدم دالة datetime.date.today() للحصول على تاريخ اليوم ونقوم بإنشاء فرق زمني باستخدام هذه العبارة: datetime.timedelta(days=days_to_add). ثم يتم جمعهما للحصول على التاريخ المتوقع للانتهاء.
  21. هذه فترة طويلة نوعا ما، لذا في حالة عدم وجود ظروف قاهرة فمن الأفضل عدم تجاوز فترة الأسبوعين دون دراسة أو برمجة. لكن لا بأس، بما أنك قلت أنك درست الخوارزميات ووصلت إليها فهذا يعني أنك كنت تقريبا في منتصف الدورة، يمكنك الرجوع من بداية الدورة وتسريع الفيديو بهذه الطريقة: أي تسريع الجزئيات التي ترى نفسك أنك قد استوعبتها وتتذكرها، يمكنك تجاوز أيضا التمارين والتطبيقات التي أنجزتها من قبل في حال كنت قد فهمتها. وفي حال وجدت نفسك قد نسيت الكثير من الأمور في المسار يرجى إعادة مشاهدته وطرح سؤالك في أسفل الدرس أين سنساعدك.
  22. هل تقوم بتصفح الهاتف أثناء متابعة الدروس؟ في حال كان كذلك أرجو منك الابتعاد عن أيّ مشتّتات أثناء التعلم والمتابعة مع المدرب وهذا لتحقيق أقصى استفادة ممكنة من الدورات، فعوامل التشتت كثيرة وفي كثير من الأحيان هي التي تسبّب فقدان التركيز ومنه نسيان الكثير من المفاهيم الأساسية. إضافة إلى ذلك، قلة التطبيق وعدم الاستمرارية وترك فراغ زمني كبير قد يصل لثلاثة أسابيع وحتى شهر دون مراجعة أو تطبيق برمجي فالطالب هنا حتما سينسى ما تلقّاه من معارف. أما بالنسبة للنسيان قصير المدى مثلا وأنت تتعلم قد تنسى أمورا معينة، ففي هذه الحالة لا تخف فهذا الأمر طبيعي، ونحن في البرمجة لسنا مطالبين بالحفظ بل بالفهم، وتوجد مواقع خاصة بالتوثيقات الرسمية والمكتبات ويمكنك الرجوع إليها متى احتجت إلى ذلك. ومع الاستمرارية والتركيز والابتعاد عن المشتتات ستجد نفسك تبرمج وتتذكر كيفية عمل الأكواد وقد تحفظ الكثير من الأمور تلقائيا من خلال الممارسة. لتحقيق أقصى استفادة من الدروس أنصحك بمراجعة الأجوبة من هنا:
  23. وعليكم السلام ورحمة الله، هذا سلوك طبيعي ففي بعض الأحيان عند اختيار GPU مثل P100 سيتم استخدامه لحسابات التدريب الأساسية للنموذج، لكن الكثير من العمليات مثل تحميل البيانات، التحويلات، وتحضيرات أخرى تظل تعمل على ال CPU. لذلك من الممكن جدا أن يظهر استهلاك ال CPU مرتفعا باللون الأحمر حتى وإن كنت تستخدم GPU للتدريب. لكن يجب التأكد من أن الكود الخاص بك يقوم بنقل النموذج والبيانات إلى ال GPU باستخدام .to('cuda') في PyTorch كالتالي: import torch device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = MyModel().to(device)
  24. مرحبا زياد، في حال كان سؤالك متعلقا بإحدى الدورات التي قمت بالاشتراك فيها، أرجو منك الانتقال إلى قسم "دوراتي" ثم أسفل الدرس الذي واجهت فيه المشكلة، قم بإضافة سؤالك هناك، وهذا لمساعدتك بشكل أفضل. بالتوفيق إن شاء الله.
  25. وعليكم السلام ورحمة الله، تبدأ المصفوفات بالفهرس 0 بدلا من 1 في معظم لغات البرمجة فمن الناحية التقنية يمثل فهرس المصفوفة إزاحة من عنوان الذاكرة الأساسي هنا العنصر الأول ليس له إزاحة (0)، والعنصر الثاني مزاح بمقدار حجم عنصر واحد وهكذا. في الرياضيات غالبا ما تستخدم النطاقات فترات نصف مفتوحة مثل [0,n) بمعنى "0 إلى n-1 ضمنا" هذا يجعل الحسابات أنظف إذا كان لدينا مثلا مصفوفة بطول n، فإن الفهارس الصالحة هي من 0 إلى n-1. وعندما نخزن مصفوفة أو مجموعة من العناصر فإن الكمبيوتر يحتاج إلى طريقة للوصول إلى كل عنصر والطريقة التي يعمل بها هي أنه يحفظ عنوان البداية للمصفوفة في الذاكرة أي أين تبدأ المصفوفة ولكي يصل إلى أي عنصر يستخدم هذه المعادلة البسيطة: موقع العنصر = عنوان البداية + (الفهرس × حجم العنصر) للعنصر الأول لا نحتاج إلى أي إزاحة عن نقطة البداية، لذلك تكون الإزاحة 0، وهكذا يكون الفهرس 0. يمكنك تخيل أن المصفوفة مثل صف من المنازل على شارع، المنزل الأول هو على بعد 0 متر من بداية الشارع، والمنزل الثاني على بعد 10 أمتار، والثالث على بعد 20 مترا وهكذا لذلك نشير إلى المنازل باستخدام المسافة المنزل في المسافة 0، المنزل في المسافة 10 وهكذا.
×
×
  • أضف...