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

أطلب مساعده أربت أجنن

مغلق
بدأه Ramy explorer في 9 ديسمبر 2003 · 7 رد · 444 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

البرنامج بيحل مصفوفات(matrices)

عايز اعمل برنامج يضرب اى مصفوفتين يحدد المستخدم حجمها

أنا بعرف اعمل ضرب اى مصفوفتين انا احددهم

#2

السلام عليكم,

يمكن أن تستعمل new في س++ فكمثال يمكن أن تطلب من المستعمل طول array ونفترض أنه n وأن مصفوفتك ستكون من نوع int واسمها arr فيمكن أن تكتب ما يلي لتحدد مصفوفتك :

int* arr=new int[n]

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

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

delete arr

وهكدا نعمل حين نريد مصفوفات ديناميكية.

أتمنى لك التوفيق وإلى اللقاء.

#3

مشكور أخى ولكنك فهمتن خطاء

امشكله ليست فى قراءه ال array من المستخدم ولكن

أنا أريد ان احل مسأله رياضيه وهى matrices product

سأعطى لك مثال على برنامج يضر مصفوفتين حجمهم 2.2

Matrix.cpp

#4

طبعاً البرنامج بالطريقة اللي إنت كاتبها ما ينفع المستخدم يحدد الأبعاد

عليك إنشاء مصفوفة ذات بعدين مثلاً int x[10][10]1

وتطلب من المستخدم إدخال البعد بما أن الضرب لايتم إلا على المصفوفات المربعة ولنفرض أن المستخدم أدخل 2 فتكون المصفوفة هنا x[2][2]1

بعدها تستخدم عدادين متداخلين لإدخال العناصر

#5

السلام عليكم ,,

أخي رامي ,, كيف الحال,,,

اقتباس
أنا بعرف اعمل ضرب اى مصفوفتين انا احددهم

اذا كنت فعلا تعرف هذا فقد انحلت مشكلتك ,,

فقط أولا اطلب من المستخدم حجم البعدين ,, X Y ,, وتقوم بوضعهما في مصفوفة ديناميكة ,, وليست ستاتكية " الديناميكية هي المؤشرات " ,, في بعدين !!

ربما تكون تعرف كيفية حجز لمتغيرات في المؤشرات ,, لكن لبعد واحد ,, فكيف يمكن أن تحجز لبعدين !!!!

حجز البعدين للمصفوفات العادية ليست مشكلة أما المؤشرات فهي أصعب قليلا لكن لها فوائدها المذهلة ,, خذ مثالك كاملا ,,,

#include <oistream.h>

void main()
{
	int x,y;
	cin>>x>>y;

	int **Z;
	Z = new int* [x];
	for(int w=0;w<x;w++)
  Z[w] = new int [y];

}

الان بعد هذه النقطة يمكنك أن تستعمل المصفوفة Z تماما كما لو أنها مصفوفة عادية ,, واعلم أن حجم البعد الاول x والثاني y ,,

شرحت هذا الامر في سلسلة دروس المؤشرات ,, تقريبا في الجلسة الرابعة أو الثالثة ,,

اذا كان هناك لبس ,, فاسأل ,,

بالتوفيق ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

مشكور يا إخوانى

بفضل الله انا بعرف اعمل array ذات بعدين واعرف اتعامل معاه

اما ضرب المصفوفات فانها تنطبق على المصفوفات المربعه والغير مربعه

ساعطى لك دوال بتضرب مصفوفتين

هذه الداله بتضرب مصفوفتين 2,2

void two(float a[2][2],float b[2][2])
{
	float c[2][2];
	c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
	c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1];
	c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
	c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1];
	cout<<c[0][0]<<"   "<<c[0][1]<<"\n\n";
	cout<<c[1][0]<<"   "<<c[1][1]<<"\n";
}
وهذه الداله بتضرب مصفوفتين  3,3

void three(float a[3][3],float b[3][3])

{

float c[3][3];

c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0];

c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1];

c[0][2]=a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2];

c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0];

c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1];

c[1][2]=a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2];

c[2][0]=a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0];

c[2][1]=a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1];

c[2][2]=a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2];

cout<<c[0][0]<<" "<<c[0][1]<<" "<<c[0][2]<<" "<<"\n\n";

cout<<c[1][0]<<" "<<c[1][1]<<" "<<c[1][2]<<" "<<"\n\n";

cout<<c[2][0]<<" "<<c[2][1]<<" "<<c[2][2]<<" "<<"\n";

}

وهذه الداله بتضرب مصفوفتين 4,4

void four(float a[4][4],float b[4][4])

{

float c[4][4];

c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];

c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];

c[0][2]=a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];

c[0][3]=a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];

c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];

c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];

c[1][2]=a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];

c[1][3]=a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];

c[2][0]=a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];

c[2][1]=a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];

c[2][2]=a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];

c[2][3]=a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];

c[3][0]=a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];

c[3][1]=a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];

c[3][2]=a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];

c[3][3]=a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];

for(int x=0;x<4;x++)

{

cout<<"\n";

for(int z=0;z<4;z++)

cout<<setw(5)<<a[x][z];

}

#7

مشكور يا إخوانى

بفضل الله انا بعرف اعمل array ذات بعدين واعرف اتعامل معاه

اما ضرب المصفوفات فانها تنطبق على المصفوفات المربعه والغير مربعه

ساعطى لك دوال بتضرب مصفوفتين

هذه الداله بتضرب مصفوفتين 2,2

void two(float a[2][2],float b[2][2])
{
	float c[2][2];
	c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
	c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1];
	c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
	c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1];
	cout<<c[0][0]<<"   "<<c[0][1]<<"\n\n";
	cout<<c[1][0]<<"   "<<c[1][1]<<"\n";
}
وهذه الداله بتضرب مصفوفتين  3,3

void three(float a[3][3],float b[3][3])

{

float c[3][3];

c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0];

c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1];

c[0][2]=a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2];

c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0];

c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1];

c[1][2]=a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2];

c[2][0]=a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0];

c[2][1]=a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1];

c[2][2]=a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2];

for(int x=0;x<3;x++)

{

cout<<"\n";

for(int z=0;z<3;z++)

cout<<setw(5)<<c[x][z];

}

}

وهذه الداله بتضرب مصفوفتين 4,4

void four(float a[4][4],float b[4][4])

{

float c[4][4];

c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];

c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];

c[0][2]=a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];

c[0][3]=a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];

c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];

c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];

c[1][2]=a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];

c[1][3]=a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];

c[2][0]=a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];

c[2][1]=a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];

c[2][2]=a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];

c[2][3]=a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];

c[3][0]=a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];

c[3][1]=a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];

c[3][2]=a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];

c[3][3]=a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];

for(int x=0;x<4;x++)

{

cout<<"\n";

for(int z=0;z<4;z++)

cout<<setw(5)<<c[x][z];

}

هذه الدوال تقوم بضرب مصفوفتين فى بعض ولكن قمت بتحديد حجمهم

لكن انا اريد ال algorithm الى يقوم بضرب اى مصفوفتين يحدد المستخدم

اى عمليه الضرب نفسها وليس ال array

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

#8

السلام عليكم ,,

هل انحلت المشكلة ,, ؟

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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