עבור לתוכן

החלפת תוכן שני נעלמים ללא עזרת נעלם נוסף

Featured Replies

פורסם

שלום לכלום אני עובד עם C++ ורציתי לדעת איך אני יכול להחליף את התוכן של שתי נעלמים ללא עזרת נעלם נוסף אם אפשר תוכנית כתובה זה יעזור מאוד

תודה

פורסם

אין לזה פתרון כללי. יש כאשר שני המשתנים הם מספרים.

A=A+B

B=A-B

A=A-B

פורסם

אתה יכול לעשות את זה עם מצביעים ואז זה כאילו פתרון "כללי". רק צריך לדאוג שלא יהייה לך OVERFLOW.

פורסם

יש שיטה עם סיביות:

a^=b;
b^=a;
a^=b;

פורסם

השאלה דיברה על תוכן של שני נעלמים, ולא על מצביעים אליהם.

השיטה עם הסיביות תעבוד רק עבור משתנים באותו גודל.

מה שכן, השיטה עם החיבור והחיסור תפעל על כל שני אובייקטים שיש ביניהם אופרטורים לחיבור וחיסור שפועלים לינארית

פורסם
  • מחבר

השיטה של החיבור והחיסור מצוינת בדיוק מה שהייתי צריך

תודה

פורסם

טוב, אלא אם זו סתם חידה שמישהו שאל אותך, אני חייב למחות נגד השיטה הזו.

עדיף להשתמש במשתנה זמני.

ולמה?

בשפת המכונה קיימת בדיוק הפעולה שיודעת להחליף בין שני משתנים (קוראים לה swap, נראה לי).

כשהקומפיילר רואה את 3 השורות האלה:


int tmp = a;
a = b;
b = tmp;

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

ככה שבעצם בשימוש בשיטה האחרת (עם חיסור או קיסור) לא חסכת כלום.

פורסם

קראתי איפשהו שבעבודה עם INTEGER, אכן השיטה הרגילה עדיפה, אך בעבודה עם DOUBLE למשל, עדיף השיטה הטריקית, ככה שזה הכל תלוי מי/מה/מו

פורסם

בעבודה עם Double הטריק עוד יותר בעייתי!

צריך לזכור שכמעט כל חישוב ב-Doubleים גורר אחריו כל מיני שגיאות עיגול.

והחלפת משתנים לא.

פורסם
  • מחבר

לפי דעתי עם משתנה נוסף זה הכי טוב

השיטה של החיבור והחיסור לא עובדת בכל המקרים

פשוט זה היה חידה כזאת לכן שאלתי..

בכל אופן תודה לכם

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים