具有多种条件的 Pascal
Pascal with multiple condition
我在将多个条件放入 while 循环时遇到问题。
WRITE('Entrez le nombre n°1 : ');
READLN(e);
mv := e;
WHILE (not ((e mod 5 = 0) or (e mod 2 = 0))) or (not(e = 0)) DO
BEGIN
IF (e > 0) THEN
BEGIN
i := i+1;
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END
ELSE
BEGIN
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END;
IF (mv < e ) THEN
BEGIN
im := i;
mv := e;
END;
END;
我想做的是如果e(INTEGER)能被2整除又能被5整除,或者e=0退出while循环。但是这些条件在 Pascal 中似乎不起作用...
有人知道吗?
你的逻辑有点不对(在你的代码中)。您缺少 not
:
这是一个应该有用的示例:
program Project1;
uses
Math;
var
e: Integer;
begin
Randomize;
e := 3;
while not (((e mod 5 = 0) and (e mod 2 = 0)) or (e = 0)) do
begin
WriteLn('e: ', e);
e := RandomRange(0, 25);
end;
WriteLn('Done.');
ReadLn;
end.
"WHILE" 只要条件为真,就会继续执行操作。
所以如果e=0就会进入循环。例如,当它为“1”时,您将能够退出。
如果您想在 0 时退出循环,您必须更改为 UNTIL 循环,或检查循环内是否 e=0 并 BREAK,或将条件更改为 NOT。
好的,我刚刚解决了我的问题,我实际上像@Eden 所说的那样放置了一个 UNTIL 循环。它确实有效。我之前尝试过使用它但没有更改 :
<>
到
=
这是我的新程序,运行完美
PROGRAM ALGO;
增值税
mv, e, i, im : 长整数;
开始
MV:= 0;
我:= 1;
我:= 1;
e := 0;
WRITE('Entrez le nombre n°1 : ');
READLN(e);
mv := e;
REPEAT
IF (e > 0) THEN
BEGIN
i := i+1;
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END
ELSE
BEGIN
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END;
IF (mv < e ) THEN
BEGIN
im := i;
mv := e;
END;
UNTIL ((e mod 5 = 0) and (e mod 2 = 0)) or (e = 0);
WRITELN('Le plus grand de ces nombres est ',mv,'.');
WRITELN('C''est le nombre n°',im,'.');
END.
感谢 Eden 和 Ken White 的帮助。
大卫
我在将多个条件放入 while 循环时遇到问题。
WRITE('Entrez le nombre n°1 : ');
READLN(e);
mv := e;
WHILE (not ((e mod 5 = 0) or (e mod 2 = 0))) or (not(e = 0)) DO
BEGIN
IF (e > 0) THEN
BEGIN
i := i+1;
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END
ELSE
BEGIN
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END;
IF (mv < e ) THEN
BEGIN
im := i;
mv := e;
END;
END;
我想做的是如果e(INTEGER)能被2整除又能被5整除,或者e=0退出while循环。但是这些条件在 Pascal 中似乎不起作用...
有人知道吗?
你的逻辑有点不对(在你的代码中)。您缺少 not
:
这是一个应该有用的示例:
program Project1;
uses
Math;
var
e: Integer;
begin
Randomize;
e := 3;
while not (((e mod 5 = 0) and (e mod 2 = 0)) or (e = 0)) do
begin
WriteLn('e: ', e);
e := RandomRange(0, 25);
end;
WriteLn('Done.');
ReadLn;
end.
"WHILE" 只要条件为真,就会继续执行操作。
所以如果e=0就会进入循环。例如,当它为“1”时,您将能够退出。
如果您想在 0 时退出循环,您必须更改为 UNTIL 循环,或检查循环内是否 e=0 并 BREAK,或将条件更改为 NOT。
好的,我刚刚解决了我的问题,我实际上像@Eden 所说的那样放置了一个 UNTIL 循环。它确实有效。我之前尝试过使用它但没有更改 :
<>
到
=
这是我的新程序,运行完美
PROGRAM ALGO;
增值税 mv, e, i, im : 长整数;
开始 MV:= 0; 我:= 1; 我:= 1; e := 0;
WRITE('Entrez le nombre n°1 : ');
READLN(e);
mv := e;
REPEAT
IF (e > 0) THEN
BEGIN
i := i+1;
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END
ELSE
BEGIN
WRITE('Entrez le nombre n°', i,' : ');
READLN(e);
END;
IF (mv < e ) THEN
BEGIN
im := i;
mv := e;
END;
UNTIL ((e mod 5 = 0) and (e mod 2 = 0)) or (e = 0);
WRITELN('Le plus grand de ces nombres est ',mv,'.');
WRITELN('C''est le nombre n°',im,'.');
END.
感谢 Eden 和 Ken White 的帮助。 大卫