
- •Інструкція до лабораторної роботи № 1
- •Короткі теоретичні дані
- •Елементи мови Сі Під елементами мови Сі розуміють наступні базові конструкції, які використовуються при написанні програм:
- •Константа з плаваючою крапкою – це дійсне десяткове додатне число. Воно містить цілу частину, дробову частину і експоненту. Такі константи мають наступний формат представлення:
- •1.2. Базові типи даних.
- •1.3. Операції.
- •1.3. Заголовочні файли.
- •1.6. Функція виводу даних printf.
- •1.7. Структура типової програми .
- •1.9. Побудова блок-схем алгоритмів програм.
- •2. Завдання
- •2.1. Домашня пiдготовка до роботи
- •2.2. Робота в лабораторії
- •До лабораторної роботи №1
- •1.1. Пустий оператор “ ; ”.
- •1.2. Оператор-вираз. Синтаксис:
- •1.4. Оператор циклу з передумовою while.
- •Оператори switch і break.
- •2. Завдання
- •2.1. Домашня пiдготовка до роботи
- •Інструкція до лабораторної роботи № 3
- •Основні теоретичні відомості
- •1.1. Функції.
- •Оголошення функції (прототип)
- •Оголошення функції
- •1.1.3. Виклик функції.
- •Визначення функції.
- •1.1.5. Передача значень функції
- •1.1.6. Оголошення покажчика.
- •1.2. Класи пам’яті
- •1.3. Оголошення масивів
- •1.4. Покажчики масивів
- •2. Завдання
- •Інструкція до лабораторної роботи № 4
- •Короткі теоретичні дані
- •1.2. Потоковий ввід-вивід
- •1.3. Відкриття і закриття потоку
- •Int fclose(вказівник_на_потік);
- •1.4. Стандартні функції для роботи з файлами.
- •1.5. Робота з файлами на диску.
- •2. Завдання
- •2.1. Домашня пiдготовка до роботи
Інструкція до лабораторної роботи № 4
ОБРОБКА СИМВОЛЬНИХ РЯДКІВ. РОБОТА З ФАЙЛАМИ
Мета роботи – вивчити елементи мови Сі, рядки, рядкові константи, принципи потокового вводу-виводу, стандартні файли і функції для роботи з ними.
Короткі теоретичні дані
1.1. Ввід-вивід.
В стандарті мови Сі відсутні засоби вводу-виводу. Всі операції вводу-виводу реалізуються за допомогою функцій, які знаходяться в бібліотеці мови Сі, яка є в складі конкретної версії системи програмування Сі. Особливістю мови Сі є відсутність заздалегідь спланованих структур файлів. Всі файли розглядаються як неструктурована послідовність байтів. Такий підхід до організації файлів дозволив розповсюдити поняття файлу на різні пристрої. Таким чином одні і ті ж функції бібліотеки мови Сі використовуються як для обміну даними з файлами, так і для обміну з пристроями.
Бібліотека мови Сі підтримує три рівні вводу-виводу: потоковий ввід-вивід, ввід-вивід нищого рівня і ввід-вивід для консолі і портів. Останній рівень забезпечує зручний спеціалізований обмін даними з монітором і портами вводу-виводу.
1.2. Потоковий ввід-вивід
На рівні потокового вводу-виводу обмін даними відбувається побайтно. Такий ввід-вивід можливий як для власне пристроїв побайтного обміну (друкуючі пристрої, монітор), так і для файлів на диску, хоча пристрої зовнішньої памяті є пристроями поблочного обміну, тобто за одне звернення до пристрою відбувається зчитування чи запис фіксованої порції даних. Найчастіше мінімальною порцією даних, яка приймає участь в обміні даних, є блок розміром 512 байт або 1024 байт. При вводі з диску (при читанні з файлу) дані розміщуються в буфер операційної системи, а потім побайтно або певними частинами передаються програмі користувача.
Функції бібліотеки вводу-виводу мови Сі, які підтримують обмін даними з файлами на рівні потоку, дозволяють обробляти дані різних розмірів і форматів, забезпечуючи при цьому буферизований ввід і вивід. Таким чином, потік – це файл разом з доступними засобами буферизації.
Працюючи з потоком можна виконувати наступні дії:
- відкривати і закривати потоки (звязувати вказівники на потоки з конкретними файлами);
- вводити і виводити: символ, рядок, форматовані дані, порцію даних будь-якої довжини;
- аналізувати помилки потокового вводу-виводу і умови досягнення кінця потоку (кінця файлу);
- керувати буферизацією потоку і розміром буферу;
- отримувати і встановлювати вказівник (індикатор) поточної позиції в потоці.
Для того щоб можна було використовувати функції бібліотеки вводу виводу мови Сі, в програму необхідно підключити заголовочний файл stdio.h (#include<stdio.h>), який містить прототипи функцій вводу-виводу, а також визначення констант, типів і структур, необхідних для роботи функцій обміну з потоком.
1.3. Відкриття і закриття потоку
Перш ніж почати роботу з потоком, його необхідно ініціалізувати, тобто відкрити. При цьому потік зв'язується в програмі зі структурою визначеного типу FILE. Визначення структурного типу FILE є в заголовочному файлі stdio.h. В структурі FILE містяться компоненти, за допомогою яких ведеться робота з потоком, зокрема: вказівник на буфер, вказівник (індикатор) поточної позиції в потоці і інша інформація.
При відкритті потоку в програму повертається вказівник на потік, який є вказівником на об'єкт структурного типу FILE. Цей вказівник ідентифікує потік у всіх наступних операціях.
Вказівник на потік, наприклад ff, повинен бути оголошений в програмі наступним чином:
#include<stdio.h>
FILE *ff;
Вказівнпик на потік набуває значення в результаті виконання функції відкриття потоку:
ff = fopen (імя_файлу, режим_відкриття);
Параметри імя_файлу і режим_відкритт є вказівниками на масив символів, які містять відповідно ім'я файлу, зв'язаного з потоком, і дані про режим відкриття. Також ці параметри можуть задаватися і безпосередньо у вигляді рядків при виклику функції відкриття файлу:
ff = fopen (“test.txt”,”r”);
де test.txt – ім'я деякого файлу, який зв'язаний з потоком.
r – визначення одного з режимів роботи з файлом (тип доступу до потоку).
Стандартно файл, який зв'язаний з потоком, можна відкрити в одному з нижче перелічених режимів:
“w” – новий текстовий файл відкривається для запису. Якщо файл вже існував, то попередній вміст витирається, файл створюється по новому;
“r” – існуючий текстовий файл відкривається лише для читання;
“a” – текстовий файл відкривається (або створюється, якщо файлу немає) для внесення в нього нової інформації (добавлення в кінець файлу). На відміну від режиму “w” режим “а” дозволяє відкривати вже існуючий файл, не знищуючи його попередньої версії, і записувати в кінець файлу;
“w+” – новий текстовий файл відкривається для запису і наступних багаторазових виправлень. Якщо файл вже існує, то попередній зміст витирається. Наступні після відкриття файлу записи і читання з нього не допустимі в будь-якому місці файлу, зокрема запис дозволений і в кінець файлу, тобто файл може збільшуватись («рости»);
“r+” – існуючий текстовий файл відкривається як для читання, так і для запису в будь-якому місці файлу; але в цьому режимі неможливий запис в кінець файлу, тобто неможливе збільшення розміру файлу;
“а+” – текстовий файл відкривається або створюється (якщо файлу немає) і стає доступним для змін, тобто для запису і для читання в будь-якому місці; при цьому на відміну від режиму “w+” можна відкрити існуючий файл і не знищувати його змісту; на відміну від режиму “r+” в режимі “а+” можна робити запис в кінець файлу, тобто збільшувати його розміри.
Потік можна відрити в текстовому або в двійковому (бінарному) режимі.
При відкритті потоку можуть виникати наступні помилки: вказаний файл, зв'язаний з потоком, не знайдений (для режиму «читання»); диск заповнений або диск захищений від запису і ін. Необхідно також відмітити, що при виконанні функції fopen() відбувається виділення динамічної пам'яті. При її відсутності встановлюється ознака помилки “Not enough memory” (недостатньо пам'яті). В перелічених випадках вказівник на потік в будь-якому режимі, відмінному від аварійного, ніколи не буває рівним NULL.
Наведемо типову послідовність операторів, яка використовується при відкритті файлу, зв'язаного з потоком:
if ((ff = fopen(“test.txt”, “w”)) == NULL)
{
perror(“помилка відкриття файлу test.txt \n”);
exit(0);
}
де NULL – нульовий вказівник, визначений у файлі stdio.h.
Після того як файл відкритий, з ним можна працювати, записуючи чи зчитуючи з нього інформацію (в залежності від режиму роботи). Відкриті на диску файли після закінчення роботи з ними рекомендується закривати явно. Для цього використовується бібліотечна функція: