Pascal 程序无法识别输入(免费 pascal)

问题描述 投票:0回答:2

这是我第一次发帖,所以我希望我做得对。我是一个初学者,刚刚编写了一个简单的程序,该程序应该打印最少 20 个数字及其在数组中的位置。我正在使用自由帕斯卡。但是,如果我运行它(ctrl+F9)并输入 20 个数字(带空格)并确认没有任何反应。我还需要按其他东西吗?或者程序有什么问题吗? 提前谢谢!

这个程序(有一些德语文本):

program MinimumPositionFinder (input, output);
const
  FELDGROESSE = 20;

type
  tIndexPosition = 1..FELDGROESSE;
  tFeld = array [tIndexPosition] of integer;

var
  Feld : tFeld;
  i: tIndexPosition;
  Minimum : integer;
  Position : tIndexPosition;

begin
  writeln ('Bitte geben Sie',  FELDGROESSE:4 ,  'Zahlen ein.');
  for i := 1 to FELDGROESSE do
    readln (Feld[i]);

  Minimum := Feld[1];

  for i := 2 to FELDGROESSE do
    if Feld[i] < Minimum then
      Feld[i] := Minimum;
  
  for i := 1 to FELDGROESSE do
    if Feld[i] = Minimum then
      Position := i;

  Writeln ('Das Minimum ist' , Minimum:2 , '.' ,
    'Es befindet sich an Position', Position:2 , '.')

end.
pascal freepascal
2个回答
1
投票

如评论中所述,由于您正在使用

readln
阅读,请确保在输入每个数字后按 Enter/Return。或者,使用
read
读取您的数字。

您还需要在记录最小值的同时记录您的位置。如果您要从 left 开始寻找最小值的第一个位置,它的性能更高,并且可能更正确。

  Minimum := Feld[1];
  Position := 1;

  for i := 2 to FELDGROESSE do
    if Feld[i] < Minimum then
    begin
      Feld[i] := Minimum;
      Position := i;
    end

0
投票

作为对 Chris 答案的补充,要找到给定输入的最小值,您不需要将它们存储在数组中。只需找到最小值及其在输入循环中的位置即可:

program MinimumPositionFinder(input, output);

const
  FELDGROESSE = 20;

type
  TIndexPosition = 1..FELDGROESSE;

var
  i, Position: TIndexPosition;
  Feld, Minimum : integer;

begin
  Minimum := MaxInt;
  writeln ('Bitte geben Sie',  FELDGROESSE:4 ,  'Zahlen ein.');
  for i := 1 to FELDGROESSE do
    begin
      readln (Feld);
      if Feld < Minimum then
        begin
          Minimum := Feld;
          Position := i;
        end;
    end;

  Writeln ('Das Minimum ist' , Minimum:2 , '.' ,
    'Es befindet sich an Position', Position:2 , '.')

end.```
© www.soinside.com 2019 - 2024. All rights reserved.