主题:一个莫名其妙的问题?
131110620
[专家分:0] 发布于 2005-07-20 22:48:00
小弟刚学此语言,很不精通!请各位好心人帮忙,先谢过。
程序很好懂,就是提出三个算式,回答,然后根据系统提示进入下一轮,可是在我运行的时候,却发现答完三个问题后,根本不需要回答系统提示,就直接进入下一轮了,而且题还一样,困扰死我了,望各位好心人帮我试试,告诉我问题究竟出在哪里,小弟给大家作揖了!!!
程序如下:
program E54(input,output);
var
x,y,d,e,f,j,h,i:integer;
seed:real;
bool:boolean;
answer:char;
function rand(var seed:real):real;
const
a=93.0;
m=8192.0;
c=1.0;
begin
seed:=a*seed+c;
seed:=round((seed/m-trunc(seed/m))*m);
rand:=seed/m
end;
begin
bool:=true;
while bool=true do
begin
seed:=2005;
x:=trunc(rand(seed)*100);
y:=trunc(rand(seed)*100);
writeln(x,'+',y,'=?',' ',x,'-',y,'=?',' ',x,'*',y,'=?');
d:=x+y;
e:=x-y;
f:=x*y;
read(h,i,j);
if d=h
then write('correct')
else write('false,it is',d);
if e=i
then write('correct')
else write('false,it is',e);
if f=j
then writeln('correct')
else writeln('false,it is',f);
seed:=seed+1;
writeln('Will you continue ?(Y/N)');
read(answer);
if answer='y'
then bool:=true
else bool:=false
end
end.
回复列表 (共16个回复)
沙发
zhsas [专家分:1680] 发布于 2005-07-20 23:20:00
你seed:=2005;放在循环内当然每次的题目都是一样的了.
还有没有必要seed:=seed+1;呀,while bool=true do里的=true是多于的.
问题出在read(answer);上,想想吧!!!
就是说你的程序根本没有也不会执行这条语句.
板凳
mlj [专家分:310] 发布于 2005-07-21 16:50:00
用随机函数:
*****
*****
begin
randomize;
*******
*******
s:=random(1000);{这时s取0-1000之间任意整数}
*******
end.
3 楼
mlj [专家分:310] 发布于 2005-07-21 16:50:00
用随机函数:
*****
*****
begin
randomize;
*******
*******
seed:=random(1000);{这时s取0-1000之间任意整数}
*******
end.
4 楼
131110620 [专家分:0] 发布于 2005-07-21 20:53:00
一楼的大哥,题目一样我懂了,可是read(answer)我已经放在循环中了啊,可是为什么它不执行呢?循环要BOOL=TRUE,才会实现啊?!为什么系统不认呢?望指教,明白点,我刚学的,谢谢了!!
5 楼
zhsas [专家分:1680] 发布于 2005-07-21 23:47:00
while bool=true do 这条语句没有语法错误,但有习惯错误,
没有写成 while bool do 的效率高,因为bool本身就是布尔型的.
read(answer)放在循环内和循环外是没有关系的,当然应该放在循环内,
你的程序根本就没有也不会执行这条语句,这是你程序失败的主要原因.
我看你写的代码就只能说这么多了,问题我已经帮你找出来了,自己再好好想想吧!
6 楼
131110620 [专家分:0] 发布于 2005-07-22 20:44:00
一楼的大哥 ,我也知道那里错了,可是系统为什么不执行他呢?大惑!
7 楼
口口and枕头 [专家分:1550] 发布于 2005-07-23 00:22:00
对你的做了一点修改现在可以判断是否继续执行了~但对你的rand的工作原理不太清楚,,也不知道round是什么,所以对提问为什么老是一个就不太清楚了~~
不过总还是有点改过`~~~嘿嘿
program E54(input,output);
var
x,y,d,e,f,j,h,i:integer;
seed:real;
bool:boolean;
answer:char;
function rand(var seed:real):real;
const
a=93.0;
m=8192.0;
c=1.0;
begin
seed:=a*seed+c;
seed:=round((seed/m-trunc(seed/m))*m);
rand:=seed/m
end;
begin
bool:=true;
while bool=true do
begin
seed:=2005;
x:=trunc(rand(seed)*100);
y:=trunc(rand(seed)*100);
writeln(x,'+',y,'=?',' ',x,'-',y,'=?',' ',x,'*',y,'=?');
d:=x+y;
e:=x-y;
f:=x*y;
readln(h,i,j);//这样就不会对后面answer的读入产生影响了~
if d=h
then write('correct')
else write('false,it is',d,' ');
if e=i
then write('correct')
else write('false,it is',e,' ');
if f=j
then writeln('correct')
else writeln('false,it is',f,' ');
seed:=seed+1;
writeln('Will you continue ?(Y/N)');
readln(answer);
answer:=upcase(answer);
if answer='N' //这样好点
then bool:=false
else bool:=true;
end;
end.
8 楼
zhsas [专家分:1680] 发布于 2005-07-23 02:55:00
楼上的上机试过了没有呀?
9 楼
口口and枕头 [专家分:1550] 发布于 2005-07-23 11:20:00
试过了~
10 楼
131110620 [专家分:0] 发布于 2005-07-23 15:42:00
7楼的大哥,answer:=upcase(answer);是什么意思啊?UP CASE 又是什么啊?望指教
我来回复