如何从 txt 文件中查找最大数字?



我必须从txt文件中找出最大的数字。数字例如:

9 8 7 6 5

有人告诉我,它应该有效,但它没有,我不知道如何使用文件 bcs。

program file;
uses crt;
var i,count,help:integer;
numb:array [1..9] of integer;
f:text;
begin
clrscr;
assign(f,'file1.txt');
reset(f);
readln(f,count);
for i:=1 to count do
readln(f,numb[i]);
close(f);
for i:=2 to count do
begin
if (numb[i-1] < numb[i]) then
help:=numb[i-1];
numb[i-1]:=numb[i];
numb[i]:=help;
end;  
for i:=1 to count do
begin
write(numb[i]);
end;
readln;
end.

如果您只想知道最大数字,则可以在读取文件中的数字时使用运行最大值。

作为用户,您不必知道文件中有多少个数字。程序应该确定这一点。

我写了一个小测试文件,叫做file1.txt

9 8 7 6 3 11 17
32 11 13 19 64 11 19 22
38 6 21 0 37

我只阅读数字,将它们与Max进行比较.这就是你所需要的。

  • 无需将数据读入数组和
  • 无需(尝试)对数据进行排序。你只想要最高的数字,对吧?
  • 用户也无需知道或输入文本文件中的数字数量。
program ReadMaxNumber;
uses
Crt;
var
Max, Num: Integer;
F: Text;
begin
ClrScr;
Assign(F, 'file1.txt');
Reset(F);
Max := -1;
while not Eof(F) do
begin
Read(F, Num);
if Num > Max then
Max := Num;
end;
Close(F);
Writeln('Maximum = ', Max);
Readln;
end.

当我运行它时,输出是预期的:

Maximum = 64

提供的代码中存在一些错误:

  1. 程序名称为文件。程序名称不能是关键字;
  2. 您从文件中读取变量count,但在文件中找不到实际值,因此count=0.因此,从不执行从文件中读取数据的for循环。您要么从文件读取它,要么从键盘读取它(在下面的解决方案中,我选择了第二个选项);
  3. 从文件读取时使用readlnreadln读取数据后将光标移动到下一行。这意味着只有第一个数字 9 被存储到numb中。将readln替换为read;
  4. 在第二个for循环中,你说if ... then.如果你想执行所有三个指令(我认为你这样做了,因为它是值的交换),把它们放在beginend之间。否则,如果条件为真,则仅执行第一条指令,其余指令始终执行;
  5. 确定最大值的方法是矫枉过正。最好采用一个变量max,它最初获取数组中第一个元素的值,然后循环输入剩余值以查看值是否高于max

最终代码如下所示:

program file1;
uses crt;
var i,count,help, max:integer;
numb:array [1..9] of integer;
f:text;
begin
clrscr;
assign(f,'file1.txt');
reset(f);  
writeln('Please input a number for count :');      
readln(count);  
for i:=1 to count do  
read(f,numb[i]);
close(f);
max:=numb[1];
for i:=2 to count do
if numb[i]>max then
max:=numb[i];
write('The result is: ',max); 
readln;
end.

相关内容

  • 没有找到相关文章

最新更新