1. Phép cộng hai đa thức: Giả sử chúng ta có hai đa thức A(x) bậc n và B(x) bậc m với n > m. Khi cộng hai đa thức này, chúng ta cộng lần lượt các hệ số cùng bậc của chúng với nhau. Ta có chương trình sau :
Chương trình 1-3
#include <conio.h>
#include <stdio.h>
#define t 10
void main(void)
{
int k,n,m;
float a[t],b[t],c[t];
clrscr();
printf("Cho bac cua da thuc A n = ");
scanf("%d",&n);
printf("Vao cac he so a\n");
for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
}
printf("Cho bac cua da thuc B m = ");
scanf("%d",&m);
printf("Vao cac he so b\n");
for (k=1;k<=m+1;k++)
{
printf("b[%d] = ",k-1);
scanf("%f",&b[k]);
}
printf("\n");
for (k=1;k<=n+1;k++)
if (k<=n-m)
c[k] = a[k];
else
c[k] = a[k] + b[k-n+m];
printf("Cac he so cua da thuc tong C la :\n");
for (k=1;k<=n+1;k++)
printf("%.4f\t",c[k]);
getch();
}
2. Phép nhân hai đa thức: Để thấy rõ thuật toán xác định các hệ số của đa thức C(x) là kết quả của phép nhân hai đa thức A(x) và B(x) ta cho một ví dụ cụ thể :
A(x) = aox5 + a1x4 + a2x3+ a3x2+ a4x + a5
B(x) = box3 + b1x2 + b2x+ b3
C(x) = A(x).B(x)
= aobox8 + (aob1 + a1bo)x7+( aob2 + a1b1 + a2bo)x6
+ (aob3+ a1b2 + a2b1+ a3bo)x5 + (a1b3 + a2b2 + a3b1+ a4bo)x4
+ (a2b3 + a3b2+ a4b1 + a5b+)x3 + ( a3b3+ a4b2 + a5b1)x2 + a5b2x + a5b3
Các hệ số của đa thức kết quả là :
Co= aobo
C1= aob1 + a1bo
C2= aob2 + a1b1 + a2bo
C3= aob3 + a1b2 + a2b1+ a3bo
C4= a1b3 + a2b2 + a3b1+ a4bo
C5= a2b3 + a3b2 + a4b1+ a5bo
C6= a3b3 + a4b2 + a5b1
C7 = a5b2
C8= a5b3
Ta nhận thấy là hệ số Ck của C(x) là tổng các tích các hệ số của đơn thức bậc i của A(x) và bậc (k-i) của B(x). Chỉ số i = 0 khi k <= m + 1 và i = k + m khi k > m+1. Chỉ số j = k khi k <= n + 1 và j = n +1 khi k > n + 1. Chương trình tính tích hai đa thức :
Chương trình 1-4
#include <conio.h>
#include <stdio.h>
#define t 10
void main()
{
int k,n,m,l,i,j,p;
float a[t],b[t],c[2*t];
clrscr();
printf("Cho bac cua da thuc A n = ");
scanf("%d",&n);
printf("Vao cac he so a\n");
for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
}
printf("Cho bac cua da thuc B m = ");
scanf("%d",&m);
printf("Vao cac he so b\n");
for (k=1;k<=m+1;k++)
{
printf("b[%d] = ",k-1);
scanf("%f",&b[k]);
}
printf("\n");
l=n+m;
for (k=1;k<=l+1;k++)
{
if (k<=(n+1))
j=k;
else
j=n+1;
if (k<=(m+1))
p=1;
else
p= k-m;
c[k]=0;
for (i=p;i<=j;i++)
c[k] = c[k] + a[i]*b[k-i+1];
}
printf("Cac he so cua da thuc tich C voi bac %d la :\n",l);
for (k=1;k<=l+1;k++)
printf("%.4f\t",c[k]);
getch();
}
3. Chia hai đa thức: Giả sử ta có hai đa thức là An(x) và Bm(x) với n³m. Thương hai đa thức này là :
Chương trình sau thực hiện việc chia 2 đa thức :
Chương trình 1-5
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define t 10
void main()
{
int k,n,m,l,i,j,jp;
float a[t],b[t],q[t],r[t],epsi;
clrscr();
printf("Cho bac cua da thuc A n = ");
scanf("%d",&n);
printf("Vao cac he so a\n");
for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
}
printf("\n");
printf("Cho bac cua da thuc B m = ");
scanf("%d",&m);
printf("Vao cac he so b\n");
for (k=1;k<=m+1;k++)
{
printf("b[%d] = ",k-1);
scanf("%f",&b[k]);
}
printf("\n");
printf("Cho gia tri sai so epsilon epsi = ");
scanf("%f",&epsi);
if ((m+1)>1)
{
l=n-m+1;
for (i=0;i<=t;i++)
r[i]=a[i];
j=n;
for (k=1;k<=l;k++)
{
q[k]=r[1]/b[1];
for (i=1;i<=j;i++)
if ((i<m+1))
r[i]=r[i+1]-q[k]*b[i+1];
else
r[i]=r[i+1];
j=j-1;
}
while ((abs(r[i])<epsi)&&(j>0))
{
for (i=1;i<=j;i++)
r[i]=r[i+1];
j=j-1;
}
if (abs(r[1])<epsi)
r[1]=0.0;
jp=j+1;
}
else
{
l=n+1;
for (k=1;k<=l;k++)
q[k]=a[k]/b[1];
jp=1;
r[1]=0.0;
}
printf("\n");
printf("Cac he so cua thuong Q(x) bac %d la : ",l);
for (k=1;k<=l;k++)
printf("%.3f\t",q[k]);
printf("\n");
printf("Cac he so cua phan du R(x) bac %d la : ",jp-1);
for (k=1;k<=jp;k++)
printf("%.3f",r[k]);
getch();
}
Không có nhận xét nào:
Đăng nhận xét