البرمجة

حساب مؤشر كتلة الجسم باستخدام لغة البرمجة C وتخزين البيانات في ملف نصي

في سياق تطوير برمجيات حساب معامل كتلة الجسم (BMI) باستخدام لغة البرمجة C، يظهر الكود البرمجي الذي تم توفيره محاولة لحساب معامل كتلة الجسم لشخص ما وثم تخزينه في ملف نصي. يتم ذلك من خلال استخدام هيكل البيانات “person” لتمثيل البيانات المتعلقة بالشخص، وتقديم وظائف مثل “calculate” لحساب BMI و “write” لتخزين البيانات في ملف و “read” لقراءة البيانات من الملف.

مع ذلك، يتضح أن هناك خطأ في وظيفة “calculate”، حيث يتم استخدام الرمز ‘*’ بشكل غير صحيح للإشارة إلى الضرب. بدلاً من ذلك، يجب استخدام العملية الرياضية ‘*’ لضمان الحصول على النتيجة الصحيحة. يمكن تصحيح هذا الخطأ كما يلي:

void calculate (double h, double w)
{
    struct person p1;
    p1.BMI = w / (h * h);
}

تجنباً لحدوث أخطاء إضافية، يمكن تعديل الدالة “write” لتأكيد أن الهيكل “person” يمتلك قيمة ابتدائية مناسبة. يمكن تحديد ذلك عند إنشاء هيكل “person” داخل الدالة “write”، على سبيل المثال:

void write () {
    FILE *file;
    struct person p1 = {0, 0.0, 0.0, 0.0}; // تعيين قيم ابتدائية
    file = fopen("bmi.txt","w");
    if (file == NULL)
    {
        printf("Error");
    }
    else
    {
        printf("Person ID: "); scanf("%d",&p1.personId);
        printf("Height: "); scanf("%lf",&p1.height);
        printf("Weight: "); scanf("%lf",&p1.weight);
        calculate(p1.height,p1.weight);
        fwrite(&p1,sizeof(p1),1,file);
     }
    fclose(file);
}

يمكن أيضاً إجراء تحسينات إضافية في التعامل مع الملفات مثل التحقق من نجاح عمليات الفتح والإغلاق، وفحص الأخطاء أثناء القراءة والكتابة. يُفضل أيضاً إجراء فحص لتجنب الوصول إلى بيانات قديمة أو خاطئة عند قراءة البيانات من الملف.

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

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

في هذا الكود البرمجي المكتوب بلغة البرمجة C، يظهر محاولتك لحساب مؤشر كتلة الجسم (BMI) لشخص وتخزين البيانات في ملف نصي. ومع ذلك، يبدو أن هناك بعض المشاكل في الطريقة التي تقوم بها بحساب BMI وكذلك في عمليات قراءة وكتابة الملف.

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

c
void calculate(double h, double w) { struct person p1; p1.BMI = w / (h * h); // تصحيح العملية الرياضية لحساب BMI }

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

c
void write() { FILE *file; struct person p1; file = fopen("bmi.txt", "w"); if (file == NULL) { printf("Error"); } else { printf("Person ID: "); scanf("%d", &p1.personId); printf("Height: "); scanf("%lf", &p1.height); printf("Weight: "); scanf("%lf", &p1.weight); calculate(p1.height, p1.weight); fprintf(file, "Person ID: %d\n", p1.personId); fprintf(file, "Height: %f\n", p1.height); fprintf(file, "Weight: %f\n", p1.weight); fprintf(file, "BMI: %f\n", p1.BMI); } fclose(file); }

وفي دالة read، يمكنك استخدام الدالة fscanf لقراءة البيانات بشكل صحيح:

c
void read() { FILE *file; struct person p1; file = fopen("bmi.txt", "r"); if (file == NULL) { printf("Error"); } else { while (fscanf(file, "Person ID: %d\nHeight: %lf\nWeight: %lf\nBMI: %lf\n", &p1.personId, &p1.height, &p1.weight, &p1.BMI) != EOF) { printf("Person ID: %d\n", p1.personId); printf("Height: %f\n", p1.height); printf("Weight: %f\n", p1.weight); printf("BMI: %f\n", p1.BMI); } } fclose(file); }

بتصحيح هذه الجوانب، يجب أن يعمل الكود بشكل أفضل لحساب BMI وتخزينها واسترجاعها من الملف.

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