Pascal运动没有解决

时间:2016-04-24 20:20:44

标签: pascal

目的是在整数列表中找到最大值。

program findMaximum(input,output);

var
number: integer; Maximum: integer; 

begin    
    writeln('Insert any number except of 0. 0 finishes your input.');

        if eof then      
        writeln('No input!')   
    else   
    begin        
        read(number);    
        Maximum:= number;    
        while not eof do     
        begin    
            if number>Maximum then    
            read(number);
            Maximum := number
        end;
    if number<0 then
        read(number);    
        Maximum:= 0;    
    writeln ('The highest number is 0.')
end.

目标是找到最大值,而0关闭序列并且不包括在输入中。此外,用户不输入任何内容的情况需要计入。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

一般建议:

你绝对应该重新阅读复合语句 if..then..else 的语法。使用 if 语句比较 number 时,您的代码可能与您的预期不符。
然后,请用纸和铅笔手动运行你的代码(你让计算机执行程序的部分),思考一个语句的效果并写下所涉及的变量的任何值和然后继续下一个声明,直到你到达最后结束。这将使您更好地了解代码的作用。要分析代码的特定 misbehavior ,您可能希望使用调试器来学习。

特定于您的代码:

使用给定代码输入的任何负数都会将最大值重置为 0 。这可能是 Maximum 初始化失败的结果,因为您似乎试图确保最大值不会作为负值返回?

此外,您缺少所述的终止条件(输入 0 将结束程序)。

通过修复这些方面,代码将如下所示:

program findMaximum(input,output);

var
number: integer; Maximum: integer; 
readOn: boolean;

begin    
    Maximum:=0;
    readOn := true;
    writeln('Insert any number except of 0. 0 finishes your input.');

    if eof then      
        writeln('No input!')
    else   
    begin        
        read(number);    
        Maximum:= number;    
        while readOn and not eof do 
        begin    
            if number = 0 then
               readOn := false
            else
            begin
                if number>Maximum then
                    Maximum := number;
                read(number);
            end;
        end;
        writeln ('The highest number is ',Maximum,'.');
    end
end.

但是,在输入期间发生EOF时,您将无法正确处理此情况。 (不仅仅是在读取值时的第一个事件。)

考虑到这一点,你最终可能会使用:

program findMaximum(input,output);

var
number: integer; Maximum: integer; 
readOn: boolean;
valuesSeen: boolean;

begin    
    Maximum:=0;
    readOn := true;
    valuesSeen := false;
    writeln('Insert any number except of 0. 0 finishes your input.');

    read(number);
    while readOn and not eof do  
    begin
        if not eof then
        begin
            if number = 0 then
               readOn := false
            else
            begin
                valuesSeen := true;
                if number>Maximum then
                    Maximum := number;
                read(number);
            end
        end
    end;
    if valuesSeen then
        writeln ('The highest number is ',Maximum,'.')
    else
        writeln('No input!')
    end
end.