#Комп’ютерний практикум № 9
#БІНАРНІ ФАЙЛИ
Мета роботи - вивчити особливості створення і обробки бінарних файлів.
##Теоретичні відомості Бінарні файли є послідовністю байтів інформації. Вони використовуються для збереження компонент визначеного типу. Бінарні файли зберігають інформацію у внутрішньому двійковому поданні. При перегляді такого файлу неможливо зрозуміти, що в ньому записано - можна побачити лише послідовність байт в шістнадцятковому форматі. Такий файл не можна створювати або виправляти вручну у текстовому редакторі.
У бінарних файлах інформація зчитується і записується у вигляді блоків певного розміру, в яких можуть зберігатися дані будь-якого виду і структури.
Оскільки компоненти бінарного файла належать до одного типу, то його структура нагадує структуру масиву. Різниця між цими двома структурними типами полягає в тому, що у масива кількість елементів фіксується при оголошенні і він цілком розташовується в оперативній пам’яті; у файла ж кількість елементів у процесі роботи програми може змінюватися, і він міститься на зовнішніх носіях інформації.
У С-програмах бінарний файл оголошують аналогічно текстовому, тобто як змінну-покажчик на стандартну структуру типу FILE
. Відкриття бінарного файлу, як і текстового, здійснюється за допомогою функції fopen_s()
.
Ознакою відкриття саме бінарного файла є додавання до рядка, що визначає режим доступу до файла, суфікса b
. Як і у випадку текстових файлів, символ «+» означає відкриття файла і для читання, і для запису.
Читання-запис бінарних файлів здійснюється, в основному, функціями блокового та форматованого введення-виведення.
Засобами блокового введення-виведення є функції fread()
і fwrite()
(таблиця 1).
Таблиця 1. Функції блокового введення-виведення
Функція | Опис |
---|---|
size_t fread(p, size, n, f) |
читання із файла f заданої кількості (n) елементів даних, кожен із яких має заданий розмір (size), і розміщення їх за покажчиком p; |
size_t fwrite(p, size, n, f) |
запис в кінець файла f заданої кількості (n) елементів даних, кожен із яких має заданий розмір (size), вибираючи їх за покажчиком р |
Для форматованого введення-виведення використовуються функцій fscanf_s()
і fprintf_s()
(таблиця 2).
Таблиця 2. Функції форматованого введення-виведення
Функція | Опис |
---|---|
int fscanf_s(FILE *stream, const char *format [,argument ]...); |
зчитування даних iз файла stream по формату format в аргументи [,argument ] |
int fprintf_s(FILE *stream, const char *format [,argument ]...); |
запис у файл stream по формату format списку аргументів [,argument ] |
Як результат, у всіх цих функцій, повертається кількість зчитаних (записаних) елементів або 0. У разі винекнення помилки, буде повернуто від'ємне значення.
Хоча дані у бінарний файл записуються послідовно, у порядку їхнього надходження, оброблятися такі файли можуть двома способами: послідовно (доступ до елемента можливий тільки після перегляду усіх попередніх компонент файла) та за допомогою прямого доступу (доступ до елемента здійснюється безпосередньо за його номером).
У С-програмах позиціонування всередині файлу забезпечується функцією int fseek(FILE *stream, long offset, int origin)
.
Параметри:
stream - покажчик на відкритий файл;
offset - число байт починаючи з origin;
origin - початкова позиція покажчика (може приймати значення: SEEK_CUR
- поточна позиція покажчика позиції, SEEK_END
- кінець файлу, SEEK_SET
- початок файлу, за замовчуванням приймає значення SEEK_SET
).
Встановити файловий покажчик на початок файлу можна також за допомогою функції rewind()
.
- Відповідність модульному підходу.
- Виведення вхідних, проміжкових і вихідних даних.
- Створення файла програмним шляхом.
- Використання об'єднань.
- Реалізація меню.
- Можливість редагування файла, у тому числі і доповнення.
- Створити файл структур з інформацією про студентів і кураторів відповідних груп. Кожна структура містить дані про викладача-куратора (його прізвище, ім’я, по-батькові) та студентів відповідної групи (їх прізвища, імена, по-батькові). Для викладача також задається його посада та дата народження; для студента – форма його навчання та середній бал успішності за останню сесію. Реалізувати наступні дії:
- на кожному потоці визначити студентів з мінімальним середнім балом успішності, групи, в яких вони навчаються, та кураторів відповідних груп;
- вивести відсортований за прізвищами список викладачів-доцентів пенсійного віку;
- в новому бінарному файлі сформувати список рекомендованих в магіст-ратуру студентів-четверокурсників денної форми навчання, середній бал успішності яких не менше “4”.
- Створити файл структур, що являє собою бібліотечний каталог і містить інформацію про книги, журнали та газети, які є в наявності у бібліотеці. Кожна структура складається з таких елементів: назва видання, його інвентарний номер, мова видання. Для книг також вказується прізвище автора (авторів), жанр книги, рік видання; для журналів – номер та рік видання журналу, тематика; для газет – номер та дату випуску, тематика. Реалізувати наступні дії:
- вивести відсортований за алфавітом список та наявну кількість книг вказаного автора, виданих у заданий період;
- визначити кількість найменувань україномовних журналів і газет вказаної тематики;
- в новому бінарному файлі створити впорядкований за назвою каталог наявних у бібліотеці англомовних журналів за вказаний рік.
- Створити файл структур з інформацією про працівників підприємства (робітників та інженерно-технічний персонал). Кожна структура складається з таких елементів: прізвище працівника, його стать, освіта, стаж роботи, оклад. Для ІТП також вказується фах та рівень доступу до секретної інформації; для робітників – професія та розряд. Реалізувати наступні дії:
- вивести відсортований за прізвищами список робітників-чоловіків із стажем більше трьох років, зарплата яких менше вказаної;
- визначити кількість ІТП за вказаним фахом з першим рівнем секретності;
- в новому бінарному файлі сформувати список робітників 1-го розряду з повною середньою світою із зазначенням професії такого робітника.
- Створити файл структур з інформацією про спортивні споруди (стадіони, басейни, спортзали) та змагання, які планується там провести у поточному році. Кожна структура складається з таких елементів: місто, де міститься відповідна споруда; вид змагання, що планується там провести; дата проведення даного змагання. Для стадіонів також вказується їх місткість і тип покриття; для басейнів – їх розмір; для спортзалів – тип залу. Реалізувати наступні дії:
- визначити список міст з басейнами довжиною не менше 50 м. в яких у вказаний період заплановані змагання з синхронного плавання;
- вивести список спортзалів для проведення змагань з художньої гімнастики;
- в новому бінарному файлі сформувати список стадіонів з травяним покриттям місткістю до 50000 глядачів із зазначенням міста, де знаходиться відповідний стадіон.
- Створити файл структур з інформацією про твори мистецтва (проза, поезія, живопис) і їх авторів. Кожна структура складається з таких елементів: назва твору, його жанр, рік написання, прізвище автора та його громадянство. Для прози також вказується об'єм твору (у сторінках), для поезії – форма та віршований розмір твору, для живопису – напрямок та техніка виконання роботи. Реалізувати наступні дії:
- вивести авторів-українців, які написали прозаїчні та поетичні твори у вказаний період;
- визначити кількість живописних творів у жанрі натюрморт вказаного автора;
- в новому бінарному файлі сформувати список авторів, що написали романи об'мом більше 200 сторінок, із зазначенням назви роману.
- Створити файл структур з інформацією про товари меблевого магазину (стільці, столи). Кожна структура складається з таких елементів: назва товару, його вид (наприклад, стілець кухонний, стілець барний, стілець офісний, стіл кухонний, стіл комп’ютерний тощо), матеріал та колір основи, ціна та наявна кількість. Для стільців також вказується вид сидіння та спинки, за наявності оббивки - її колір; для столів – тип (прямий, закруглений, кутовий) та розміри (загальна довжина-ширина-висота). Реалізувати наступні дії:
- визначити кількість та вартість усіх наявних у магазині стільців вказаного виду;
- вивести список м'яких стільців з оббивкою червоного кольору і вартістю від 100 до 500 грн.;
- в новому бінарному файлі сформувати список прямих комп’ютерних столів вказаної довжини із зазначенням інших їх розмірів.
- Створити файл структур з інформацією про наявний житловий фонд міст (багатоквартирні та приватні будинки). Кожна структура складається з таких елементів: адреса відповідного будинку, загальна кількість його мешканців. Для багатоквартирного будинку також вказується поверховість та кількість квартир; для приватного будинку – кількість кімнат та розмір ділянки. Реалізувати наступні дії:
- вивести відсортовані за алфавітом адреси усіх багатоповерхових будинків з кількістю мешканців більше 1000 із зазначенням поверховості від-повідного будинку;
- визначити кількість мешканців, що проживають в приватних будинках вказаного міста;
- в новому бінарному файлі сформувати список приватних будинків (їх адрес) з ділянкою більше 15 соток.
- Створити файл структур з інформацією про поставки канцтоварів на склад (зошити, приладдя для письма, папір). Кожна структура складається з таких елементів: назва товарної позиції, ціна одиниці товару, об’єм партії, дата поста-вки. Для зошитів також вказується їх вид (у клітинку, у лінію), формат, тип політурки, кількість аркушів; для олівців – колір, кількість штук в упаковці; для паперової продукції – вид (папір офісний, папір для нотаток, папір кольоровий тощо), формат та щільність (г/м2), кількість аркушів в упаковці. Реалізувати наступні дії:
- вивести формати зошитів у клітинку з твердою політуркою і кількістю аркушів від 12 до 48, що є в наявності на складі;
- визначити сумарну вартість кольорових олівців, що поставлені в зазначений термін;
- в новому бінарному файлі сформувати список паперової продукції вказаного діапазону щільності із зазначенням кількості аркушів в упаковці.
- Створити файл структур з інформацією про наявне апаратне і програмне забезпечення парку комп’ютерів підрозділів підприємства. Кожна структура містить дані про фірму-постачальника певного найменування товару, ціну одиниці товару. Для апаратного забезпечення також вказується модель комп’ютера, тип процесора, об’єм RAM, фірма-виробник; для програмного забезпечення – його назва, призначення, кількість ліцензійних копій. Реалізувати наступні дії:
- вивести список комп'терів вказаної фірми-виробника;
- визначити сумарну вартість програмного забезпечення вказаного призначення з урахуванням кількості придбаних ліцензійних копій;
- в новому бінарному файлі сформувати список наявних комп'терів різних виробників з мінімальною RAM.
- Створити файл структур із статистичною інформацією про погоду у різних регіонах (температура, вітер, атмосферні опади). Кожна структура складається з таких елементів: місцевість, дата. Для температури також вказується її денне і нічне значення, для вітру – його швидкість і напрямок, для опадів – їх вид (дощ, сніг, град), кількість і інтенсивність. Реалізувати наступні дії:
- визначити переважаючий напрямок вітру у заданій місцевості у вказаний період;
- вивести відсортований за алфавітом список місцевостей, де на задану дату температура складала вказану величину;
- в новому бінарному файлі зберегти дані про середню кількість опадів у вигляді дощу у заданій місцевості у вказаний період.
- Особливості організації бінарних файлів у С/С++.
- Чим відрізняються текстові файли від бінарних?
- Чим схожі файли і масиви? Чим вони відрізняються?
- Що таке файловий покажчик? Які стандартні функції змінюють його значення?
- Як здійснюється навігація по файлу?
- Чим відрізняється послідовний доступ до компонентів файла від прямого доступу?
- Чи можливий прямий доступ до елементів бінарного файлу?