-
المساهمات
2347 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
24
إجابات الأسئلة
-
إجابة Kais Hasan سؤال في الlogin في دجانجو كانت الإجابة المقبولة
كما هو مذكور في التوثيق الخاص بدجانغو، يجب عليك القيام بذلك في بداية المشروع قبل أي عملية migration و إلا سيصبح من الصعب جداً تعديل ذلك.
بشكل عام يتم إنشاء تطبيق خاص بالمستخدمين (عادة نسميه accounts) و ضمن ال models.py نضع ما يلي:
from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): gender = models.BooleanField(default=True) # True for male and False for female # you can add more fields here. ضع الخصائص التي تريدها.
ثم يجب عليك إخبار دجانغو بأن هذا الصنف هو ما تريد استعماله من أجل حساب المستخدم، و يمكن ذلك عبر إضافة ما يلي إلى ملف الإعدادات settings.py:
AUTH_USER_MODEL = 'accounts.User' طبعاً في حال اخترت تسمية التطبيق الخاص بالحسابات غير accounts عليك تغيير ذلك فيما سبق.
أما من أجل إعدادات الوصول و السماحية فأبسط طريقة هي أن تقوم بإضافة حقل إلى المستخدم يدل على صلاحيته و عند وجود عملية تحتاج صلاحية تتحقق من هذا الحقل.
-
إجابة Kais Hasan سؤال في هل يمكننى العمل كمستقل فى مجال تحليل البيانات أو ذكاء الأعمال كانت الإجابة المقبولة
العمر ليس عائقاً بالطبع طالما أنه لديك الخلفية المناسبة لتعلم ذلك و فضول التعلم و اكتشاف المزيد حول هذا المجال. أما في حال كان هدفك الربح المادي فلا أنصحك بذلك حيث أن هناك الكثير من الأعمال التي تدر لك ربحاً أكبر و التي لها سوق أكبر في مجال العمل الحر، مثلاً تصميم الويب، و هو مجال أسرع في التعلم و بالتالي يمكنك البدء بجني الأرباح بشكل أسرع من مجال تحليل البيانات.
ما قيل لك ليس صحيحاً بشكل كامل، هو صحيح بالنسبة للشركات الكبيرة التي تحوي على معلومات حساسة و ضخمة جداً، حيث أن هذه الشركات ستحتاج فريق عمل كامل و ليس فقط شخص للقيام بهذه الأعمال، كما أنها تحتاج عقد صريح لضمان السرية و هذا ما لا يمكن الحصول عليه في العمل الحر.
و لكن أغلب الشركات محدودة الحجم لا ينطبق عليها ما سبق و بالتالي من الممكن أن يتم توظيف شخص مستقل للقيام بعمل ما، و لكن هذا الأمر ليس موجود في كثير من الشركات، و الأمر لا يتعلق بالسبب الذي ذكرته و إنما بأن الشركات بشكل عام تتعامل بعقود و بكادر تفضل أن يكون ثابتاً، و ليس بالعمل الحر.
بالتالي أغلب العمل الذي يمكن أن تتوقعه سيأتي من أفراد، و قد لا تجد الكثير، لا أريد إحباطك طبعاً و لكن عليك أن تعرف أن هذا المجال ليس من السهل الحصول على عمل له، يمكنك الإطلاع على العروض الموجودة على مستقل مثلاً و سترى فعلياً أن أغلب الأعمال لها علاقة بالويب و أن الأعمال المتعلقة بتحليل البيانات أقل بكثير، بالطبع ستجد بعض الأعمال و لكن كما سبق و ذكرت ليست بالكثيرة.
لذلك لتلخيص ما سبق، في حال كان هدفك الربح المادي السريع فهذا ليس خيار جيد، أما في حال كان هدفك التعلم و الربح البسيط فمن الجيد الدخول في هذا المجال.
-
إجابة Kais Hasan سؤال في مشكلة عدم اضهار عناصر HTML بصورة غير صحيحة كانت الإجابة المقبولة
أعتقد أنك تقصد المشكلة التي تظهر باللون الأصفر في ال console.
إنها ليست مشكلة ولا تؤثر على العمل نهائياً، أي يمكنك إهمالها، و لكن في حال كنت تريد إزالتها يمكنك القيام بذلك كما يلي:
اضغط على المسنن الموجود في الزاوية العليا من اليمين، كما هو موضح في الصورة التالية.
قم بإزالة تفعيل الخيارات Enable JavaScript source maps و Enable CSS source maps. هذا كفيل بأن يزيل هذا التحذير الذي يظهر لك.
أما في حال كان قصدك بأن العناصر لا تظهر كما كتبتها في ال html فالسبب غالباً أنك تقوم بفتح ملف غير الذي تقوم بالتعديل عليه، ﻷنني نسخت الأكواد التي كتبتها و هي تعمل بشكل صحيح.
-
إجابة Kais Hasan سؤال في ما سبب عدم إضافة خاصية unique لحقل 'username' في تعريف الجدول بلارافيل كانت الإجابة المقبولة
يبدو أن السؤال خاص بأحد الدروس من أحد الدورات، من فضلك قم بطرح الأسئلة الخاصة بدرس ما أسفل ذلك الدرس.
و لكن كجواب على سؤالك بشكل عام فإن عملية التحقق يمكن وضعها في 3 أماكن و ذلك حسب أهمية هذا التحقق و هذه الأماكن بالترتيب من الأضعف إلى الأقوى:
لدى المستخدم، هذا يتم مثلاً عندما تقوم بإدخال بريد الكتروني ليس له النمط العام لأي بريد الكتروني، أو عندما تحاول إدخال نص في مربع إدخال يقبل أعداد فقط. هذا النوع من التحقق جيد لتخفيف العبء على السيرفر من ناحية الطلبات الخاطئة و يساعد المستخدم على معرفة ما الذي عليه إدخاله بشكل أسرع و بالتالي يعطي تجربة جيدة للمستخدم. لكن هذا النوع يمكن تجاوزه بسهولة عن طريق إرسال طلب بشكل مباشر بدلاً من استعمال المتصفح و الكثير من الطرق الأخرى و بالتالي من غير الجيد استعماله للأمور الحساسة. في السيرفر، هذا يتم بعد إرسال المستخدم لبياناته يقوم السيرفر بالتحقق من هذه البيانات و من أنها تراعي الشروط المطلوبة. هذا أكثر أماناً من الطريقة السابقة و دائماً يمكن استعماله للأمور الحساسة و لكن الخطأ البرمجي هنا قد يسبب مشاكل غير ملحوظة. في قاعدة البيانات، هذا النوع مهم جداً لضمان أنه حتى في حال حدوث خطأ برمجي لن يتم إدخال بيانات غير مناسبة إلى قاعدة البيانات و هو مهم جداً كما في المثال الذي ذكرته. طبعاً يمكن استعمال الطرق الثلاث السابقة معاً، و لكن هذا يعتمد على حساسية التطبيق الذي تقوم ببناءه و متطلباته، بالتالي في حالتك من الجيد إضافة الشرط إلى قاعدة البيانات و لكن قد يكون ليس هذا هو الغرض من الدرس و لذلك لم يتم إضافته، و لكن عندما تقوم ببناء تطبيق حقيقي فمن الأفضل أن تضيف الأنواع الثلاث من التحققات.
-
إجابة Kais Hasan سؤال في لم افهم فائدة الخاصية name كانت الإجابة المقبولة
أعتقد قصدك عن الخاصية name في عنصر ال html.
تستعمل هذه الخاصية للوصول إلى قيمة العنصر في جافاسكربت (بشكل عام يستعمل ال id أكثر) أو في السيرفر بعد إرسال البيانات.
أي في حال كان لديك ما يلي:
<form action="/action_page.php"> <label for="username">username:</label> <input type="text" id="username" name="user_name"><br><br> <label for="pass">password:</label> <input type="text" id="pass" name="password"><br><br> <input type="submit" value="Submit"> </form> عندها تصل البيانات إلى السيرفر و يمكن الحصول على قيمة اسم المستخدم من المفتاح user_name و كلمة المرور من المفتاح password.
-
إجابة Kais Hasan سؤال في مشكلة في عدم تغيير الوان النصوص باستخدام CSS كانت الإجابة المقبولة
القاعدة column-rule-color لاتقوم بتغيير لون الوسم، و إنما تقوم بتغيير لون الفاصل بين الأعمدة في حال كان المخطط الخاص بصفحتك يعتمد على عدة أعمدة، و بالتالي في حالتك القاعدة خاطئة حيث أنه بشكل عام لا يتكون المكون h1 من عدة أعمدة، بل مجرد نص.
في حال أردت تغيير لون الوسم h1 عليك استخدام القاعدة color فقط، أي تكتب ما يلي مثلاً:
h1 { color: red; }
-
إجابة Kais Hasan سؤال في اين تذهب الاموال بعد دفعها من apple pay وكيف يمكنني الحصول عليها ؟ كانت الإجابة المقبولة
نعم، حسابك يفترض أنك ربطت حسابك الذي قمت بعمله بحسابك البنكي مثلاً، في هذه الحالة أي تحويل يذهب إلى حسابك البنكي، و يمكنك حتى رؤية التحويلات التي تمت على حسابك في apply pay.
-
إجابة Kais Hasan سؤال في ارسال اشعار للمستخدم داخل الصفحة بدون تحديث للموقع Laravel كانت الإجابة المقبولة
يمكنك استعمال ال polling و التي يمكن تحديد حدث معين لها حتى تقوم بتحديث جزء من الصفحة بدون إعادة تحميل الصفحة كاملة، أي من ناحية الفكرة هي مماثلة لل ajax.
يمكنك الإطلاع عليها من هنا.
مثلاً لتحديث مكون ما كل 750ms يمكننا كتابة ما يلي:
<div wire:poll.750ms> Current time: {{ now() }} </div> هنا كل 750ms سيحدث الوقت المعروض في الصفحة و بدون أي إعادة تحميل للصفحة، بالتالي يمكنك استعمال أمر مشابه و لكن بحيث تقوم بتغيير أيقونة الإشعارات أو أي أمر آخر ترغب به.
-
إجابة Kais Hasan سؤال في سؤال بخصوص scripting languages كانت الإجابة المقبولة
الخاصية التي تشير إليها ليست حصراً على هذه اللغات، فلغات البرمجة العادية تتيح هذه الخاصية، مثلاً في ال c++ يمكنك القيام بذلك.
مثلاً يمكننا القيام بما يلي:
bool passed = true; string s = "The Student " + (passed ? "passed" : "failed") + " the exam"; بشكل عام هناك فروق أخرى و هي أنه يتم ترجمتها سطر سطر على عكس لغات مثل c++ التي يتم ترجمة الكود كاملاً و من ثم تنفيذه.
و لكن حتى هذه الخاصية أصبحت متاحة للغات ال scripting مثلاً في بايثون هذه الخاصية موجودة حيث يتم ترجمة الكود إلى لغة السي و من ثم تنفيذه و ذلك لتسريع العمل، و لكن يبقى بإمكانك تنفيذه سطراً سطراً في حال أردت ذلك.
-
إجابة Kais Hasan سؤال في تحديد فيما إذا كانت علاقة رياضية تحقق الخواص اللازمة لتكون علاقة تكافؤ. كانت الإجابة المقبولة
سأقوم بشرح الأفكار لك و يمكنك محاولة كتابة الكود و في حال حدوث أخطاء يمكنك سؤالنا عنها.
إن المجموعة هي عبارة عن مجموعة من العناصر تتبع لحقل معين، بما أنه هنا لم يتم ذكر الحقل الذي يتم العمل عليه فسأعتبر الحقل هو مجموعة الأعداد الصحيحة، و لكن ما سأشرحه تالياً يبقى نفس المبدأ بغض النظر عن الحقل المستعمل.
العلاقة تعرف عن طريق أزواج من العناصر، بحيث عندما يكون زوجان من العناصر في مجموعة هذه العلاقة فإن هذه العلاقة توجد بين هذين العنصرين، أي مثلاً لنفترض أنه لديك المجموعة {1, 2, 3, 4} و كان لدينا العلاقة بين x, y تمثل أن x > y، يكون لدينا مجموعة الأزواج الممثلة لهذه العلاقة في هذا المثال هي: {(1, 2), (2, 3), (1, 3), (3, 4), (2, 4), (1, 4)}.
المصفوفة التي تمثل العلاقة هي عبارة عن مجموعة من الأسطر بحيث كل سطر يمثل رقم و أيضاً كل عمود يمثل رقم من مجموعة الأرقام التي لدينا، أي في هذا المثال سيكون لدي العمود الأول يمثل الرقم 1 و العمود الثاني يمثل 2 و هكذا، و لدي السطر الأول يمثل الرقم 1 و السطر الثاني يمثل الرقم 2 و هكذا، و تكون قيمة العنصر في السطر x و العمود y هي 1 في حال كان يوجد علاقة بين x و y أي في مثالنا السابق في حال كان x أكبر من y، و تكون القيمة 0 في حال عدم وجود هذه العلاقة بين هذين الرقمين.
العلاقة تحقق الخاصية الانعكاسية في حال كان هناك علاقة بين الرقم و نفسه، و بالتالي في حال كان القطر الرئيسي للمصفوفة الخاصة بالعلاقة يحوي على 1 في كل عنصر منه، و ذلك لأن القطر الرئيسي هو مجموعة العناصر التي لها نفس الرقم للسطر و العمود.
العلاقة تحقق الخاصية التناظرية في حال كانت المصفوفة متناظرة، لأن المصفوفة متناظرة في حال كان هناك نفس الرقم في العنصر x, y و العنصر y,x و بالتالي يمكن المرور على المصفوفة للتحقق من ذلك، أي عندما نكون في العنصر x, y نتحقق هل يساوي العنصر y, x.
العلاقة تحقق الخاصية المتعدية كما يلي: في حال كان هناك علاقة بين x, y و بين y, z فإنه يجب أن يكون هناك علاقة بين x,z، يمكن التحقق من هذه الخاصية عن طريق تطبيق خوارزمية Floyd warshall على المصفوفة الخاصة بالعلاقة، في حال تغير هذه المصفوفة بعد تطبيق الخوارزمية فإن العلاقة لا تحقق العلاقة المتعدية، بينما في حال بقيت المصفوفة كما هي فإنها تحقق العلاقة المتعدية، أي يجب علينا الاحتفاظ بنسخة من المصفوفة و تطبيق الخوارزمية على نسخة أخرى و مقارنة المصفوفتين، يمكنك إيجاد خوارزمية floyd بشكل سهل باللغة التي تريدها.
تكون العلاقة تكافؤ في حال كانت العلاقة تحقق الخواص السابقة.
يمكنك الآن محاولة كتابة الكود الذي يقوم بما شرحته سابقاً، يجب أن تستطيع كتابته في حال كنت على إطلاع على ال c#، في حال لم تكن على معرفة كافية بها يمكنك الإطلاع على مقالات أكاديمية حسوب التي تقدم شروحات ممتازة عن هذه اللغة.
-
إجابة Kais Hasan سؤال في حماية api laravel كانت الإجابة المقبولة
يمكنك القيام بذلك عن طريق تحدد ال domains التي يمكنها استعمال ال api الخاصة بك.
يمكن القيام بذلك في laravel عن طريق التعديل على ملف cors.php بحيث نحدد ال domains التي نرغب في السماح لها بالوصول ضمن المتغير allowed_origins.
يمكنك الاتصال بال api باستعمال التابع fetch بحيث تحدد له الطريقة و كافة المعلومات المطلوبة لل request.
-
إجابة Kais Hasan سؤال في تهيئة محرر النصوص (بيئة) VHEditor التي تعمل على هواتف الاندرويد لبرمجة تطبيقات الاندرويد باستخدام dart و flutter كانت الإجابة المقبولة
إن ما تحاول تنزيله هو مجرد إضافات كما هو الحال في ال vscode، الإضافات لا تعني أن البيئة الخاصة باللغة أصبحت لديك، إنها فقط أدوات مساعدة.
يجب عليك تنزيل المكتبات الخاصة باللغات التي تريدها من سطر الأوامر الخاص بالبرنامج، مثلاً يمكنك تنزيل dart عن طريق كتابة ما يلي:
pkg install dart و هكذا من أجل بقية المكتبات التي تريدها، بالطبع كل مكتبة لها طريقة تنزيل، و لكن الفكرة هي قم بتنزيل المكتبات من سطر الأوامر.
إن ال VHEditor يستعمل ما يسمى ب termux و لذلك عليك إيجاد تعليمة التنزيل المناسبة لما تريد بناء على ذلك.
-
إجابة Kais Hasan سؤال في سؤال في laravel jobs كانت الإجابة المقبولة
في حال كان السيرفر يعمل على linux يمكنك استعمال ما يدعى بال cron و الذي يمكن عن.طريقه جدولة أي تعليمة تريد تنفيذها.
الصورة التالية توضح كيفية اضافة جدولة:
يمكنك الإطلاع أكثر على الأمر من هنا.
-
إجابة Kais Hasan سؤال في تقسيم لست باستخدام لغة بايثون كانت الإجابة المقبولة
لحل التمرين السابق يمكننا تنفيذ المطلوب بشكل حرفي، يلزمنا لائحتين، واحدة لتخزين الناتج النهائي و أخرى لتخزين ما لدينا حتى الآن ( و التي سنضيفها للناتج النهائي عندما يجب التقسيم) بالإضافة إلى عداد يعد كم عنصر لدينا حتى الآن و هو موجود في اللائحة b، حيث سنستعمل هذا المتحول لنقوم بالتقسيم عندما يصبح لدينا عنصرين (و هو المطلوب حسب شرحك).
يمكن كتابة كود بايثون بالشكل التالي:
a = [[0, 0], [0,4], [1,3], [2,0], [2,1], [3,0], [3,1], [3,2], [4,0],[4,4]] b = [[0,0],[0,4],[2,0],[4,4]] new_list = [] temp = [] c = 0 for i in a: if i in b: c += 1 if c == 2: new_list.append(temp) temp = [i] c = 1 else: temp.append(i) if temp: new_list.append(temp) for i in new_list: print(i) في البداية قمت بتعريف لائحتين حسب الدخل الذي قمت بإرفاقه.
ثم نقوم بتعريف المتغيرات التي تحدثت عنها، حيث أن new_list ستخزن الناتج النهائي، و temp ستكون لائحة لتخزين العناصر التي لدينا حتى الآن، و c هو عداد يعد كم عنصر لدينا منذ آخر تقسيم يوجد في اللائحة b.
نقوم بالمرور على كافة العناصر في a، في حال كان العنصر الحالي موجود في b نقوم بزيادة العداد.
الآن في حال وصل العداد إلى الرقم 2 فهذا يعني أنه لدينا عددين موجودين ضمن اللائحة b و هذا لا يجوز، لذلك علينا القيام بعملية تقسيم هنا، فنقوم بإضافة ما لدينا حتى الآن إلى اللائحة new_list ثم نقوم بجعل اللائحة temp تحتوي آخر عنصر (أي العنصر الحالي) فقط، و ذلك ﻷننا قمنا بعملية تقسيم و كافة العناصر السابقة ذهبت إلى اللائحة new_list، و يصبح العداد 1 (حيث أنه لدينا عدد واحد فقط في اللائحة temp و في اللائحة b).
في حال لم يكن العداد قد وصل إلى الرقم 2 فنقوم فقط بإضافة العنصر الحالي إلى اللائحة temp.
في النهاية نتحقق في حال كان لا يزال لدينا عناصر في اللائحة temp فنقوم بإضافتها إلى اللائحة new_list.
و نقوم بطباعة العناصر، كل عنصر في سطر.
-
إجابة Kais Hasan سؤال في الكتابه باللغه العربية في pygame كانت الإجابة المقبولة
يمكنك استعمال مكتبة arabic-reshaper بالإضافة إلى مكتبة python-bidi، يمكن تنزيل المكتبتين السابقتين كما يلي:
pip install arabic-reshaper pip install python-bidi بعد ذلك نقوم بوضع النص الذي نريده ضمن متغير و لنفترض أن اسمه text و نقوم بما يلي:
import arabic_reshaper from bidi.algorithm import get_display text = 'نص باللغة العربية' reshaped_text = arabic_reshaper.reshape(text) bidi_text = get_display(reshaped_text) ثم نقوم بعمل render للمتحول bidi_text بدلاً من text، أي أن بقية البرنامج تكون نفس حالة اللغة الانكليزية، فقط نقوم باستعمال هذه التوابع لإصلاح المشاكل مع اللغة العربية.
طبعاً يجب عليك استعمال خط يدعم اللغة العربية، الخط arial يدعمها، يمكنك البحث دائماً فيما إذا كان خط ما يدعم اللغة العربية أم لا.
-
إجابة Kais Hasan سؤال في كيف اكتب برنامج باستخدام switch؟؟ كانت الإجابة المقبولة
سأشرح لك الفكرة العامة و من فضلك قم بمحاولة تطبيقها و مشاركة النتائج هنا في حال حدوث خطأ لمساعدتك، إعطاءك الكود مباشرة كما سبق و قلت لك لن يفيدك بشيء.
إن تعليمة switch يمكنك معرفة كيف تكتب ببحث صغير على غوغل أو بالرجوع لمقالات حسوب.
قبل تعليمة switch علينا أخذ الرقم من المستخدم، ابحث عن تعليمة الإدخال في حال لم تكن تعرف كيفية كتابتها.
بعد ذلك قم بإدخال حرف من المستخدم، بنفس الطريقة السابقة و لكن هنا حرف بدل رقم.
يمكنك الآن كتابة تعليمة switch للحالات المطلوبة، يمكن اختبار فيما إذا كان عدد زوجي أو فردي باختبار باقي قسمة العدد على 2، فإذا كانت صفر يكون زوجي و إذا كانت 1 يكون فردي.
الحالات البقية سهلة فهي مجرد عملية ضرب.
يمكنك طباعة النتيجة باستعمال تعليمة الطباعة، يمكنك البحث عن كيفية كتابتها أيضاً كما سبق و ذكرت.
قم بمحاولة تطبيق ما شرحته لك و شارك الكود معنا في حال حدوث أخطاء حتى نساعدك في حلها.
-
إجابة Kais Hasan سؤال في كود لرسم الدائرة الكبيرة مع الدائرتين الصغيرة نفس الصورة على البايثون باستخدام الturtle ؟ كانت الإجابة المقبولة
سأشرح لك الطريقة الرياضية و بما أنك استطعت رسم الدائرة الكبيرة ستستطيعين رسم الدوائر الصغيرة بعد الشرح.
سأشرح على دائرة صغيرة واحدة حالياً و من ثم سأشرح كيفية جعل الأمر على كل الدوائر.
كما نلاحظ فإن القطر الخاص بالدائرة الصغيرة هو نصف القطر الخاص بالدائرة الكبيرة، و بالتالي منتصف نصف القطر هو مركز الدائرة الصغيرة، و نصف قطرها هو نصف نصف قطر الدائرة الكبيرة.
بوجود المعلومات الخاصة بالمركز و نصف القطر يمكننا رسم الدائرة الصغيرة.
لقد شرحت الخطوات من أجل دائرة واحدة، كيفية القيام بذلك من أجل الكثير من الدوائر يمكن القيام به عن طريق اختيار زاوية، أي الزاوية مثلاً بين نصف القطر المختار و المحور y أو x لا فرق، و من أجل كل زاوية سيكون لدينا نصف قطر و بالتالي دائرة صغيرة.
-
إجابة Kais Hasan سؤال في سوال في دوره بايثون كانت الإجابة المقبولة
تم إضافة مسارين هما:
تطوير تطبيقات أودو Odoo
أساسيات تحليل البيانات
و هما آخر مسارين بالتالي يجب عليك إكمال الدورة و لا داعي لإعادتها من البداية.
-
إجابة Kais Hasan سؤال في خطأ عند تشغيل regexp في sqlcipher كانت الإجابة المقبولة
إن SQLCipher لا تحتوي على دعم ل REGEXP، يجب عليك إما عدم استعمالها أو محاولة الوصول إلى المعلومات التي تريدها دون استعمال regex.
-
إجابة Kais Hasan سؤال في تغيير المتصفح الإفتراضي كانت الإجابة المقبولة
سأفترض أن نظام التشغيل لديك هو windows 10 ، في حال كان غير ذلك يمكنك الرد على جوابي و سأعيد الجواب من أجل نظام التشغيل المطلوب.
في البداية اذهب إلى مربع البحث و اكتب Default apps، و اضغط على ال Default apps الذي يظهر كنتيجة.
ستظهر لديك كل التطبيقات الافتراضية، اذهب إلى web browser و اختار المتصفح الذي تريده.
في حال وصلت لمرحلة و لم تعلم ما الذي يجب القيام به لا تتردد في السؤال مع لقطة شاشة توضح المرحلة التي أنت فيها.
-
إجابة Kais Hasan سؤال في ترتيب مصفوفة في c++ كانت الإجابة المقبولة
إن الخطأ هو أنك تقوم بترتيب أول n-1 عنصر بدلاً من ترتيب كامل المصفوفة و التي تحوي على n عنصر.
إن التابع sort في c++ يحتاج مؤشر بداية يؤشر على أول عنصر، و هنا في حالتك اسم المصفوفة يتم تحويله إلى مؤشر يؤشر على أول عنصر.
و البارامتر الثاني هو مؤشر نهاية، و هو يؤشر على الموقع الذي يلي آخر عنصر، أي أنه ليس آخر عنصر و بالتالي في حالتك هو a +n ﻷن العد يبدأ من الصفر و بالتالي الموقع الأخير هو n-1 و بالتالي مؤشر النهاية يجب أن يؤشر على الموقع n.
-
إجابة Kais Hasan سؤال في استفسار حول خوارزمية insertionSort في لغة بايثون كانت الإجابة المقبولة
يبدو أن التابع insertionSort يقوم بالتعديل على المتحول بشكل مباشر (بالإضافة إلى أنه يعيده).
لتجنب ذلك هناك أكثر من حل، أولاً في حال كان التابع insertionSort متاح لديك، أي أنك من قام بكتابته، فيمكنك تعديل التابع لكي يضع الناتج في مصفوفة جديدة بدل التعديل على القديمة.
الحل الثاني و هو الحل الإجباري في حال لم يكن لديك وصول إلى التعريف الخاص بالتابع، و هو القيام بتمرير نسخة من المصفوفة بدل المصفوفة نفسها.
سأضع مثال يقوم بالتعديل و سأريك كيف نقوم بالتحويل و يمكنك تطبيق نفس المبدأ على التابع الخاص بك.
def increase(a): for i in range(len(a)): a[i] += 1 return a a = [1, 2, 3, 4] b = increase(a) print(a) # [2, 3, 4, 5] print(b) # [2, 3, 4, 5] نلاحظ هنا أننا نقوم بالتعديل على المصفوفة بشكل مباشر و هذا ما سبب الخطأ، و لكن يمكننا تمرير نسخة من المصفوفة كما يلي، و لن يحدث تعديل على الأصلية:
def increase(a): for i in range(len(a)): a[i] += 1 return a a = [1, 2, 3, 4] b = increase(a[:]) print(a) # [1, 2, 3, 4] print(b) # [2, 3, 4, 5] حيث أننا قمنا بنسخ المصفوفة عن طريق نسخ كافة العناصر باستعمال [:] و هو عملية slice تأخذ كافة عناصر المصفوفة.
الطريق الثانية هو تغيير طريقة تعريف التابع لكي يتم التعديل على نسخة من المصفوفة بدل المصفوفة نفسها:
def increase(a): b = [] for i in range(len(a)): b.append(a[i] + 1) return b a = [1, 2, 3, 4] b = increase(a) print(a) # [1, 2, 3, 4] print(b) # [2, 3, 4, 5] هنا قمنا بإضافة النتيجة إلى لائحة جديدة و إعادتها بدل التعديل مباشرة على المصفوفة الممررة.
الطريقة الثانية مفضلة على الطريقة الأولى و ذلك ﻷنها تتجنب ما يسمى بالتأثيرات الجانبية و التي تجعل الأخطاء التي تحدث في الكود صعبة التعقب.
-
إجابة Kais Hasan سؤال في تحديد المساحة Effective port area في matlab كانت الإجابة المقبولة
إن المساحة التي تريدها هي مساحة بين منحنيين هما المنحني باللون الأزرق (أو اللون الذي تريده حيث من غير الواضح تماماً أي منحني تريد) و المستقيم الأزرق.
لإيجاد المساحة بين منحنيين يمكننا طرح المساحة التي أسفل أحدهما من المساحة التي أسفل الآخر.
يمكن حساب المساحة عن طريق التكامل و الذي يمكن حسابه في ماتلاب عن طريق الدالة trapz.
المشكلة الوحيدة هنا هو أنه في مجال معين يكون المنحني الأزرق له مساحة أكبر من المستقيم الأزرق و العكس في مجالات أخرى و بالتالي علينا حساب أكثر من تكامل لضمان نتيجة صحيحة.
يمكن حساب هذه النقاط بسهولة في ماتلاب عن طريق إيجاد نقاط التقاطع بين المنحني الأزرق و المستقيم الأزرق سأدعو هذه النقاط ب x2 و x3 ، بالإضافة إلى نقاط التقاطع بين المنحني الازرق و المحور x و سأدعو هذه النقاط ب x1 و x4.
الآن يمكنك حساب المساحة في المجالات التالية:
[x1, x2], [x2, x3], [x3, x4] حيث أنه في المجالين الأول و الأخير نقوم بطرح المساحة تحت المستقيم الأزرق من المساحة تحت المنحني الأزرق، بينما نقوم بالعكس في المجال الثاني.
من أجل تلوين المساحة يمكنك استعمال fill و لكن يجب عليك إعطاء الكثير من النقاط، أي مثلاً المجال لديك هو من ال 0 إلى 220 تقريبا على محور x و بالتالي مثلاً جرب وضع 400 نقطة أو 500، يمكن كتابة ذلك في الكود بدون جهد كبير.
-
إجابة Kais Hasan سؤال في شرح لمفهوم version control كانت الإجابة المقبولة
لا علاقة لل version control بتكامل المكتبات، حيث أنها كما يوحي اسمها تقوم بأرشفة الكود و تخزين نسخ منه في لحظات زمنية معينة.
لفهم فائدتها بشكل أساسي من ناحية تخزين النسخ، لنفترض أنه لدينا كود لموقع يعمل و نريد التعديل عليه، من غير المحبذ التعديل مباشرة على الكود الرئيسي، حيث أننا قد نفقد القدرة على إعادته إلى شكله الأساسي (قد ننسى ما قمنا بالقيام به)، و بالتالي بإمكاننا باستعمال ال version control القيام بإنشاء ما يسمى بالفرع، و هو نسخة عن الكود الأساسي، يمكننا التعديل فيه بدون التأثير على الكود الأساسي، و عندما نتأكد من أن تعديلاتنا صحيحة و تعمل بشكل صحيح يمكننا إعادة دمج هذا الفرع بالكود الأساسي لإضافة التعديلات إليه.
بالطبع يمكن لأكثر من شخص استعماله في نفس الوقت، و هو يعتبر وسيلة أساسية لتنظيم العمل، حيث أنه مثلاً لدينا ال git و هو version control يمكننا استعماله للقيام بكافة العمليات التي نريدها، و حتى يمكننا التواصل مع الآخرين يجب أن تكون هناك نسخة موجودة على سيرفر خارجي حتى يستطيع الآخرون رؤيتها، مثلاً يمكن استعمال github لذلك، بالطبع توجد بروتوكولات معينة للعمل لضمان عدم التعارض بين ما تقوم بتعديله و ما يقوم شخص آخر بتعديله.
-
إجابة Kais Hasan سؤال في ما الفرق بين خاصية value و name وخاصة في ال input radio و ال input checkbox كانت الإجابة المقبولة
إن الخاصية value تمثل القيمة التي سيتم إرسالها عند القيام ب submit، أي سيتلقاها السيرفر و يعالجها بالطريقة المناسبة، هذا هو الأمر في ال radio-button و ال checkbox.
بينما في الأزرار العادية فهي تعرف النص الموجود على الزر، أما في الإدخال النصي فهي تعرف القيمة الأولية الافتراضية للدخل.
أما ال name فهي مجرد اسم لهذه القيمة، أي يمكن استعماله لجلب القيمة في السيرفر مثلاً.
كأنك تعرفين متحول له name و قيمته هي value.