البرنامج بيحل مصفوفات(matrices)
عايز اعمل برنامج يضرب اى مصفوفتين يحدد المستخدم حجمها
أنا بعرف اعمل ضرب اى مصفوفتين انا احددهم
البرنامج بيحل مصفوفات(matrices)
عايز اعمل برنامج يضرب اى مصفوفتين يحدد المستخدم حجمها
أنا بعرف اعمل ضرب اى مصفوفتين انا احددهم
السلام عليكم,
يمكن أن تستعمل new في س++ فكمثال يمكن أن تطلب من المستعمل طول array ونفترض أنه n وأن مصفوفتك ستكون من نوع int واسمها arr فيمكن أن تكتب ما يلي لتحدد مصفوفتك :
int* arr=new int[n]
والعدد n يكون معرفا من قبل حيث سيكون طول المصفوفة التي يريدها المستعمل.
وحين ننتهي من المصفوفة يجب إزالتها من الداكرة باستعمال :
delete arr
وهكدا نعمل حين نريد مصفوفات ديناميكية.
أتمنى لك التوفيق وإلى اللقاء.
مشكور أخى ولكنك فهمتن خطاء
امشكله ليست فى قراءه ال array من المستخدم ولكن
أنا أريد ان احل مسأله رياضيه وهى matrices product
سأعطى لك مثال على برنامج يضر مصفوفتين حجمهم 2.2
طبعاً البرنامج بالطريقة اللي إنت كاتبها ما ينفع المستخدم يحدد الأبعاد
عليك إنشاء مصفوفة ذات بعدين مثلاً int x[10][10]1
وتطلب من المستخدم إدخال البعد بما أن الضرب لايتم إلا على المصفوفات المربعة ولنفرض أن المستخدم أدخل 2 فتكون المصفوفة هنا x[2][2]1
بعدها تستخدم عدادين متداخلين لإدخال العناصر
السلام عليكم ,,
أخي رامي ,, كيف الحال,,,
اقتباسأنا بعرف اعمل ضرب اى مصفوفتين انا احددهم
اذا كنت فعلا تعرف هذا فقد انحلت مشكلتك ,,
فقط أولا اطلب من المستخدم حجم البعدين ,, 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 ,,
شرحت هذا الامر في سلسلة دروس المؤشرات ,, تقريبا في الجلسة الرابعة أو الثالثة ,,
اذا كان هناك لبس ,, فاسأل ,,
بالتوفيق ,,
مشكور يا إخوانى
بفضل الله انا بعرف اعمل 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,3void 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];
}
مشكور يا إخوانى
بفضل الله انا بعرف اعمل 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,3void 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
اتمنى تكون فهمتنى يا أخى ويوفقق الله فى مساعده الجميع
هذا الموضوع مغلق.