Pascal 函数刚学一天 作业出现问题

输入a,b,c输出mm=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c))下面是我做的好拙好拙不好意思呃……programhanshu;vara... 输入a,b,c
输出m m=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c))
下面是我做的 好拙好拙 不好意思呃……
program hanshu;
var a,b,c,m:real;

function max(x,y,z:real):real;
var i,t:real;
begin
if x<y then begin t:=x;x:=y;y:=t;end;
if x<z then begin t:=x;x:=z;z:=t;end;
i:=x;
end;

begin
read(a,b,c);
m:=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c));
writeln(m:10:4);
readln;
end.

可能基础还都没掌握,毕竟只学了一节课,见谅啊~~~
帮忙了 鞠躬!
展开
 我来答
moosewoler
2010-12-07 · TA获得超过828个赞
知道小有建树答主
回答量:203
采纳率:75%
帮助的人:110万
展开全部
看来是你对pascal中函数使用上的失误导致不能返回正确的结果。
pascal里的function可以带回一个返回值,这个返回值保存在result里(对比,C语言中用关键词return来返回)。
比如下面这个函数,它总会返回1:
function foo:integer;
begin
result:=1;
end;
当你调用foo的时候,它会带个1回来。比如,你可以在主程序里可以这样写:
var
i:integer;
.....
i:=foo;
这样,foo的返回值1就赋给了i。
也可以这样
if(foo=1) then ....;
这个条件分支的结果恒为真。
背景知识到此为止。
再来看看你的函数。
function max(x,y,z:real):real;
var i,t:real;
begin
if x<y then begin t:=x;x:=y;y:=t;end;
if x<z then begin t:=x;x:=z;z:=t;end;
i:=x;
end;
我猜想你的本意是用i来保存最大值。两次交换之后,x被换成了最大的数,然后将x的值赋给i,这样i就是x,y,z当中的最大值。可是就像我之前说的,function只会把result的值带回去,它并不知道你希望它把i带回去。所以主程序中得不到正确的结果。
另外,这里其实并不需要对x,y,z进行交换。只需要把最大的值保存下来即可。
所以,对函数进行修改如下:
function max(x,y,z:real):real;
var
max:real; {用max暂存最大值}
begin
max:=x; {先认为x是最大的}
if max<y then max:=y; {y比max大吗?是的话,将y赋给max,这时候max=max(x,y)}
if max<z then max:=z; {z比max大吗?是的话,将z赋给max,这时候max=max(z,max(x,y))}
result:=max; {已经得到最大值,将max带回去}
end;
完毕。

PS:下次提问时记得把问题现象说清楚,不然不好定位问题所在。
再PS:你的学习进度够慢的了。。。。

示例代码:delphi7下编译运行通过。
program hanshu;

var a,b,c,m:real;

function max(x,y,z:real):real;
var
max:real;
begin
max:=x;
if max<y then max:=y;
if max<z then max:=z;
result:=max;
end;

begin
read(a,b,c);
m:=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c));
writeln(m:10:4);
readln;
end.
泰科博思
2024-12-27 广告
CASTEP是一款基于第一性原理计算方法的材料模拟软件,其优势包括:1.高精度。CASTEP使用密度泛函理论(DFT)进行第一性原理计算。这种基于波函数的方法不依赖于实验数据,可以获得非常高的准确性。2.广泛适用性。CASTEP适用于多种材... 点击进入详情页
本回答由泰科博思提供
jvutdv
2010-12-08 · TA获得超过836个赞
知道小有建树答主
回答量:829
采纳率:0%
帮助的人:774万
展开全部
pascal 程序结构就是这么规定的。
主程序就是program里的begin....end所包含的程序指令。
为了执行这些指令,必须在begin....end之前定义各种变量、函数、过程。
如:

program xxx;
var ... 这是变量说明部分

function ...
var ...
begin
.... 这是函数定义部分
end;

procedure ...
var ...
begin
..... 这是子过程定义部分
end;

begin
......... 最后这个才是主程序真正的执行部分
end.

你可以把program abc理解成一个大容器,包含所有变量、函数、过程的定义以及最后要执行的主程序指令,由于变量、函数、过程都要“先定义后使用”,所以他们的位置一定在前,主程序的执行部分一定在最后。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式