برای این که الگوریتمی بنویسیم که دو تا چند جمله ای رو که هر کدوم رو با استفاده از ارایه دو بعدی نوشتیم رو نشون بده اول دو تا ارایه لازم داریم که این جوری باشه:
کد:
[LEFT]float P[2][n];
float T[2][m]; [/LEFT]
بعد از اون اگه فرض کنیم که p مثلا باشه p=x^3+4x^2 و حالا T رو هم مثلا فرض کنیم T=3x^2+2x اون موقع ضربشون می شه که ضرایب رو با هم ضرب کنیم توان ها رو با هم جمع ولی الگوریتمش جور در نمی اد چون دوتا سرتیتر برای هر قسمت ارایه داریم یکی به نام توان و دومی به نام ضریب؟
مثلا این جوری ولی تو ارایه
مثلا این برای p می شه)
2 3 توان
4 1 ضریب
لطفا در هنگام نوشتن عنوان مبحث عبارتی رو انتخاب کنید که موضوع مبحث رو مشخص کنه، "سوال؟" اطلاعاتی
در مورد موضوع مبحث نمیده.
B1 - هر مبحث باید عنوانی داشته باشد که خلاصه ای از موضوع آن مبحث باشد، از عناوین مبهم و کلی استفاده نکنید.
بهتره که اون اندیس ای که مقدارش ثابته (2) رو به عنوان مولفه دوم بگیرید، نه اول. یعنی اصولی اش اینه که مولفه ای
رو زودتر قرار بدید که مقدارش ممکنه بعدا تغییر کنه.
در برنامه شما شاید استفاده نداشته باشه اما اگر بعدا خواستید طول آرایه رو تغییر بدهید از نظر فنی تغییر دادن
اندازه آرایه وقتی راحت تر میشه که مولفه اول تغییر کنه و مولفه های بعدی ثابت بمانند.
اگر می خواهید این دو آرایه رو مطابق قانون ضرب چند جمله ای ها در هم ضرب کنید باید یک به یک اعضاء آرایه P
رو در یک به یک اعضاء آرایه T ضرب کنید و در آرایه سومی قرار بدهید. بعد وقتی همه اعضاء در هم ضرب شده اند
مواردی در آرایه سوم خواهد بود که توان شون یکسانه و با جمع کردن ضریب هاشون خلاصه تر میشه.
پس مراحل عبارتند از :
1) نوشتن حاصل ضرب یکی یکی اعضا در آرایه جدید
2) فاکتور گرفتن از اعضاء ای که توان یکسان دارند
3) حذف کردن عضو هایی که مقدار ضریب شون 0 است.
کد:
#include <iostream.h>
#include <conio.h>
int main()
{
int n = 2;
int m = 2;
int q = 0;
int i, j;
float P[][2] = {{1,3},{4,2}};
float T[][2] = {{3,2},{2,1}};
float **R = new float*[m * n];
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{
R[q] = new float[2];
R[q][0] = P[i][0] * T[j][0];
R[q][1] = P[i][1] + T[j][1];
q++;
}
for (i = 0; i < q - 1; i++)
for (j = i + 1; j < q; j++)
if ((R[i][1] == R[j][1]))
{
R[i][0] += R[j][0];
R[j][0] = 0;
}
j = q;
q = 0;
for (i = 0; i < j; i++)
if (R[i][0] != 0)
{
R[q][0] = R[i][0];
R[q][1] = R[i][1];
q++;
}
for (i = 0; i < q; i++)
{
if ((i > 0) && (R[i][0] > 0))
cout << " + ";
if (R[i][0] != 1)
cout << R[i][0];
if (R[i][1] != 0)
{
cout << "x";
if (R[i][1] != 1)
cout << "^" << R[i][1];
}
}
getch();
return 0;
}