night-wolf
دوشنبه 15 آبان 1391, 09:57 صبح
با سلام
من میخوام تو بورلند 5.02 سی پلاس پلاس جمع و تفریق و ضرب و تقسیم ماتریس 3*2 رو بنویسم
با استفاده از آرایه میشه نوشت اما موندم تووش که چطور میشه نوشت ؟؟؟ ممنون میشم راهنمایی یا
کمکی کنید :قلب:
Ananas
سه شنبه 16 آبان 1391, 15:52 عصر
جمع و تفریقش که یک حلقه ی ساده هست ولی ضرب ماتریس 3*2 در چه چیزی؟ در ماتریس 3*2 دیگه؟ از نظر ریاضی ایراد داره. ولی در کل روشی مشابه روش زیر میتونی برای تعریف ساختارها و توابع داشته باشی:
از struct های زیر برای ماتریس ها ی تونین استفاده کنین :
typedef struct Matrix2x3
{
public:
union
{
struct
{
int _11, _12, _13;
int _21, _22, _23;
};
int m[2][3];
};
} *PMatrix2x3;
typedef struct Matrix3x2
{
public:
union
{
struct
{
int _11, _12;
int _21, _22;
int _31, _32;
};
int m[3][2];
};
} *PMatrix3x2;
typedef struct Matrix2x2
{
public:
union
{
struct
{
int _11, _12;
int _21, _22;
};
int m[2][2];
};
} *PMatrix2x2;
و برای ضرب هم :
Matrix2x2 * Matrix_2x3_3x2_Multiply(Matrix2x2 * pOut, Matrix2x3 * M1, Matrix3x2 * M2)
{
Matrix2x2 m;
m._11 = M1->_11 * M2->_11 + M1->_12 * M2->_21 + M1->_13 * M2->_31;
m._12 = M1->_11 * M2->_12 + M1->_12 * M2->_22 + M1->_13 * M2->_32;
m._21 = M1->_21 * M2->_11 + M1->_22 * M2->_21 + M1->_33 * M2->_31;
m._22 = M1->_21 * M2->_12 + M1->_22 * M2->_22 + M1->_33 * M2->_32;
*pOut = m;
return pOut;
};
به مرتبه ی ماتریس ها دقت کنید. دلیل اینکه از حلقه استفاده نکردم چون سایز ماتریس ها مشخص و ثابت هستند و استفاده از حلقه سرعت اجرا رو یک مقدار کم می کنه.
ضمنا این سوال هم مربوط به بخش:
برنامه نویسی با زبان C و ++C (http://barnamenevis.org/forumdisplay.php?45-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D8%B2%D8%A8%D8%A7%D9%86-C-%D9%88-C)
هست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.