Menu
Coddy logo textTech

סיכום – מחשבון בטוח

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 48 מתוך 56.

challenge icon

אתגר

בינוני

בנו מחשבון זעיר שעמיד בפני קלט שגוי.

הגדירו את CalcError: Error עם המקרים: parse, divideByZero, unknownOp.

הגדירו פונקציה שזורקת שגיאות 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, הדפיסו את התוצאה עבור כל expr; לבסוף הדפיסו 'OK: <n>'

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Swift אונליין