主题:新近在教学生时要求学生编一道求小数位数的程序
我是严天雯
[专家分:110] 发布于 2006-12-08 19:13:00
新近在教学生时要求学生编一道求小数位数的程序, 一位学生编程如下:
var i:real;
j:integer;
begin
readln(i);
repeat
i:=i*10;
j:=j+1;
until i=trunc(i);
writeln(j);
end.
输入:
23.234
输出:
3 ----->正确
输入:
7.98
输出:
15 正确的结果应为2.
请教各位大虾,问题出在什么地方. 是否是I实数有误差???
回复列表 (共12个回复)
沙发
zhangyuan [专家分:630] 发布于 2006-12-08 19:15:00
var a:char;
b:string;
i,k:integer;
begin
read(a);
while a<>'.' do
begin
read(a);
end;
readln(b);
i:=length(b);
writeln(i);
readln;
end.
板凳
贺天行宝 [专家分:2300] 发布于 2006-12-09 15:04:00
var
j:integer;
i:real;
begin
readln(i);
j:=0;
repeat
i:=i*10;
inc(j);
until i=trunc(i);
writeln(j);
end.
3 楼
小田甜 [专家分:3910] 发布于 2006-12-09 21:15:00
var s:string;
begin
readln(s);writeln(length(s)-pos('.',s));
end.
4 楼
雪光风剑 [专家分:27190] 发布于 2006-12-11 08:33:00
2楼和lz的程序其实没有什么本质区别,不能改变real型的存储误差
记得别的语言中读到
对于这种类型判断是否已经无小数位的本质方法是如下中止条件判断
i-trunc(i)<.000000000001
5 楼
贺天行宝 [专家分:2300] 发布于 2006-12-12 15:23:00
我只是加了个变量赋0而已。。。。。。
4楼说的很对,我忘了。
6 楼
blackmark [专家分:210] 发布于 2006-12-20 14:14:00
对于这道题 我认为小田甜 的程序 不错
记住 浮点数始终存在误差 如我我给你的输入数据是
0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
浮点数怎么处理啊
OI中的人啊!!!!
但是小田甜的 程序没考虑 只有整数位的情况
这是我的丑程序
program number;
var
num:ansistring;
n,m,l:longint;
begin
readln(num);
n:=pos('.',num);
m:=length(num)-n;
if (n=0) thene m:=0;
writeln(m);
end.
如果错了请勿笑话
7 楼
blackmark [专家分:210] 发布于 2006-12-20 14:16:00
果然出错 “then”打成了“thene”
8 楼
johnsage [专家分:10] 发布于 2007-01-26 19:42:00
我赞成6楼blackmark 的方法
不过还可以更简单一点,我帮你改改
var
s:string;
i:integer;
begin
readln(s);
i:=pos('.',s);
if i=0
then writeln('0')
else writeln(length(s)-i);
end.
9 楼
maxumi [专家分:2200] 发布于 2007-01-27 17:15:00
program lx;
var
st:string;
begin
readln(st);
writeln(length(st)-pos('.', st));
end.
程序未经调试
10 楼
angwuy [专家分:2280] 发布于 2007-01-28 11:00:00
楼上的没有考虑没有小数时的情况
我来回复