כתיבת קוד — שיעור 4
מבוא לשפות תכנות: מ-Assembly ועד Python
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T1 · מתחיל
100 נק'
~10 דק'
debug
תיקון באג — אינטרפרטר צובר (Accumulator VM)
מכונה זעירה מריצה תוכנית של שורות טקסט על אוגר צובר acc (מתחיל ב-0): "SET n" קובע acc=n · "ADD n" מוסיף · "SUB n" מחסיר · "MUL n" מכפיל · "NEG" הופך סימן. הפונקציה אמורה להחזיר את acc הסופי — אך יש בה באג: הפקודה SUB מתנהגת כמו ADD. מצא ותקן. החזר את הגרסה המתוקנת.
// הקוד השבור לתיקון
def run(program: list[str]) -> int:
acc = 0
for line in program:
parts = line.split()
op = parts[0]
if op == 'SET': acc = int(parts[1])
elif op == 'ADD': acc += int(parts[1])
elif op == 'SUB': acc += int(parts[1]) # באג כאן
elif op == 'MUL': acc *= int(parts[1])
elif op == 'NEG': acc = -acc
return accדוגמאות
run(['SET 10', 'SUB 4']) → 6
run(['SET 3', 'MUL 4', 'NEG']) → -12
הפתרון נשמר מקומית אוטומטית.
T2 · בסיסי
200 נק'
~15 דק'
algorithmic
מכונת-מחסנית — מחשבון RPN
לפני שכותבים מהדר — כותבים מכונה. ממש מחשבון בנוטציית פוסטפיקס (Reverse Polish). נתונה רשימת אסימונים tokens: כל אסימון הוא מספר שלם (ייתכן שלילי, כמחרוזת) או אחד מהאופרטורים + - * /. אופרטור מוציא שני ערכים מהמחסנית ודוחף את התוצאה. חילוק / הוא חילוק שלם עם קיטום לכיוון אפס (כמו ב-C): 7/2=3 וגם (−7)/2=−3. הקלט תקין ומסתיים בערך יחיד. החזר את התוצאה.
דוגמאות
eval_rpn(['2','3','+']) → 5
eval_rpn(['4','5','*','6','-']) → 14
eval_rpn(['-7','2','/']) → -3
הפתרון נשמר מקומית אוטומטית.