مشاهدة النسخة كاملة : تحدي على أفضل و أسرع و أقصر طريقة للتبديل بين متحولين(بدون متحول ثالث)
Golden man
03-02-2008, 12:18 PM
السلام عليكم
جميعنا نعرف الكود التقليدي للتبديل بين متحولين و هو التالي:
int temp = x;
x = y;
y = temp;
و لكن ما أريده الآن هو طريقة أكثر فعالية من الطريقة السابقة و بدون استعمال متحول ثالث.
لدي الآن أكثر من 6 طرق .
أروني إبداعاتكم......
السلام عليكم :
هاد الحلّ يللي عنـــدي ...
x=x+y;
y=x-y;
x=x-y;
انشاللــه يكون صــح .....
عـــودة سريعة ...
بس كأنو بيّن معي إنو في طريقة تانية ...:)
هي الحـــل :
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 لأخذ القيمة التي في سطح المكدس
السلام عليكم ورحمة الله وبركاته :
هذه طريقة أتبعها .;);)..
x = x+ y - (y = x)
doha mokdad
04-04-2008, 10:34 AM
ما هي طريقة الاسيمبلي؟
و ما معنى الرمز ^
و كيف نستخدمهما؟ و شكرا
Golden man
04-05-2008, 04:01 AM
ما هي طريقة الاسيمبلي؟
هذه الطريقة هي لاستخدام كود بلغة التجميع (الاسمبلي) داخل كود لغة الـ c++ و ذلك لأن لغة التجميع أسرع بكثير لأنها تعمل على مستوى مسجلات المعالج و الذاكرة مباشرة .
و ما معنى الرمز ^
هذا الرمز يعني عملية xor في الـ c++
و كيف نستخدمهما؟
بنسخ الكود إلى برنامجك و استبدال أسماء المتحولات بأسماء المتحولات لديكِ.
vBulletin® v3.8.4, Copyright ©2000-2012, TranZ by Almuhajir