Определить количество всех отрицательных компонент типизированного файла вещественных чисел - 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.
Объяснение кода листинга программы
- Объявление функции ProcessFile с аргументом aFileName и возвращаемым типом integer.
- Создание переменной fHandle типа file of Single для работы с файлом.
- Создание переменной value типа Single для хранения прочитанного значения из файла.
- Инициализация результата в 0.
- Попытка открыть файл с помощью AssignFile(fHandle, aFileName).
- Проверка размера файла с помощью FileSize(fHandle) и возможность обработки его значения с помощью Raise Exception.Create.
- Чтение значения из файла с помощью Read(fHandle, value).
- Проверка на отрицательность значения и увеличение результата в случае обнаружения отрицательного числа.
- Повторение шагов 7-8 до достижения конца файла с помощью EOF(fHandle).
- Закрытие файла с помощью CloseFile(fHandle).
- Обработка исключений с помощью try-except блока.
- Установка значения результата в -1 в случае возникновения ошибки.
- Завершение функции с выходом из блока try-except и возвратом значения результата.
- Объявление переменной fHTestFile типа file of Single для работы с тестовым файлом.
- Создание тестового файла с помощью AssignFile(fHTestFile, '_test.dat') и Rewrite(fHTestFile).
- Запись в тестовый файл отрицательного значения с помощью Write(fHTestFile, Single(-15.0)).
- Запись в тестовый файл положительного значения с помощью Write(fHTestFile, Single(15.0)).
- Закрытие тестового файла с помощью CloseFile(fHTestFile).
- Вывод на экран ожидаемого результата выполнения функции ProcessFile('_test.dat') равного 1.
- Вывод на экран ожидаемого результата выполнения функции ProcessFile('_test.dat') равного 0.
- Вывод на экран ожидаемого результата выполнения функции ProcessFile('___test.dat') равного -1.
- Вывод на экран ожидаемого результата выполнения функции ProcessFile('file_of_single.exe') равного -1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д