الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حساب مضروب رقم

بدأه C++er في 11 ديسمبر 2013 · 0 رد · 1,828 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1

قمت بكتابة برنامج لحساب مضروب اى رقم و طباعة النتيجه لأى أساس بغحدى حالتين الأحرف:

 

الفئه factorial تقوم بالعملية الحسابية و الطباعة و شكلها و كالتالي:

struct factorial
{
	inline factorial();
	inline factorial(st_t of);
	inline ~factorial();

	bool set_letters(const std::string& ul, const std::string& ll);

	st_t digits_count(st_t base) const;

	bool calculate();

	bool to_string(std::string& str, bool is_upper, st_t base) const;
};

المشيد يأخذ الرقم الذى تريد حساب مضروبة و المهدم يقوم بتحرير الذاكرة التى تم حجزها.

 

الدالة set_letters وظيفتها تحديد الحروف التى سيتم إستخدامها عند الطباعه الرقم و توجد بها بعض القيود:

   1- عدد الحروف بكلاهما لابد ان يكون متساوى.

   2- الحروف الموجوده بأيهم لابد و ان تكون إما ارقام او حروف. إذا تم إستخدام رموز او مساحات فارغة او control characters فتسفشل عملية تسجيل الحروف.

   3- إذا وجدت حرف مكرر داخل واحده منهم ستفشل عملية التسجيل. (بمعنى بأى من المتغييرين الحرف الموجود بأحدهم لا يتكرر داخل ذلك المتغير).

 

الدالة digits_count تعيد تقديريا عدد الحروف الموجوده داخل المضروب عند تمثيله بأساس معين. عندما أقول تقديريا فأنا اعنى انه عند احتساب عدد حروف مضروب لرقم كبير (كمليون) قد يتم إضافة واحد لعدد الحروف المعاد.

الدالة calculate تقوم بعملية الإحتساب.

الدالة to_string تقوم بتحويل القيمه التى تم إحتسابها إلى حروف بحالة أحرف و أساس يتم إدخالهم إليها.

 

جهازى معالج Core 2 2.4GHz و ذاكرة 8 جيجا و نظام تشغيل 32بت.

 

عملية حساب مضروب الرقم 100000 - مئة ألف - مع تفعيل تحسينات:

     مترجم VC++2008SP1 يستغرق 22 ثانية.

     مترجم GCC 4.8.1 يستغرق 14 ثانية.

 

عملية حساب مضروب الرقم 200000 - مائتي ألف - مع تفعيل تحسينات:

     مترجم VC++2008SP1 يستغرق دقيقة و نصف.

     مترجم GCC 4.8.1 يستغرق دقيقة.

 

كلا البرنامجين يستهلك ذاكرة قدرها 2 ميجا للعملية الحسابية و تصل لـ 3.5 ميجا مع عملية التحويل لنص.

إحصائيات الوقت على الوقت المستغرق لحساب المضروب و الوقت المستغرق للتحويل للنص لم يتم وضعه (يأخذ احيانا ضعف الوقت لإستخدام القسمه بشكل كبير).

 

fact.zip

 

 

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 12 ديسمبر 2013 في 00:58

1

مدونتي: C++ Tips and Tricks

مواضيع مشابهة