Читайте также: |
|
Тема: Блочний файловий ввід-вивід структурованих даних
Мета роботи: Навчитися працювати з двійковими файлами. Організація блокового вводу-виводу даних і їх зберігання на зовнішніх носіях.
1 Короткі теоретичні відомості
Блочний вивід. Функція fwrite(). Блочний ввід-вивід використовується при збереженні даних, які буде зчитувати та чи інша програма на С. Цей спосіб використовується тільки для двійкових файлів. В процесі блочного вводу-виводу дані копіюються повністю з пам’яті на диск і навпаки з диску в пам’ять. Наприклад, при одному виклику функції блочного вводу-виводу можна записати цілий масив і навпаки, одним викликом функції зчитати цей масив з диску в пам’ять. Блочний ввід-вивід виконується функціями fread() i fwrite().
Функція fwrite(). Ця бібліотечна функція записує блок данихз пам’яті в двійковий файл. Прототип функції, який знаходиться в файлі stdio.h
int f write(void *buf, int size, int count, FILE *fp);
Аргумент buf -це вказівник на ділянку пам’яті, в якій є дані для запису в файл. Опис void означає, що аргумент є вказівником на любий тип даних.
Аргумент size -вказує розмір в байтах окремих елементів даних в блоці.
Аргумент count - вказує загальну кількість елементів даних. Наприклад, якщо треба записати масив з 100 цілочисельних елементів, то size=2, а count =100, бо цілочисельна змінна має 2 байти, кількість елементів рівна 100. Для обчислення аргументу size можна використати операцію sizeof().
Аргумент fp -є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Функція повертає кількість елементів даних, записаних в файл. Якщо ця кількість менша аргументу count, то запис був помилковим. Перевіряють правильність виводу фрагментом програми
if ((f write(buf, size, count, fp)!= count)
printf("Помилка");
Приклад: Записати одну змінну x типу double
f write(&x, sizeof(double), 1, fp);
Приклад: Записати масив data[50] типу float
float data[50];
f write(data, sizeof(float), 50, fp);/* Записує масив 50 елементів довжиною 4 байти */
або f write(data, sizeof(data), 1, fp); /* Записує масив як 1 елемент */
Блочний вивід. Функція fread(). Функція fread(). Ця бібліотечна функція зчитує блок данихз двійкового файлу в пам¢ять.
Прототип функції, який знаходиться в файлі stdio.h
int fread(void *buf, int size, int count, FILE *fp);
Аргумент buf -це вказівник на ділянку пам’яті, в яку поміщаються дані з файлу. Опис void означає, що аргумент є вказівником на будь-який тип.
Аргумент size -вказує розмір в байтах окремих елементів даних в блоці.
Аргумент count - вказує загальну кількість елементів даних. Наприклад, якщо треба зчитати масив з 100 цілочисельних елементів, то size=2, а count =100, бо цілочисельна змінна має 2 байти, квлькість елементів рівна 100. Для обчислення аргументу size можна використати операцію sizeof().
Аргумент fp -є вказівником на структуру FILE, який повертається з функції fopen(). Функція повертає кількість елементів даних, зчитаних з файлу. Якщо ця кількість менша аргумента count, то зчитування було помилковим. Перевіряють правильність виводу фрагментом програми
if ((f read(buf, size, count, fp)!= count) printf("Помилка");
2 Варіанти індивідуальних завдань
1. Задати 2 масиви розмірністю 3, елементами якого є дійсні і цілі числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 4 значення з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
2. Задати при описі 3 масиви розмірністю 2, елементами якого є дійсні, символьні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 5 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
3. Задати 4 масиви розмірністю 2, елементами якого є дійсні, символьні, дійсні і цілі числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 4 значення з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі
4. Задати при описі 3 масиви розмірністю 4, елементами якого є дійсні, символьні, дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 4 значення з сформованого файлу в новий масив, який вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
5. Задати масив розмірністю 10, елементами якого є дійсні числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 4 значення з сформованого файлу в новий масив, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
6. Задати при описі 4 масиви розмірністю 3, елементами якого є дійсні, символьні, дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 3 значення з сформованого файлу в новий масив, який вивести на екран. Передбачити повідомлення про помилки при відкритті файлу, і при блочному вводі-виводі.
7. Задати 3 масиви розмірністю 5, елементами якого є символьні. Дійсні і цілі числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 4 значення з сформованого файлу в новий масив, який вивести на екран. Передбачити повідомлення про помилки при відкритті файлу, а також при блочному вводі-виводі.
8. Задати при описі 4 масиви розмірністю 4, елементами якого є дійсні, символьні, дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 4 значення з сформованого файлу в новий масив, який вивести на екран. Передбачити повідомлення про помилки при відкритті файлу і при блочному вводі-виводі
9. Задати масив розмірністю 10, елементами якого є дійсні числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 4 значення з сформованого файлу в новий масив, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
10. Задати при описі 2 масиви розмірністю 7, елементами якого є дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 5 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
11. Задати 3 масиви розмірністю 3, елементами якого є дійсні і цілі числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 6 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
12. Задати при описі 4 масиви розмірністю 2, елементами якого є дійсні, символьні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 7 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
13. Задати 3 масиви розмірністю 2, елементами якого є дійсні, символьні, дійсні і цілі числа. Шляхом введення їх з клавіатури. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів обох масивів і прочитати 5 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі
14. Задати при описі 3 масиви розмірністю 3, елементами якого є дійсні, символьні, дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 6 значень з сформованого файлу в нові масиви, які вивести на екран. Передбачити повідомлення про помилки при відкритті файлу, а також при блочному вводі-виводі.
3 Методичні вказівки
1. Перед написанням програми ще раз переглянути теоретичний матеріал і приклади програм, що ілюструють особливості застосування функцій блочного вводу-виводу у С-програмах.
2. Уважно прочитати умову задачі індивідуального завдання, записати запропоновані дані у файл за допомогою функції f write (). Закрити файл за допомогою функції fclose().
3. Відкрити цей файл для читання і записані дані прочитати з файлу за допомогою функції f read (). в інші змінні, результати початкових і кінцевих змінних вивести на екран.
4. Відкомпілювати програму і зафіксувати результати реалізації.
5. Закінчивши роботу з файлом, закрити його.
4 Приклад виконання лабораторної роботи
Задати при описі 2 масиви розмірністю 4, елементами якого є дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 5 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
Текст програми:
#include <stdio.h>
#include <stdlib.h>
void main ()
{
int i, array1[9]={1,4,5,6}, a1,a2,a3,a4;
float array2[9]={6.7,8.9,4.5,3},a5;
FILE *fp;
/* Відкриття файлу для запису в двійковому режимі */
fp=fopen("C:\\lk\\list.txt", "wb");
/* Збереження (запис) масивів у файл*/
if ((fwrite(array1, sizeof(int), 4, fp)!= 4)
{printf("Помилка запису"); exit(1);}
if ((fwrite(array2, sizeof(float), 4, fp)!= 4)
{printf("Помилка запису "); exit(2);}
fclose(fp);
/* Відкриття того ж файлу для читання в двійковому режимі */
fp=fopen("("C:\\lk\\list.txt", "rb"");
/* Зчитування даних в змінні a1,a2,a3,a4,a5*/
if ((fwrite(&a1, sizeof(int), 1, fp)!= 1)
{printf("Помилка запису"); exit(3);}
if ((fwrite(&a2, sizeof(int), 1, fp)!= 1)
{printf("Помилка запису"); exit(4);}
if ((fwrite(&a3, sizeof(int), 1, fp)!= 1)
{printf("Помилка запису"); exit(5);}
if ((fwrite(&a4, sizeof(int), 1, fp)!= 1)
{printf("Помилка запису"); exit(6);}
if ((fwrite(&a5, sizeof(float), 1, fp)!= 1)
{printf("Помилка запису"); exit(7);}
fclose(fp);
/* Вивід прочитаних змінних на екран*/
printf("a1= %d\t a2= %d\t a3= %d\t a4= %d\t a5= %f\n ", a1,a2,a3,a4,a5); }
5 Контрольні запитання
1. Яка функція блочного вводу?
2. Яка функція блочного виводу?
3. Який прототип функції fwrite().?
4. Який прототип функції fread()?
Дата добавления: 2015-07-17; просмотров: 134 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Лабораторна робота № 22 | | | Лабораторна робота № 24 |