Menu
Coddy logo textTech

מחשבון עם היסטוריה

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

challenge icon

אתגר

בינוני

בנו מחשבון שמעבד זרם של ביטויים, מתמודד עם שגיאות ומדווח בסוף על היסטוריה לכל אופרטור.

קראו שורת קלט אחת: רשימה של ביטויים 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, להדפיס את התוצאה; לבנות היסטוריה לכל פעולה;
// דוח סופי בסדר קבוע, רק לפעולות שהצליחו

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

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