חידה דיי קשה

פשוש2K

New member
חידה דיי קשה

אבל אני חייב להזהיר: אני לא זוכר את התשובה!!! החידה: לכתוב פונקציית swap בלי להשתמש במשתנה עזר! כלומר להחליף ערכי משתנים, בלי להשתמש במשתנה ביניים. יש לזה פתרון, אני לא זוכר אותו. ~פשוש~
 

Blade2

New member
לא בעייה

#include <iostream.h> #include <conio.h> void swap(int *x, int *y){ *x=*x+*y; *y=*x-*y; *x=*x-*y; }
 

Blade2

New member
תתעלמו מהאינקלודים

פשוט קימפלתי את זה, וכשהעתקתי לפה שכחתי למחוק את זה.
 

Blade2

New member
זה לא משנה

זה עובד גם בלי מצביעים פשוט רציתי לפתור את הבעיה שאי אפשר להחזיר 2 ערכים מפונקציה אבל אם זה מה שיעשה לך את היום: int x,y; x=x+y; y=x-y; x=x-y;
 

פשוש2K

New member
אוקיי... now i get it

סחתיין. זה אכן הפתרון. לילה טוב! נ.ב. אם תוסיף הערה בסוף כל שורה, הטקסט יראה קריא יותר. דוגמה: if(x==y) x++ //remark while(x!=5) x*= //remark מדוע לא שיפצו את העברית כך שתקרא משמאל לימין? זה היה חוסך הרבה צרות!
 

פשוש2K

New member
אוקיי... now i get it

סחתיין. זה אכן הפתרון. לילה טוב! נ.ב. אם תוסיף הערה בסוף כל שורה, הטקסט יראה קריא יותר. דוגמה: if(x==y) x++ //remark while(x!=5) x*= //remark מדוע לא שיפצו את העברית כך שתקרא משמאל לימין? זה היה חוסך הרבה צרות!
 

The_Mighty_Perr

New member
בעיה!

בס"ד מה אם רוצים להחליף בין שני CStringים בלי משתנה עזר? בין 2 מערכי מחרוזות? וחוץ מזה גם ב-INTים יכול להיות OVERFLOW!!! הפתרון הנכון הוא עם XOR. בברכה...
 

The_Mighty_Perr

New member
אתה לא יודע על מה אתה מדבר!

בס"ד הוא עבד עם האופרטורים + ו - שלא ממש עןבדים על מחרוזות, ועלולים לגרום ל-overflow! בברכה...
 

AfiComp

New member
והפתרון ב- XOR ...

נניח X=1 ו - Y=3 ואני אעבוד עם ארבע סיביות (סתם לעשות לי את החיים קלים
) :
X=X^Y Y=X^Y X=X^Y X = X^Y = 1^3 = 0001^0011 = 0010 = 2 Y = X^Y = 2^3 = 0010^0011 = 0001 = 1 X = X^Y = 2^1 = 0010^0001 = 0011 = 3 Y=1 X=3​
בברכה, AfiComp
 

TZURYOAV

New member
אם היית חושב OO היית מסיק ש X ו Y

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

The_Mighty_Perr

New member
אולי כדאי **שאתה** תלך ללמוד...

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

voguemaster

New member
hehe אני משועשע מכל הנושא הזה

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

אלדד26

New member
זה גם נכון

אבל מדובר בחידה מתימטית. ואגב, ביצוע שלושה xor-ים עדיף על ביצוע שלושה mov-ים, ולכן אם ידוע שמדובר במספרים (למשל, מיון מערך של int-ים) - ומדובר במערך גדול מאוד ובפעולה שמבוצעת המון, אז לפעמים כדאי לשים לב לדברים כאלו.
 

The_Mighty_Perr

New member
זה מה שאמרתי!

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