البرمجة

تبسيط كسر الأعداد في C++

عندما تتلقى خطأ “Floating Point Exception”، فإن ذلك يعني أن هناك مشكلة تتعلق بالعمليات على الأرقام العائمة (floating-point) في البرنامج. في الكود الذي قدمته، يبدو أن المشكلة تكمن في قسمة العددين this->numerator و this->denominator على i في كل دورة من دورات الحلقة while، خصوصاً عندما تكون قيمة i تساوي الصفر.

عندما تكون قيمة i تساوي الصفر، فإن العملية this->numerator / i أو this->denominator / i تؤدي إلى قسمة عدد على الصفر، مما يسبب حدوث خطأ “Floating Point Exception”.

لتجنب هذا الخطأ، يجب أن تتحقق من قيمة i قبل القيام بالقسمة. يمكنك تحقق قيمة i قبل القسمة بإضافة شرط إلى الحلقة while للتأكد من أن قيمة i لا تساوي الصفر. على سبيل المثال:

cpp
int i = this->numerator; while (i > 1) { if ((this->numerator % i == 0) && (this->denominator % i == 0)) { this->numerator = this->numerator / i; this->denominator = this->denominator / i; } i = i - 1; // Add this condition to avoid division by zero if (i == 0) { break; } }

بهذه الطريقة، سيتم تجنب قسمة عددي numerator و denominator على صفر، مما يمنع حدوث خطأ “Floating Point Exception”.

المزيد من المعلومات

خطأ “Floating Point Exception” يحدث عندما يتم محاولة القيام بعملية غير مشروعة على الأرقام العائمة، مثل القسمة على صفر أو استخدام قيم غير صالحة للعمليات الحسابية.

في حالتك، يبدو أن المشكلة تحدث عندما تكون قيمة i تساوي الصفر، مما يؤدي إلى محاولة القسمة على صفر في التعليمة this->numerator / i أو this->denominator / i، مما يؤدي إلى حدوث الخطأ. لتجنب هذا، يمكنك إضافة شرط إلى الحلقة while للتحقق من أن قيمة i لا تساوي الصفر قبل القيام بالقسمة.

يمكنك أيضًا تحسين كفاءة الكود من خلال تحسين خوارزمية تبسيط الكسور. بدلاً من تنازلياً من i إلى 1، يمكنك استخدام حلقة تنازلية تبدأ من القيمة الصغرى بين this->numerator و this->denominator وتنتهي عند 1، مع التحقق من قابلية القسمة على القيم المتدنية.

هذا الشكل الجديد للكود يمكن أن يساعد في تجنب الأخطاء ويجعل الكود أكثر فعالية:

cpp
int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int gcd_value = gcd(this->numerator, this->denominator); this->numerator /= gcd_value; this->denominator /= gcd_value;

في هذا الكود، نستخدم دالة gcd لحساب أكبر قسم مشترك للقسمة (GCD) بين this->numerator و this->denominator، ثم نقوم بتقسيم الجزء العلوي والسفلي للكسر على هذا القيمة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر