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

Mustafa Suleiman

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

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

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

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

    299

كل منشورات العضو Mustafa Suleiman

  1. يتم تحديث الدورات بشكل منتظم، وتستطيع رؤية التحديثات التي تمت مؤخرًا في صفحة آخر التحديثات ، وفي حال وجود حاجة لإضافة نماذج جديدة لاستكمال محتوى الدورة سيتم إضافة ذلك من قبل الفريق المسؤول عن إعداد محتوى الدورات.
  2. قم بالنزول للأسفل تمامًا عند مشاهدة الدرس ستجد صندوق تعليقات كما هنا.
  3. استخدامها غير مؤثر في حالتنا هنا، فبالطبع سيكون الخرج هو رقم وليس نص، لكن ليس هناك فارق في الكود لدينا هنا. number = int(input("Enter a number :")) for x in range(10): print((number), '*', '=' ,number * x) لكن متى يكون مؤثر؟ في حال أردنا استخدام الرقم في سلسلة نصية، لاحظ الكود التالي سيحدث به خطأ: first_name = "ahmed" age = 25 info = str(first_name) + " " + (age) print(info) عند تجميع سلسلة نصية بواسطة + حدث خطأ لأننا نحاول جمع رقم مع نص، لذا علينا استخدام str كالتالي: first_name = "ahmed" age = 25 info = str(first_name) + " " + str(age) print(info) وأرجو التعليق أسفل فيديو الدرس لمساعدتك بشكل أفضل والمتابعة مع سؤالك.
  4. أرجو التعليق أسفل الدرس لمساعدتك بشكل أفضل حيث يوجد صندوق تعليقات، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. والأمر ليس به تعقيد، يتم شرح الأساسيات، لذا يتم توظيف ما تعلمته في كل فرصة متاحة لذلك، من أجل رؤية الفائدة منها واستخدام str ليس مؤثر هنا لكن لتوضيح الغرض منها وما الذي يحدث عند استخدامها. وفي البرمجة تستطيع تنفيذ الأمر بأكثر من طريقة، لذا أُشجعك دائمًا على كتابة الكود بطريقتك ومحاولة التغيير به وإضافة مزايا جديدة وعدم الإكتفاء بالشرح فقط. وكمثال من الأفضل طباعة الرقم الذي يتم ضرب الرقم به في الحلقة التكرارية وذلك باستخدام f-string وأيضًا وضع /n من إظهار أول نتيجة على سطر منفصل كالتالي: number = int(input("Enter a number: \n")) for x in range(1, 11): print(f"{number} * {x} = {number * x}")
  5. بالطبع فالكود ليس كامل، ذلك مثال فقط، عليك إنشاء نموذج ومتحكم، في حال لم تكن على دراية بذلك، فأرجو دراسة أساسيات لارافل.
  6. بالتأكيد أنت تستخدم الصور بحجمها الكامل وأيضًا لم تقم بضغطها مع استخدام صيغة مناسبة لكي لا تفقد جودتها، وتستطيع فعل ذلك من خلال الفوتشوب من خلال تصغير حجم الصور لتكون ضعف الحجم الذي تريد عرضها به، مثلاً لو تريد 500 بكسل ستكون الصورة 1000 بكسل لكي تظهر بجودة جيدة على الهواتف التي بها تقنية الـ double pixel. ثم حفظها بصيغة webp أو avif. وإذا لم ترد استخدام الفوتشوب تستطيع استخدام موقع Squoosh من خلال المتصفح، لتنفيذ ما سبق.
  7. في البداية نستخرج البيانات من قاعدة البيانات: تحديد نموذج قاعدة البيانات الذي يمثل حساباتك (مثلاً: حسابات، معاملات، ...). كتابة استعلام لعرض البيانات المطلوبة، مع مراعاة ترتيبها حسب التاريخ. مع تضمين الأعمدة التالية في الاستعلام: التاريخ: تاريخ المعاملة. الدائن: المبلغ الدائن في المعاملة. المدين: المبلغ المدين في المعاملة. البيان: وصف موجز للمعاملة. ثم برمجة خانة الإجمالي لكل صف كالتالي: استخدم حلقة foreach لعرض البيانات. داخل الحلقة، حدد متغير لحفظ إجمالي الدائن حتى الآن. أضف قيمة الدائن لكل صف إلى متغير إجمالي الدائن. حدد متغير آخر لحفظ إجمالي المدين حتى الآن. أضف قيمة المدين لكل صف إلى متغير إجمالي المدين. اعرض قيمة إجمالي الدائن وإجمالي المدين في كل صف. بعد ذلك كتابة الكود الخاص بخانة صافي المبلغ (الإجمالي) من خلال طرح إجمالي المدين من إجمالي الدائن وعرض قيمة صافي المبلغ (الإجمالي) في آخر الصف. وكمثال بسيط: @foreach ($transactions as $transaction) <tr> <td>{{ $transaction->date }}</td> <td>{{ $transaction->credit }}</td> <td>{{ $transaction->debit }}</td> <td>{{ $transaction->description }}</td> @php $totalCredit += $transaction->credit; $totalDebit += $transaction->debit; @endphp <td>{{ number_format($totalCredit, 2) }}</td> <td>{{ number_format($totalDebit, 2) }}</td> <td>{{ number_format($totalCredit - $totalDebit, 2) }}</td> </tr> @endforeach <tr> <th></th> <th>{{ number_format($totalCredit, 2) }}</th> <th>{{ number_format($totalDebit, 2) }}</th> <th></th> <th></th> <th></th> <th>{{ number_format($totalCredit - $totalDebit, 2) }}</th> </tr>
  8. دالة abs تأخذ القيمة المطلقة لعدد أي أنها ستحذف علامة السالب من أي رقم سلبي. هناك دالة round بدلاً من دالة abs حيث ستقرب الرقم إلى أقرب عدد صحيح، أي لو كان الرقم المدخل هو 256.35، فسوف تقوم دالة round بإرجاع 256. وإن كان 256.35-، فسوف تقوم دالة round بإرجاع 256. لكن أرجو توضيح ما المشكلة بالضبط، وأيضًا في حال التعامل مع أرقام مالية فالأرقام العشرية مهمة جدًا يجب الإحتفاظ بها وليس التقريب لأقرب عدد صحيح.
  9. وعليكم السلام مهند، صراحًة أي كلام يُقال فهو صغير وتافه بالنسبة لما عاناه شعب غزة، حقيقًة أعتذر لك، ولا أحد يمكنه تفهم ما مر به الجميع في غزة سوى أهلها. عزائك الوحيد أنك احتسبت ذلك عند الله، فالمؤمن أمره كله خير، أيضًا ليس تقليل من شأن محنتك لكن هناك الكثير مروا بنفس المحنة في غزة وقرروا المضي قدمًا وتفقد الخيارات المتاحة أمامهم والعمل بما لديهم حاليًا آملين في مستقبل أفضل رغم أنه مجهول لكن حسن ظن بالله. بخصوص اللابتوب فتستطيع استرجاعه بعد فترة، حاليًا ركز فقط على أن تكون بخير أنت وعائلتك. ولن تبدأ من جديد بل المهارات التي تعلمتها باقية معك تحتاج إلى المراجعة فقط، حاول التركيز على تعلم المطلوب بسوق العمل في البلد الذي أنت به الآن. من الطبيعي أن تشعر بالحزن والغضب بعد كل ما مررت به لا تضغط على نفسك لتجاوز تلك المشاعر بسرعة امنح نفسك الوقت اللازم للتعامل معها بشكل صحي. ولا تضغط على نفسك للعودة إلى مستوى النشاط الذي كنت عليه من قبل ابدأ ببطء وقم بتحديد أولوياتك والتركيز على تطوير مهاراتك بشكل تدريجي.
  10. ما تتسائل عنه هو وجود تدريبات بعد كل مستوى، ويمكن توفير ذلك لك بالطبع، أرجو التعليق في نهاية كل مسار وطلب تدريبات للتطبيق عما تم شرحه بالمسار وسيتم توفيرها لك. أيضًا تستطيع البحث على اليوتيوب عن مشاريع للمبتدئين ووضع اسم اللغة بجانب ذلك مثال: "مشاريع جافاسكريبت للمبتدئين أو مشاريع HTML و CSS للمبتدئين" وهكذا... بالطبع ذلك بعد الإنتهاء من المسارات الخاصة باللغة لكن في البداية ستحتاج إلى تمارين بسيطة وبها تحديات للتمرين على أجزاء معينة.
  11. من خلال الموقع الرسمي ومن الأفضل تحميل الإصدار 3.11 وليس 3.12 لكون الإصدار 3.11 أقدم وأغلب المكتبات الموجودة متوافقة معه بينما إصدار 3.12 إصدار حديث في 2023-10-02 لذا ننتظر بعض الوقت قبل استخدامه. رابط الموقع الرسمي: https://www.python.org/downloads/ وإليك رابط مباشر للإصدار 3.11: https://www.python.org/ftp/python/3.11.7/python-3.11.7-amd64.exe وأثناء التثبيت لا تنسي الضغط على add python to PATH
  12. مضبوط، لذا نستخدم دالة ABS لتكون النتيجة موجبة، لكن عليك التوضيح ما الغرض من عمليات الطرح تلك؟ فالعمليات المالية مثلاً حساسة ولا نستطيع تعيينها إلى 0 في حال كانت القيمة سالبة مثلاً بل يتم رفض عملية الطرح إن كان حسابه ليس به مبلغ كافي مثلاً.
  13. تستطيع استخدام دالة ABS لحساب القيمة المطلقة للنتيجة حيث ستُحوّل الدالة أي قيمة سالبة إلى قيمة موجبة. أو استخدام شرط CASE للتحقق من علامة النتيجة، فلو كانت النتيجة سالبة، تقوم بتعيينها إلى 0. SELECT CASE WHEN V - (x + A) >= 0 THEN V - (x + A) ELSE 0 END AS total_amount FROM table1 WHERE id = customer_id; أيضًا يوجد إمكانية إنشاء عمود منفصل لحساب المبلغ الإجمالي وتحديث العمود كلما تم إجراء تغيير على أي من القيم. UPDATE table1 SET total_amount = V - (x + A) WHERE id = customer_id;
  14. عنصر meta وهو عنصر HTML يوفر بيانات وصفية حول مستند HTML، ولا يتم عرض بيانات الوصف تلك على صفحة الويب نفسها، ولكنها تستخدم بواسطة محركات البحث والمتصفحات والأجهزة الأخرى لفهم محتوى الصفحة. وهناك العديد من الأنواع المختلفة من عناصر meta، ولكل نوع attribute أو سمة مختلفة، أي يختلف العنصر بإختلاف السمة، ونكتب كل سمة بشكل منفصل أي لانضع كل السمات في عنصر meta واحد. بمعنى: name: سمة "الاسم" تحدد اسم الخاصية التي يصفها عنصر "ميتا". viewport: اسم خاص يحدد كيفية عرض محتوى صفحة الويب في منفذ عرض. content: سمة "المحتوى" تحدد قيمة الخاصية. width=device-width تحدد تلك القيمة عرض محتوى صفحة الويب بعرض الجهاز الذي يعرضها. و initial-scale=1.0 تحدد مقياس التكبير الأولي لصفحة الويب على أنها 1.0، مما يعني أن محتوى صفحة الويب سيتم عرضه بحجمه الأصلي. أي يضمن الكود عرض المنفذ عرض محتوى موقع الويب بشكل صحيح على أجهزة مختلفة، بغض النظر عن دقة الشاشة أو حجمها. بشكل أبسط نسبة العرض للإرتفاع متساوية ليتم ملائمة طول الشاشة مهما كان عند عرض صفحة الموقع لأول مرة، ويظهر الموقع بشكل طبيعي على أجهزة الهاتف دون تكبير أو تصغير، فلو قمتي بعمل zoom على شاشة هاتفك ستجدي أن الموقع يتم تكبيره لكن قيمة 1 تعني أن الموقع سيتم عرضه بدون تكبير أي بشكله الطبيعي.
  15. نتيجة الطرح طبيعية؟ فأنت تقوم بطرح متغير t من متغير v أي طرح 50 من 500 لذا النتيجة سالبة لأنك تطرح الرقم الصغير من الكبير. يجب طرح الرقم الكبير من الصغير إذا أردت قيمة موجبة كالتالي: <?php $v = 500; $t = 50; $i = 40; $e = $t + $i; echo $v - $t; ?>
  16. ميثود unshift مشابهة لـ splice ولكنها تعمل بشكل مختلف قليلاً، حيث نستخدمها لإضافة عنصر واحد أو أكثر إلى بداية المصفوفة. وتستقبل عنصرًا واحدًا أو أكثر كمعلمات، مما يعني أنه يتم تحريك جميع العناصر الموجودة في المصفوفة بمقدار واحد إلى اليمين. لنفترض وجود مصفوفة تحتوي على العناصر التالية: const array1 = [1, 2, 3]; console.log(array1.unshift(4, 5)); // expected output: 5 console.log(array1); // expected output: Array [4, 5, 1, 2, 3] كما ترى، تم إضافة الأرقام في بداية المصفوفة وتحريك جميع العناصر إلى اليمين، ولكن تلك الميثود تقوم بتعديل المصفوفة الأصلية لذا عليك معرفة آلية عمل كل ميثود وهل تقوم بتغيير المصفوفة الأصلية أم إنشاء مصفوفة جديدة دون تعديل الأصلية.
  17. لأن كتابة الخوارزمية تساعدك على فهم كيفية عمل عملية الضرب على مستوى أعمق، حيث أنها توضح كيفية تطبيق مفهوم الضرب على مستوى أكثر تفصيلًا، وبالتالي فهم أفضل للعمليات الحسابية. وما يحدث هو: تقسيم الأعداد إلى جزئين: الجزء العلوي (a0) والجزء السفلي (a1) ضرب كل جزء من الأعداد: a0 * b0، a1 * b1، (a0 + a1) * (b0 + b1) حساب النتائج الوسيطة (c0، c1، c2) تحديد العلامة العشرية للنتيجة النهائية (x0) حساب النتيجة النهائية (c)
  18. غالبًا أنت تتحدث عن دورة علوم الحاسوب، وذلك أمر طبيعي بخصوص تلك الدورة، ففي البداية يتم تقديم المفاهيم إليك بشكل نظري، فالدورة الغرض منها تقديم مختلف علوم الحاسوب إليك بشكل مُبسط، على إفتراض أنك شخص ليس لديه خلفية عن تلك المفاهيم، لذا الأمر يجب أن يكون تدريجيًا. وليس عليك حفظ كل الأمور النظرية، بل استوعبها فقط وبعض الأمور ستنساها ولا مشكلة بذلك، لكن طالما أنك استوعبتها فذلك هو المهم. حاول تحمل الجزء الممل من الدورة، وسيصبح الأمر أفضل مع مرور الوقت وباقي مسارات هي مسارات عملية يتم بها كتابة الكود
  19. من الأفضل استخدام أسماء أكثر وضوحًا للمتغيرات، مثل استبدال "a0" بـ "tensA" و "a1" بـ "onesA" لتجعل الكود أكثر قابلية للقراءة. وهناك إمكانية لإضافة تحقق لضمان أن الأرقام المدخلة هي أرقام صحيحة، مثل التأكد من أن a و b يتمثلان في أرقام صحيحة، ولتحسين أداء الكود تجنب إعادة حساب القيم التي تم حسابها بالفعل، مثل حساب a0 + a1 و b0 + b1 مرتين. def anatoly(a, b): # تحقق من صحة الإدخال if not isinstance(a, int) or not isinstance(b, int): raise ValueError("الرجاء إدخال أرقام صحيحة") # تحويل الأعداد السالبة إلى إيجابية a = abs(a) b = abs(b) tensA = a // 10 onesA = a % 10 tensB = b // 10 onesB = b % 10 c0 = onesA * onesB c1 = tensA * tensB c2 = ((tensA + onesA) * (tensB + onesB) - (c1 + c0)) if c2 % 2 == 0: x0 = c2 // 10 x1 = c2 % 10 else: x0 = 0 x1 = c2 return x1, c1 + x0, c0 print(anatoly(32, 14))
  20. في حال التحقق من البريد الإلكتروني عليك بإنشاء نموذج لجدول OTP يحتوي على حقول مثل: id user_id otp_code expiry_time إنشاء متحكم لإنشاء OTP وإرسالها عبر البريد الإلكتروني وآخر للتحقق من رمز OTP. وبخصوص التحقق من الهاتف المحمول، فعليك استخدام خدمة SMS خارجية لإرسال OTP، وإنشاء متحكم للتحقق من رمز OTP. وبأي طريقة فعند عند تسجيل الدخول أو إعادة تعيين كلمة المرور ، قم بإنشاء رمز OTP وإرساله إلى المستخدم. وعندما يُدخل المستخدم رمز OTP ، فقم بالتحقق من صحة الرمز من خلال: البحث عن رمز OTP في قاعدة البيانات. التأكد من أن رمز OTP لم ينتهِ صلاحيته ومطابق للرمز الذي تم إرساله إلى المستخدم. وإن كان الـ OTP صحيحًا ، فسجل دخول المستخدم أو أعد تعيين كلمة المرور، ومن الأفضل استخدام OTP له مدة صلاحية قصيرة. وبالطبع هناك مكتبات تسهل العملية مثل مكتبة laravel-otp
  21. اضغط على سطح المكتب بزر الفأرة الأيمن ثم اختر open in terminal وإن لم يظهر لك ذلك الخيار، اضغط على Shift مع الضغط على زر الفأرة الأيمن. وبالطبع تأكد من تحميل التطبيق التالي: https://apps.microsoft.com/detail/9n0dx20hk701?hl=en-US&gl=US
  22. Interpolation Search هي خوارزمية بحث تعتمد على فكرة إن كانت البيانات مرتبة تصاعديًا أو تنازليًا، فباستطاعتنا استخدام قيمة العنصر المستهدف لتحديد موقعه التقريبي في المصفوفة. وتعمل بالآلية التالية: ابحث عن أصغر وأكبر عنصر في المصفوفة. احسب الفارق بين قيمة العنصر المستهدف وأصغر عنصر في المصفوفة. قسّم هذا الفارق على الفارق بين أكبر وأصغر عنصر في المصفوفة. اضرب النتيجة بـ (عدد العناصر في المصفوفة - 1) واحصل على فهرس تقريبي للعنصر المستهدف. قارن العنصر في هذا الفهرس مع العنصر المستهدف. إذا كانا متطابقين، فقد وجدت العنصر المستهدف. إذا لم يكونا متطابقين، فكرّر الخطوات من 3 إلى 6 مع تعديل الفهرس التقريبي بناءً على المقارنة. وهي أسرع من خوارزمية البحث الثنائي (Binary Search) في بعض الحالات وسهلة الفهم والتنفيذ. لكن لا تعمل بشكل جيد مع البيانات غير المرتبة وأبطأ من خوارزمية البحث الثنائي في بعض الحالات، والإختيار يعتمد على: حجم البيانات. ترتيب البيانات. الأداء المطلوب.
  23. يجب التفرقة بين الـ modulo والـ remainder فكلاهما يستخدمان نفس العلامة، وكل لغة تقوم بشكل إفتراضي بتطبيق سواء modulo أو remainder. وفي C++، يُستخدم العامل % كعامل modulo، والذي يُعيد الباقي من القسمة عند قسمة عدد على عدد آخر. ولكن، نستطيع استخدامه أيضًا كعامل remainder في حالة الأعداد السالبة، حيث يختلف الناتج عن عملية القسمة في حالة الاستخدام مع الأعداد السالبة. حيث أنّ الـ Modulo: في العمليات الحسابية العادية، يُعتبر الـ Modulo عملية تُعيد الباقي من القسمة العددية أي 10 Mod 3 يُعيد قيمة 1، لأن 10 ÷ 3 تساوي 3 مع باقي 1. في البرمجة، خصوصاً في لغة C/C++، الـ Modulo تُعيد قيمة سالبة إذا كان أحد العددين سالبًا. مثل -10 Mod 3 يُعيد -1، لكن ذلك السلوك يختلف بين اللغات. بينما الـ Remainder: الـ Remainder هو الباقي الإيجابي بعد القسمة ففي الرياضيات، يكون الـ Remainder دائمًا إيجابيًا. في بعض اللغات البرمجية مثل Python وJava، عملية الـ Remainder تعتبر عملية للحصول على الباقي الإيجابي من القسمة، مثل -10 % 3 في Python يُعيد 2، وهو باقي القسمة الإيجابي. وإليك مثال شامل يوضح الفرق بين الـ Modulo والـ Remainder في C++: #include <iostream> using namespace std; int main() { // Modulo cout << "Modulo Examples:" << endl; cout << "10 % 3 = " << 10 % 3 << endl; // يُعيد 1، لأن الباقي من قسمة 10 على 3 هو 1 cout << "-10 % 3 = " << -10 % 3 << endl; // يُعيد -1، لأن الباقي من قسمة -10 على 3 هو -1 cout << "10 % -3 = " << 10 % -3 << endl; // يُعيد 1، لأن الباقي من قسمة 10 على -3 هو 1 cout << "-10 % -3 = " << -10 % -3 << endl; // يُعيد -1، لأن الباقي من قسمة -10 على -3 هو -1 // Remainder cout << "\nRemainder Examples:" << endl; cout << "10 % 3 = " << (10 % 3 + 3) % 3 << endl; // يُعيد 1، لأن الباقي من قسمة 10 على 3 هو 1 cout << "-10 % 3 = " << (-10 % 3 + 3) % 3 << endl; // يُعيد 2، لأن الباقي من قسمة -10 على 3 هو -1، ولكن بعد إضافة 3 يصبح 2 cout << "10 % -3 = " << (10 % -3 + -3) % -3 << endl; // يُعيد -2، لأن الباقي من قسمة 10 على -3 هو 1، ولكن بعد إضافة -3 يصبح -2 cout << "-10 % -3 = " << (-10 % -3 + -3) % -3 << endl; // يُعيد -1، لأن الباقي من قسمة -10 على -3 هو -1 return 0; }
  24. لا يوجد ملخصات PDF لمحتوى الدورة، لكن تستطيع الإعتماد على موسوعة حسوب كمرجع لك: https://wiki.hsoub.com بالإضافة إلى المقالات والدروس في أكاديمية حسوب حيث أقسام مختلفة: https://academy.hsoub.com/programming/ وستجد نصائح أخرى هنا:
  25. أرجو تثبيت anydesk ثم إرسال الـ address على الخاص لمساعدتك من خلال الدخول على حاسوبك. لكن في البداية حاول إعادة تشغيل الحاسوب، وإن استمرت المشكلة استخدم منفذ أوامر آخر وهو powershell من خلال تثبيت التطبيق التالي: https://apps.microsoft.com/detail/9n0dx20hk701?hl=en-US&gl=US ثم البحث في شريط البحث بالأسفل عن terminal
×
×
  • أضف...