在Pascal中计算带有负数的语句

在Pascal中计算带有负数的语句,pascal,Pascal,下面的代码旨在从输入的数字范围中查找最大数字。输入0后即结束输入(确定最大值时不考虑0)。它似乎适用于正数,但对于负数范围,它总是说最大值为0。谁能告诉我错误在哪里吗 program MaximumEndZero (input, output); var Max, Value : integer; begin writeln('Enter numbers'); readln(Value); if (Value = 0) then writ

下面的代码旨在从输入的数字范围中查找最大数字。输入0后即结束输入(确定最大值时不考虑0)。它似乎适用于正数,但对于负数范围,它总是说最大值为0。谁能告诉我错误在哪里吗

program MaximumEndZero (input, output);
var
    Max,
    Value : integer;

begin
    writeln('Enter numbers');
    readln(Value);
    if (Value = 0) then
        writeln('No input')
    else
    begin
        Max := Value;
        while Value <> 0 do
        begin
            readln(Value);
            if Value > Max then
                Max := Value
        end;
        writeln('Max is: ', Max)
    end;
end.
程序最大值为零(输入、输出);
变量
最大值,
值:整数;
开始
writeln(“输入数字”);
readln(值);
如果(值=0),则
writeln('无输入')
其他的
开始
最大值:=数值;
当值为0时
开始
readln(值);
如果值>最大值,则
最大值:=最大值
结束;
writeln('Max is:',Max)
结束;
结束。

感谢vm

您自己造成了这个问题,方法是使用
value
的值来表示程序结束,然后不考虑代码中的这个特殊含义(
value=0
),从而计算出哪个值是最大值

只需将代码更改为

      if (Value <> 0) and (Value > Max) then
          Max := Value
如果(值0)和(值>最大值),则
最大值:=最大值

(值0)和
实际上表示“如果值恰好为零,则忽略该值…”

考虑输入-5,然后是0终止。每行的
value
值是多少?这是哪个帕斯卡?弗里帕斯卡?德尔菲?帕斯卡?其他的?嗯,我不认为这是一个问题,因为在这种情况下,关键是它要完全退出while循环(所以在每次迭代之前检查它是否等于零)。我犯了一个错误,将readln放在循环的开头,循环也运行了一次值为0的迭代。如果数字为正数,但只有负数0,则不会出现问题。将readln命令作为循环中的最后一条语句,可以解决此问题。不过,谢谢你的意见。我认为你没有抓住要点。如果您想找到最大值但排除零,那么您应该这样做。通常不好的做法是使用特殊值来表示输入循环的结束,否则用户可以有效地将其作为数据输入。不过,初学者经常这样做。这是一种练习。任务将在0终止,但不包括它(无论属于哪一类实践)。如果将readln命令放在循环的末尾,则输入0将值设置为0。循环的条件不再满足,不包括0。所以我不确定你在做什么saying@SanMu:将0指定给Max后,循环将退出。因此,0包含得非常好。只需调试代码,看看会发生什么。嗨,鲁迪,我不同意,因为while只在满足条件后才在循环中执行代码。因此,如果您将readln命令移动到循环的末尾,一旦输入了零,就不再有迭代了。