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

سمير عبود

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

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

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

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

    34

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

  1. مرحباً @belkaditouts لا تقلق فالرسالة التي تم إرسالها لك توحي أن طلبك قيد المُراجعة و سيتم إرسال كافة الخطوات اللازمة و توضيحها لك في أقرب وقت على نفس البريد الإلكتروني الذي إشتركت به، إن لم يتم ذلك يُمكنك دائماً الإستفسار عن الأمر من خلال مركز المساعدة في حسوب : https://help.hsoub.com/ ثم فتح تذكرة لمُشكلتك و سيتم الرد عليك في أقرب وقت، أتمنى لك التوفيق.
  2. مرحباً مُحمد، من أشهر الشهادات في لغة python هي تلك التي تُقدمها OpenEDG Python Institute و هي خمس شهادات لمبرمجي لغة بايثون و تبدأ من شهادة مبرمج مبتدئ إلى شهادة مبرمج خبير: 1- شهادة مبرمج بايثون مبتدئ | PCEP: معلومات عن الاختبار: رمز الإختبار PCEP-30-01. مدة الإختبار 45 دقيقة. يتألف الإختبار من 30 سؤال. نوع الأسئلة هو إختيار من متعدد. نسبة النجاح 70%. الإختبار باللغة الإختبار باللغة الإنجليزية. سعر الاختبار 59$. يتمحور الإختبار حول المفاهيم الأساسية في البرمجة بلغة البايثون. لمزيد من المعلومات يُمكنك زيارة هذا : الرابط 2- شهادة مشارك معتمد في لغة بايثون | PCAP: معلومات عن الاختبار: رمز الإختبار PCAP-31-02. مدة الإختبار 65 دقيقة. يتألف الإختبار من 40 سؤال. نوع الأسئلة هو إختيار من متعدد. نسبة النجاح 70%. الإختبار باللغة الإختبار باللغة الإنجليزية. سعر الإختبار 295$. يتمحور الإختبار حول أساسيات اللغة بالإضافة إلى بعض المفاهيم المتقدمة كالإستثناءات و التعامل مع المكتبات بالإضافة إلى مفاهيم البرمجة الكائنية بلغة بايثون، لمزيد من المعلومات يُمكنك زيارة هذا : الرابط 3- شهادة مبرمج بايثون محترف 1 | PCPP: معلومات عن الإختبار: رمز الإختبار PCPP-32-201. مدة الإختبار 65 دقيقة. يتألف الإختبار من 40 سؤال. نوع الأسئلة هو إختيار من متعدد. نسبة النجاح 70%. الإختبار باللغة الإنجليزية. سعر الإختبار 195$. يتمحور الإختبار حول البرمجة الكائنية بالإضافة إلى التعامل مع الملفات و المكتبات و قواعد البيانات و برمجة الواجهات الرسومية، لمزيد من المعلومات يُمكنك زيارة هذا : الرابط 4– شهادة مبرمج بايثون محترف 2 | PCPP: معلومات عن الإختبار: رمز الإختبار PCPP-32-201. مدة الإختبار 65 دقيقة. يتألف الإختبار من 40 سؤال. نوع الأسئلة هو إختيار من متعدد. نسبة النجاح 70%. الإختبار باللغة الإنجليزية. سعر الإختبار 195$. يتمحور الإختبار حول تثبيت و إنشاء المكتبات بالإضافة إلى أنماط التصميم و أساسيات التعامل مع قواعد بيانات MySql بلغة بايثون، لمزيد من المعلومات يُمكنك زيارة هذا : الرابط 5– مبرمج و خبير بايثون | CEPP: سوف تمنح هذه الشهادة بدون إجراء أي اختبار وذلك لأنك اجتزت جميع الاختبارات وحصلت على كافة الشهادات السابقة. لا أدري إن كانت هناك شهادات مجانية لكن يُمكن البحث عن مبادرة مليون مبرمج عربي فَلَرُبما تجد مسار يُناسبك. نصيحة مني لا تبحث عن الشهادات و إنما ابحث عن إكتساب الخبرة و تعلم ما يفيدك لبناء معرض أعمال و سيرة ذاتية قوية. بالتوفيق.
  3. مرحباً محمود، أظن أنك تستخدم PDO، بما أنك تريد الإستعلام عن عدد السجلات التي تم تخزينها في اليوم الحالي فلم لا تستخدم الدالة count التابعة للغة sql بالشكل التالي: <?php $checkLog = $conn->prepare("SELECT count(id) FROM logs WHERE DATE(date) = CURDATE() AND user = ?"); // prepare the query $checkLog->execute([$SUI]); $rowCount = $checkLog->fetchColumn(); // جلب عدد الصفوف // عمل الشرط المناسب حسب عدد الصفوف if($rowCount < 5) { echo "Still Yes"; }else{ echo "done today"; } المفروض إذا كان عدد الصفوف أصغر من 5 يتحقق الشرط و بالتالي يطبع عبارة still yes لكن إن كان أكبر من أو يُساوي 5 يطبع done today، بالتوفيق.
  4. مرحباً عبد الواحد، بإمكانك برمجة إرسال بريد إلكتروني فمُعظم اللغات تُوفر و تُسهل هذه الميزة سواء عن طريق إستخدام دالة موجودة في اللغة نفسها أو إستخدام مكتبة أو إضافة ففي ال php مثلا توجد دالة mail او إستخدام إضافة تحتوي على العديد من الخصائص ك PHPMailer ايضاً مُعظم أطر العمل تُسهل هذه الخاصية فمثلاً إطار عمل laravel يُوفر واجهة ثابتة للتعامل مع إرسال بريد: Mail و قد شرحنا هذه الميزة في دورة لارافيل في مسار تطوير موقع إعلانات مبوبة جزء التواصل مع المُعلن. بقية اللغات وأطر العمل الخاصة بها تُوفر أيضاً أشياء مُشابهة مثل البايثون و نود جي أس و غيرها ... مثال عن إستخدام دالة mail: <?php // The message $message = "Line 1\r\nLine 2\r\nLine 3"; // In case any of our lines are larger than 70 characters, we should use wordwrap() $message = wordwrap($message, 70, "\r\n"); // Send mail('caffeinated@example.com', 'My Subject', $message); ?> بإمكانك الإستفادة أكثر بالبحث عن طريق مُحرك البحث بإسم اللغة او الإطار الذي تعمل عليه يتبعها send email مثال: laravel send email و سيُرشح لك عدة مقالات و مقاطع مُفيدة ستُساعدك بالتوفيق.
  5. مرحباً عبد الله، معنى العرض المُستبعد هو أن المشروع الذي قدمت عليه هذا العرض تم توظيف مُستقل آخر عليه، بطبيعة الحال عند نشر مشروع جديد من عميل فإن مجموعة من العروض يتم تقديمها على هذا المشروع و في الأخير يتم توظيف شخص واحد وهو المُستقل الذي تم قبول عرضه، بقية العروض تُصبح تلقائياً مُستبعدة، هناك فترة مُحددة إن لم يتم فيها قبول أي عرض من طرف صاحب المشروع يتم إغلاق المشروع تلقائياً و يُمكن فتحه مرة ثانية من قبل العميل. مايؤثر عليك كمُستقل هو التقييمات التي تتلقاها ( التقييم الكلي بالإضافة إلى التقييمات التفصيلية) و أيضاً مُعدل إكمالك للمشاريع (كل ماكان كبير كل ما كان أحسن) إضافة إلى الأوسمة التي تتلقاها من المنصة ( مُستقل مُلتزم، مُستقل مُميز .. ) هل تعلم ما معنى أن العروض المُستبعدة 100% معناه أن كل العروض التي قدمتها استبعدت، و في هذه الحالة لن يحدث شيء ما دام أنك تستطيع التقديم على مشاريع. هناك 5 حالات للعروض الخاصة بك: بانتظار الموافقة: مشاريع قدمت عليها و لم يتم توظيف اي مستقل عليها و لم يتم إغلاقها. قيد التنفيذ: التي قُبلت فيها و تعمل عليها و لم تُنهيها. المكتملة: عملت عليها و أكملتها المستبعدة: التي قدمت عليها و تم توظيف مستقلين غيرك ليعملو عليها. مغلقة: تم إغلاقها لتجاوز الفترة المُحددة و عدم توظيف أي مُستقل عليها. ولكل حالة نسبة من العدد الإجمالي للعروض التي قدمتها ككل. بالتوفيق.
  6. مرحباً مروان، السبب أن المتغير result عبارة عن كائن و عندما تقوم بفحص المتغير في الشرط: <?php if($result){ // code } فإن الشرط مُحقق في كل الأحوال. الحل هناك عدة طرق من بينها: <?php // here prev code $stmt = $conn->prepare("SELECT * from users where name = ?"); // prepare the query $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); // get the mysqli result if ($result->num_rows > 0) { echo "success"; } else { die("Invalid Username or Password Please Try Again"); } او <?php // prev code $stmt = $conn->prepare("SELECT * from users where name = ?"); // prepare the query $stmt->bind_param('s', $name); $stmt->execute(); if ($stmt->fetch()) { echo "success"; } else { die("Invalid Username or Password Please Try Again"); } فالخطأ كله في الشرط. بالتوفيق.
  7. مرحباً عبد الواحد، أنصحك بمتابعة المسار الجديد لأن به معلومات جديدة و مفيدة لك خصوصاً أن في هذا المسار استخدمنا آخر إصدار ، بالإضافة إلى أن المشروع التطبيقي المدرج في المسار يشمل و يضم معظم المفاهيم التي ستتعلمها خلال المسار ، إضافة إلى استخدام برنامج laragon الذي سيساعدك كثيرا في التطوير فيمكنك من خلاله التغيير بين خادم Apache إلى خادم nginx و التحكم في إصدارات الphp بسهولة إضافة إلى أنه يهيء لك الخادم الافتراضي بنفسه فبمجرد إنشائك للمشروع بإسم مثلاً cms ستتمكن من تجربته إنطلاقا من الرابط cms.test عوضاً عن عمل هذه النقطة يدوياً و العديد من الميزات الأخرى، و يأتي معه كل من برنامج heidisql و cmder أنا شخصياً أستعمل هذه البرامج في التطوير و ساعدتني كثيرا بالتوفيق.
  8. مرحباً علي، نعم لقد تم تحديث المسار، و اقصد به مسار أساسيات إطار العمل لارافيل و تم شرح كافة النقاط الأساسية في الإطار وتم العمل أيضا على آخر إصدار موجود حاليا وهو 8.x لكن النقاط العريضة في الإطار نفسه تبقا نفسها و إنما الإصدارات تأتي بتحديثات طفيفة و إضافات لا تؤثر على عملك بالإطار و تستطيع تعلمها بعد فهمك للأساسيات. بقية المسارات لم يتم تحديثها و أظن أن فريق الأكاديمية يعمل على تحديث المسارات المهمة و أخص بالذكر المسار الأول أما المسارات العملية و التطبيقية فمسار إنشاء متجر للكتب تم إضافته منذ فترة قصيرة و لا يحتاج إلى تحديث بالإضافة إلى مسار إنشاء restful API تم تحديثه منذ فترة قليلة لذلك فالفريق لا يوفر طاقاته في تحديث المسارات و إنما يعمل جاهدا لتوفير مادة تعليمية جيدة لطلاب الأكاديمية أتمنى لك التوفيق.
  9. نعم هذا ما انصحك به، لكن في نفس الوقت قم بالإطلاع على المشاريع المعروضة، و محاولة عملها بغية التطبيق على ما تعلمته إن أردت ذلك و الإهتمام بحسابك على المنصة.
  10. مرحباً أحمد، لم أفهم سؤالك جيدا إذا كنت تريد برنامج تكتب عليه برامج بلغة c أو لغة c++ بإمكانك إستخدام برنامج Code Blocks ما تحتاج إلى فهمه أن لغة سي تحتاج إلى برنامج ثاني إسمه مترجم (compiler) و مهمته هي تحويل الشيفرات من لغة سي إلى لغة آلة لتنفيذها و من أشهرها : GCC Visual ++c على العموم بإمكانك تنصيب محرر نصوص أو أكواد ثم تنصيب المترجم لوحده لكن برنامج code Blocks يوفر الإثنين و هو عبارة عن بيئة عمل متكاملة مفتوحة المصدر، ويتم إستخدام المترجم GCC من خلال المشروع MinGW لترجمة أكواد السي، ويعتبر خيار جيد للبرمجة بلغة الس ويمكنك تحميل الحزمة البرمجية الخاصة بـ Code Blocks من خلال الموقع الخاص به ثم تختار نظام التشغيل الذي تستخدمه حاليا، وتختار الإصدار الذي ينتهي بـ mingw-setup، وهو الإصدار الذي يحتوي على المترجم GCC. بالتوفيق.
  11. مرحباً خالد، انا لا انصحك بدخول مجال العمل الحر حاليا و إنما بالتركيز أكثر على إكتساب أكبر قدر من الخبرة و إنجاز أكبر عدد من المشاريع لبناء معرض أعمالك و ذلك لجذب العملاء لتشغيلك، بإمكانك البدأ في الإهتمام بحسابك الشخصي على منصة مستقل و ذلك بوضع المهارات التي تمتلكها و وضع المشاريع التي قد أنهيتها مع رابط للتصفح المباشر إن أمكن بالإضافة إلى وضع نبذة تعريفية عنك و ذلك لجذب العملاء و طمأنتهم بإكتسابك للخبرات. بإمكانك متابعة المشاريع التي تتقاطع مع المهارات التي اكتسبتها مثل تصميم صفحات الهبوط و ذلك بعد إنهائك للدورة فهي مطلوبة بكثرة و محاولة إنجازها بينك و بين نفسك و في هذا المرحلة سيتطور مستواك بالإعتماد على نفسك و إنجاز مشاريع حقيقية إن وجدت انك قادر على إنجاز مشاريع بهذا الشكل يمكنك حينها التقديم و في هذه المرحلة هناك بعض المقالات على الأكاديمية و على مدونة مستقل أنصحك بالإطلاع عليها لأنها ستعرفك على مجال العمل الحر و كيفية إقناع عملائك و ما إلى ذلك ككتابة عرض يجذب نظرة العميل، الإهتمام بمعرض الأعمال ... إضافة إلى أنه إذا قمت بمتابعة دورة الphp و إطار لارافيل و فهمت و تعلمت إنجاز المشاريع بنفسك ستكون قد كسبت مهارة مطلوبة بكثرة لأن العديد من المشاريع تطلب إطار لارافيل ليس فقط على مستوى العمل الحر و إنما العديد من الشركات أيضاً لذلك إن أصبحت محترف في إنجاز مشاريع بإطار عمل لارافيل ستكون قد قطعت شوطاً كبيرا في حصولك على مشاريع على منصات العمل الحر. بالتوفيق.
  12. مرحباً بك، في الحقيقة تعليمة switch تعمل بشكل صحيح و ذلك لأن أي قيمة يتم إرجاعها في المتغير num عبارة عن سلسلة نصية (string) و بالتالي لم تُطابق أي حالة من الحالات الموجودة (cases) في تعليمة switch. إضافة إلى ذلك لا توجد تعليمة default فإذا لم تتحقق أي حالة من الحالات سيتم تنفيذها: default: message.innerHTML = "anything"; break; بإمكانك تحويل النوع من string إلى int بحيث مثلا: حالياً إذا أدخل المُستخدم 2 فإن القيمة التي ستُخزن في المُتغير num ستكون "2" لكن يُمكننا تحويلها إلى 2 عن طريق إستخدام الدالة parseInt كما هو موضح أدناه: var num = parseInt(document.getElementById("number").value); ليُصبح الكود في النهاية بهذا الشكل: function f1() { "use strict"; var num = parseInt(document.getElementById("number").value); var result = num * 600; var message = document.getElementById("m"); switch (num) { case 1 : message.innerHTML = "1/1/2020"; break; case 2 : message.innerHTML = "2/2/2020"; break; case 3 : message.innerHTML = "3/3/2020"; break; case 4 : message.innerHTML = "4/4/2020"; break; case 5 : message.innerHTML = "5/5/2020"; break; default: message.innerHTML = "anything"; break; } } بالتوفيق.
  13. مرحباً خالد، دورة تطوير واجهات المستخدم المقدمة من أكاديمية حسوب تتمحور فقط حول الواجهة الأمامية (front-end) و التقنيات المستخدمة في هذا الجزء و تهتم أيضا بالجانب التطبيقي له و لا توجد بها مسارات خاصة بجانب مخدم الويب (back-end) لكن توجد دورات تهتم بهذا الجانب الا و هي دورة تطوير تطبيقات الويب بإستعمال لغة PHP دورة تطوير تطبيقات الويب بإستعمال لغة Ruby بما أنك مشترك في أحد الدورات فسوف تستطيع الوصول إلى المسارات الأولى من هذه الدورات و بقية دورات الأكاديمية أما لمشاهدة كل مسارات الدورة فيجب الإشتراك فيها، بإمكانك أخذ فكرة مبدئة قبل الإشتراك في أي دورة و ذلك من خلال مشاهدة المسار الأول و بعدها بإمكانك أخذ قرار مناسب لك. بالتوفيق.
  14. مرحباً بك، بإمكانك أيضاً إستخدام الطريقة التعاودية فكما تعلم أن: n! = n * (n - 1)! و سيكون البرنامج بهذا الشكل: fprintf('%d! = %d\n', 6, fact(6)); % output: 6! = 720 function x = fact(n) if n<=1 % شرط التوقف x = 1; % نُعيد 1 else x = n * fact(n-1) ; % الدالة تُنادي على نفسها end بإمكانك تجربة البرنامج من خلال هذا الرابط: هنا ثم إضغط Run شرح: بما أن n = 6 فعند دخول الدالة (fact(6: فإن الشرط لن يتحقق و بالتالي سيتم تنفيذ جزء و إلا و بالتالي (x = 6 * fact(5 و هنا سيتم إستدعاء الدالة fact ثانيةً: 5 لن يُحقق الشرط و بالتالي سيتم إرجاع fact(4) * 5 و بالتالي سيُصبح 6 * 5 * (fact(4 و هكذا إلى أن نصل إلى 1 الذي يُحقق الشرط و هنُا سيتم إرجاع 1 و بالتالي x سيُصبح 6 * 5 * 4 * 3 * 2 * 1 اي: x = 6 * 5 * 4 * 3 * 2 * 1 = 720 و هكذا بالنسبة لأي عدد آخر، بالتوفيق.
  15. مرحباً بك، بعد ان تقوم بإنهاء و فهم كافة مسارات الدورة و دروسها بالإضافة إلى القيام بالتطبيقات العملية و المشاريع الموجودة في المسارات ستقوم بالتواصل مع مركز مساعدة حسوب لطلب الشهادة و قد يتم تحويلك إلى جهة مختصة قد تطلب منك روابط للمشاريع التي أنشأتها خلال الدورة لمعاينة مستواك ثم قد يطللبو منك حساب Skype الخاص بك على حسب الوضعية لتحديد موعد للإختبار و سيختبرونك على حسب نوع الدورة قد يسألونك أسئلة نظرية لكي يتأكدو من أنك استفدت و فهمت دروس الدورة و قد يُطلب منك إنجاز مشروع أو ما شابه يتعلق بمحتوى الدورة و كل هذا لقياس مستواك و إثبات قدراتك و هل تستحق فعلاً الشهادة ام لا، إن تمكنت من إجتياز الإمتحان سيتم منحك الشهادة لكن إن لم تنجح ستحصل على فرص أخرى لتطوير مستواك من خلال مراجعة الدروس و إعادة المحاولة. ركز بشكل كبير على فهم الدروس كثيرا و لا تجعل همك مُتركزا على الشهادة أو إتمام الدورة فقط لأن الهدف الأول لإشتراكك في الدورة ليس الشهادة و إنما محتوى الدورة و فهم الدروس. بخصوص أسئلة الإمتحان فهي تتعلق بما تم تلقينه لك من خلال الدروس قد تكون الأسئلة نظرية أو تطبيقية أو الإثنين معاً. اتمنى لك التوفيق.
  16. مرحباً بك، بإمكانك متابعة منصة بعيد فشركة حسوب تنشر عليها العديد من الوظائف في مختلف المجالات للعمل معهم ضمن الفريق و تقوم بالتقديم على الوظيفة من خلال إرسال سيرتك الذاتية و الإجابة على بعض الأسئلة من خلال تقديم عرضك لهم و إن وجدو أنك الشخص المناسب لذلك المنصب سيتواصلون معك لإجراء مقابلة و إن جرت الأمور على ما يرام ووجدو أنك ستُقدم إضافة لهم و انك الشخص الذي يبحثون عنه سيقومون بتوظيفك. بالتوفيق.
  17. بإمكانك البدأ إنطلاقا من الشرح أعلاه و إذا واجهتك أي مشكلة يمكنك حينها الإستفسار عنها و سنساعدك
  18. يتم إضافة هذه التعليقات لمُساعدة مُحرر الأكواد و عدم إعطاء تحذيرات متعلقة بهذه الأشياء على سبيل المثال لو كتبنا في برنامج Brackets: console.log('hello'); سيُعطي البرنامج الإنذار أو التحذير التالي: أي أنه لم يتعرف على console لكن الكود سيعمل في المتصفح بشكل جيد و سيطبع hello، لكن لتلافي هذا الإنذار يُمكن كتابة: window.console.log('hello'); و سيختفي الإنذار، أو يُمكننا إضافة التعليق التالي: /*global console*/ في بداية الملف. فكما تلاحظي هذه الأسطر فقط لمُساعدة المُحرر. هذا يعتمد على الحالة التي تواجهك و على الشيء الذي تريدين القيام به مثلا إذا كان لدينا: <div class="test">A</div> <div class="test">B</div> <div>C</div> <div class="test">D</div> <div class="test">E</div> و نريد تغيير النص لكل div يحمل الصنف test إلى "asma" سنقوم ب: window.onload = function () { document.querySelectorAll("div.test").forEach(elm => elm.innerText = "asma") } بالتوفيق.
  19. مرحباً بك، لم يتغير شيء لأنه لا يوجد في المستند أي عُنصر يحمل المُعرف test حتى يتغير النص الموجود داخل الdiv يجب إضافة الid المطلوب كما هو موضح أدناه: <div class="test" id="test">C</div> أو بإمكانك تغيير طريقة تحديد العُنصر عن طريق إسم الصنف: window.onload = function () { document.getElementsByClassName("test")[0].innerHTML = "asma"; } التابع getElementsByClassName يأخذ كمعامل إسم الصنف و يُرجع مصفوفة تضم كل العناصر التي تملك صنف التنسيقات المطلوب. هناك عدة توابع أخرى يُمكنك إستخدامها ك querySelector getElementsByTagName بالتوفيق.
  20. مرحباً بك، لعمل هذا الشيء تحتاج إلى إنشاء جدول تُخزن فيه تفضيلات كل مستخدم مبدئيا فإن الأعمدة التي يمكننا وضعها في الجدول هي كالآتي: id مُعرف التفضيلة user_id مُعرف المُستخدم صاحب التفضيلة و يمكن أيضا إنشاء مفتاح ثانوي يربط هذا العمود بجدول المستخدمين model_type: من النوع النصي لتفريق نوع التفضيلة إن كانت كتاب أو مقال أو منتج أو أي شيء آخر model_id: مُعرف الشيء الذي قام المستخدم بتفضيله فإن كان كتاب فسيتم تخزين مُعرف الكتاب فيه بإمكانك إضافة أعمدة أخرى مثلا لحفظ تاريخ إضافة التفضيلة و غيرها. عندما يختار المُستخدم إضافة منتج للمفضلة فإنه يجب عليك إنشاء إستعلام لإضافة سجل جديد في جدول التفضيلات بحيث يكون: user_id هو مُعرف المستخدم الذي يحاول إضافة المنتج للمفضلة model_type سيكون إسم الصنف و في هذه الحالة سيكون Product model_id سيكون معرف المنتج الذي يحاول المستخدم إضافته للمفضلة و عند عرض السجلات الموجودة في مفضلة المستخدم الخاصة بالمنتجات مثلاً تحتاج إلى عمل إستعلام تحدد فيه تفضيلات المستخدم و بإستخدام (joins) يمكنك دمج جدول المنتجات مع جدول التفضيلات لجلب ما قام المستخدم بتفضيله من منتجات. بالتوفيق.
  21. و عليكم السلام و رحمة الله و بركاته، أظن أن المُشكلة التي تُواجهها متعلقة بحساب البايبال يُمكنك مراسلة الدعم الفني في بايبال لمعالجتها لأنه قد تحدث بعض الأمور تجعل النظام الخاص بِبايبال يَحُد من بعض خصائص الحساب إلى حين التأكد ، فقط قم بمُراسلة الدعم الفني لبايبال و اشرح لهم المُشكلة و سيقومون بتنشيط حسابك قد حدثت لي مُشكلة مشابهة و عندما راسلت الدعم الفني لمُستقل أخبروني أن المُشكلة ليست من طرفهم بل من طرف بايبال و عندما راسلت بايبال قالو انهم عاينو الحساب الخاص بي و قد صار الحساب بإمكانه الإرسال و الإستقبال بشكل عادي و عندما حاولت الإرسال مُجددا تم الإرسال بشكل طبيعي، لذلك حاول التواصل مع الطرفين و ستُحل المُشكلة في أقرب وقت. بالتوفيق.
  22. مرحباً بك، الخطأ الذي يظهر هو كالتالي: cannot convert 'int (*)[3]' to 'int**' ما يعني أن الدالة print المفروض تستقبل وسيط من النوع **int لكن ما تم تمريره هو int (*)[3] و هو نوع المُتغير mm بطبيعة الحال يجب توحيد الأنواع حتى لا تحدث أخطاء هناك طريقتين إما بتعديل نوع الوسيط او المُعامل أو تعديل نوع المتُغير الذي تم تمريره كوسيط الطريقة الأولى بإمكانك تعديل الدالة print للشكل التالي: int* print(int (*arr)[3], int m, int n) { for(i = 0; i < 3; i++) for(j = 0; j < n; j++) return (*(arr+i) + j); } بالإضافة إلى تعديل السطر التالي: int** p = print(mm, m, n); إلى int* p = print(mm, m, n); لأن ما تُرجعه الدالة print هو مؤشر(pointer) و ليس مؤشر على مؤشر(pointer to pointer) بإمكانك تجربة الطريقة من خلال هذا : الرابط الطريقة الثانية تعديل نوع المُتغير الذي تم تمريره كوسيط بهذا الشكل: int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int *mm[3]; for (int i = 0; i < 3; ++i) { mm[i] = arr[i]; } int* p = print(mm, m, n); for(i = 0; i < 3; i++) for(j = 0; j < n; j++) cout << (*(p+i) + j); return 0; } بإمكانك تجربة هذه الطريقة من خلال هذا : الرابط بالتوفيق.
  23. مرحباً @Taha NEKHLI عملية الConcatenation تُستخدم بين السلاسل النصية (strings) لذلك إن أردت جمع متغير نصي مع متغير عددي سيُعطي خطأ و لتجاوز هذا الخطأ نقوم بتحويل قيمة المتغير العددي إلى قيمة نصية و ذلك بإستخدام الدالة str بهذا الشكل: a = 15 b = "Taha" print(str(a) + b) # output: 15Taha الدالة input التي تستخدمها تُستعمل لقراءة ما يقوم المُستخدم بإدخاله من خلال لوحة المفاتيح و تستقبل المدخلات على هيئة سلسلة نصية مثلاً إذا أردنا طباعة رسالة للمستخدم تُفيد بإدخال عُمره و رسالة أُخرى تُفيد بإدخال إسمه ثم نطبع له رسالة تضم الإسم و العمر معاً سيكون البرنامج بالشكل التالي: a = input("Enter age: ") b = input("Enter Name: ") print("Hello " + b + ", Your age is: " + a) سيكون الناتج بهذا الشكل: بالتوفيق.
  24. مرحباً @Enas Wawy بإمكانك إلقاء نظرة على السؤال التالي: فهو نفس السؤال مع تغيير في أسماء الكلاسات فقط. بالتوفيق.
  25. مرحباً بك، عندما بحثت عن الأمر وجدت أنه متعلق بإصدار c++ المُستخدم في جهازك بالإضافة إلى الcompiler فالإصدار أقل من 11 سيُسبب لك بعض الأخطاء في حين إذا كان 11 أو أكثر لن تحدث لك أي أخطاء وسيشتغل البرنامج بشكل جيد، إذا اردت تشغيل البرنامج على جهازك بالإصدار الموجود حالياً بإمكانك عمل بعض التغييرات على كل من الميثود Print التي تكتب في الملف بالشكل التالي: void Print(string file) { ofstream f; f.open (file.c_str()); // تغيير هذا السطر f << "The Name is : " << name << endl; f << "Total is : " << Total << endl; f << "TVs: " << endl; for(int i=0;i<2;i++){ f << "TVs[" << i << "] = (Number = " << TVs[i].getNo() << ", Price = " << TVs[i].getPrice() << ")" << endl; } f.close(); } بالإضافة إلى أن الدالة to_string لن تعمل على الإصدار أيضا فيجب تغيير الطريقة إلى شكل آخر و هذه الدالة main: int main() { Invoice* x[2]; //customer y; for(int i=0; i<2;i++){ char name[20]; char filename[20]; sprintf(name, "Invoice %d", i); x[i] = new Invoice(name); sprintf(filename, "output%d.txt", i); x[i]->Print(filename); x[i]->getMin(); cout<<"********************************"<<endl; } return 0; } و هذا الكود ككل: #include <iostream> #include <fstream> using namespace std; /*---------------------------------------------------*/ class Customer{ protected: string name; public: Customer(string name = "Unknown"){ this->name = name; } string getName(){ return name; } void setName(string name = "Unknown"){ this->name = name; } }; /*---------------------------------------------------*/ class TV{ private: int no; public: float price; TV(){ cout << "The TV Number is : " << endl; cin >> no; cout << "The TV Price is : " << endl; cin >> price; } float getPrice(){ return price; } int getNo(){ return no; } void setPrice(float p){ price = p; } }; /*---------------------------------------------------*/ class Invoice : protected Customer{ private: float Total = 0; public: TV TVs[2]; void ReadPrice(){ for(int i=0;i<2;i++){ cout << "TVs[" << i << "] = (Number = " << TVs[i].getNo() << ", Price = " << TVs[i].getPrice() << ")" << endl; } }; int getTotal(){ return Total; } Invoice(string name) : Customer(name){ for(int i=0;i<2;i++){ Total += TVs[i].price; } } void Print(){ cout << "The Name is : " << name << endl; cout << "Total is : " << Total << endl; cout << "TVs: " << endl; this->ReadPrice(); } void Print(string file) { ofstream f; f.open (file.c_str()); f << "The Name is : " << name << endl; f << "Total is : " << Total << endl; f << "TVs: " << endl; for(int i=0;i<2;i++){ f << "TVs[" << i << "] = (Number = " << TVs[i].getNo() << ", Price = " << TVs[i].getPrice() << ")" << endl; } f.close(); } int getMin(){ float min; min = TVs[0].price; for(int i=0 ;i < 2; i++){ if (TVs[i].price < min) min = TVs[i].price; } cout<<"The minimum :" << min <<endl; return min; } }; /*---------------------------------------------------*/ int main() { Invoice* x[2]; //customer y; for(int i=0; i<2;i++){ char name[20]; char filename[20]; sprintf(name, "Invoice %d", i); x[i] = new Invoice(name); sprintf(filename, "output%d.txt", i); x[i]->Print(filename); x[i]->getMin(); cout<<"********************************"<<endl; } return 0; } جربت كلتا الطريقتين على جهازي و اشتغل بشكل جيد، إذا لم ينجح معك بإمكانك تحديث إصدار c++ بالإضافة إلى الcompiler إلى آخر نُسخة بإمكانك إستخدام برنامج code blocks و تحميل الملف الذي يأتي معه compiler ثم تنصيبه على جهازك. بالتوفيق.
×
×
  • أضف...