الشبكة العربية لمطوري الألعاب

خبير مدير وسام البهنسي مشاركة 1

حسناً، هذه مسألة واجهتها الآن، وأودّ أن أجعلها على شكل مسابقة صغيرة:
 
في برنامج صغير لا يعتمد على مكتبات C و ++C الافتراضية، أريد أن أحوّل رقماً موجباً إلى نص بالترميز الست عشري. أي تماماً كما يفعل الإجراء sprintf في الكود الآتي:
 

char szNumber[256];
unsigned int uValue = 515240; // أي قيمة
 
sprintf(szNumber,"%X",uValue);
 
// szNumber => "7DCA8"
 
 
والطلب هو أن تكتب إجراءً يقوم بهذه العملية بشكل صحيح وسريع ودون الاعتماد على مكاتب C و ++C الافتراضية. إذن:
 
* لا يجوز استعمال أي إجراء خارجي غير ما تكتبه بنفسك.
 
* الإجراء الفائز هو الذي يقوم بالمهمة بشكل صحيح ويكون الأسرع والأصغر حجماً من حيث عدد التعليمات.
 
* اكتب الإجراء بلغة C أو ++C، أو أي لغة NET. بشرط أن لا تستعمل إجراءات التحويل في المكتبة (ToString و Parse وما شابه).
 
 
كيفية المشاركة:
 
* اكتب الإجراء في ملف، ثم اضغطه في ملف ZIP أو RAR محمي بكلمة سر، وأرسله كمرفق بمشاركة في هذا الموضوع. لا تخبر أحداً بكلمة السر كي لا يسرق فكرتك.
 
* بعد أن يتم تجميع عدد مناسب من المشاركات، سيتم إغلاق الموضوع منعاً لتغيير المشاركات، ومن ثم يطرح المشاركون كلمات السر كي نرى ونقارن الحلول وننتقي الأفضل منها.
 
 
كي نجعل اللعبة أكثر إثارة، سأقوم أنا وعبد اللطيف حاجي علي أيضاً بالمشاركة في هذه المسابقة. وستكون الجائزة لمن يعادل أحدنا أو يهزمه بأن يُمنَح لقب "محترف" في هذه الشبكة  😄
 
المسابقة مفتوحة لجميع الأعضاء. بالتوفيق!

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مفصول علي محمد أسماعيل  مشاركة 2

انا احاول حاليا رغم اني لست محترفا في لغة السي بلس بلس لكني ابشرك انني بعد  ستة اشهر من الان أن شاء الله سأغلبك على الاقل في مكتبات ++C الافتراضية اذن اقول لك تحضر ولاتنم فعلي محمد اسماعيل قادم ليهزمك لامحالة.😏
 
لكن هل حصلت على اجازة ام ماذا فاليوم اراك متابعا جيدا للمنتدى ومبادرتك هذه جميلة.

محترف مشرف عبد اللطيف حاجي علي مشاركة 3

أقترح توسيع الدائرة لتضم أي لغة برمجة بما فيها C# و VB.NET

عبد اللطيف حاجي علي
مبرمج
In|Framez

محترف  انس مشاركة 4

السلام عليكم .
 
اودا ان اسال عن المدة المحددة لهذه المسابقة ؟
 
شكرا.
سلام

خبير مشرف مؤيد مارديني مشاركة 5

أما في 31 آب 2009 11:40 ص، فقد تنهد عبد اللطيف حاجي علي بارتياح وهو يرد:

أقترح توسيع الدائرة لتضم أي لغة برمجة بما فيها C# و VB.NET

1+ لـ#C

Moayad Mardini,
MSDN Forums Moderator

خبير مدير وسام البهنسي مشاركة 6

في 11/رمضان/1430 03:40 ص، غمغم عبد اللطيف حاجي علي باستغراب قائلاً:

أقترح توسيع الدائرة لتضم أي لغة برمجة بما فيها C# و VB.NET

موافق! لكن لا يجوز استعمال إجراءات مكتبة NET. كـ ToString و Parse.
 


بتاريخ 11/رمضان/1430 03:52 ص، قطب انس حاجبيه بشدة وهو يقول:

اودا ان اسال عن المدة المحددة لهذه المسابقة ؟

سنستقبل المشاركات على الأقل لمدة أسبوع. إلى حينها إن تشكل عدد مناسب (4 مشاركات غير مشاركة عبد اللطيف ومشاركتي) فسنغلق الموضوع ونفتح المشاركات ونبدأ التقييم. أما إن لم يتشكل العدد المناسب فسننتظر قليلاً ريثما يحصل ذلك.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

محترف  انس مشاركة 7

السلام عليكم.

سؤال اخر من فضلكم : هل نقوم بكتابة اجراء يطابق الاجراء sprintf بكل مواصفاته اي :

int sprintf(char *str, const char *format, ...);

ام اجراء مبسط بالشكل التالي :

int sprintf(char *str, const char *format,float var );

ما قولكم ☺ ؟

مفصول علي محمد أسماعيل  مشاركة 8

اعتقد أن اي اجراء يفي بالغرض فهو  مرحب به.يكفي ان تضيف لمستك الخاصة على الدالة .لن يفيدك شيء أجراء تحميل زائد للدالة ان لم تظف الترويسة stdio .

خبير مدير وسام البهنسي مشاركة 9

وفي 11/رمضان/1430 03:17 م، قال انس متحمساً:

هل نقوم بكتابة اجراء يطابق الاجراء sprintf بكل مواصفاته

كلا. عندما ضربتُ مثال sprintf كنت أقصد مطابقة النتيجة وليس مطابقة الإجراء. الإجراء المطلوب في المسابقة يستقبل فقط عدد من النوع unsigned int ويقوم بتحويله إلى صيغته الست عشرية في سلسلة محارف. لا أكثر ولا أقل.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

محترف  انس مشاركة 10

السلام عليكم.

اقدم لكم مشاركتي.
الاجراء مكتوب في 29 سطرا و سرعة التفيذ تتراوح ما بين 0.030s و 0.031s .الاجراء يعطي نتائج خاطئة اذا تلقى قيم اكبر من تلك التي يمكن تخزينها في unsigned int .

البرنامج في المرفقات، لمن يجب ان اعطي كلمة السر ؟☺

شكرا لكم.

سلام.