רוצים חידה?

רוצים חידה?

היה פעם מחשב כזה: תא הזיכרון הכיל בדיוק 37 סיביות: הראשונה משמאל נחשבה לסימן המספר, השאר ספרות בינאריות פוזיציוניות. את תוכנו של תא כתבו (והקלידו) בספָרות אוקטליות. למשל: 19 עשרוני = = 011 010 000 000 000 000 000 000 000 000 000 000 0 בינארי = = 0023 0000 0000+ אוקטלי 19- עשרוני = = 011 010 000 000 000 000 000 000 000 000 000 000 1 בינארי = = 0023 0000 0000- אוקטלי היו 4 פעולות החשבון על מספרים בינאריים בלבד, שנחשבו קטנים (בערך המוחלט מ-1. במילים אחרות: הדוגמאות שלמעלה אינן מדוייקות; לאמיתו של דבר היצגתי את המספרים 19 ומינוס 19 מוכפלים ב-2 בחזקת מינוס 36. להלן דוגמאות מדוייקות: 0.75 עשרוני = = 000 000 000 000 000 000 000 000 000 000 000 110 0 בינארי = = 0000 0000 6000+ אוקטלי 0.125- עשרוני (מינוס שמינית) = = 000 000 000 000 000 000 000 000 000 000 000 100 1 בינארי = = 0000 0000 1000- אוקטלי בעצם ההבדל ניכר רק בפעולת הכפל (מפעולת החילוק במחשב הזה נתעלם כליל), ואילו לגבי חיבור וחיסור, ההבדל בין הבנת המספרים כשלמים או כשלמים כפול 2 בחזקת מינוס 36, אינו משנה דבר. ממילא החיבור-חיסור פוזיציוני. שימו לב שמספרים שליליים אינם מוצגים כמו במחשבים של היום. נוסף לפעולות החשבון (חיבור, חיסור, כפל) ישנן הפעולות הלוגיות - and, or, xor. וכמו כן הזזה ימינה או שמאלה. יש הזזה חשבונית, בה מזיזים רק 36 ביטים חוץ מהביט של הסימן, הנשאר ללא שינוי. הביטים היוצאים מהתא עפים, ובמקומם נכנסים ביטים 0. וישנה הזזה לוגית ימינה או שמאלה, בה משתתפות כל 37 הסיביות. קצת סבלנות, מתקרבים לחידה. שני תאי זיכרון מכילים מספרים עשרוניים-בינאריים שלמים לא-שליליים. במספרים עשרוניים-בינאריים כל ספרה עשרונית מיוצגת בינארית ב-4 סיביות. סה"כ 9 ספרות, כאשר ביט הסימן משמש גם כאן כביט הסימן. למשל המספר העשרוני 135 מיוצג בעשרונית-בינארית כך: 0101 0011 0001 0000 0000 0000 0000 0000 0000 0 הצרה היא שאין במעבד של המחשב הזה פעולות חשבוניות עשרוניות-בינאריות. ישנן רק הפעולות שמניתי לעיל, כולל פעולות חשבון בינאריות טהורות בלבד. עכשיו החידה: צריך לחבר עשרונית-בינארית שני מספרים עשרוניים-בינאריים הנמצאים בתאי הזיכרון A ו-B. ליתר דיוק: צריך למצוא אלגוריתם מהיר המבצע זאת. לולאה העוברת על כל ספרה וספרה תהיה איטית מדי. צריך משהו שתופס במכה אחת את כל הספרות העשרוניות-בינאריות. הערה: יש 4 צורות לכל פעולה במחשב הזה, ואדגים אותן על פקודת החיבור הבינארית:
add B+A => B, summator add B+A => summator add summator+A => B, summator add summator+A => summator​
כאשר הצורה הרביעית מהירה ב-25% מהצורה השניה או השלישית, והצורה הראשונה איטית מהן ב-25%. פעולות הזזה קצת יותר איטיות מהפעולות החשבוניות והלוגיות (ומהירותן של כל אלו שווה), ופעולת הכפל איטית בערך פי 3.
 
תיקון (למקרה שיימצא מישהו אמיץ

להתמודד עם החידה
): 0.125- עשרוני (מינוס שמינית) = = 000 000 000 000 000 000 000 000 000 000 000 001 1 בינארי = = 0000 0000 1000- אוקטלי וגם: 000 000 200- עשרוני-בינארי. אגב, לאלגוריתם יכולים להיות שימושים שונים גם כיום. אגב, בזמנו (בימי קדם) זו היתה חידה מעשית ביותר. במחשב ההוא הוקלדו והוזנו נתונים עשרוניים-בינאריים, והיה פלט עשרוני-בינארי. אבל לא היו במעבד פעולות חשבוניות עשרוניות-בינאריות, רק בינאריות. היה נהוג להשתמש בתכנית שתרגמה את נתוני הקלט לבינארית, כל החישובים בוצעו בבינארית, והתוצאות עבור הפלט תורגמו שוב לעשרונית-בינארית. אך מכיוון שרוב הפעולות היו למעשה חיבור (חיוב לקוחות עבור שיחות טלפון בין-עירוניות), עלה הצורך בחיבור מספרים עשרוניים שיהיה מהיר יותר מתרגום מספרים עשרוניים לבינאריים. האמת, פתרנו את זה לא ביום ולא ביומיים...
 
../images/Emo6.gif אני מצפה שהאריות יפתרו אותה.

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

dor_ian

New member
זאת לא חידה

זה עונש! ובכלל, איזה מחשב עובד עם 37 סיביות?
 
תגובה.

1. זה לא עונש, אלא הנאה צרופה. האלגוריתם נחמד מאוד. 2. לא אמרתי שזה קל
3. התשובה לשאלה "איזה מחשב עובד עם..." נתונה בשורה הראשונה של החידה. 4. לדעתי האלגוריתם מעניין וניתן לשימוש גם במקרים ספציפיים אחרים.
 

dor_ian

New member
מעניין אותי רק לדעת

אם באמת היה מחשב כזה? אם כן אז מה שמו?
 
שמו היה "מינסק-22"

תוצרת ברה"מ (כיום - ביילרוס), היה נפוץ בסוף שנות ה-60 ובתחילת שנות ה-70. מספר תאי הזיכרון שלו היה 2 בחזקת 13. מהירות טקט אחת: 24 מיקרו-שניה, כלומר פעולת חיבור בינארי B+A=>B בוצעה במשך 120 מיקרו-שניות. המחשב הבא מאותה סדרה היה "מינסק-32". הזיכרון שלו היה גדול יותר פי 8 או 16 (אינני זוכר בדיוק), הותקנה בו... מערכת הפעלה(!!!), כולל אפשרות לביצוע מקביל של מספר ישומים. מהירות המעבד גדלה פי כמה פעמים, גם הודות לשילוב מספר טקטים בפקודה אחת של המעבד. כבר היה אי-אפשר לכתוב ישירות בשפת המחשב בכתובות מוחלטות כי התוכניות נטענו כמשהו כמו EXE, שמערכת ההפעלה הקצתה להם זיכרון, והרמה הנמוכה ביותר היתה אסמבלר. גם נוספו מספר פקודות חדשות למעבד, וביניהן... פעולות חשבוניות על מספרים עשרוניים-בינאריים, כך שכבר לא היה צורך בחידה שלנו. אבל באלגוריתם עצמו הזדמן לי להשתמש גם באסמבלרים של מחשבים יותר מודרניים במקרים מסויימים.
 

dor_ian

New member
סחטיין

חשבתי שתכתוב על אחד הגרסאות של UNIVAC. לא ידעתי שהביאו מרוסיה מחשבים לישראל. או שאולי עבדת עליו במדינה אחרת. הנה תמונה של המחשב הזה למי שרוצה לראות http://sise.ttu.ee/ak/minsk.htm זה נראה מטורף לחלוטין לעבוד ככה על מחשב בלי מסך. אני הייתי משנה מקצוע על בטוח. הולך להיות מהנדס מכונות.
אולי תכתוב לו אמולטור שלא ישכח מדפי ההסטוריה
 
לא עבדתי עליו בארץ, אלא

ב...ארץ אחרת. והמחשב, כאמור, לא היה מרוסיה אלא מביילורוסיה (שבירתה מינסק). אלו היו רפובליקות שונות בברה"מ, וכיום מדינות עצמאיות נפרדות. אכן, היה מעניין לעבוד בלי מקלדת ובלי צג... אגב, אחד המתכנתים המציא עבורו... מערכת הפעלה(!) בפקודה אחת! טוב, זו לא היתה ממש מערכת הפעלה, אבל היא הקלה פי 1000 על עבודת המפעילים.
 
להלן פתרון החידה.

את המספרים העשרוניים-בינאריים אציג בספרותיהם (9 ספרות).
add B, A => summator add summator, +666666666 => C, summator xor summator, A => summator xor summator, B => summator and summator, +111111111 => summator xor summator, +111111111 => summator mul summator, -600000000 => summator add summator, C => C, summator​
יש דרך אחרת, עם פקודה אחת יותר, אבל יותר מהירה (כי פקודת הכפל mul איטית).
 
למעלה