بناء حاسبة بسيطة لسطر الأوامر
ابنِ حاسبة لسطر الأوامر تحلّل المعاملات وتقيّم التعبيرات.
بناء حاسبة بسيطة لسطر الأوامر درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
هدف المشروع
ابنوا آلة حاسبة تعمل من سطر الأوامر، وتقرأ تعبيرًا مثل 3 + 4 ثم تطبع النتيجة. سنبقيها بسيطة، مع تنظيم جيد.
الترويسات المطلوبة
نحتاج إلى iostream للإدخال والإخراج، وإلى string للمدخلات.
#include <iostream>
#include <string>
#include <sstream>هيكل الحلقة الرئيسية
اقرؤوا سطرًا، وحلّلوه، واحسبوا النتيجة، ثم اطبعوها. اخرجوا عند الوصول إلى نهاية الملف.
int main() {
std::string line;
while (std::getline(std::cin, line)) {
if (line == "quit") break;
double result = evaluate(line);
std::cout << "= " << result << "\n";
}
}التحليل باستخدام stringstream
عندما يكون لدينا معامِلان ومؤثر واحد، يكون تقسيم الرموز باستخدام stringstream بسيطًا وموثوقًا.
double evaluate(const std::string& line) {
std::stringstream ss(line);
double a, b;
char op;
ss >> a >> op >> b;
return apply(op, a, b);
}تطبيق المؤثر
استخدموا switch على محرف المؤثر.
double apply(char op, double a, double b) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return b != 0 ? a / b : 0;
default: return 0;
}
}معالجة الأخطاء
ماذا يحدث إذا كتب المستخدم شيئًا غير صالح؟ تحقّقوا من حالة التدفق وأبلغوا عن المشكلة برسالة واضحة.
if (!(ss >> a >> op >> b)) {
std::cout << "Invalid input\n";
return 0;
}القسمة على الصفر
عالجوا القسمة على الصفر صراحةً. اطبعوا خطأً أو ألقوا استثناءً، وفقًا لما يناسب تصميمكم.
if (op == '/' && b == 0) {
throw std::runtime_error("division by zero");
}إضافة المزيد من المؤثرات
وسّعوا switch لدعم عمليات إضافية: % و^ للأس، أو دوال مسمّاة مثل sqrt.
الحفاظ على الحالة
هل تريدون الاحتفاظ بمجموع جارٍ؟ خزّنوا النتيجة الأخيرة، واسمحوا للمستخدم ببدء التعبير باستخدام +.
double last = 0;
// if first token is an operator, use `last` as the first operandتحسين تجربة الاستخدام
اطبعوا مطالبة قبل كل إدخال، واقبلوا quit أو نهاية الملف للخروج، وتجاهلوا الأسطر الفارغة.
ما يتجاوز معاملين
بالنسبة إلى التعبيرات متعددة المعاملات مثل 3 + 4 * 2، تحتاجون إلى محلّل تعبيرات. وتُعد خوارزمية shunting-yard النهج القياسي لذلك.
اختبار الآلة الحاسبة
مرّروا المدخلات من ملف لاختبار البرنامج بسرعة.
echo "3 + 4\n10 / 2" | ./calcتحقّق سريع
ما المرفق في المكتبة القياسية المناسب لتحليل الرموز المفصولة بمسافات، مثل 3 + 4؟
مراجعة
توضّح آلة حاسبة صغيرة تعمل من سطر الأوامر مفاهيم الإدخال والإخراج، والتحليل باستخدام stringstream، والتوجيه المعتمد على switch. وسّعوها بإضافة معالجة الأخطاء، ومؤثرات أخرى، وحالة، ثم محلّل تعبيرات في النهاية.
الأسئلة الشائعة
هل درس «بناء حاسبة بسيطة لسطر الأوامر» مجاني؟
نعم — نص درس «بناء حاسبة بسيطة لسطر الأوامر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «بناء حاسبة بسيطة لسطر الأوامر»؟
ابنِ حاسبة لسطر الأوامر تحلّل المعاملات وتقيّم التعبيرات. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «بناء حاسبة بسيطة لسطر الأوامر»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بناء حاسبة بسيطة لسطر الأوامر
- قراءة ملفات CSV وكتابتها
- لعبة تخمين الأعداد
- عداد تكرار الكلمات