Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

版权申明
查看: 3347|回复: 4

我的程序里哪里错了?

[复制链接]

该用户从未签到

发表于 2012-8-16 17:49:49 | 显示全部楼层 |阅读模式
帮忙看看我的程序里哪里错了?
标题:小玉家的电费
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
program project1;
var
   s,y:real;
begin
   readln(s);
   if s<=150 then writeln (s*0.4463:0:1)
else
   if (s>=151) and (s<=400) then
     writeln (150*0.4463+(s-150)*0.4663):0:1)
else
     writeln ((150*0.4463+(400-150)*0.4663+(s-400)*0.5663):0:1);
   readln;
end.              
回复

使用道具 举报

该用户从未签到

发表于 2012-8-16 22:22:19 | 显示全部楼层
program project1;
var
   s,y:real;
readln(s);
   if s<=150 then
   begin
     writeln (s*0.4463:0:1);
   end
  else
   if (s>=151) and (s<=400) then
   begin
     writeln (150*0.4463+(s-150)*0.4663:0:1);
   end
   else
     writeln ((150*0.4463+(400-150)*0.4663+(s-400)*0.5663):0:1);
   readln;
end.
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-8-17 07:32:24 | 显示全部楼层
回樓主,

您的條件判定會有死角,因為s是real type,而您的if判定用150 & 151做區隔,這樣會導致s=150.5的時候會使用s>400的算法,建議類似的條件判定式儘量寫成無縫式的銜接比較好,例如

if (s<=150) then
.....
else if (s<=400) then //因為此else一定是s>150的情況,所以不用再多加s>150的判定
.....
else
.....

請參考!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-8-17 17:48:54 | 显示全部楼层
我明白了,谢谢了!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-8-20 22:25:17 | 显示全部楼层
3个临界点,2个判断而已。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2024-6-23 07:05 , Processed in 0.031111 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表