这是我第一次发帖,所以我希望我做得对。我是一个初学者,刚刚编写了一个简单的程序,该程序应该打印最少 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.
如评论中所述,由于您正在使用
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
作为对 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.```