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>'

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