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

Mustafa Suleiman

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

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

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

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

    365

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

  1. سأقوم بتوضيح الخطوات لك لإنشاء برنامج يستخدم جملة التحويل switch case لحساب أجر الموظفين كما يلي: 1- قم بتعريف المتغيرات اللازمة للبرنامج، وهي: متغير لتخزين عدد الساعات التي عملها الموظف (hours). متغير لتخزين مستوى المهارة للموظف (skillLevel). متغير لتخزين أجر الموظف اليومي (pay). 2- قم بطباعة رسالة تعريفية للمستخدم لإعلامه بضرورة إدخال البيانات المطلوبة. 3- استخدم جملة switch case لتحديد أجر الموظف بناءً على مستوى المهارة الذي يملكه. في الحالة الأولى (skillLevel = 1)، قم بحساب أجر الموظف بتضريب عدد الساعات التي عملها الموظف بمعدل الأجر اليومي للمهارة الغير ماهرة (8.15 RO/-) وتخزين الناتج في متغير الأجر (pay). في الحالة الثانية (skillLevel = 2)، قم بحساب أجر الموظف بتضريب عدد الساعات التي عملها الموظف بمعدل الأجر اليومي للمهارة النصف مهارة (12.55 RO/-) وتخزين الناتج في متغير الأجر (pay). في الحالة الثالثة (skillLevel = 3)، قم بحساب أجر الموظف بتضريب عدد الساعات التي عملها الموظف بمعدل الأجر اليومي للمهارة الماهرة (18.60 RO/-) وتخزين الناتج في متغير الأجر (pay). في الحالة الرابعة (skillLevel غير 1 أو 2 أو 3)، قم بطباعة رسالة خطأ تفيد بأن مستوى المهارة المدخل غير صحيح، وعدم القيام بأي حسابات. 4- قم بطباعة قيمة أجر الموظف المحسوب في المتغير pay. 5- اختبر البرنامج باستخدام مجموعة من الحالات الاختبار المختلفة، مثل الأعداد الزوجية والفردية والكسورية، والتأكد من صحة نتائج الحسابات. 6- قم بإضافة اللازم للتحقق من صحة البيانات المدخلة من قبل المستخدم، مثل التحقق من أن عدد الساعات المدخلة يكون أكبر من صفر، وأن مستوى المهارة المدخل صحيح. 7- يمكن إضافة تعليمات إضافية لتطوير البرنامج وجعله أكثر استخدامًا وعملية، مثل إضافة خيارات إدخال المعلومات بطريقة مختلفة مثل قراءة البيانات من ملف أو تخزينها في قاعدة بيانات.
  2. إذا كنت تستخدم bootstrap 4 فإن الفئة (bg-color-subtle) ليست موجودة ، بل يمكنك استخدام الفئة (bg-light) وستحقق نفس التأثير. أما بالنسبة للفئة (subtle) ، فهي ليست جزءًا من bootstrap ، قد يكون هذا اسم فئة تم إنشاؤها في ملف التنسيق style.css. وباستطاعتك إنشاء الفئة subtle بنفسك باستخدام CSS بالشكل التالي: .subtle { opacity: 0.5; } وهذا سوف يخفف من تأثير أي عنصر يحمل تلك الفئة. وإذا كنت تستخدم bootstrap 5.3 فإن الفئة (bg-color-subtle) موجودة وتعمل بشكل صحيح. ولتضمين المكتبة في الكود الخاص بك عن طريق روابط CDN استخدم التالي: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.7/dist/umd/popper.min.js" integrity="sha384-zYPOMqeu1DAVkHiLqWBUTcbYfZ8osu1Nd6Z89ify25QV9guujx43ITvfi12/QExE" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.min.js" integrity="sha384-Y4oOpwW3duJdCWv5ly8SCFYWqFDsfob/3GkgExXKV4idmbt98QcxXYs9UoXAB7BZ" crossorigin="anonymous"></script> ويمكنك قراءة المستندات الخاصة بإصدار 5.3. وإذا كنت تستخدم المكتبة في مشروع يعتمد على webpack فعليك بقراءة الدليل التالي: https://getbootstrap.com/docs/5.3/getting-started/webpack/
  3. لكي تكتب الأرقام بنفس عدد الأسطر، عليك بتعديل حلقة التكرار الداخلية (الحلقة التي تحدد عدد الأرقام في كل سطر) لتكون بحسب عدد الأسطر، يمكن القيام بذلك عن طريق استخدام متغير آخر لحساب عدد الأرقام في الحلقة التالية. مثلاً، يمكن تعديل الكود كما يلي: num = 1 for i in range(1, 8): # حساب عدد الأرقام في السطر الحالي num_digits = i for j in range(num_digits): print(num, end=' ') num += 1 print() كما ترى يتم حساب عدد الأرقام في كل سطر باستخدام المتغير num_digits الذي يتم تعيينه إلى قيمة i في كل دورة من حلقة التكرار الخارجية، بعد ذلك استخدام متغير num_digits في حلقة التكرار الداخلية لطباعة عدد معين من الأرقام في كل سطر. وبما أن حلقة التكرار الخارجية تمتد من 1 إلى 7، فسيتم طباعة 7 أسطر، وكل سطر يحتوي على عدد من الأرقام يساوي رقم السطر نفسه، لذلك، سيكون السطر الثالث يحتوي على ثلاثة أرقام، والسطر الرابع يحتوي على أربعة أرقام، وهكذا.
  4. حاول تنفيذ الخطوات التالية لتعديل رابط الصورة في بلوجر: قم برفع الصورة بشكل طبيعي أثناء كتابة المقالة ومن ثم الضغط على "تحرير HTML". البحث عن الرابط الذي يحتوي على "/s1600/" أو "/s220/" أو "/s400/" أو "/s72/" ، حيث تشير هذه الأرقام إلى حجم الصورة المراد عرضها. تغيير هذه الأرقام وفقًا للحجم الذي تريد استخدامه، على سبيل المثال يمكن استخدام "/s640/" أو "/s1024/" بدلاً من "/s400/" للحصول على صورة بجودة أعلى. حفظ التغييرات التي قمت بها وإغلاق نافذة "تحرير HTML". وأيضًا تأكد من تغيير عرض الصورة ليصبح original size أو العرض الأصلي للصورة، والأفضل هو تغيير حجم الصورة قبل رفعها لتتناسب مع حجم القالب. باستطاعتك استخدام أداة https://squoosh.app/editor لتعديل حجم الصور من خلال الضغط على resize وأيضًا ضغم حجم الصور لتحسين سرعة الموقع وبالتالي الـ SEO.
  5. الأمر في تلك الحالة راجع للدعم الفني الخاص بخمسات عليك بمراسلتهم أكثر من مرة أي مرة كل 72 ساعة، ويجب توفير دليل أو محادثة الخاصة بالمشروع على أنك العميل استلم الملفات أو أكد الاستلام. وللأسف في حالة عدم تأكيد الاستلام سيصعب استلامك للأرباح، حيث يجب إنتظار فترة كبيرة، ويمكن إخبار الدعم الفني بالتحدث للعميل على هاتفه أو إرسال بريد إلكتروني. وفي المرة القادمة يجب التأكيد على استلام المشروع بشكل واضح. وكنصيحة لا تعلق الكثير من الأمال فالأمر سيبقى معلق لحين عودة العميل وتأكيد الاستلام.
  6. باستطاعتك تعديل الكود بإضافة شرط قبل تحديث قيمة الـ printName، حيث يتحقق من قيمة حقل الإدخال، وإذا كان فارغًا يتم عرض رسالة (required) دون تحديث قيمة الـ printName، وإذا كانت القيمة غير فارغة يتم تحديث قيمة الـ printName بقيمة حقل الإدخال. <script> function myFunction() { let userInput = document.querySelector("#userInput"); let printName = document.querySelector("#printName"); if (userInput.value === '') { userInput.setCustomValidity("Please enter your name"); printName.innerHTML = ''; } else { userInput.setCustomValidity(''); printName.innerHTML = userInput.value; } } </script> قمت بإضافة userInput.setCustomValidity لتعيين رسالة الخطأ وتعيين قيمة الـ printName إلى فارغ في حالة كان حقل الإدخال فارغًا، وإذا تم إدخال قيمة صالحة، يتم إزالة رسالة الخطأ وتحديث قيمة الـ printName.
  7. أرجو منك مشاركة الكود بشكل نصي من خلال إضافته من علامة <> عند كتابة السؤال. وحاول تجربة الكود التالي: #include <stdio.h> int main() { int n1, n2, n3, n4, n5, n6, n7, n8, n9; scanf("%d %d %d %d %d %d %d %d %d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); int row1 = n1 + n2 + n3; int row2 = n4 + n5 + n6; int row3 = n7 + n8 + n9; int col1 = n1 + n4 + n7; int col2 = n2 + n5 + n8; int col3 = n3 + n6 + n9; int diag1 = n1 + n5 + n9; int diag2 = n3 + n5 + n7; if (row1 == row2 && row2 == row3 && row3 == col1 && col1 == col2 && col2 == col3 && col3 == diag1 && diag1 == diag2) { printf("Awesome Numbers\n"); } if (row1 == row2 || row1 == row3 || row2 == row3) { printf("Awesome Rows\n"); } if (col1 == col2 || col1 == col3 || col2 == col3) { printf("Awesome Columns\n"); } if (diag1 == diag2) { printf("Awesome Diagonals\n"); } if (row1 == col1 || row1 == col2 || row1 == col3 || row1 == diag1 || row1 == diag2 || row2 == col1 || row2 == col2 || row2 == col3 || row2 == diag1 || row2 == diag2 || row3 == col1 || row3 == col2 || row3 == col3 || row3 == diag1 || row3 == diag2) { printf("Awesome Row and Column\n"); } if (col1 == diag1 || col1 == diag2 || col2 == diag1 || col2 == diag2 || col3 == diag1 || col3 == diag2) { printf("Awesome Column and Diagonal\n"); } return 0; } الكود في المثال، يقوم بقراءة تسعة أرقام من المستخدم ثم يقوم بحساب مجموع كل صف وكل عمود وكل قطر في المربع الذي تم إدخال الأرقام فيه، ثم يتحقق من عدد من الشروط ويطبع نص "Awesome" مختلف في كل شرط مطابق للشروط المحددة في السؤال. إذا كان مجموع الأرقام في الصف الأول يساوي مجموع الأرقام في الصف الثاني ويساوي مجموع الأرقام في الصف الثالث ويساوي مجموع الأعمدة الثلاث ويساوي مجموع القطرين، يتم طباعة "Awesome Numbers". إذا كان مجموع الأرقام في أي صف يساوي مجموع الأرقام في أي صف آخر، يتم طباعة "Awesome Rows". إذا كان مجموع الأرقام في أي عمود يساوي مجموع الأرقام في أي عمود آخر، يتم طباعة "Awesome Columns". إذا كان مجموع الأرقام في القطر الأول يساوي مجموع الأرقام في القطر الثاني، يتم طباعة "Awesome Diagonals". إذا كان مجموع الأرقام في أي صف يساوي مجموع الأرقام في أي عمود، يتم طباعة "Awesome Row and Column". إذا كان مجموع الأرقام في أي صف يساوي مجموع الأرقام في أي قطر، يتم طباعة "Awesome Row and Diagonal". إذا كان مجموع الأرقام في أي عمود يساوي مجموع الأرقام في أي قطر، يتم طباعة "Awesome Column and Diagonal". إذا لم يتحقق أي شرط من الشروط المحددة، لا يتم طباعة أي شيء. وستجد هنا مقالات ودروس حول لغة C
  8. إذا كان السؤال خاص بأحد دورات حسوب فأرجو منك طرح السؤال أسفل فيديو الدورة الخاص بالسؤال. وبخصوص سؤالك: الكائنات القابلة للتكرار هي الكائنات التي يمكن إنشاؤها أكثر من مرة في نفس الزمن، وتحتفظ بمعرف فريد لكل كائن. مثلاً، يمكن إنشاء عدة كائنات من نفس الفئة (Class) في لغة البرمجة، وكل كائن يمتلك نفس الخصائص والسلوكيات الأساسية ولكنها يحمل معرفاً فريداً لكل كائن. أما الكائنات غير القابلة للتكرار، فهي الكائنات التي يمكن إنشاؤها مرة واحدة فقط خلال البرنامج، وبمجرد إنشائها لا يمكن إنشاؤها مرة أخرى. على سبيل المثال، في لغة البرمجة، قد يكون لدينا ثابت (Constant) معين يحمل قيمة ثابتة، ولا يمكن تغييره أو إعادة إنشائه في أي مكان آخر في البرنامج. وفي الحقيقة، الفرق بين الكائنات القابلة للتكرار والغير قابلة للتكرار يتعلق بطبيعة الكائن وكيفية استخدامه في البرنامج، ويمكن أن يؤثر هذا الفرق على كيفية تصميم وتنفيذ البرنامج وكيفية استخدام الكائنات المختلفة. لنفترض أن لدينا برنامج لإدارة الموظفين. يمكن أن نستخدم الكائنات القابلة للتكرار لإنشاء كائنات الموظفين، حيث يمكن إنشاء موظفين جدد وحذفهم وتحديث معلوماتهم. ومثال على ذلك، يمكن أن يكون لدينا كائن "موظف" (Employee) يحتوي على الخصائص المختلفة مثل الاسم والراتب والعمر والمؤهلات الأكاديمية وما إلى ذلك، ويمكن استخدام الكائنات المختلفة لتمثيل الموظفين المختلفين في الشركة. أما بالنسبة للكائنات غير القابلة للتكرار، فقد يكون لدينا ثابت (Constant) لرقم الضريبة المضافة VAT في البرنامج، ويمكن استخدام هذا الثابت في جميع أنحاء البرنامج، ولكن لا يمكن تغيير قيمته خلال تنفيذ البرنامج. في هذه الحالة، يتم استخدام الثابت لتمثيل قيمة ثابتة لا تتغير خلال تنفيذ البرنامج، ولا يمكن إنشاء مثيلات جديدة من هذا الثابت.
  9. في تلك الحالة المشكلة تتعلق بحالة التشغيل (playing state) عند تغيير المسار الصوتي. باستطاعتك استخدام الحالة (state) في React لتتبع حالة التشغيل (playing state) وتحديثها عند الحاجة. مثلاً، يمكنك تعريف حالة (state) جديدة تسمى isPlaying في المكون الذي يحتوي على العناصر التي تتحكم في المشغل والتي يتم تمريرها إلى العنصر المسؤول عن تشغيل الصوت كخاصية isPlaying عند تغيير المسار الصوتي. في الأسفل مثال لإعادة ترتيب المكون الذي يتحكم في تشغيل الصوت بحيث يتبع حالة التشغيل بشكل صحيح: function AudioPlayer({ tracks }) { const [currentTrackIndex, setCurrentTrackIndex] = useState(0); const [isPlaying, setIsPlaying] = useState(false); const audioRef = useRef(null); const handlePlayPause = () => { if (isPlaying) { audioRef.current.pause(); } else { audioRef.current.play(); } setIsPlaying(!isPlaying); }; const handleNextTrack = () => { if (currentTrackIndex < tracks.length - 1) { setCurrentTrackIndex(currentTrackIndex + 1); setIsPlaying(false); audioRef.current.src = tracks[currentTrackIndex + 1].src; } }; const handlePrevTrack = () => { if (currentTrackIndex > 0) { setCurrentTrackIndex(currentTrackIndex - 1); setIsPlaying(false); audioRef.current.src = tracks[currentTrackIndex - 1].src; } }; useEffect(() => { audioRef.current.src = tracks[currentTrackIndex].src; setIsPlaying(false); }, [currentTrackIndex, tracks]); return ( <div> <audio ref={audioRef} /> <button onClick={handlePrevTrack}>Previous</button> <button onClick={handlePlayPause}>{isPlaying ? 'Pause' : 'Play'}</button> <button onClick={handleNextTrack}>Next</button> </div> ); } في المثال، يتم تتبع حالة التشغيل في isPlaying ويتم تحديثها عند الحاجة، مما يتيح للمشغل أن يشتغل تلقائيًا عند تحميل الملف الصوتي الجديد.
  10. بالإمكان تحقيق هذا السلوك عن طريق إضافة بعض الشروط والدوال لتعيين حالة التشغيل (playing state) بمجرد تحميل المسار الصوتي الجديد. فيتم تحميل الملف الجديد باستخدام دالة useEffect و setAudio, حيث تُحدث الدالة setAudio حالة audio الجديدة وتقوم بتشغيلها عند تحميل الملف الصوتي الجديد. ولتعيين حالة التشغيل (playing state) بشكل تلقائي بعد تحميل الملف الصوتي الجديد، يمكن إضافة المعلمة autoplay إلى الصوت الجديد قبل تعيين حالة audio الجديدة كما يلي: setAudio(new Audio(src)); audioRef.current = new Audio(src); audioRef.current.autoplay = true; // تشغيل الصوت تلقائياً وبذلك يتم ضبط حالة التشغيل (playing state) بشكل تلقائي بمجرد تحميل الملف الجديد، وعند النقر على الأزرار Previous أو Next يمكن تغيير المسار الصوتي الحالي والتشغيل التلقائي سيتم بشكل تلقائي.
  11. أرجو منك مشاركة الكود بعد التعديل وأيضًا قم بالضغط على علامة الكود <> لإضافة الكود الخاص بك عند كتابة السؤال.
  12. المشكلة تكمن في شرط الثاني والذي يفحص المجموعات الفرعية للصفوف ويطبع "Awesome Rows" في حالة وجود صفوف متساوية في المجموع. ومن خلال الوصول إلى الشرط الثاني في البرنامج، فإنه يحتاج إلى تحقق من المجموعات الفرعية للأعمدة والقطرين، ولكن لم تتم معالجتها في الشرط الثاني. لذلك، يمكنك إضافة بعض الشروط الإضافية لشرط الثاني للتحقق من صحة المجموعات الفرعية للأعمدة والقطري، وباستطاعتك استخدام نفس النهج الذي تم استخدامه في الشرط الأخير للتحقق من المجموعات الفرعية للصفوف والأعمدة والقطرين. باستخدام الشرط التالي لطباعة "Awesome Rows and Columns" عندما تتطابق المجموعات الفرعية للصفوف والأعمدة والقطرين. else if ((row1 == row2 && row2 == row3 && row3 == col1 && col1 == col2 && col2 == col3 && col3 == diag1 && diag1 == diag2) || (col1 == diag1 && row1 == col1 && row2 == col2 && row3 == col3 && row1 == diag2)) { printf("Awesome Numbers"); } else if (row1 == row2 || row1 == row3 || row2 == row3) { printf("Awesome Rows"); } else if (col1 == col2 || col1 == col3 || col2 == col3) { printf("Awesome Columns"); } else if (diag1 == diag2) { printf("Awesome Diagona1s"); } else if ((row1 == col1 || row1 == col2 || row1 == col3 || row1 == diag1 || row1 == diag2 || row2 == col1 || row2 == col2 || row2 == col3 || row2 == diag1 || row2 == diag2 || row3 == col1 || row3 == col2 || row3 == col3 || row3 == diag1 || row3 == diag2) || (col1 == diag1 && row1 != col1 && row2 != col2 && row3 != col3 && row1 != diag2)) { printf("Awesome Row and Column"); } else if (col1 == diag1 ) { printf("Awesome Column and Diagona1"); }
  13. 1- استخدام الأمر printf باستطاعتك استخدام الأمر printf لإخراج النص المطلوب "Awesome Diagona1s"، وتستخدم printf لإخراج نصوص ومتغيرات مختلفة على شاشة الكمبيوتر. يمكن استخدام printf على النحو التالي: #include <stdio.h> int main() { printf("Awesome Diagona1s"); return 0; } سيقوم هذا الكود بإخراج النص "Awesome Diagona1s" على شاشة الكمبيوتر. 2- استخدام الأمر puts هناك طريقة باستخدام الأمر puts لإخراج النص "Awesome Diagona1s"، وتعمل puts بنفس الطريقة الخاصة بـ printf، يتم استخدام puts على النحو التالي: #include <stdio.h> int main() { puts("Awesome Diagona1s"); return 0; } 3- استخدام الأمر putchar يتوفر الأمر putchar لإخراج النص "Awesome Diagona1s" حرفًا حرفًا، وهو عمليّ جدًا لإخراج النصوص بصورة محددة، كالتالي: #include <stdio.h> int main() { putchar('A'); putchar('w'); putchar('e'); putchar('s'); putchar('o'); putchar('m'); putchar('e'); putchar(' '); putchar('D'); putchar('i'); putchar('a'); putchar('g'); putchar('o'); putchar('n'); putchar('a'); putchar('1'); putchar('s'); return 0; } 4- استخدام متغير باستخدام متغير لحفظ النص "Awesome Diagona1s"، ثم إخراجه باستخدام printf. يتم استخدام المتغير كالتالي: #include <stdio.h> int main() { char myText[] = "Awesome Diagona1s"; printf("%s", myText); return 0; } في المثال تم إنشاء متغير من نوع char بعنوان myText، ثم يتم تعيين النص "Awesome Diagona1s" إلى المتغير، واستخدام printf لإخراج المتغير myText من خلال قالب النص "%s". @moh am أنت قمت بتعديل السؤال بعد فترة ولم يكن الكود متوفر، والمشكلة في الكود الذي قدمته هي أنه يحتوي على جملة شرطية تحتوي على شرطين متشابهين لاستدعاء النص "Awesome Diagona1s" وهما: else if (diag1 == diag2) { printf("Awesome Diagona1s"); } else if (col1 == diag1 ) { printf("Awesome Column and Diagona1"); } بالتالي، عند إدخال الأرقام التي تجعل المعادلات متساوية، سيتم استدعاء النص "Awesome Diagona1s" فقط، ولن يتم استدعاء النص "Awesome Column and Diagona1". لحل هذه المشكلة، يمكنك استخدام جملة شرطية جديدة تحتوي على الشرطين السابقين بشكل متفرع، مما يسمح بالحصول على الإخراجين المطلوبين على حد سواء. لذلك، يمكنك استبدال الجملة الشرطية التي تحتوي على الشرطين المتشابهين بالشكل التالي: else if ((diag1 == diag2) && (col1 == diag1)) { printf("Awesome Column and Diagona1"); } وبهذا يتم الحصول على الإخراجين المطلوبين عند تحقق الشرطين المتشابهين في نفس الوقت.
  14. لا تحتاج إلى إضافة متغير "char" للرمز "m" الذي يعبر عن الأمتار. يمكنك استخدام متغير "distance" الذي يحمل القيمة الناتجة لحساب المسافة بوحدة الكيلومترات. المشكلة الرئيسية في الكود هي تحويل الدقائق إلى الساعات بشكل صحيح. لذا، يجب عليك التأكد من تحويل الدقائق إلى الساعات بشكل صحيح قبل حساب المسافة بوحدة الكيلومترات.
  15. المشكلة في عدم تحويل وحدة الوقت من الدقائق إلى الساعات قبل حساب المسافة ، وبالتالي يتم حساب المسافة بوحدة غير صحيحة (وهي الأمتار بدلاً من الكيلومترات). لتحويل الدقائق إلى الساعات ، يمكنك استخدام العملية التالية: ساعات = دقائق / 60 ثم يمكنك استخدام قيمة الساعات لحساب المسافة بوحدة الكيلومترات بدلاً من الأمتار. علاوة على ذلك ، يجب عليك التأكد من قراءة البيانات الواردة من المستخدم بشكل صحيح وعدم استخدام متغيرات غير معرفة. يمكنك محاولة استخدام الكود التالي كنموذج لحل مشكلتك: #include <stdio.h> int main() { int time, velocity; scanf("%d %d", &time, &velocity); // convert minutes to hours double hours = time / 60.0; // calculate distance in kilometers double distance = hours * velocity; printf("%.2f", distance); return 0; } باستخدام المتغير "hours" لتحويل الدقائق إلى ساعات كمتغير من نوع "double" ، واستخدام المتغير "distance" كمتغير من نوع "double" أيضًا لحساب المسافة بوحدة الكيلومترات.ثم استخدام ".2f" في الأمر printf لطباعة الإجابة بدقة إلى رقمين بعد الفاصلة.
  16. لتمكين تغيير اللغة من الايقونة، عليك باستخدام الجافاسكريبت، من خلال استخدام Ajax لإرسال طلب إلى الخادم لتحديث لغة الموقع عند النقر على الايقونة. وإذا أردت استخدام الكود الخاص بك، فعليك بإجراء التعديلات التالية في نفس الملف كمثال: 1- استخدم الصفة data-lang لتعيين اللغة الحالية للمستخدم على الايقونة: @foreach (LaravelLocalization::getSupportedLocales() as $localeCode => $properties) <a rel="alternate" hreflang="{{ $localeCode }}" class="language_icon" data-lang="{{ $localeCode }}" href="{{ LaravelLocalization::getLocalizedURL($localeCode, null, [], true) }}"> <i class="fa fa-language" style="font-size: 48px"></i> </a> @endforeach 2- استخدم jQuery أو جافاسكريبت لتحديث اللغة على الايقونة عند النقر عليها: كود jQuery <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function () { $(".language_icon").click(function (e) { e.preventDefault(); var lang = $(this).attr("data-lang"); $.ajax({ url: "{{ route('locale.change') }}", type: "POST", dataType: "json", data: { lang: lang, _token: "{{ csrf_token() }}" }, success: function (data) { if (data.success) { $(".language_icon").attr("data-lang", data.locale); $(".language_icon i").removeClass().addClass(data.icon); } }, }); }); }); </script> كود جافاسكريبت <script> async function changeLanguage(lang) { try { const response = await fetch("{{ route('locale.change') }}", { method: "POST", headers: { "Content-type": "application/x-www-form-urlencoded" }, body: `lang=${lang}&_token={{ csrf_token() }}` }); const data = await response.json(); if (data.success) { const languageIcons = document.getElementsByClassName("language_icon"); for (let i = 0; i < languageIcons.length; i++) { languageIcons[i].setAttribute("data-lang", data.locale); const languageIcon = languageIcons[i].getElementsByTagName("i")[0]; languageIcon.classList.remove(); languageIcon.classList.add(data.icon); } } } catch (error) { console.error(error); } } </script> 3- تعريف المسار المستخدم في الطلب ajax في ملف routes/web.php: Route::post('locale/change', [App\Http\Controllers\LocaleController::class, 'changeLocale'])->name('locale.change'); 4- إنشاء دالة changeLocale() في LocaleController لتحديث اللغة وإرجاع الرد على الطلب ajax: public function changeLocale(Request $request) { $locale = $request->lang; if (in_array($locale, LaravelLocalization::getSupportedLocalesKeys())) { session()->put('locale', $locale); } $data = [ 'success' => true, 'locale' => $locale, 'icon' => $locale == 'ar' ? 'fa fa-language fa-flip-horizontal' : 'fa fa-language' ]; return response()->json($data); } بعد ذلك، يمكنك تخصيص الأيقونة بناءً على اللغة المختارة بواسطة المستخدم وإجراء أي تغييرات أخرى تريدها في التطبيق.
  17. أنت بحاجة إلى تثبيت Ruby و Ruby on Rails على ويندوز من خلال الخطوات التالية: 1- تحميل Ruby حيث يجب تحميل Ruby من الموقع الرسمي للغة: https://www.ruby-lang.org/en/downloads/ وعليك بتحديد الإصدار المطلوب (مثلا 2.7.3) ونوع النظام (32 بت أو 64 بت). بعد ذلك قم بتنزيل الملف وتثبيته. 2- تثبيت Ruby on Rails قم بفتح نافذة الأوامر (Command Prompt). استخدم الأمر التالي لتثبيت Rails: gem install rails انتظر حتى ينتهي التثبيت، ومن ثم تأكد من نجاح عملية التثبيت عن طريق تشغيل الأمر التالي: rails -v ستحصل على إصدار Rails المثبت على جهازك. وعليك بإعادة تشغيل برنامج VScode حتى يمكنك استخدام أوامر ruby.
  18. أولاً، Python لغة برمجة سهلة التعلم وتحظى بشعبية كبيرة في مجال التعليم وتطوير البرمجيات. بالإضافة إلى ذلك، فإن Python يدعم بنية البيانات الكائنية بطريقة أكثر بساطة وسهولة من Java، وهذا يجعل فهم المفاهيم الأساسية في البرمجة الكائنية أسهل بكثير. على سبيل المثال، إذا أردت إنشاء كائن في Python، يمكنك ببساطة إنشاء متغير وتعيين قيمة له، مثل: my_object = "Hello World" وهذا ينشئ متغيرًا جديدًا من النوع النصي ويعين قيمته على "Hello World". ويمكن الوصول إلى هذا الكائن وتعديله بسهولة بواسطة المتغير my_object. أما بالنسبة للجافا، فيتطلب إنشاء كائن تعريف كلاس مستقل له. فمثلاً، إذا أردت إنشاء كائن من النوع String، يتعين عليك كتابة الكود التالي: String myObject = new String("Hello World"); يتطلب هذا الكود كتابة عدة أسطر وكتابة اسم الكلاس بالإضافة إلى استخدام new لإنشاء الكائن. وأيصًا تحتاج Java إلى المزيد من الشفافية والتعقيد في تعريف البنية الكائنية والتعامل معها بالمقارنة مع Python. وبشكل أكثر تفصيلاً، إليك بعض الأمثلة التي توضح فوائد استخدام Python في تعليم البرمجة الكائنية: 1- إنشاء كائنات يمكن إنشاء كائنات في Python بسهولة باستخدام الدوال والتعابير الشائعة في اللغة، مثلاً، لإنشاء كائن من النوع Person يمكن كتابة الكود التالي: class Person: def __init__(self, name, age): self.name = name self.age = age person1 = Person("John", 30) person2 = Person("Sarah", 25) هنا يتم تعريف الكلاس Person وإنشاء كائنين منه باستخدام الدالة __init__ التي تستخدم لتهيئة الكائنات. ويتم تمرير المعلومات الخاصة بالكائن (الاسم والعمر) كمدخلات للدالة. 2- الوصول إلى الخصائص يمكن الوصول إلى الخصائص الموجودة في الكائنات بسهولة في Python، وهذا يسهل فهم المفاهيم الكائنية. على سبيل المثال، للوصول إلى خاصية الاسم في الكائن Person يمكن كتابة الكود التالي: print(person1.name) وسيتم طباعة "John" كقيمة للخاصية name في الكائن person1. 3- إنشاء دوال الكائن يمكن إنشاء دوال خاصة بالكائنات في Python بسهولة باستخدام الكلمة المفتاحية self، و لإضافة دالة تعيد السن للكائن Person يمكن كتابة الكود التالي: class Person: def __init__(self, name, age): self.name = name self.age = age def get_age(self): return self.age person1 = Person("John", 30) print(person1.get_age()) ستعيد الدالة get_age() العمر الخاص بالكائن، وسيتم طباعته باستخدام الدالة print()، وهكذا.
  19. أهلا بك زياد، حاول استخدام رقم هاتف آخر أو كتابة رقم بشكل صحيح بعد إختيار البلد الخاصة بك كما في الصورة التالية: وإذا استمرت المشكلة أرجو منك التواصل مع مركز المساعدة الخاص بأكاديمية حسوب وسيتم حل مشكلتك. أو التواصل مع مركز الدعم الخاص بمستقل إذا كنت تريد العمل على موقع مستقل.
  20. تتمثل الطريقة الأكثر شيوعًا في إنشاء صفحة فريدة لكل إعلان على الموقع، من خلال إنشاء صفحة HTML مخصصة تحتوي على معلومات المنتج المحددة، والتي يتم تحميلها وعرضها عند النقر على إعلان المنتج، ويمكن أن يكون لكل صفحة عنوان URL فريد ، مما يسمح للمستخدمين بالرجوع إليها في أي وقت. وإنشاء صفحة فريدة لكل إعلان يسهل التعامل مع محتوى الموقع وتحديثه وصيانته بشكل فعال. بالإضافة إلى تحسين الأداء العام للموقع من خلال تخزين المحتوى المخصص للصفحات على مستوى التخزين المؤقت للمتصفح، مما يحد من حجم البيانات المرسلة بين المتصفح والخادم. وفي حالة كون عدد الإعلانات كبيرًا جدًا ومتجددًا باستمرار، يمكن استخدام منصات إدارة المحتوى مثل WordPress لإنشاء صفحات معلومات المنتجات بسهولة وتحديثها بسرعة، ويمكن استخدام السمات والإضافات لتخصيص التصميم والوظائف وتوفير المزيد من الخيارات والمرونة في إدارة المحتوى. وإليك، مثال بسيط على كيفية إنشاء صفحة HTML فريدة لإعلان منتج وعرض معلومات المنتج المحددة: HTML: <!DOCTYPE html> <html> <head> <title>Product Ad Page</title> </head> <body> <h1>Product Name</h1> <img src="product-image.jpg" alt="Product Image"> <p>Product Description</p> <ul> <li>Feature 1</li> <li>Feature 2</li> <li>Feature 3</li> </ul> <p>Price: $10</p> </body> </html> كما ترى تم إنشاء صفحة HTML بسيطة تحتوي على اسم المنتج، صورة المنتج، وصف المنتج، وميزات المنتج، وسعر المنتج. وبإمكانك تخصيص المعلومات الموجودة على الصفحة حسب الاحتياجات الخاصة بك، ويجب أن تحتوي صفحة المنتج على عنوان URL فريد ، على سبيل المثال: http://example.com/product-page. ولتحقيق ذلك، يجب إنشاء ملف HTML فريد لكل منتج وتخزينه في مجلد على الخادم الذي يمكن الوصول إليه عند النقر على الإعلان. بالإضافة إلى ذلك، باستطاعتك استخدام لغة البرمجة مثل PHP لتوليد محتوى الصفحة الديناميكي لتمكين المستخدمين من تفاعل مع صفحات المنتج بطريقة مخصصة أكثر، كالتالي: HTML: <!DOCTYPE html> <html> <head> <title>Product Ad Page</title> </head> <body> <h1><?php echo $product_name; ?></h1> <img src="<?php echo $product_image; ?>" alt="Product Image"> <p><?php echo $product_description; ?></p> <ul> <?php foreach ($product_features as $feature) : ?> <li><?php echo $feature; ?></li> <?php endforeach; ?> </ul> <p>Price: <?php echo $product_price; ?></p> </body> </html> PHP: <?php // استدعاء بيانات المنتج من قاعدة البيانات أو ملف معين $product_name = "Product Name"; $product_image = "product-image.jpg"; $product_description = "Product Description"; $product_features = array("Feature 1", "Feature 2", "Feature 3"); $product_price = "$10"; ?> وأيضًا بإمكانك استخدام React مع Express لإنشاء تطبيق ويب ديناميكي. حيث React هي مكتبة خاصة بالواجهة الأمامية (Front-End) لإنشاء واجهة المستخدم، ويستخدم Express كإطار عمل لجانب الخادم (Back-End) لإنشاء خدمات الويب وإدارة الملفات والاتصالات مع قاعدة البيانات. حيث يتم استخدام Express لإنشاء خدمات ويب API لإرجاع بيانات المنتجات من قاعدة البيانات، واستخدام React لإنشاء واجهة المستخدم وتحميل بيانات المنتجات باستخدام خدمات ويب API. مثلاً، استخدام fetch() API المدمجة في React لاستدعاء بيانات المنتجات من Express API، وتصميم واجهة المستخدم باستخدام JSX وتخصيصها باستخدام العناصر المتاحة في React مثل الأشكال والأزرار والجداول والقوائم وغيرها. وبالطبع، يمكن استخدام Express لتقديم ملفات HTML والملفات الثابتة (مثل الصور والأيقونات وملفات CSS وJavaScript) والوظائف الأخرى المتاحة للخادم. وإليك مثال على كيفية استخدام React و Express و React Router معًا لإنشاء تطبيق ويب ديناميكي: في ملف server.js (Express): const express = require('express'); const app = express(); const PORT = process.env.PORT || 3001; // خدمة ويب API لاسترداد بيانات المنتجات app.get('/api/products', (req, res) => { const products = [ { id: 1, name: 'Product 1', price: 10.99 }, { id: 2, name: 'Product 2', price: 15.99 }, { id: 3, name: 'Product 3', price: 20.99 }, ]; res.json(products); }); // يقوم Express بتقديم ملفات الويب الثابتة في المجلد public app.use(express.static('public')); // استمع على المنفذ المحدد app.listen(PORT, () => console.log(`Server listening on port ${PORT}`)); في ملف App.js (React): import React, { useState, useEffect } from 'react'; import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom'; import './App.css'; function App() { const [products, setProducts] = useState([]); useEffect(() => { fetch('/api/products') // استدعاء API المنتجات من Express .then(response => response.json()) .then(data => setProducts(data)) .catch(error => console.error(error)); }, []); return ( <Router> <div className="App"> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/products">Products</Link> </li> </ul> </nav> <Switch> <Route path="/products"> <Products products={products} /> </Route> <Route path="/"> <Home /> </Route> </Switch> </div> </Router> ); } function Home() { return ( <div> <h2>Home</h2> <p>Welcome to our website!</p> </div> ); } function Products({ products }) { return ( <div> <h2>Products</h2> <ul> {products.map(product => ( <li key={product.id}> {product.name} - ${product.price} </li> ))} </ul> </div> ); } export default App;
  21. ما تقصده هو الوصول للقسم الأول من الدورات الأخرى مما يعني أنك في دورة تطوير واجهات المستخدم ستتمكن من الوصول للمسار الأول وهو يحتوي على التالي: أساسيات تطوير الويب أساسيات HTML أساسيات CSS أساسيات JavaScript أساسيات jQuery بناء موقع شخصي بالطبع يمكنك تنفيذ أي واجهة أمامية تريدها من خلال HTML, CSS, JS ولكن باستخدام مكتبات وإطر عمل مثل jQuery و React و Vue.js ستتمكن من تنفيذ واجهات أمامية تفاعلية متقدمة وأيضًا بشكل أسهل بمراحل. وما أنصحك به هو تعلم Vue.js حيث أنها تتوافق مع إطار لارافيل الخاص بلغة PHP وهي سهلة جدًا في التعلم. لكن يجب التنبيه إلى أنّ المسار الأول يشرح الأساسيات فقط، لذلك عليك بالتطبيق بمفردك أو الإشتراك في الدورة لتتمكن من رؤية باقي المسارات.
  22. بجانب ما تم ذكره، المشاريع المطلوب تسليمها هي المشاريع التي يتم كتابة كود بها، حيث ستجد في نهاية كل مسار متعلق البرمجة أو قواعد البيانات تطبيقات عملية نهائية ومن خلالها يتم التطبيق على ما تم دراسته في المسار. لذلك قم بالتطبيق بمفردك أولاً وإختبار نفسك ثم مشاهدة الحل الخاص بالمدرب والتطبيق معه ومقارنة الحل الخاص بك ثم رفعه على GitHub. وأيضًا إحتفظ بالملفات الخاصة بمشاريع سكراتش في حال طُلبت منك، أو أية ملفات أخرى خاصة بالتطبيقات العملية، وأنصحك بإنشاء مجلد خاص بالدورة وتقسيمه تبعًا لكل لمسار، حتى يسهل عليك ترتيب المشاريع والملفات.
  23. كما ذكرت لك، يمكنك الدفع بالجنيه المصري من خلال الفيزا الخاصة بك وسيتم التحويل إلى الدولار عند الدفع وهناك رسوم 10% تسمى رسوم تحويل عملة في البنوك المصرية، وقد أشرت لك بالأسباب والطرق في النقاش التالي: حيث أن المشكلة ليست في الدفع بالجنيه بل في نوع الفيزا إذا ظهرت لك رسالة تم رفض البطاقة، حيث يجب أن تكون من نوع debit أو credit. وإذا كانت من النوع الذي تم ذكره فقد تكون المشكلة من البنك الخاص بالبطاقة وعليك بالتواصل معهم. والأفضل هو التواصل مع لمركز المساعدة الخاص بأكاديمية حسوب طالما أنك تواجه مشكلة في الدفع.
  24. ربما البطاقة من نوع Prepaid أي مسبقة الدفع أي ليست مربوطة بحساب بنكي بل يتم شحنها صحيح؟ ما يجب استخدامه هو بطاقة من نوع debit أو credit وذلك يتطلب فتح حساب بنكي من خلال مفردات مرتب أو إثبات دخل، وإذا كنت طالب فسيتم فتح الحساب بكارنيه الجامعة أو إثبات أنك طالب بكل سهولة. أو ربما المشكلة في أنّ الفيزا الخاصة بك لا تدعم الشراء بالدولار من خارج مصر أو هناك حد معين للشراء على الفيزا.
  25. عملة الفيزا بالجنيه المصري ولا يشترط عليك فتح حساب دولاري، وعند الدفع بالجنيه يتم التحويل إلى دولار وذلك هو سبب رسوم تحويل العملة التي ذكرتها وهي 10%.
×
×
  • أضف...