回 帖 发 新 帖 刷新版面

主题:一个莫名其妙的问题?

小弟刚学此语言,很不精通!请各位好心人帮忙,先谢过。
  程序很好懂,就是提出三个算式,回答,然后根据系统提示进入下一轮,可是在我运行的时候,却发现答完三个问题后,根本不需要回答系统提示,就直接进入下一轮了,而且题还一样,困扰死我了,望各位好心人帮我试试,告诉我问题究竟出在哪里,小弟给大家作揖了!!!
  程序如下:

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个回复)

沙发

你seed:=2005;放在循环内当然每次的题目都是一样的了.
还有没有必要seed:=seed+1;呀,while bool=true do里的=true是多于的.
问题出在read(answer);上,想想吧!!!
就是说你的程序根本没有也不会执行这条语句.

板凳

用随机函数:
*****
*****
begin
     randomize;
     *******
     *******
     s:=random(1000);{这时s取0-1000之间任意整数}
     *******
end.

3 楼

用随机函数:
*****
*****
begin
     randomize;
     *******
     *******
     seed:=random(1000);{这时s取0-1000之间任意整数}
     *******
end.

4 楼

一楼的大哥,题目一样我懂了,可是read(answer)我已经放在循环中了啊,可是为什么它不执行呢?循环要BOOL=TRUE,才会实现啊?!为什么系统不认呢?望指教,明白点,我刚学的,谢谢了!!

5 楼

while bool=true do 这条语句没有语法错误,但有习惯错误,
没有写成 while bool do 的效率高,因为bool本身就是布尔型的.
read(answer)放在循环内和循环外是没有关系的,当然应该放在循环内,
你的程序根本就没有也不会执行这条语句,这是你程序失败的主要原因.
我看你写的代码就只能说这么多了,问题我已经帮你找出来了,自己再好好想想吧!

6 楼

一楼的大哥 ,我也知道那里错了,可是系统为什么不执行他呢?大惑!

7 楼

对你的做了一点修改现在可以判断是否继续执行了~但对你的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 楼

楼上的上机试过了没有呀?

9 楼

试过了~

10 楼

7楼的大哥,answer:=upcase(answer);是什么意思啊?UP CASE 又是什么啊?望指教

我来回复

您尚未登录,请登录后再回复。点此登录或注册