pascal的程序填空(希望有讲解)

本题是计算n个分数相加的程序。用算式表示如下:a1(b1/c1)+a2(b2/c2)+a3(b3/c3)+……an(bn/cn)=a(b/c),其中每个位置上的数都是自然... 本题是计算n个分数相加的程序。用算式表示如下:
a1(b1/c1)+ a2(b2/c2) + a3(b3/c3) +……an(bn/cn) = a(b/c) ,其中每个位置上的数都是自然数,且分子小于分母。这个程序把n个分数读进数组A,B,C中,用重复计算两个分数和的运算来求n个分数的和。
(1)输入数据的分母不为零。
(2)用整数和真分数求两个分数的和,真分数是约分之后的分数。程序中GCD和LCM分别是求最大公约数和最小公倍数的子程序。分数的通分使用最小公倍数,约分使用最大公约数。两数之积等于其最大公约数和最小公倍数之积。
const maxn=100;
var i,k,n,s,t,u,v,l:longint;
a,b,c:array [1..maxn] of longint;
function gcd(a,b:longint):longint;
var r:longint;
begin
while b<>0 do
begin
r:=a mod b;
a:=b; ;
b:=r;
end;
gcd:=a
end;
function lcm(a,b:longint):longint;
begin
lcm:=a*
end;
begin
write('Input n='); readln(n);
for i:=1 to n do readln(a[i],b[i],c[i]);
s:=a[1]; t:=b[1]; u:=c[1];
for i:=2 to n do
begin
s:=s+a[i];
l:=lcm(c[i], u );
t:=t* +b[i]* ;
s:=s+t div ;
t:=t mod l;
k:=gcd(t,l);
t:=t div k;
u:=l div k
end;
write(a[1],'(',b[1],'/',c[1],')');
for i:=2 to n do write('+',a[i],'(',b[i],'/',c[i],')');
writeln('=',s,'(',t,'/',u,')')
end.
展开
 我来答
百度网友96edac7
2013-10-04 · TA获得超过541个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:219万
展开全部

一、预备知识

首先我们要先看清楚,题目的分数类型是“假分数”中的“带分数”,带分数的例子:




附带分数的加减法方法(摘自百度百科):异分母分数相加减,

  1. 先通分,即运用分数的基本性质将异分母分数转化为同分母分数,改变其分数单位而大小不变,

  2. 再按同分母分数相加减法去计算,最后要约分。


然后,我们来手动模拟一下分数运算,

 +  =( 整数1+4) + ( 分子 5*9+7*7 )/ ( 分母 7*9 )= (整数 5) + (  分子 94) / ( 分母 63) 

= (整数 5  +  94 div 63 ) + (  分子 94 mod 63) / ( 分母 63) =  (整数 6) + (  分子 31) / ( 分母 63)。

这个例子刚好两个分数相加后分子分母没有最大公约数,如果相加后分子分母有最大公约数,还要再约分一下


然后来看看这个程序吧。


二、

没有题号看得有点费劲哦。

function gcd...
1、if r=0 then break//有点多此一举的语句,但感觉只能填这个了

{下面是oier经常用的gcd代码形式的伪代码,不知道会不会给你点启示}
func gcd(a,b)
  if a mod b=0 then exit(b)
  else exit(gcd(b, a mod b))

function lcm...
2、*b div gcd(a,b)//a和b的最小公倍数当然等于 a*b/a和b的最大公约数

主程序
{
下面几个空请自己模拟一下上面“预备知识”中例子就可以理解。

3和4是进行分数中分子通分的处理
5 还有它下面的那行语句 是 把假分数化为真分数(分子比分母小的分数)
}
3、(l div u)
4、(l div c[i])
5、l


三、声明

上面的所有内容除了注明了的之外都是本人(天蝎的猪)亲手打出来的,鉴于各种原因,不排除会有非智力的错误出现,欢迎指正~

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式