الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عملية تبديل بين عنصرين

مغلق
بدأه romanof في 30 مايو 2005 · 12 رد · 1,740 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

شباب

هل هناك من يستطيع البديل بن عنصرين بدون استخدام الخانه الثالثة

يعني بدون استخدام الكود التالي

tmp:=A; 
A:=B;
B:=tmp;

منتظر الاجابات

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#2

بسم الله الرحمن الرحيم

في حالة كان A و B قيم عدديه

A:=A+B
B:=A-B
A:=A-B

أما في الحالة الأخري من القيم النصيه فلا يمكننا تبديل قيمهم إلا من خلال وسيط (متغير ثالث temp)

والسلام عليكم

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

#3

يسلموا

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#4

السلام عليكم

يمكن أيضاً في حالة القيم النصية بنفس الأسلوب الذي ذكره أخي الكريم الحسين ، ولكن يجب استخدام دوال الاستقطاع وقتها مثل Mid ، Left ، Right ، Substring ، Lenght

طبعاً هذا يتوقف على اللغة المستخدمة

وهذا مثال بسيط بالدوت نيت :

        A = A + B
        B = A.Substring(0, A.Length - B.Length)
        A = A.Substring(B.Length)
#5

بسم الله الرحمن الرحيم

ما شاء الله عليك أخي محمد النحراوي

بصراحه فكره حلوه

لكن عندي تعقيب بسيط

A.Substring(0, A.Length - B.Length)

هذا الكود سوف يقوم بعمل جزء جديد علي الذاكره ولن يغير في قيمة المتغير A بالطبع كما نعلم

ومن بعد ذلك سوف يتم أخذ مؤشر reference هذا النص ووضعه في المتغير B

لذلك أحب أن أشير إلي أنه تم عمل متغير خفي on the fly علي الطاير يحتوي علي قيمة عملية قص النص السابق

بالطبع ما قدمته فكرة حسنه (وبصراحه عجبتني) لكن ما حدث من خلف الستار يؤكد عدم إمكانية تبديل قيم نصيه بدون وسيط بينهم

والأمر بسيط دعنا نتخيل أننا نملك كوب به مادة خضراء اللون وأخر به مادة بيضاء اللون

كيف يمكننا تبديل محتوي تلك الكوبين بدون إستخدام كوب ثالث , والله أعلم

والسلام عليكم

تم تعديل هذه المشاركة بواسطة الحسين في 30 مايو 2005 في 17:20

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

#6

السلام عليكم

جزاك الله خيراً أخي الحبيب :) بل فكرتك هي الرائعة

ربما لي وجهة نظر اسمح لي أن أعرضها

اولا أنا أتفق معك أن العملية تتم في الذاكرة قبل إسنادها للمتغير B

ولكني أرى أن نفس الامر يحدث بالنسبة للقيم الرقمية أيضاً

مثلا العملية A-B هل يتم إدخالها مباشرة للمتغير B ؟ ام أنها تتم في الذاكرة أولاً ثم يتم إسناد القيمة الناتجة للمتغير B ؟ وذلك بالإعتماد أيضاً على مؤشر العملية في الذاكرة

هذه وجهة نظر ليس أكثر :)

#7

ماشاء الله تبارك الله

انتما الاثنان رائعان كثر الله من امثالكما

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#8

بسم الله الرحمن الرحيم

أضحك الله سنك أخي محمد :D

لكن تفكير فعلا منطقي

إلا أني أعلم من خلال دراستي البسيطه في الأسمبلي أن تلك العمليات الحسابية يتم حسابها وتسجيلها بشكل مؤقت (فقط أثناء إجراء تلك الحسابات) داخل مسجلات البروسيسور registries وبالطبع هي بمثابة وحدات تخزينيه

لكنها لا تخرج من حيز البروسيسور إلي ال RAM مثلا

لذلك لا نعتبرها وحدات تخزينيه تقليديه كما هو الحال عند التعامل مع النصوص مثلا

لذلك لا يتم عمل متغير علي الطاير داخل الRAM عند إجراء العمليات الحسابيه , هذا والله أعلم

كما أرجو في حالة وجود خطأ في معلوماتي الأسمبلاويه :) أرجو تصحيحها من إخونا الأسمبلاوين

والسلام عليكم

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

#9

:)

السلام عليكم

بيني وبينك أنا في الأسيمبلي ممكن اكون تليميذ وليس تلميذ !!

وهنا لا أستطيع ان أتكلم بكلمة في ما لا أعلم

والله أعلم بالصواب

جزاك الله خيراً :)

أخي romanof جزاك الله خيراً على كلامك الطيب :)

#10

ياسلام لمل كل واحد من الكبار يجامل الثاني

كلكم خير وبركة

جزاك الله الف خير يانحرواي

عموما ماذا لو كان العنصرين من النوع boolean

اليكم الحل

A:=A XOR B;
B:=A XOR B;
A:=A XOR B;

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#11

هذا تقريبا نفس السؤال اللي جاوب عليه الاستاذ Sad Jackal عليه في منتدى الموسوعة على الرابط

اقتباس
السلام عليكم

جئت لكم بالحل الأسرع من الأستاذ هاني الأتاسي ضمن سلسلته "شغل مخك"

a = a^b ; Get the different bits

b = b^a ; b will be the original a

a = a^b ; a will be the original b

تم تعديل هذه المشاركة بواسطة cold0zero في 11 يونيو 2005 في 06:01

#12

أول مرة أشوف الموضوع , وصلي بالمؤشرات :D من هنا

عموما يوجد حل لعملية التبديل لأي نوع من أنواع البيانات بشرط تساوي مساحة القيمتين في الذاكرة , يعني مش نبدل عنصر يملك 1 كيلو بايت من الذاكرة مع عنصر يملك 10 حروف

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  char x[10] = "Ahmed", y[10] = "Asm4all";
  cout << x << " , " << y << endl;
  for(int i = sizeof(x)-1; i >= 0; i--) // للمرور على كل الحروف
    x ^= y ^= x ^= y; // تبديل حرف مكان حرف
  cout << x << " , " << y << endl;
  system("PAUSE");	
  return 0;
}

خرج البرنامج

Ahmed , Asm4all
Asm4all , Ahmed

وفي حالة استخدام المؤشرات , يمكن التبديل بغض النظر عن المساحة وغيرة

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  char *x = "Ahmed", *y = "Asm4all";
  cout << x << " , " << y << endl;
  x = (char *) ((unsigned long)x ^ (unsigned long)y);
  y = (char *) ((unsigned long)x ^ (unsigned long)y);
  x = (char *) ((unsigned long)x ^ (unsigned long)y);
  cout << x << " , " << y << endl;
  system("PAUSE");	
  return 0;
}

نفس الخرج في البرنامج الأول

#13
Python:
a, b = b, a

Ruby:
a, b = b, a

هذا الموضوع مغلق.

مواضيع مشابهة