回 帖 发 新 帖 刷新版面

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

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

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

11 楼

还有就是READLN(H,I,J)为什么就不会对后面的read(answer)产生影响了?

12 楼

upcase是把小写转成大写字母~
为什么不产生影响这就要说到readln和read的区别了:
1.read语句后必须要有变量名表,而readln语句后可不要变量名表,它的作用是换行.
2.当键入的数据多于变量名表中的变量时,read语句会将多出的数据保留,留给后面的输入语句使用,面readln语句则宣布这些多余的数据作废.

还有round(x)是把实型转为整型,就是四舍五入取整.我自己查的书,有的问题可以自己找找,找不到再问ok?

13 楼

我觉得这个随机数的产生是不变的,是因为种子不变~
这个随机数做得对不对不我知道,但之前我有看过这样一个贴,说随机数的产生靠种子,如果两次的种子相同产生的数也相同.这是一种假随机数......
对于随机数我了解得不多.....有兴趣自己找找资料~~

14 楼

谢谢上面的大哥,我在这里解释一下我在程序中的随机数,我在随机数函数中定义的种子seed前面有VAR这个东西,这说明seed属于变量参数,系统在每次调用RAND这个函数时,SEED的取值都自动不一样,因此这个随机数函数并不是假随机数。之所以每次取到的都相同,是因为我把SEED:=2005放在了循环里,所以导致每次种子相同。
还有一个问题,在这里为什么要用UP case把小写转为大写呢?

15 楼

比如:
readln(answer);
      if answer='N'              //如果我输入小写n就会跳到else后现的语句了
        then bool:=false         //因为条件是大写的N
        else bool:=true;

16 楼

o

我来回复

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