استفسار عن حل سؤال ب c++

  • Foab

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


هنا الحل هل حلي يعتبر صحيح ام فيه اخطاء؟


التعليق السابق
#include <iostream>


#include <cmath>


using namespace std;








// function summation


float summation(float x, float y) {


    float f = x + y;


    return f;


}





// function division


float division(float x, float y) {


    float f = x / y;


    return f;


}





// function Subtraction


float Subtraction(float x, float y) {


    float f = x - y;


    return f;


}





// function Multiplication


float Multiplication(float x, float y) {


    float f = x * y;


    return f;


}





// function Exponent


float Exponent(float x, float y) {


    float f = pow(x, y);


    return f;


}














int main()


{


    // variable string


    string sum;


    float a, b;


    cout << "Enter Valur to a and b:\n";


    cin >> a >> b;


    cout << "Enter Value To sum:\n";


    cin >> sum;





// if


    if (sum == "+") {





        cout << summation(a,b);





    }else if (sum == "/") {





        cout << division(a, b);








    }else if (sum == "-") {





        cout << Subtraction(a, b);





    }else if (sum == "*") {





        cout << Multiplication(a, b);





    }else if (sum == "^") {





        cout << Exponent(a, b);





    }else {





        cout << "Error";


    }














 return 0;


}

تمام البرنامج سليم بنسبة كبيرة

بعض الملاحظات:

  • cout << "Enter Value To sum:\n";

هنا أرجو تبديل sum مع المتغير الخاص بها بكلمة operation مثلا لأنها لا تقتصر على الجمع فنقوم بتسمية متغير

ليدل على عمله.

  • عند القسمة نتأكد أن المقسوم عليه y لا يساوي الصفر قبل القسمة لأن القسمة على 0 غير ممكنة (دائما عليك وضع هذا الشرط)

  • إذا واجهتك مشكلة في قراءة المتغير + - * / يمكنك قراءة السلسلة النصية بأول محرف منها operation[0]

لأن إدخال سلسلة تحوي فراغ بعد الرمز لن يتم قرائتها مثل " *"

  • يمكن إعاد القيم مباشرة بدون تعريف متغير جديد ضمن الدالة بدون داعِ له مثل return x + y مباشرة

بالنسبه ل sum غيرت اسمه لoperation

وبالنسبة لحالة القسمه عدلت الشرط بحيث اذا ادخل رقم صفر للمتغيرين a او b يطلع له خطأ

else if (operation == " / " && a != 0 && b !=0 );

هل الشرط يعتبر صحيح طبعا جربته وشغال تمام

اما بالنسبة ل إذا واجهتك مشكلة في قراءة المتغير + - * / يمكنك قراءة السلسلة النصية بأول محرف منها operation[0]

لأن إدخال سلسلة تحوي فراغ بعد الرمز لن يتم قرائتها مثل " * "


مافهمت كلامك ممكن توضح هل تقصد ان العلامات الرياضيه اقدر استبدلها بأرقام؟

ويعطيك العافيه ماقصرت

else if (operation == " / ") {
    if (b != 0) {
        division(a,b);
    }else {
        cout << "لا يمكن للمقام أن يكون 0"
    }
}

اغلب الاشياء فهمتها لكن

if (opreation[0] == '+')

opreation[0] هذي مافهتمها الاقواس ورقم صفر ايش المقصد منها او ايش تعني بالظبط

أنت قمت بتعريفها لـ sum أولا على أنها سلسلة نصية من نوع string

string name = wael
name[0] = 'w'
name[1] = 'a'

تطبيق هذه الخطوة ليس ضروري إنما ما قصدته في حال إدخال " +" فهذه لا تساوي "+" لوجود الفراغ فنقرأ فقط أول محرف من السلسلة والذي يمكن الوصول له عن طريق الدليل (رقم العنصر) بين الأقواس المربعة

خذ نظرة عن المصفوفات arrays - string في cpp

انا عرفت string operation على اساس انه متغير عادي من نوع string وليس مصفوفه

بالنسبه للمصفوفه فهمتها الحمدلله ومطبق عليها وبرجع اكمل مراجعه مع بعض المسائل بس لما اخلص من الفانكشن

في الاخير مع اني مافهمت قصدك للامانه لاكن مشكور وماقصرت يعطيك العافيه على المشاركه (:

  • وبالنسبة لحالة القسمه عدلت الشرط بحيث اذا ادخل رقم صفر للمتغيرين a او b يطلع له خطأ

يمكن للبسط أن يكون 0 في عملية القسمة الشرط فقط للمقام.

بالنسبة لقراءة إشارة العملية :

cin >> operation;
// اختبار الشرط على المحرف الأول من السلسلة 
if (opreation[0] == '+') ...