Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - حاسبة آمنة

جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 48 من 56.

challenge icon

التحدي

متوسط

قم ببناء آلة حاسبة صغيرة آمنة ضد المدخلات الخاطئة.

قم بتعريف CalcError: Error مع الحالات التالية: parse، و divideByZero، و unknownOp.

قم بتعريف دالة رامية للأخطاء (throwing function) باسم compute(_ a: String, _ op: String, _ b: String) throws -> Int تقوم بما يلي:

  • تحليل a و b كأعداد صحيحة، ورمي .parse إذا فشل أي منهما
  • رمي .unknownOp عندما لا يكون op واحداً من +، -، *، /
  • رمي .divideByZero عندما يكون op == "/" و b == 0
  • خلاف ذلك، يتم إرجاع النتيجة كعدد صحيح

اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من تعبيرات a:op:b. قم بمعالجة كل منها بالترتيب باستخدام do/catch. اطبع سطراً واحداً لكل تعبير:

  • = <n> عند النجاح
  • parse error، أو div by zero، أو unknown op لكل حالة خطأ

بعد الأسطر الخاصة بكل تعبير، اطبع سطر ملخص واحد: OK: <n> مع عدد التعبيرات التي نجحت.

للمدخلات 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4، يكون المخرج:

= 8
div by zero
parse error
unknown op
= 8
OK: 2

جرّب بنفسك

let exprs = readLine()!.components(separatedBy: ",")

// TODO: enum CalcError; func compute(...) throws -> Int;
// حلقة، do/try، print النتيجة لكل expr؛ finally print 'OK: <n>'

جميع دروس المنطق والتدفق

تدرّب بنفسك: Playground لـ Swift