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

[ تمت الإجابة ]ضرب وطرح وجمع ومقارنة المصفوفات

بدأه ريان1407 في 10 ديسمبر 2012 · 2 رد · 3,271 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أحاول كتابه كود بلغة السي + +

لقراءة عناصر المصفوفة من الكومند لاين ثم القيام بجمعها وضربها وطرحها ومقارنتها ان كانت متساوية او لا , باستخدام clases , get , operators and set

وداله البناء والهدم ومن ثم كتابتها في ملف خارجي

حاولت كثير لتلافي الاخطاء ولكنها مازالت !! كما اريد الانتهاء منه اليوم ولكن لم استطيع

بالمرفقات 3 ملفات

main.cpp

matrix.cpp ( includes functions)

matrix.h includes classes

الرجاء مساعدتي في حل الاخطاء الظاهره كما لا انسى ان اشكركم الشكر الجزيل مقدما

main.cpp

matrix.cpp

matrix.h

تم تعديل هذه المشاركة بواسطة ريان1407 في 10 ديسمبر 2012 في 15:54

#2

تم تحرير المشاركة السابقة لتغيير الملفات المرفقه

حيث قمت بتصحيح ما استطعت تصحيحه

ارجو منكم مساعدتي بالبقية

#3

السلام عليكم أخي الكريم

لنبدأ مناقشة الكود معاً

في بداية الملف main .. قمت بإدخال ابعاد المصفوفات بشكل معقد بعض الشيء

وقد استخدمت في ذلك سطر الأوامر (وهذه طريقة احترافية أهنئك عليها) ولكنها معقدة بعض الشيء

كما أن البرنامج الجيد يخاطب المستخدم جيداً ..فلو قمت بإضافة بعض عبارات المساعدة مثل :

cout<<"Enter imax : ";cin>>imax;

وبذلك توفر على نفسك التحويل من سلسلة محرفية الى رقم صحيح

مجرد ملاحظة لا أكثر _

بما أنك تريد أن يكون كل الأبعاد متساوية .. فاجبر المستخدم على ادخل رقم واحد فقط ..

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

أليس كذلك ؟

___________________________________

بالنسبة لحلقات الكتابة على الملف

	myfile<<"Matrix A: "<<endl;

	for(int i=0;i<imax;i++)
	{
		for(int j=0;j<jmax;j++)
		{
			myfile<<a.getElement(i,j)<<"  ";
		}
		myfile<<endl;
	}
	myfile<<endl;

// write the elements of matrix B on MCLASS.OUT

	myfile<<"Matrix B: "<<endl;

	for(int i=0;i<jmax;i++)
	{
		for(int j=0;j<kmax;j++)
		{
			myfile<<b.getElement(i,j)<<"  ";
		}
		myfile<<endl;
	}
	myfile<<endl;

// write the elements of matrix C on MCLASS.OUT	

	myfile<<"Matrix C: "<<endl;
	for(int i=0;i<imax;i++)
	{
		for(int j=0;j<jmax;j++)
		{
			for(int k=0;k<kmax;k++)
			{
			myfile<<c.getElement(i,k)<<"  ";
			}
		}
		myfile<<endl;
	}
	cout<<endl;

الا يفترض أن تكون في تابع مستقل خاص بالكلاس المستخدم

بما أنها عملية متكررة فلا يجب أن يكون هناك تكرار في الكود

قم بإنشاء التابع المناسب..وأقترح أن يأخذ وسيطين

كائن من نوع matrix وكائن من نوع ofstream حتى يقوم بعملة الاخراج بواسطته

ثم نستدعي هذا التابع ثلاث مرات(مرة لكل مصفوفة )

_________________________________

عثرت على خطأ قاتل !! في الملف matrix.cpp

 int Matrix::getElement(int r,int c)
{
	return elements[r*2+c];
}

أظن أن وظيفة التابع هو الوصول للعنصر الذي رقم عموده c ورقم سطره r

ولكن محتوى التابع لايقوم بذلك أبداً

لا بد من أنه سبب الكثير من الأخطاء

والمشكلة أنك كررت هذا الخطأ كثيراً في كل التوابع التالية

getColumn,setColumn

____________________________________________

أحد المشاكل التي وجدتها أيضاً هو أنك تمرر الوسطاء بنفس أسماء متحولات الكائن

	int r;
	int c;

تستخدم نفس الاسم في التوابع وهذا يجعل عملية الوصول الى متحولات الكائن أكثر صعوبة من مجرد كتابة r,c حيث سيتوجب عليك كتابة

 ::r,::c

وهكذا ..

____________________________________________

لم أراجع خوارزميتك للقيام بالضرب أوالجمع والعمليات الأخرى

لأن العمليات الأساسية فيها أخطاء

_______________________________

كاقتراح مبدئي .. قم باستخدام مصفوفة من بعدين بدل مصفوفة من بعد واحد لأن هذا سبب لك الكثير من الأخطاء في الكود ..

_______________________________

اختبر العمليات الأساسية أولاً ... ولا تنتقل للتوابع المعقدة حتى تتأكد من صلاحية عمل الأكواد الأساسية في توابع الget وال set وما شابهها

____________________________________________

عند انتهائك من هذه التعديلات وتأكدك من نجاحها .. ابدأ بتطوير الكود ..

ولا تنس أن تقوم باختبار الكود بعد كل تعديل ...

يمكنك وضع كودك بعد التعديل .. أو النقاش حول هذه التعديلات كما تريد ..

أرجو أن أكون قد أفدتك ..smile.gif

والله ولي التوفيق

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

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

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

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

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

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