Определить количество всех отрицательных компонент типизированного файла вещественных чисел - Free Pascal

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

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

Дан типизированный файл вещественных чисел. Определить количество всех отрицательных

Подпрограмма должна быть написана в стиле защитного программирования. Необходимо предусмотреть обработку всех возможных ошибок. Описать все необходимые типы данных. Написать спецификацию к подпрограмме.

Решение задачи: «Определить количество всех отрицательных компонент типизированного файла вещественных чисел»

textual
Листинг программы
program file_of_single;
{Задача с [url]http://www.cyberforum.ru/free-pascal/thread1628086.html[/url]
 
 Дан типизированный файл вещественных (Single) чисел.
 Определить количество всех отрицательных.
 
 Подпрограмма должна быть написана в стиле защитного программирования.
 Необходимо предусмотреть обработку всех возможных ошибок. Описать все
 необходимые типы данных. Написать спецификацию к подпрограмме.}
{$mode objfpc}{$H+}
 
uses
    {$IFDEF UNIX}{$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}{$ENDIF}
    sysutils, {для активации механизма исключений}
    Classes;
{Спецификация:
Функция принимает аргумент aFileName - имя файла вещественных числе
и возвращает целое - количество отрицательных чисел,
либо в случае неудачи значение -1}
function ProcessFile(const aFileName: string): integer;
var
  fHandle: file of Single;
  value: Single;
begin
  Result:= 0;
  try
      AssignFile(fHandle, aFileName);
 
    try
      Reset(fHandle);
 
      if FileSize(fHandle) > MaxInt then
         Raise Exception.Create('The file is too big. Integer overflow!');
 
      repeat
        Read(fHandle, value);
        if value < 0 then inc(Result);
      until EOF(fHandle) ;
 
    finally
      CloseFile(fHandle);
    end;
 
  except
    Result:= -1;
    exit;
  end;
 
end;
 
var
  fHTestFile: file of Single;
begin
  //testing
  AssignFile(fHTestFile, '_test.dat');
  Rewrite(fHTestFile);
  Write(fHTestFile, Single(15.0));
  Write(fHTestFile, Single(-15.0));
  Write(fHTestFile, Single(0.0));
  Write(fHTestFile, Single(99.0));
  CloseFile(fHTestFile);
  //корректный файл с 1-м отрицательным
  writeln('output should be 1, but we have: ', ProcessFile('_test.dat'));
  //корректный файл без отрицательных
  AssignFile(fHTestFile, '_test.dat');
  Rewrite(fHTestFile);
  Write(fHTestFile, Single(15.0));
  Write(fHTestFile, Single(15.0));
  Write(fHTestFile, Single(0.0));
  Write(fHTestFile, Single(99.0));
  CloseFile(fHTestFile);
  writeln('output should be 0, but we have: ', ProcessFile('_test.dat'));
  //несуществующий файл
  writeln('output should be -1, but we have: ', ProcessFile('___test.dat'));
  //файл неправильного формата
  writeln('output should be -1, but we have: ', ProcessFile('file_of_single.exe'));
 
  readln;
end.

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

  1. Объявление функции ProcessFile с аргументом aFileName и возвращаемым типом integer.
  2. Создание переменной fHandle типа file of Single для работы с файлом.
  3. Создание переменной value типа Single для хранения прочитанного значения из файла.
  4. Инициализация результата в 0.
  5. Попытка открыть файл с помощью AssignFile(fHandle, aFileName).
  6. Проверка размера файла с помощью FileSize(fHandle) и возможность обработки его значения с помощью Raise Exception.Create.
  7. Чтение значения из файла с помощью Read(fHandle, value).
  8. Проверка на отрицательность значения и увеличение результата в случае обнаружения отрицательного числа.
  9. Повторение шагов 7-8 до достижения конца файла с помощью EOF(fHandle).
  10. Закрытие файла с помощью CloseFile(fHandle).
  11. Обработка исключений с помощью try-except блока.
  12. Установка значения результата в -1 в случае возникновения ошибки.
  13. Завершение функции с выходом из блока try-except и возвратом значения результата.
  14. Объявление переменной fHTestFile типа file of Single для работы с тестовым файлом.
  15. Создание тестового файла с помощью AssignFile(fHTestFile, '_test.dat') и Rewrite(fHTestFile).
  16. Запись в тестовый файл отрицательного значения с помощью Write(fHTestFile, Single(-15.0)).
  17. Запись в тестовый файл положительного значения с помощью Write(fHTestFile, Single(15.0)).
  18. Закрытие тестового файла с помощью CloseFile(fHTestFile).
  19. Вывод на экран ожидаемого результата выполнения функции ProcessFile('_test.dat') равного 1.
  20. Вывод на экран ожидаемого результата выполнения функции ProcessFile('_test.dat') равного 0.
  21. Вывод на экран ожидаемого результата выполнения функции ProcessFile('___test.dat') равного -1.
  22. Вывод на экран ожидаемого результата выполнения функции ProcessFile('file_of_single.exe') равного -1.

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


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

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

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