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

برنامج معادلات بالكلاس (اتمنى توضيح الطريقه)

مغلق
بدأه اسم مخالف 17 في 4 يناير 2008 · 2 رد · 705 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

تكفون اتمنى احد يساعدني بمشكلتي الدكتوره اعطتنا سؤال نكتب برنامج بالكلاس

عن complex الاعداد المركبه بس الادخال بالبرايفت رقمين فقط عدد حقيقي وتخيلي

والببلك تكون فيه الجمع والطرح والطباعه انا اعرف بس لازم اكتبها على شكل معادلتين

هي تقول لا معادله وحده ماعرفت لهاا حاولت عندها تقول غلط بكلاس واحد بس نسويها

للتوضيح اكثر مثلا

4+5ت

6+7ت

كيف افهم الكمبيوتر انه يجمع 4 مع 6 & 5+7 يعني الحقيقي مع الحقيقي

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

يساعدني والله يفرج همومه/ها زي مافرجتوا علي تكفون

تكفووووووووووووووون الله يوفقكم ويعافيكم لاتطنشوني

#2

السلام عليكم هذه فكرة بسيطة تستطيعين التكمله عليها:

CONSOLE

المستخدم يكتب:

3+4i + 5+9i

ثم انتر

يظهر الناتج:

8+13i

#include <iostream>

using namespace std;

int main()

{

char i='i';

char com='+';

int a,b,c,d;

cout<<"Enter :";

cin>>a>>com>>b>>i>>c>>com>>d>>i;

cout<<endl;

cout<<a+c<<com<<b+d<<i<<endl;

system("pause");

return 0;

}

تم تعديل هذه المشاركة بواسطة arabi2013 في 4 يناير 2008 في 08:55

tvquran_6.gif

#3

الاخت الفاضله الحل بسيط ان شاءالله ..

نبدأ ..

اولا .. سوف نبني الكلاس الان الخاص بالعدد المركب ..

هنا يجب ان ناخذ فكرة عن التحميل الزائد للمؤثرات .. operator overloading ..

في السؤال المطلوب لدينا اعداد مركبه وهو كلاس جديد نحن قمنا ببرمجته .. لذلك فان اي عملية حسابيه او اي مؤثر يستدعى على كائن من هذا الكلاس الجديد فهي تكون غير معرفة للمترجم الخاص باللغة .. لذلك يتوجب علينا اعادة تعريف + للمترجم مع الكلاس الجديد الذي قمنا ببرمجته وعملية اعادة التعريف هي ما يسمى بـ operator overloading ..

عملية اعادى التعريف تكون في داخل الكلاس نفسه .. وهي كالتالي ..

class complex
  {
	  private :
	  float real,imag;


  public :
		 complex()
		   {  imag = real = 0; }

		 complex(float r , float i)
		   {
			  real =r;
			  imag =i;
		   } 



	float showreal()
	  {
	return real;
	  }

	float showimag()
	 {
	return imag;
	 }


		complex operator+(const complex& other) const 
		 {

		   return complex(real + other.real, imag + other.imag);

		 }


		complex operator-(const complex& other) const 
		{

		   return complex(real - other.real, imag - other.imag);

		}
   };


 void main()  
	{

   complex c1(2,1),c2(5,3);
   complex c3 = c2 - c1;
   complex c4 = c2 + c1;

   cout << c1.showreal() << " + " << c1.showimag()<<"i" << endl;

   cout << c2.showreal() << " + " << c2.showimag()<<"i" << endl;

   cout << " after sub - ";<< endl;
   cout <<c3.showreal() << " + " << c3.showimag()<<"i" << endl;
   cout << " after add +" << endl;
   cout <<c4.showreal() << " + " << c4.showimag()<<"i" << endl;

   }

لاحظي انه تم استخدام الكلمة المحجوزه operator لغرض اعادة تعريف + و - للاستخدام ..

تحليل سريع للكود اعلاه ..

الكائنين c1 و c2 سيأخذان فيم ابتدائيه وهي القيم المحدده داخل قوس كل واحد منهم ... لذلك فانهم سيتعدعون constructor الثاني الخاص باستخدام مابين القوسين كقيم ابتدائيه ..

الكائنين c3 و c4 سياخذان القيم صفر على انها قيم ابتدائيه وهو محدد عن طريق الconstructor الاول الذي يعطي القيمة صفر للكائن الذي لايحتوي قوس القيم الابتدائيه ..

بعدها c3 ياخذ ناتج طرح القيم الخاصه بالكائنين c1 و c2 عن طريق استخدام المؤثر - .. كذلك الc4 ياخذ ناتج جمع الكائنين باستخدام المؤثر + ..

لذلك فقاعدة يجب ان تعرفيها وهي لا يمكن استخدام اي مؤثر في لغة السي++ مع اي كائن قمتي انتي ببرمجته مالم تقومي باعادة تعريف ذلك الكائن ..

نأتي لشرح دالة اعادة تعريف ال - الطرح ..

complex operator-(const complex& other) const 
		{

		   return complex(real - other.real, imag - other.imag);

		}

نجد ان اول ما بدأن به هو اعطاء نوع الارجاع لهذه الدالة هو نوع complex الذي برمجناه نحن ..وبعدها استخدمنا الكلمة المحجوزة operator لتعرف ال - وهو المؤثر الخاص بالطرح . . . بعدها نجد استخدام الثابت والذي يدل على ان القيم التي ستجمع تبقى ثابته بعد اعادة التعريف واستخدام المؤثر - . وما بعد ال - يكون من complex ايضا لاننا نريد ان نجري عملية الطرح بين عددين مركبين ..

بعدها نجد استخدام جملة return لترجع ان real العام الخاص بالكلاس والخاص بالكائن الذي سيكون على يسار المؤثر - تطرح من قيمة real ايضا الخاصه بالكائن other والذي هو يشير الي يمين المؤثر - .

للتوضيح ..

عندما استخدمنا

c3 = c2 - c1;

هذه الجمله تفصل كالتالي عند استدعاء دالة اعادة تعريف الطرح ..

c3 = real - other.real

وكذلك بالنسبه للimag نفس الشئ لا يوجد اي اختلاف .. فلاحظي وجود الفارزة بينهم عند استخدام الجملة return في دالة - ..

وايضا الجمع نفس الشئ مجرد الرمز المراد تعريفه هو + والعملية تختلف الى جمع الحقيقي الايسر مع الحقيقي الخاص بـother .. وكذلك جمع التخيلي الايسر مع التخيلي الخاص بـ other ..

اتوقع ان يكون هذا هو المطلوب . ...

واي شئ مبهم وغير واضح انا في الخدمة ..

تحياتي العطرة

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…