17-11-2005, 11:00
|
|
|
|
חבר מתאריך: 20.06.03
הודעות: 5,616
|
|
כמו כל מעבר אחר...
משתמשים באותו אלגוריתם, עם שינוי מספר הבסיס.
וזה לא משנה אם זה בסיס 6, 17 או 39.
בזמן הלימודים מרצים אוהבים לתת לנו לריב עם בסיסים לא מוכרים.
אם ביקשו ממך לכתוב תכנית המרה כזו, מן הסתם לא רצו שתשתמש בפונקציה
מוכנה, וזו בוודאי הסיבה שקיבלתם בסיס 6.
האלגוריתמים עצמם הם די פשוטים
לביצוע המרות בין בסיסים עם בסיס בינארי (בסיס 2,4,8,16 וכו) יש אלגוריתמים פשוטים יותר, אך
נכונים רק להם.
נסביר את האלגוריתם שנכון לכל בסיס:
המרה מבסיס 6 לבסיס 10 (ע"י החלפת 6 ניתן לשנות את האלגוריתם לכל בסיס)
עבור המספר בבסיס 6, יש לעבור על כל ספרותיו (לדוגמה 254)
4 כפול 6 בחזקת 0
5 כפול 6 בחזקת 1
2 כפול 6 בחזקת 2
....
....
וכו לכל הספרות, כשערך הספרה עולה בחזקה כל פעם.
254 בבסיס 6 = 106 בבסיס דצימלי
המרה מבסיס 10 לבסיס 6
ניקח את המספר שלנו (106) ונמיר אותו חזרה לבסיס 6.
הפעולה היא פעולת חילו:
106 / 6 נקבל 17 שארית 4
17 / 6 נקבל 2 שארית 5
2 / 6 נקבל 0 שארית 2
שים לב שהשאריות שלנו, לפי הסדר מייצגות את ספרות האחדות (4) השישיות (5) והשישיות
בריבוע (2) -> 254
בקיצור, לא מסובך מדי למימוש.
כדי להגיל ראש (חשוב מאוד אם אתה רוצה להתמיד במקצוע הזה) הייתי בונה את הפונקציה
כפונקציה כללית להמרת כל סוגי הבסיסים (לפחות עד 16, שלא תצטרך להמציא סימנים חדשים)
כאשר כארגומנטים הפונקציה מקבלת את המספר להמרה, ואת בסיס היעד.
הנה אב טיפוס נחמד:
קוד PHP:
int toDecimal(string value, int base); string fromDecimal(int value, int base);
|