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

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

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

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

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

textual
Листинг программы
  1. uses dos;
  2.  
  3. const
  4.   path = 'd:\test\';
  5.  
  6. function getSum(n : longint) : Integer;
  7. begin
  8.   GetSum := 0;
  9.   while n > 0 do
  10.   begin
  11.     Inc(GetSum, n mod 10);
  12.     n := n div 10;
  13.   end;
  14. end;
  15.  
  16. var
  17.   MaxLines : integer;
  18.   MaxName : string;
  19.  
  20. procedure CheckFile(fn : string);
  21. var
  22.   t : text;
  23.   s : string;
  24.   value : longint;
  25.   code, lines : integer;
  26.  
  27.   has_27 : boolean;
  28. begin
  29.   {$i-}
  30.   assign(t, fn);
  31.   reset(t);
  32.   {$i+}
  33.   if ioresult <> 0 then
  34.   begin
  35.     writeln('Ошибка при открытии файла ', fn);
  36.     exit;
  37.   end;
  38.  
  39.   lines := 0; has_27 := false;
  40.   while not eof(t) do
  41.   begin
  42.     readln(t, s); inc(lines);
  43.     val(s, value, code);
  44.     if code = 0 then { <--- Все в порядке, целое число }
  45.     begin
  46.       has_27 := has_27 or (GetSum(value) = 27);
  47.     end;
  48.   end;
  49.  
  50.  
  51.   if (MaxLines < lines) and has_27 then
  52.   begin
  53.     MaxLines := lines;
  54.     MaxName := fn;
  55.   end;
  56. end;
  57.  
  58. var
  59.   Info : SearchRec;
  60.  
  61. begin
  62.   MaxLines := 0;
  63.   MaxName := '';
  64.  
  65.   FindFirst(path + '*.txt', AnyFile, Info);
  66.   while DosError = 0 do
  67.   begin
  68.     CheckFile(path + Info.name);
  69.     FindNext(info)
  70.   end;
  71.   FindClose(Info);
  72.  
  73.   if MaxLines > 0 then
  74.     Writeln ('Поиск окончен. ', MaxName, ' содержит ', MaxLines,' строк')
  75.   else
  76.     Writeln ('Либо нет txt-файлов, либо ни один из них не содержит числа с суммой цифр = 27');
  77. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы