حاسبة مع سجل العمليات
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 56 من 56.
التحدي
متوسطقم ببناء آلة حاسبة تعالج سلسلة من التعبيرات، وتتعامل مع الأخطاء، وتُبلغ عن سجل لكل عامل (operator) في النهاية.
اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من تعبيرات a:op:b. العوامل هي +، -، *، /. قم بتعريف enum باسم CalcError: Error مع الحالات parse، divideByZero، unknownOp.
لكل تعبير، بالترتيب:
- اطبع
= <n>عند النجاح - اطبع
parse، أوdivZero، أوunknownOpلكل حالة خطأ
بعد الأسطر الخاصة بكل تعبير، اطبع سطراً واحداً لكل عامل نجح مرة واحدة على الأقل، بالترتيب الثابت +، -، *، /:
<op>: count=<n> sum=<total>count هو عدد المرات التي نجح فيها هذا العامل؛ sum هو مجموع تلك النتائج الناجحة.
للمدخلات 3:+:5,10:/:0,7:*:2,9:%:2,12:-:4,8:+:2، المخرجات هي:
= 8
divZero
= 14
unknownOp
= 8
= 10
+: count=2 sum=18
-: count=1 sum=8
*: count=1 sum=14جرّب بنفسك
let exprs = readLine()!.components(separatedBy: ",")
let order = ["+", "-", "*", "/"]
// TODO: enum CalcError; func compute(...) throws -> Int;
// حلقة تكرار، do/try، طباعة النتيجة؛ بناء سجل لكل عملية؛
// التقرير النهائي بترتيب ثابت، فقط للعمليات التي نجحت
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلماتتدرّب بنفسك: Playground لـ Swift