البرمجة

حساب المتوسط والتباين في C++: تصحيح الأخطاء

في البداية، يظهر أن لديك كودًا في C++ يهدف إلى حساب المتوسط والتباين لمجموعة من القيم الاختبارية. ومع ذلك، هناك عدة أخطاء في الكود يجب معالجتها لضمان تنفيذ صحيح. دعونا نقوم بمراجعة الكود وتصحيح الأخطاء.

أولاً وقبل كل شيء، يبدو أن هناك سوء في تعريف الدوال داخل الدالة الرئيسية. يجب عليك استدعاء الدوال بدلًا من إعادة تعريفها.

علاوة على ذلك، لديك خطأ في حساب حجم المصفوفة. يفضل استخدام sizeof(test_values) / sizeof(test_values[0]) للحصول على عدد العناصر بدلاً من sizeof(test_values)، حيث أن الأخير يُعيد حجم المصفوفة بالبايتات.

كما أن استخدام متغير i كمتغير للتكرار في دالة حساب المتوسط يؤدي إلى فقدان قيمته بعد انتهاء الحلقة، يُفضل استخدام متغير آخر لتخزين عدد العناصر في المصفوفة.

هنا تعديلات على الكود:

cpp
#include #include #include using namespace std; double calculate_average(int test_values[], int size, int& sum, double& average) { for (int i = 0; i < size; i++) { sum += test_values[i]; } average = static_cast<double>(sum) / size; return average; } double var(int test_values[], int size, double average, double& variance) { for (int j = 0; j < size; j++) { variance += pow((test_values[j] - average), 2); } return variance; } int main() { int test_values[] = { 89, 95, 72, 83, 99, 54, 86, 75, 92, 73, 79, 75, 82, 53 }; int size = sizeof(test_values) / sizeof(test_values[0]); int sum = 0; double average, variance; calculate_average(test_values, size, sum, average); var(test_values, size, average, variance); cout << fixed << showpoint << setprecision(2); cout << "Test Values: "; for (int i = 0; i < size; i++) { cout << test_values[i] << " "; } cout << endl; cout << "Average: " << average << endl; cout << "Variance: " << variance << endl; return 0; }

قمت بتصحيح بعض الأخطاء وأعدت هيكلة الشيفرة لتحسين فهمها وجعلها أكثر وضوحًا. يُفضل دائمًا استخدام أسلوب برمجي نظيف وتوثيق صحيح للتسهيل على الآخرين (أو نفسك في المستقبل) فهم الشيفرة والتعديل عليها.

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

بالطبع، سأوفر مزيد من التوضيح والتفسير حول الكود المقدم.

أولاً، داخل دالة calculate_average، قمت بتصحيح السطر:

cpp
average = static_cast<double>(sum) / size;

حيث أننا نقوم بتحويل sum إلى نوع double قبل القسمة لضمان أن النتيجة تكون من النوع المناسب لتخزين المتوسط.

ثانيًا، في دالة var، يتم حساب التباين بشكل صحيح باستخدام تقنية الرفع إلى القوة (power) باستخدام دالة pow من مكتبة cmath. هذا يعكس التباين بين كل قيمة في المصفوفة والمتوسط.

في دالة main، قمت بتعيين قيمة ابتدائية للمتغير sum بصفر، حيث يُستخدم لتخزين مجموع القيم في المصفوفة.

قمت بتعديل جزء طباعة النتائج ليتضمن عرض القيم في المصفوفة والمتوسط والتباين بشكل أوضح.

آمل أن يكون هذا التوضيح قد ساعد في فهم الكود بشكل أفضل وتصحيح الأخطاء التي كانت موجودة في النسخة السابقة من الشيفرة.

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