البرمجة

تعلم كيفية بناء آلة حاسبة بسيطة في لغة البرمجة C

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

أولاً وقبل كل شيء، يجب أن نلاحظ أن C لا يدعم مقارنة السلاسل (Strings) باستخدام عامل التساوي (==) مباشرة. يجب عليك استخدام دالة مثل strcmp للقيام بمقارنة السلاسل. على سبيل المثال، strcmp(input, "add") == 0 يشير إلى أن السلسلة المدخلة تساوي “add”.

ثانيًا، لديك مشكلة في تعريف مصفوفة الحروف (input). يفضل استخدام char input[4] بدلاً من char input[5] لأنك تقوم بقراءة 4 حروف فقط.

وثالثًا، فيما يتعلق بالتنسيق في الإخراج، استخدم %.2f بدلاً من %.1f لضمان ظهور النتيجة بشكل صحيح مع الأرقام العشرية.

إليك إصلاحات للشيفرة:

c
#include #include int main() { float num1; float num2; char input[4]; printf("Hello, my name is baymax\n"); printf("Enter either add, sub, mult, div:\n"); scanf("%3s", input); printf("Enter first number\n"); scanf("%f", &num1); printf("Enter second number\n"); scanf("%f", &num2); if (strcmp(input, "add") == 0) { printf("%.2f + %.2f = %.2f", num1, num2, num1 + num2); // اكمل باقي العمليات الحسابية هنا } else { printf("Invalid operation\n"); } return 0; }

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

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

بالتأكيد، دعنا نوسع على بعض المفاهيم والتوجيهات لضمان تفهم شامل للبرنامج وللمزيد من السهولة في فهم اللغة C:

  1. مقارنة السلاسل:
    في لغة C، يجب استخدام دالة strcmp لمقارنة السلاسل. السبب هو أن == تقارن عناوين الذاكرة، وليس قيم السلاسل. فلذلك، يجب استخدام strcmp(input, "add") == 0 بدلاً من input == 'add'.

  2. تعريف المصفوفة:
    عند تعريف مصفوفة من الحروف مثل char input[4]، يجب أن تحتوي المصفوفة على مساحة للحرف النهائي والذي يُستخدم لتخزين القيمة النهائية '\0' التي تشير إلى نهاية السلسلة. لذا، يجب أن يكون حجم المصفوفة 4 لتخزين “add” بشكل صحيح.

  3. التنسيق في الإخراج:
    استخدم %.2f للتحكم في تنسيق الأرقام العشرية. هذا يعني عرض رقمين بعد الفاصلة العشرية.

  4. التعليقات:
    استخدم التعليقات بشكل جيد لشرح الجزء المهم من الشيفرة. هذا يجعل الشيفرة أكثر قراءة وفهمًا، خاصةً للمبتدئين.

  5. توسيع البرنامج:
    قم بتطوير البرنامج ليشمل جميع العمليات الحسابية (الجمع، الطرح، الضرب، والقسمة). يمكنك استخدام بنية التحكم if-else لتحقيق ذلك.

  6. التحقق من الإدخال:
    يفضل دائمًا التحقق من صحة الإدخالات. على سبيل المثال، يمكنك التحقق مما إذا كانت العملية المُدخلة صحيحة قبل تنفيذ العمليات الحسابية.

إليك الشيفرة مع التحسينات المذكورة:

c
#include #include int main() { float num1; float num2; char input[4]; printf("Hello, my name is Baymax\n"); printf("Enter either add, sub, mult, div:\n"); scanf("%3s", input); printf("Enter first number\n"); scanf("%f", &num1); printf("Enter second number\n"); scanf("%f", &num2); // التحقق من العملية المُدخلة if (strcmp(input, "add") == 0) { printf("%.2f + %.2f = %.2f", num1, num2, num1 + num2); } else if (strcmp(input, "sub") == 0) { printf("%.2f - %.2f = %.2f", num1, num2, num1 - num2); } else if (strcmp(input, "mult") == 0) { printf("%.2f * %.2f = %.2f", num1, num2, num1 * num2); } else if (strcmp(input, "div") == 0) { if (num2 != 0) { printf("%.2f / %.2f = %.2f", num1, num2, num1 / num2); } else { printf("Cannot divide by zero\n"); } } else { printf("Invalid operation\n"); } return 0; }

هذه التحسينات تجعل البرنامج أكثر استقرارًا ويُمكنك الآن توسيعه بسهولة لتشمل المزيد من العمليات الحسابية.

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