Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ПРОГР.doc
Скачиваний:
8
Добавлен:
12.11.2019
Размер:
1.67 Mб
Скачать
    1. Закрытие потока

Для закрытия потока, ранее открытого функцией fopen(), используются функции fclose() и fcloseall(). Функция fclose() закрывает отдельный указанный поток; функция fcloseall() закрывает все открытые потоки за исключением стандартных. Все буфера, связанные с потоком перед закрытием выгружаются. Если поток явно не закрывается в программе, он автоматически закрывается при завершении программы. Однако лучше закрыть поток сразу, если с ним закончена работа, так как количество одновременно открытых файлов в операционной системе ограничено. Система программирования языка С разрешает иметь одновременно до 20 открытых файлов.

Прототип функции fclose()

int fclose (FILE *fp);

где fp – указатель на файл, возвращенный fopen().

Если функция fclose() возвращает 0, то операция закрытия прошла успешно а если EOF, то была ошибка (например, отсутствие носителя).

Прототип функции fcloseall()

int fcloseall (void);

Прототипы функций fclose() и fcloseall определены в файле io.h.

    1. Использование функций feof() и ferror()

Когда файл открыт для двоичного ввода, может быть прочитано целочисленное значение равное EOF (значение EOF обозначает признак конца файла), а не признак конца конца файла. В результате функция fgetc() (чтение символа из файла) будет отображать признак конца файла, хотя физический конец еще не достигнут. Для разрешения этой проблемы в языке С имеется функция feof(), используемая для определения конца двоичного файла. Она имеет прототип:

int feof ((FILE *fp);

Функция feof() возвращает не 0, если достигнут конец файла, и 0, если конец файл не достигнут. Следующий фрагмент читает двоичный файл, пока не встретится метка конца файла:

while (! Feof (fp)) ch = getc(fp);

Данный метод может применяться и к текстовым файлам.

Функция ferror() используется для определения, привела ли выполняемая операция к ошибке. Она имеет прототип:

int ferror (FILE *fp);

Она возвращает истину, если в результате выполнения операции над файлом произошла ошибка, в противном случае – ложь. Поскольку каждая файловая операция изменяет состояние ошибки, ferror() должна вызываться после каждой файловой операции.

  1. Варианты заданий

1) Создать файл целых чисел (не менее 20 компонент). Для данного файла выполнить следующие операции:

- упорядочить файл по возрастанию значений компонентов;

- найти сумму четных чисел среди компонентов;

- подсчитать количество полных квадратов среди компонентов.

Результаты записать в текстовый файл.

2) Создать файл целых чисел (не менее 25). Создать на базе этого файла три файла – F1, F2 и F3. В файл F1 поместить в порядке возрастания положительные компоненты, в файл F2 поместить в порядке убывания отрицательные компоненты, в файл F3 поместить все нулевые компоненты.

Число компонент в каждом файле вывести в текстовый файл.

3) Создать три файла F1, F2 и F3, состоящие каждый не менее чем из 8 компонент целого типа. Упорядочить каждый файл по убыванию значений компонентов. Объединить файлы F1, F2 и F3 в один файл в последовательности: компонент файла F2, компонент файла F1, компонент файла F3, далее вновь очередной компонент файла F2 и т. д.

Недостающие компоненты файлов F1, F2 и F3 заменяются соответственно значениями: 1, -1 и 0 соответственно.

4) Создать файл вещественных чисел (не менее 10 компонент). Для данного файла выполнить следующие операции:

  • найти сумму компонент файла;

  • найти произведение компонент файла;

  • найти сумму квадратов компонент файла;

  • найти среднее арифметическое и среднее геометрическое компонент файла;

  • найти третью от конца компоненту файла.

Все результаты записать в текстовый файл.

5) Создать файл вещественных чисел (не менее 15 компонент). Для данного файла выполнить следующие операции:

  • найти наибольшее из значений компонент с четными номерами;

  • найти наименьшее из значений компонент с нечетными номерами;

  • сумму положительных компонент;

  • разность наибольшей по модулю компоненты и наименьшей по модулю;

  • получить новый файл, где компоненты будут располагаться в обратном порядке.

Все результаты записать в текстовый файл.

6) Интегральный синус

вычисляется разложением в ряд

.

Составить таблицу значений интегрального синуса для 0.1  х  2 (х изменяется с шагом 0.1). Результаты записать построчно в текстовый файл в виде

“x = 0.1 Si(0.1) = a0 + a1+ . . . an = аi”,

где a0, a1, …, an – численные значения членов ряда; аi - численное значение суммы членов ряда.

Точность вычисления оценивается по последнему члену ряда и равна  =0.00001.

7) Даны файлы F1, F2, F3, F4, F5, компоненты которых являются вещественными числами. Организовать обмен компонентами между файлами в соответствии со следующей схемой: F1 F3, F2  F4, F3  F5, F4  F2, F5  F1, т. е. компоненты файла F1 переписываются в файл F3, компоненты файла F2 – в F4 и т. д. Разрешается использовать только один вспомогательный файл G.

8) Дан файл F, компоненты которого являются целыми числами. Никакой из компонентов файла F не равна нулю. Числа в файле идут в следующем порядке: десять положительных, десять отрицательных, десять положительных, десять отрицательных и т. д. Число компонент файла должно быть кратно 40. Переписать компоненты файла F в файл G, чтобы в файле G числа шли в следующем порядке: пять положительных, пять отрицательных, пять положительных, пять отрицательных и т. д.

9) Дан файл F, компоненты которого являются целыми числами. Никакая из компонент файла F не равна нулю. Числа в файле идут в следующем порядке: десять положительных, десять отрицательных, десять положительных, десять отрицательных и т. д. Число компонент файла должно быть кратно 40. Переписать компоненты файла F в файл G, чтобы в файле G числа шли в следующем порядке: восемь положительных, восемь отрицательных, восемь положительных, восемь отрицательных и т. д.

10) Дан файл F, компоненты которого являются целыми числами. Никакая из компонент не равна нулю. Файл F содержит равное количество положительных и отрицательных чисел. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G не было двух соседних чисел с одинаковым знаком.

11) Дан файл F, компоненты которого являются целыми числами. Никакая из компонент не равна нулю. Файл F содержит равное количество положительных и отрицательных чисел. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G сначала шли положительные, а затем отрицательные числа.

12) Дан файл F, компоненты которого являются целыми числами. Никакая из компонент не равна нулю. Файл F содержит равное количество положительных и отрицательных чисел. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G числа следовали в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных и т. д. (предполагается, что число компонент в файле F кратно 4).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]