Из группы файлов найти тот, в котором наибольшее количество строк - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Из группы файлов найти тот, в котором наибольшее кол-во строк. Очень хочу разобраться. Заранее спасибо

Решение задачи: «Из группы файлов найти тот, в котором наибольшее количество строк»

textual
Листинг программы
uses dos;
 
const
  path = 'd:\test\';
 
function getSum(n : longint) : Integer;
begin
  GetSum := 0;
  while n > 0 do
  begin
    Inc(GetSum, n mod 10);
    n := n div 10;
  end;
end;
 
var
  MaxLines : integer;
  MaxName : string;
 
procedure CheckFile(fn : string);
var
  t : text;
  s : string;
  value : longint;
  code, lines : integer;
 
  has_27 : boolean;
begin
  {$i-}
  assign(t, fn);
  reset(t);
  {$i+}
  if ioresult <> 0 then
  begin
    writeln('Ошибка при открытии файла ', fn);
    exit;
  end;
 
  lines := 0; has_27 := false;
  while not eof(t) do
  begin
    readln(t, s); inc(lines);
    val(s, value, code);
    if code = 0 then { <--- Все в порядке, целое число }
    begin
      has_27 := has_27 or (GetSum(value) = 27);
    end;
  end;
 
 
  if (MaxLines < lines) and has_27 then
  begin
    MaxLines := lines;
    MaxName := fn;
  end;
end;
 
var
  Info : SearchRec;
 
begin
  MaxLines := 0;
  MaxName := '';
 
  FindFirst(path + '*.txt', AnyFile, Info);
  while DosError = 0 do
  begin
    CheckFile(path + Info.name);
    FindNext(info)
  end;
  FindClose(Info);
 
  if MaxLines > 0 then
    Writeln ('Поиск окончен. ', MaxName, ' содержит ', MaxLines,' строк')
  else
    Writeln ('Либо нет txt-файлов, либо ни один из них не содержит числа с суммой цифр = 27');
end.

Объяснение кода листинга программы

  1. Объявлены константы и переменные:
    • path = 'd:\test\';
    • MaxLines = 0;
    • MaxName = '';
    • функции getSum и CheckFile;
    • переменные t, s, value, code, lines, has_27;
    • переменная Info для работы с файлами.
  2. В функции getSum вычисляется сумма цифр числа.
  3. В процедуре CheckFile проверяется содержимое файла на наличие чисел с суммой цифр равной 27.
    • Открывается файл с помощью функции assign.
    • Если файл не удалось открыть, выводится сообщение об ошибке и процедура завершается.
    • Считывается каждая строка файла до тех пор, пока не будет достигнут конец файла.
    • Если строка содержит число, проверяется его сумма цифр с помощью функции getSum.
    • Если сумма цифр равна 27, увеличивается счетчик линий и устанавливается флаг has_27.
    • Если (MaxLines < lines) и has_27, то значения MaxLines и MaxName обновляются.
  4. В основной части программы открывается поиск файлов с помощью функции FindFirst.
    • Поиск продолжается до тех пор, пока не будет достигнут конец списка файлов.
    • Для каждого найденного файла вызывается процедура CheckFile.
    • Если MaxLines больше 0, выводится сообщение о завершении поиска и имя файла с количеством строк.
    • Если ни один файл не удовлетворяет условиям, выводится соответствующее сообщение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы