נתונה הפעולה הכתובה ב-Java וב-C# להלן. הפעולה מקבלת שלושה מספרים שלמים וגדולים מ-0: foo(int x,int y,int z): אם x%3==0 מחזירה x; אם x%3==1 מחזירה y; אחרת מחזירה z. כתוב מכונת טיורינג שתממש את הפעולה הנתונה. הקלט של המכונה הוא שלושת המספרים x,y,z שהפעולה מקבלת, כתוב על הסרט מתחילתו בצורה אונרית (כל מספר n מיוצג ב-n תווי 1), בין כל שני מספרים סימן מפריד #. למשל, אם הפעולה מקבלת 2 ל-x, 3 ל-y ו-1 ל-z, הסרט יראה כך: ⊢ 1 1 # 1 1 1 # 1 △ △ △...... (ראש קורא כותב על ה-1 הראשון). הפלט הוא הערך שהפעולה מחזירה, מוצג על הסרט (מוסף מימין לכל הקלט) בצורה אונרית, כשהוא כתוב בין שני סימני $ (הערת המרה: השאלון המקורי כותב סימן דולר בודד — הוחלף כאן ב-$ הרחב כדי לא להתנגש עם תחביר מתמטי במערכת).
נתונה הפעולה הכתובה ב-Java וב-C# להלן. הפעולה מקבלת שלושה מספרים שלמים וגדולים מ-0: foo(int x,int y,int z): אם x%3==0 מחזירה x; אם x%3==1 מחזירה y; אחרת מחזירה z. כתוב מכונת טיורינג שתממש את הפעולה הנתונה. הקלט של המכונה הוא שלושת המספרים x,y,z שהפעולה מקבלת, כתוב על הסרט מתחילתו בצורה אונרית (כל מספר n מיוצג ב-n תווי 1), בין כל שני מספרים סימן מפריד #. למשל, אם הפעולה מקבלת 2 ל-x, 3 ל-y ו-1 ל-z, הסרט יראה כך: ⊢ 1 1 # 1 1 1 # 1 △ △ △...... (ראש קורא כותב על ה-1 הראשון). הפלט הוא הערך שהפעולה מחזירה, מוצג על הסרט (מוסף מימין לכל הקלט) בצורה אונרית, כשהוא כתוב בין שני סימני $ (הערת המרה: השאלון המקורי כותב סימן דולר בודד — הוחלף כאן ב-$ הרחב כדי לא להתנגש עם תחביר מתמטי במערכת).
public static int Foo(int x, int y, int z) {
if ((x % 3) == 0) return x;
if ((x % 3) == 1) return y;
return z;
}
הסרט עבור x=2,y=3,z=1
|- 1 1 # 1 1 1 # 1 △ △ △ .......
^ ראש קורא
תאר (ברמת עקרון/דיאגרמת מצבים) מכונת טיורינג שתממש את הפעולה הנתונה, כמתואר לעיל.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.