חידה | לבעלי חוש תיכנות
-
@יעקב-ישראל אמר בחידה | לבעלי חוש תיכנות:
@עימוד-עילית מה הקשר ניתן להגיע עם זה ל1000
@שואף אמר בחידה | לבעלי חוש תיכנות:
יש לך אלף מטבעות של שקל
-
@עימוד-עילית אופפססס צודק
יאללה דבר עם @שואף על כניסה על חשבונו -
@עימוד-עילית יפה מאוד.
יש לך חלק ממה שנדרש למתכנת. ואת החלק היפה (הכי פחות קשה ומרגיז) מבין החלקים... -
@יעקב-ישראל אמר בחידה | לבעלי חוש תיכנות:
@בערל שמעת על אקסל ?
אם אתה לא יכול בלי אקסל - אתה עף מהפורום
-
@nigun אוקי אני מתנדב להסביר:
א. כיוון שבייצוג בינארי אפשר ע"י 10 סיביות לייצג 1024 אפשרויות (אם כל ספרה היא 0 או 1, מספר האפשרויות הוא 2 בחזקת 10 = 1024) יוצא שעל ידי 10 סיביות אפשר לקבל כל מספר בין 0 ל-1023 (שזה בעצם 1024 אפשרויות)
ב. נחלק את המטבעות כך שבכל מעטפה תהיה חזקה של 2 (כל מעטפה מייצגת סיבית אחת במספר)מעטפה א = 1 מטבעות (2 בחזקת 0)
מעטפה ב = 2 מטבעות (2 בחזקת 1)
מעטפה ג = 4 מטבעות (2 בחזקת 2)
מעטפה ד = 8 מטבעות (2 בחזקת 3)אם נתבונן רגע, נראה שבארבע מעטפות כבר ניתן לקבל 16 אפשרויות
0000 = 0
0001 = 1 (מעטפה א)
0010 = 2 (מעטפה ב)
0011 = 3 (מעטפות א+ב)
....
1111 = 15 (מעטפות א+ב+ג+ד)אם נמשיך באותה הדרך, במעטפות הבאות יהיו הסכומים 16, 32, 64, 128, 256
המעטפה האחרונה תכיל רק 488 במקום 512 כי לא היו מהתחלה 1024 מטבעות, רק 1000. -
@OdedDvir אמר בחידה | לבעלי חוש תיכנות:
@nigun אוקי אני מתנדב להסביר:
כל הכבוד על ההסבר המפורט, לקח לי קצת זמן להבין את האסימון (ללא בדיקת מקורות מידע אחרים)
אני לא זוכר את עצמי פעם לומד את "מדעי המחשב" (אולי ראיתי פעם בויקפדיה בלא להתעמק), אלא את "ביצועי המחשב".., וככזה, באמת לא הבנתי מיד את כל השרשור כאן.
לאחר התבוננות בדבריך אני חושב שהבנתי.
@nigun לא להיבהל, לא זורקים אותנו משום פורום.. -
@חוקר עברתי על כמה מדריכים שמסבירים איך עובד מחשב, ונראה לי שגם אם אתה מתכנת עם שפה ברמה גבוהה (דהיינו רחוקה מהברזל של המחשב) זה עוזר פה ושם להכיר את הדברים האלה.
מי שמתכנת בשפה ברמה נמוכה ודאי חייב להכיר את זה.אני כותב יישומי וינדוס בשפה לא כל כך מוכרת, ושמה משתמשים בבינארי בשביל פרמטרים. אחרי שאתה קולט את השיטה זה בא לשימוש בכל שפה אחרת שאתה מתכנת. בעצם ייתכן מאוד שבשפות אחרות זה גם ככה.
מגדירים לדוגמא שפרמטר A שווה 1, B שווה 2, C שווה 4, וD שווה 8.
ואז אתה קורא לפונקציה, וצריך לתת לה בפרמטר את A וD. אז במקום שיהיהmyFunction(param1, param2, param3, param4) myFunction(true, false, false, true)
אתה עושה במקום זה רק פרמטר אחד, ונותן לו שילוב של הערכים הנל
myFunction(param) myFunction(A + D)
מקווה שהייתי ברור.
-
@nigun אמר בחידה | לבעלי חוש תיכנות:
חשבתי שGO זאת שפה נמוכה
הכל יחסי...
אם אני יכתוב 9 זה יקלוט שאני מתכוון A+D?
כן, כי אין דרך אחרת לייצג את המספר 9
@שואף אמר בחידה | לבעלי חוש תיכנות:
אני כותב יישומי וינדוס בשפה לא כל כך מוכרת, ושמה משתמשים בבינארי בשביל פרמטרים
לא צריך להגיע לשפות לא מוכרות בשביל זה. כך הדרך לייצג אופציות ב-C ו-++C או בכל שפה אם לא רוצים לזלול זכרון, כך עובד כל ה-API של ווינדוס.
-
@nigun אם "תפתח את המחשב" תראה ש9 כתובה ככה:
00001001
כלומר זה אומר שתי אפשרויות דלוקות הראשונה שמייצגת 1 והרביעית שמייצגת 8 (שהרי 1=1, 2=2, 3=4, 4=8 בסדרת המעטפות הנ"ל).
איך יודעים? כי בסדרת המספרים הזו של חזקת 2 יש לכל מספר דרך יחידה בה הוא יכול להתבטא, ממילא אפשר להמיר מספר לכמה אפשרויות של כן/לא ולהיפך.
יש כאלה שמשתמשים עם זה גם בGO
https://play.golang.org/p/Dm3X-akr31