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

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

我必须从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.
pascal freepascal turbo-pascal
2个回答
1
投票

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

作为用户,您不必知道文件中有多少个数字。该计划应该确定。

我写了一个名为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
投票

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

  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.
© www.soinside.com 2019 - 2024. All rights reserved.