ABA


"אתגר פשוט שדוד שלי חיבר :)"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #7740 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 7740
TheBinary

   17:47   09.01.04   
אל הפורום  
  אתגר פשוט שדוד שלי חיבר :)  
 
   אתגר פשוט שפטרתי אותו כבר, דוד שלי חיבר
יש לך אסמבלי (או כל שפת תכנות אחרת), אבל מוגבלת רק לפעולות הבסיסיות ממש של ה CPU (מתמטיקאיות וזה), ללא משתנים מחסנית או כלי עזר אחרים.
אתה צריך לבנות תוכנה שתחליף בין 2 תאי זכרון, שהם היחידים בזכרון.
אם תרצו רמז, אני יגיד


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשובה... Jojo X Noah 09.01.04 18:42 1
     די שגוי... Dudenland 09.01.04 22:40 2
         נתתי הדגמה....ה1000 הכוונה היא לסכום Jojo X Noah 10.01.04 15:01 6
             זאת בדיוק הבעייה: Dudenland 10.01.04 17:13 7
  אתה חייב לתת יותר פרטים על הגבלות וכדומה... Dudenland 09.01.04 23:36 3
  עוד פרטים : TheBinary 10.01.04 08:07 4
     למה הכוונה ב''אסור להשתמש ב Data'' ? Dudenland 10.01.04 13:35 5
         התבלבלי, בסדר TheBinary 10.01.04 17:50 9
  פרטים נוספים שתדעו TheBinary 10.01.04 17:37 8
     DUDENLAND עזוב, Quant86 10.01.04 20:12 10
  XOR dryice 10.01.04 22:38 11
     מה זה xor לא הבנתי? Jojo X Noah 10.01.04 22:40 12
     נחמד... אהבתי... Dudenland 11.01.04 00:26 13
  טוב אני רואה שלא ממש הבנתם TheBinary 11.01.04 15:46 14
     אמרת ''מוגבלת רק לפעולות הבסיסיות ממש של הCPU'' Dudenland 11.01.04 16:35 15
         צודק, לא חשבתי על זה TheBinary 12.01.04 18:00 16
             הרעיון שלי yoash 14.01.04 17:44 17
                 זה מה שאמרתי ! TheBinary 16.01.04 18:15 18
                     הכל תלוי במכונה, יש מכונות שבהם זה אפשרי. dryice 16.01.04 19:47 19
                         אני יודע, התכוונתי ל 8086 TheBinary 19.01.04 12:16 20

       
Jojo X Noah

   18:42   09.01.04   
אל הפורום  
  1. תשובה...  
בתגובה להודעה מספר 0
 
   אתה מכפיל תא אחד בסכום הספרות של התא השני+2 נגיד יש לך 5 ו27
אז שיהיה לך 5000 ו27
עכשו אתה מחבר את שתי התאים...ככה שבשניהם יש 5027
תא ראשון אתה מחלק 1000 ומכיוון שזה אינטגר יש לך 5 ו5027
עכשו תכפיל את זה עוד פעם באלף תעשה התא השני שווה התא השני פחות הראשון...יצא לך 5000 ו27
ותחלק תתא הראשון עוד פעם באלף ואז נשארת עם 5 ו27


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   22:40   09.01.04   
אל הפורום  
  2. די שגוי...  
בתגובה להודעה מספר 1
 
   נתחיל מזה שההסבר של הדרך שלך לא נכון: סכום הספרות של התא השני + 2... אולי התכוונת ל-10 בחזקת הנ"ל...

עכשיו נניח שיש לך את המספרים: 5 ו-1...
לפי הדך שלך, אנחנו מקבלים 500 ו-1, שהופכים שניהם ל-501.
אנחנו מחלקים את התא הראשון ב-1000, ומקבלים 0.
מכפילים ב-1000 ומקבלים עדיין 0. מחסרים את זה מהתא השני, ומקבלים בכלל תוצאה שלילית... שלא לדבר על כך שאתה צריך לשמור איפשהו את ההכפלה ב-1000... שאמורה הייתה לצאת 1...

חוץ מזה, מה קורה כשיש לך ערכים גדולים שקרובים לגבולות הערך של התא... כמו למשל 64K בתא בגודל 2 בתים... לאחר פעולות הכפל והחיבור, אתה מקבל מספר שונה לחלוטין עם דגל חריגה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Jojo X Noah

   15:01   10.01.04   
אל הפורום  
  6. נתתי הדגמה....ה1000 הכוונה היא לסכום  
בתגובה להודעה מספר 2
 
   הספרות שהכפלת בו....אם הכפלת ב100 תשתמש ב100
אם ב10000 אז תשתמש ב10000
במספרים גדולים אין לי פיתרון...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   17:13   10.01.04   
אל הפורום  
  7. זאת בדיוק הבעייה:  
בתגובה להודעה מספר 6
 
   שמדובר בערכים, ולא במספרים... כלומר להחליף את כל התוכן של תא אחד, בכל התוכן של תא שני...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   23:36   09.01.04   
אל הפורום  
  3. אתה חייב לתת יותר פרטים על הגבלות וכדומה...  
בתגובה להודעה מספר 0
 
   בתחילה, חשבתי על פעולת הזזה של התא הראשון בגודל התא (אם זה בית, אז 8), ואז ביצוע פעולת חיבור, משהו דומה לדרך שהוצעה כאן כבר, אבל כבר אמרתי שזה לא ריאלי, מכיוון שזה מצריך פעולה שדורשת יותר זיכרון ממה שניתן בתחילה, בגלל גודל התא...

אחר-כך, חשבתי על דבר כזה:
בהנחה ששני התאים בזיכרון מוצבים אחד אחרי השני, כל מה שצריך לעשות, הוא פעולת סיבוב על התא הראשון, תוך כדי התייחסות לתא כתא בגודל כפול ממנו.
השתמשתי רק ברגיסטר cl כדי לבצע את הסיבוב (חייבים להשתמש בו כדי לבצע סיבוב גדול יותר מ-1)... וזו התכנית:

dseg segment
th1 db 4h
th2 db 2h
dseg ends

cseg segment
assume ds:dseg, cs:cseg
begin:
mov cl, 8h
ror word ptr th1, cl
cseg ends
end begin


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   08:07   10.01.04   
אל הפורום  
  4. עוד פרטים :  
בתגובה להודעה מספר 0
 
   אסור להשתמש ב Data, אסור משתנים, אסור מחסנית ושום כלי עזר
מה שמותר זה 4 פעולות חשבון ו MOV (אני לא אומר שמשתמשים בכולם, זה מה שמותר).
הפתרון פשוט מאוד


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   13:35   10.01.04   
אל הפורום  
  5. למה הכוונה ב''אסור להשתמש ב Data'' ?  
בתגובה להודעה מספר 4
 
   אז איזה תאים בזיכרון אתה רוצה שנחליף ?
ה-Data שבו השתמשתי, הוא הסגמנט שבו נמצאים שני תאי הזיכרון שאותם אני רוצה להחליף...

לא הבנתי...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   17:50   10.01.04   
אל הפורום  
  9. התבלבלי, בסדר  
בתגובה להודעה מספר 5
 
   לא צריך אפילו כפל וחילוק ולא צריך MOV ...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   17:37   10.01.04   
אל הפורום  
  8. פרטים נוספים שתדעו  
בתגובה להודעה מספר 0
 
   זה להחליף בין 2 תאי זכרון.
לא משתמשים בביטים, אנשים תלכו על הכי פשוט
צריך להחליף מספרים בין התאים
ואל תכתבו באסמבלי שלא תסתבכו פשוט תכתבו איך מחברים ומחסרים את התאים
ורמז : זה רק ADD ו SUB אמרתי לכם שזה קל


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   20:12   10.01.04   
אל הפורום  
  10. DUDENLAND עזוב,  
בתגובה להודעה מספר 8
 
   ערכתי לאחרונה בתאריך 10.01.04 בשעה 20:12 בברכה, Quant86
 
הוא לא נותן את הנתונים כמו שצריך..........
THE BINARY - חזרת איזה 20 פעם על אותו הדבר ולא נתת מידע בכלל, קודם כל אם אתה לא רוצה שישתמשו באסמבלר אז תתרגם את החידה לחידה עם 2 משתנים, תן להם שמות ותגיד שמה שמותר לעשות זה + ו -, בילבלת אותנו כמו שאני לא יודע מה.....


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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   22:38   10.01.04   
אל הפורום  
  11. XOR  
בתגובה להודעה מספר 0
 
   החלפה בין שני משתנים ללא שימוש במשתני עזר:
A=A xor B
B=A xor B
A=A xor B

אם נחשוב למעשה מה יש בסופו של דבר בכל משתנה
מבחינת הערכים המקוריים של A וB אז:
B <== A xor B xor B == A
A <== A xor B xor A == B


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Jojo X Noah

   22:40   10.01.04   
אל הפורום  
  12. מה זה xor לא הבנתי?  
בתגובה להודעה מספר 11
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   00:26   11.01.04   
אל הפורום  
  13. נחמד... אהבתי...  
בתגובה להודעה מספר 11
 
   למעשה, אין תלות במיקום המשתנים אחד ביחס לשני כמו בפיתרון שהצעתי (Rotation)... ב-3 צעדים מקבלים החלפה מושלמת...

ולמחבר השאלה:
אתה בטוח שפתרת את השאלה הזו? מכיוון שכל ההודעות שלך הצביעו על כך שאיבדת את עצמך בפתרונות המוצעים. בתחילה אמרת אסמבלי... אחר-כך בלי אסמבלי... אחר-כך ביטלת את הנתונים... ואחר-כך, לא החלטת אם מדובר בהחלפת מספרים, או החלפת תוכן...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   15:46   11.01.04   
אל הפורום  
  14. טוב אני רואה שלא ממש הבנתם  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 11.01.04 בשעה 15:47 בברכה, TheBinary
 
בעע לא הבנתם אותי, בקיצור :
נגיד יש לנו 8,2
מחברים את 2 ל 8 ושמים ב 8, יוצא 10,2
מחסרים את 2 מ 10 ושמים ב 2, יוצא 10,8
מחסרים את 8 מ 10 ושמים ב 10, יוצא 8,2


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   16:35   11.01.04   
אל הפורום  
  15. אמרת ''מוגבלת רק לפעולות הבסיסיות ממש של הCPU''  
בתגובה להודעה מספר 14
 
   התכנית שלך דורשת שימוש בגורם בעל יכולת זיכרון נוסף:
בשורה 2, "מחסרים את 2 מ 10 ושמים ב 2, יוצא 10,8". פעולת החיסור, מחייבת שמירה במקום כלשהו, מכיוון שבאסמבלי, שהיא תרגום של הפעולות הבסיסיות ממש של המעבד, כפי שציינת, זה ייראה כך:
mov ax, th1 // th1=10
sub ax, th2 // th2=2, ax=8
mov th2, ax // th2=8

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

תסתכל בפיתרון שאני הצעתי, אם כי הוא קצת מוגבל (בשל מוכרחותם של שני תאי הזיכרון להיות עוקבים), או בפיתרון שהציע Dryice, שממש באופן מלא כל מקרה...



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   18:00   12.01.04   
אל הפורום  
  16. צודק, לא חשבתי על זה  
בתגובה להודעה מספר 15
 
   עכשיו שמתי לב שאי אפשר לחסר מספר ממספר ולשים את התוצאה במחסר ללא MOV בעע =/
על הפתרון


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
yoash

   17:44   14.01.04   
אל הפורום  
  17. הרעיון שלי  
בתגובה להודעה מספר 16
 
   ישנם שני משתנים A ו B
נוסיף את הערך של A ל B ונאחסן את זה ב A
נחסר את הערך של A מ B ונאחסן את זה B
נחסר את הערך של B מ A ונאחסן את זה ב A
וזהו עכשיו הערך של A הוא מה שהיה בהתחלה ב B והערך של B הוא מה שהיה בהתחלה בA.


הערך של A, הערך של B
A , B
A+B , B
A+B , A+B - B
A+B , A
A+B - A , A
B , A


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   18:15   16.01.04   
אל הפורום  
  18. זה מה שאמרתי !  
בתגובה להודעה מספר 17
 
   אתה לוקח וכותב במילים אחרות חח ?
זה מה שאמרתי, וזה בלתי אפשרי באסמבלי תקרא את התגובה לזה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   19:47   16.01.04   
אל הפורום  
  19. הכל תלוי במכונה, יש מכונות שבהם זה אפשרי.  
בתגובה להודעה מספר 18
 
   על 8086 זה כנראה לא אפשרי.
על מחשבי PDP למיניהם זה דווקא מאוד אפשרי,
בכלל יש המון מכונות עם אסמבלי שבו לכל הפעולות יש 3 אופרנדים.
מה מחברים/מחסרים/.. ממה ואיפה לשים התוצאה.

גם MIPS אם אני זוכר נכון עובד כך.
למעשה מחשבי 8086 הם דווקא חריגים בנוף הזה.

אבל בכל מקרה אני מעדיף את הפתרון שלי עם XOR

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   12:16   19.01.04   
אל הפורום  
  20. אני יודע, התכוונתי ל 8086  
בתגובה להודעה מספר 19
 
   ערכתי לאחרונה בתאריך 19.01.04 בשעה 12:17 בברכה, TheBinary
 
כתבת "על מחשבי PDP למיניהם זה דווקא מאוד אפשרי,"
אתה יודע אסמבלי של PDP ? פששש יפה ! (כמעט כל אחד ברחוב שאומר "אסמבלי" מתכוון ל 8086 )
אם אני לא טועה PC זה גם שם ל 8086, נגיד למקינטוש לא קוראים PC ...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net