turbo pascal的小问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 05:48:15
我是新手,学了没一天,自己编了个求最大公约数的编程,但运行时出现200号错码,好像是被零除了,大家看看到底哪里被零了.
program zdgys(input,output);
var x,y,rx,ry,i,max:integer;
begin
i:=1;
write('x=');readln(x);
write('y=');readln(y);
repeat
repeat
rx:=x mod i; ry:=y mod i;
if (rx<>0)or(ry<>0) then i:=i+1;
until (rx=0)and(ry=0);
max:=i;
i:=i+1;
until (i=x)or(i=y);
writeln('n=',max);
end.
哪位好心人帮我改改啊,分数已经提高了.

program zdgys(input,output);
var x,y,rx,ry,i,max:integer;
begin
i:=0;
write('x=');readln(x);
write('y=');readln(y);
repeat
i:=i+1;
repeat
rx:=x mod i; ry:=y mod i;
if (rx<>0)or(ry<>0) then i:=i+1;
if (i>x) or (i>y) then break;
until (rx=0)and(ry=0);
if (rx=0)and(ry=0) then max:=i;
until (i>x)or(i>y);
writeln('n=',max);
end.
问题比较大,主要是你在循环中间产生了死循环,致使x:=x+1重复执行直到越界,然后i=0了.
说明一下死循环:你的两个循环在外面的i=x or i=y成立时程序并不能从里面跳出.

这段程序最大的毛病就是你没有对readln进来的值进行判断。如果输入的是0的话,那么
rx := x mod i; 的时候,x为0,此时肯定出错啊。