具有多种条件的 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 的帮助。 大卫