
- •2 Інструкції до виконання практичних робіт
- •2.4 Практична робота № 4. Створення програми обробки рядків
- •2.4.1 Короткі теоретичні відомості
- •2.4.2 Завдання на практичну роботи
- •2.4.4 Контрольні запитання
- •2.5 Практична робота № 5. Створення програми за допомогою функції
- •2.5.1 Короткі теоретичні відомості
- •2.5.2 Завдання на практичну роботи
- •2.5.4 Контрольні запитання
- •2.6 Практична робота № 6. Робота з файлами
- •2.5.1 Короткі теоретичні відомості
- •2.5.2 Завдання на практичну роботи
- •2.5.4 Контрольні запитання
- •Перелік посилань
2.5.4 Контрольні запитання
1. Дати визначення поняттям: функція, процедура, рекурсія, рекурсивна функція.
2. Оголошення функції.
3. Прототип функції.
4. Визначення функції.
5. Команда return.
2.6 Практична робота № 6. Робота з файлами
Тема: створення програм для роботи з файлами.
Мета: закріпити знання про роботу з файлами за допомогою алгоритмічної мови програмування. Отримати навички правильного використання файлів. Навчитися створювати програми для читання і запису даних у файл.
Обладнання та програмне забезпечення: персональний комп’ютер з встановленою операційною системою та компілятором мови програмування С++.
2.5.1 Короткі теоретичні відомості
Файл - це іменована область зовнішньої пам'яті. Файл має такі характерні особливості:
1. має ім'я на диску, що дає можливість програмам працювати з
декількома файлами;
2. довжина файлу обмежується лише розміром диска.
Особливістю С є відсутність в цій мові структурованих файлів. Всі файли розглядаються як не структурована послідовність байтів. при такому підході поняття файлу поширюється і на різні пристрої. Одні і ті ж функції використовуються як для обміну даними з файлами, так і для обміну з пристроями.
Бібліотека С підтримує три рівні введення-виведення:
- Потоковий ввід-висновок;
- Введення-виведення нижнього рівня;
- Введення-виведення для консолі портів (залежить від конкретної ОС).
Розглянемо потоковий ввід-висновок.
На рівні потокового вводу-виводу обмін даними проводиться побайтно, тобто за одне звернення до пристрою (файлу) проводиться зчитування або запис фіксований порції даних (512 або 1024 байта). При введенні з диска або при зчитуванні з файлу дані містяться в буфер ОС, а потім побайтно або порціями передаються програмі користувача. При виведенні в файл дані також накопичуються в буфері, а при заповнення буфера записуються у вигляді єдиного блоку на диск. Буфери ОС реалізуються у вигляді
ділянок основної пам'яті. Т. О. потік - це файл разом з наданими коштами буферизації. Функції бібліотеки С, підтримують обмін даними на рівні потоку дозволяють обробляти дані різних розмірів і форматів. При роботі з потоком можна:
1. Відкривати і закривати потоки (при цьому покажчики на потік зв'язуються з конкретними файлами);
2. Вводити і виводити рядки, символи, форматуватині дані, порції даних довільної довжини;
3. Управляти буферизацією потоку і розміром буфера;
4. Отримувати і встановлювати покажчик поточної позиції в файлі.
Прототипи функцій вводу-виводу знаходяться в заголовному файлі <stdio.h>, которий також містить визначення констант, типів і структур, необхідних для обміну з потоком.
Перш, ніж почати працювати з потоком, його треба ініціювати, тобто відкрити. При цьому потік пов'язується зі структурою зумовленого типу FILE, визначення которій знаходиться у файлі <stdio.h>. У структурі знаходиться покажчик на буфер, покажчик на поточну позицію і т. п. При відкритті потоку повертається вказівник на потік, тобто на об'єкт типу FILE. Покажчик на потік повинен бути оголошений таким чином:
# include <stdio.h>
. . . . . . . .
FILE * f;/ / покажчик на потік
Покажчик на потік набуває значення в результаті виконання функції відкриття потоку:
FILE * fopen (const char * filename, const char * mode);
де const char * filename - рядок, який містить ім'я файлу, пов'язаного з потоком,
const char * mode - рядок режимів відкриття файлу.
наприклад:
f = fopen ("t.txt", "r");
де t.txt - ім'я файлу, r - режим відкриття файлу.
Коли програма починає виконуватися, автоматично відкриваються кілька потоків, з яких основними є:
- Стандартний потік вводу (stdin);
- Стандартний потік виводу (stdout);
- Стандартний потік виводу про помилки (stderr).
За замовчуванням stdin ставиться у відповідність клавіатура, а потокам stdout і stderr монітор. Для вводу-виводу за допомогою стандартних потоків використовуються функції:
- Getchar () / putchar () - введення-виведення окремого символу;
- Gets () / puts () - введення-виведення рядка;
- Scanf () / printf () - форматований введення / виведення.
Функції розглядалися, коли ми розглядали рядкові та символьні данні. Тепер ми можемо пов'язати їх зі стандартними потоками: введення здійснюється з стандартного потоку stdin висновок здійснюється в стандартний потік stdout. Аналогічно роботі зі стандартними потоками виконується введення-виведення в потоки, пов'язані з файлами.
Для символьного введення-виведення використовуються функції:
- Int fgetc (FILE * fp), де fp - покажчик на потік, з якого виконується зчитування. Функція повертає черговий символ у формі int з потоку fp. Якщо символ не может бути прочитаний, то повертається значення EOF.
- Int fputc (int c, FILE * fp), де fp - покажчик на потік, в який виконується запідпис, c - змінна типу int, в якій міститься записуваний в потік символ. функція повертає записаний в потік fp символ у формі int. Якщо символ не може бути записаний, то повертається значення EOF.