محمد علاء الدين
مشرف قسمي C/Cpp و Windows API
- الدولة الإسلامية
- Operating Systems & Compilers
- [تمت الإجابة] أسئلة من الكود الأول في ++C
مكتبات لغة cpp الإفتراضية لا تحتوى على امتداد للتفرقة بينها و بين مكتبات لغة c الإفتراضية حيث يمكن استخدام مكتبات لغة c داخل cpp بطريقتين: 1- عن طريق إستخدام إسم الملف بسابقة c و بدون إمتداد. 2- عن طريق استخدام إسم الملف كما فى لغة c. الفرق بين الطريقتين يكمن …
- الحب من النظرة 13 ... Meta Programming
كود الـ test case #include <iostream>using std::cout;struct test_data{ bool user_res; bool org_res;};const test_data data[] ={ { is_const<int>::value, false }, { is_const<const int>::value, true }, { is_const<volatile int>::value, false }, { is_const<const vol…
- الحب من النظرة 13 ... Meta Programming
بالتعديل التالي: template<typename tName, ulli base = 10, bool is_valid_range = base<2||((base-1)<=getMax<tName>::max)> struct digits_in_base_for_type; template<typename tName, ulli base> struct digits_in_base_for_type<tName, base, true> { static const ulli va…
- الحب من النظرة 13 ... Meta Programming
المشكلة لديك فى تعريف If عندما يكون الشرط خاطئ حيث الكلمة hello world!، جرب هذه النسخة: #include <iostream> #include <climits> using std::cout; using std::endl; typedef unsigned long long int ulli; template <typename x>struct getMax{static const ulli max = 0;}…
- الحب من النظرة 13 ... Meta Programming
اولا: الكود لم يترجم. ثانيا: الكود لا يعمل مع الـ signed types. ثالثا: أكبر قيمة للنوع بالإضافة لواحد لا تقبل داخل الأساس. رابعا: التنسيق سيئ يجعل قرائة الكود صعبة. تم تجربة الكود و لم يعمل على التالي: g++ 4.8.1 vc++ 2008 sp1 clang 3.3 intel c++ XE 14.0 و الله…
- الحب من النظرة 13 ... Meta Programming
انواع بيانات الأرقام الصحيحة يمكنها ترميز عدد محدود من القيم، المطلوب هو تصميم فئة تستقبل نوع البيانات و الأساس و يتم إعطائك عدد القيم التى يمكن ترميزها لذلك الأساس داخل النوع المحدد. لاحظ أن الأساس المدخل ايا كان قيمته لابد دائما ان يكون فى مدى من 2 و حتى أكب…
- الحب من النظرة 13 ... Meta Programming
على العكس، لابد منه إذا اردت تمرير رقم واحد فقط لـ get_type بدلا من رقمين. أطلعت عليها من قبل، خفيفة و مسلية. الكود التالي جزء من مشروع arbitrary precision arithmetic الذى اعمل عليه: #define MATHX_DEFINE_NC(tn, base_type) \ template<> \ struct numeric_cast<tn>…
- الاستخدامات المتقدمة للدالة system
تعتمد على نوع الأمر و الـ implemenation الخاص بـ system فمثلا قد تحتوى على قائمة بالأوامر الداخلية و عندما تطلب تنفيذ احداها تقوم بالتحقق من وجود active console window فإن لم يوجد لن يتم تنفيذه. لنفس سبب عدم إعادة كتابتك لبعض دوال الـ API بدلا من استخدامهم مع …
- الحب من النظرة 13 ... Meta Programming
عندما تكون داخل template class و تريد الإشارة إلى نوع داخل template class اخرى لابد ان تستخدم typename حتى يعلم المترجم ان الذى تشير إليه هو نوع. و اين هى v==v؟ و إليك حلي: template<bool cond, typename tt, typename ft> struct If { typedef tt type; }; template<…
- الاستخدامات المتقدمة للدالة system
سيتم تنفيذ الأمر و سيعاد لك error code. تحتاج لتعديل manifest الخاص ببرنامجك، إقرأ هذا الموضوع . لا الدالة system تستدعى برنامج موجود داخل النظام او أمر مدمج داخل الـ shell فمثلا إذا استدعيت cls من داخل برنامج GUI لن تعمل و ذلك لعدم وجود active shell. لا، و ال…
- الحب من النظرة 13 ... Meta Programming
كبداية، اى عضو مرحب به أن يشارك معنا بالحل الخاص به. الأنواع الصحيحة التى تقبل منك الأرقام السالبة و الموجبة تحدد لك مدى معين، المطلوب هو أني إما اعطيك رقم واحد أو مدى مكون من رقمين و تقوم انت بإعطائى النوع الأمثل لتمثيل الرقم. المقصود بالنوع الأمثل اى النوع ذ…
- الحب من النظرة 13 ... Meta Programming
انت لا تحب التعقيد اليس كذلك، أنظر التالي: template<uint32_t size> struct left_most_oct_digit { static const uint32_t value = ((size*8) % 3 == 1)? 1: 3; }; template<uint32_t size> struct oct_seven_count { static const uint32_t value = (size*8)/3; }; اعتقد ان ا…
- الحب من النظرة 13 ... Meta Programming
الإجابة الصحيحة هي: in type with size 1 byte(s): left-most octal digit is 3 seven digit count is 2 in type with size 8 byte(s): left-most octal digit is 1 seven digit count is 21 in type with size 1024 byte(s): left-most octal digit is 3 seven digit count is 2…
- الحب من النظرة 13 ... Meta Programming
أحيانا تكرار الكود افضل من وضع خورازمية معقدة لأنه مع مرور الوقت يزداد الإعتماد على الكود المكتوب و يصعب تغيير و انما الأسهل تطويره، لذا فلأول يسهل إبداله و تغييره أما الأخير فلن يكون سهل التطوير. هل تعتقد ان ما وضعته صعب، تذكر ما قلته لك فى البداية: التعقيد ل…
- الحب من النظرة 13 ... Meta Programming
الخطأ لديك يكمن فى هذا السطر: template<typename x , int y> فلك ان تتخيل ماذا سيحدث عن يتم تمرير قيمة ulli(-1)/2 حينها سيحدث overflow و لن يتم ترميز القيمه بشكل سليم. للحل اجعل x من نوع ulli. حتى الأن سيتم الحصول على النتيجة بشكل سليم ما عدا النوع ulli، و انا ا…
- الحب من النظرة 13 ... Meta Programming
هذا اجمل ما فى البرمجة، اكثر من طريقة لنفس النتيجة. أنظر هذا المثال أيضا: template<typename t> struct log10_for_type { static const int64_t value = int64_t( (((sizeof(t) * 8) - ((t(0) > t(-1))? 1: 0)) * 1233) >> 12); }; template<typename t> struct power10_for_…
- الحب من النظرة 13 ... Meta Programming
إليك هذا الكود للتسلية: #include <iostream> using std::cout; using std::endl; typedef signed long long int int64_t; typedef unsigned long long int uint64_t; template<uint64_t val> struct log2_for_literal { static const int64_t value = 1 + log2_for_literal< (va…
- تمرين بسيط حول الملفات في لغة C
لا يمكن حلها بسهولة، لأن مكتبات اللغة نفسها سواء ++C او C لا يدعموا التعامل مع ملفات بمساحة تزيد عن 4 جيجا. و بالتالي ستحتاج لإستخدام ادوات نظام التشغيل و بهذا دخلنا فى موضوع منفصل. توجد مشاكل أخرى مثل shared files و Exclusive lock و لكن حلول مثل هذه المشاكل م…
- [تمت الإجابة]كيف نكتب كود لتحقيق القوانين الفيزيائية أثناء برمجة لعبة ؟
أخي قوانين نيوتن الثلاثة تصنع لها مكتبات كاملة لتطبيقها داخل برمجة الألعاب لأن الفكره ليست بعض المتغيرات تقوم بحساب الفرق بينها و لكن سيكون لديك مجموعه من الـ objects قد يكونوا ببساطة كرة او دائرة او معقدة مثل وحش فضائي و المشترك بينهم هنا ان جميعهم له اتجاه و…
- تمرين بسيط حول الملفات في لغة C
داخل Windows يمكنك استخدام GetFileSize و تمرير المعامل الثاني NULL و ستساوى تماما الدالة FileSize مع العلم انه المفترض ان تعيد unsigned int و ليس int. و للملفات ذات المساحة الكبيرة - أكبر من 64بت - يمكن استخدام GetFileSizeEx. و الله ولي التوفيق