Как найти самый большой номер из текстового файла? - PullRequest
0 голосов
/ 24 марта 2019

Я должен узнать наибольшее число из текстового файла. Номера, например:

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.

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Если вы хотите знать только наибольшее число , вы можете использовать рабочий максимум при чтении чисел в файле.

Как пользователь, вам не нужно знать, сколько чисел в файле. Программа должна определить это.

Я написал небольшой тестовый файл, который называется 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 голос
/ 24 марта 2019

В предоставленном коде есть несколько ошибок:

  1. Имя программы file . Имя программы не может быть ключевым словом;
  2. Вы прочитали из файла переменную count, но фактическое значение не может быть найдено в файле, поэтому count=0. По этой причине цикл for, который считывает данные из файла, никогда не выполняется. Вы либо читаете его из файла или с клавиатуры (в приведенном ниже решении я выбрал второй вариант);
  3. Вы используете readln при чтении из файла. readln перемещает курсор на следующую строку после чтения данных. Это означает, что только первое число, 9, сохраняется в numb. Заменить readln на read;
  4. Во втором цикле for вы говорите, что if ... then. Если вы хотите, чтобы все три инструкции были выполнены (и я думаю, что вы делаете, потому что это обмен значениями), поместите их между begin и end. В противном случае выполняется только первая инструкция, если условие истинно, остальные всегда выполняются;
  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.
...