一元多项式相加

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一元多项式相加

题目:求两个一元多项式的和。输入多项式方式为,多项式项数,每项系数和指数,按指数从大到小的顺序输入。

分析

多项式的算术运算是表处理的一个经典问题。建立两张表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.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航