المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تحدي على أفضل و أسرع و أقصر طريقة للتبديل بين متحولين(بدون متحول ثالث)


Golden man
03-02-2008, 12:18 PM
السلام عليكم

جميعنا نعرف الكود التقليدي للتبديل بين متحولين و هو التالي:


int temp = x;
x = y;
y = temp;


و لكن ما أريده الآن هو طريقة أكثر فعالية من الطريقة السابقة و بدون استعمال متحول ثالث.

لدي الآن أكثر من 6 طرق .

أروني إبداعاتكم......

Bond
03-02-2008, 01:34 PM
السلام عليكم :

هاد الحلّ يللي عنـــدي ...

x=x+y;
y=x-y;
x=x-y;

انشاللــه يكون صــح .....

Bond
03-02-2008, 01:39 PM
عـــودة سريعة ...

بس كأنو بيّن معي إنو في طريقة تانية ...:)

هي الحـــل :

x=x*y;
y=x/y;
x=x/y;

Executioner
03-02-2008, 01:54 PM
السلام عليكم ورحمة الله وبركاته:

انا كمان بعرف كم واحد.:):):) أكيد أنت فهمت شو قصدي.

lasko
03-06-2008, 07:07 AM
السلام عليكم ورحمة الله وبركاته:
يوجد تابع يؤمن عملية التبديل بين قيمتين عدديتين وهي الكود :
#include<iostream>
using namespace std;
void main()
{
int x,y;
cin>>x>>y;
swap(x,y);
cout<<x<<'\n'<<y<<'\n';
}

Golden man
03-13-2008, 07:20 AM
إليكم بعض الطرق الأخرى (طبعا مو كلها من عندي)



x ^= y ^= x ^= y;



x -= y += x -= y = -y;



x = x+y - (y=x);


و هذه بعض الطرق باستخدام أوامر اسمبلي في الـ c++:





__asm {
mov eax,a
mov ebx,b

mov b,eax
mov a,ebx
}






_asm


{
xchg [a], eax

xchg [b], eax
xchg [a], eax
}









push [a]

push [b]
pop [a]

pop [b]









حيث أن التعليمة push لوضع القيمة في المكدس و ال pop لأخذ القيمة التي في سطح المكدس

Eyad
03-13-2008, 09:10 AM
السلام عليكم ورحمة الله وبركاته :

هذه طريقة أتبعها .;);)..
x = x+ y - (y = x)

doha mokdad
04-04-2008, 10:34 AM
ما هي طريقة الاسيمبلي؟
و ما معنى الرمز ^
و كيف نستخدمهما؟ و شكرا

Golden man
04-05-2008, 04:01 AM
ما هي طريقة الاسيمبلي؟


هذه الطريقة هي لاستخدام كود بلغة التجميع (الاسمبلي) داخل كود لغة الـ c++ و ذلك لأن لغة التجميع أسرع بكثير لأنها تعمل على مستوى مسجلات المعالج و الذاكرة مباشرة .


و ما معنى الرمز ^



هذا الرمز يعني عملية xor في الـ c++

و كيف نستخدمهما؟

بنسخ الكود إلى برنامجك و استبدال أسماء المتحولات بأسماء المتحولات لديكِ.