一元多项式相加
题目:求两个一元多项式的和。输入多项式方式为,多项式项数,每项系数和指数,按指数从大到小的顺序输入。
分析
多项式的算术运算是表处理的一个经典问题。建立两张表a、b分别存放两个多项式的内容,建立表指针ta、tb,指向表a和表b的元素,根据表a、b元素中的指数大小合并输出。
1、比较ta、tb指向元素的大小,若ta的指数大于tb的指数,输出ta元素,改变指针ta;
2、若ta的指数小于tb的指数,输出tb元素,改变指针tb;
3、若ta的指数等于tb的指数,ta、tb元素的系数相加输出,同时改变指针ta和tb;
4、若有一表取空,则输出另一表剩余的内容。
参考程序:采用pascal语言
源程序一:多项式相加的顺序表实现
program ex11_5a;
type
node=record
zhi,xi:integer;
end;
ar=array[1..1000] of node;
var
a,b:ar;
ta,tb,n:integer;
begin
write('One : '); readln(n);{输入第一个多项式的系数和指数}
for ta:=n downto 1 do readln(a[ta].xi,a[ta].zhi);
ta:=n;
write('Two : '); readln(n);{输入第二个多项式的系数和指数}
for tb:=n downto 1 do readln(b[tb].xi,b[tb].zhi);
tb:=n;
write('Result is ');
while (ta>0) and (tb>0) do {当两个表均不空时}
begin {比较两表指针指向的项指数,输出指数小的项系数和指数, 同时改变该表指针}
if a[ta].zhi>b[tb].zhi then
begin
if a[ta].xi<0 then write(#8' '#8);
write(a[ta].xi,'x',a[ta].zhi,'+');
dec(ta);
end
else
if a[ta].zhi then
begin
if b[tb].xi<0 then write(#8' '#8);
write(b[tb].xi,'x',b[tb].zhi,'+');
dec(tb);
end
else
begin {若两表指针指向的项指数相等,则两系数相加输出, 两表指针同时改变}
if b[tb].xi+a[ta].xi<>0 then
begin
if b[tb].xi+a[ta].xi<0 then write(#8' '#8);
write(b[tb].xi+a[ta].xi,'x',b[tb].zhi,'+');
end;
dec(ta);
dec(tb);
end;
end;
while ta>0 do {若有一表空,则输出另一表的剩余项}
begin
if a[ta].xi<0 then write(#8' '#8);
write(a[ta].xi,'x',a[ta].zhi,'+');
dec(ta);
end;
while tb>0 do
begin
if b[tb].xi<0 then write(#8' '#8);
write(b[tb].xi,'x',b[tb].zhi,'+');
dec(tb);
end;
writeln(#8' '#8);
readln;
end.