You are on page 1of 43

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
«ОДЕСЬКА ЮРИДИЧНА АКАДЕМІЯ»
ФАКУЛЬТЕТ КІБЕРБЕЗПЕКИ ТА ІНФОРМАЦІЙНИХ ТЕХЛОГОЛОГІЙ

Кафедра інформаційних технологій

КУРСОВА РОБОТА
з дисципліни «Алгоритмізація та програмування»
на тему: «Програмне опрацювання даних у файлах»

студента 1 курсу групи 121


спеціальності 122 «Комп’ютерні науки»
Громова Андрія Андрійовича
Керівник доцент кафедри ІТ
к.т.н., доцент Трофименко О. Г.
Національна шкала ____________________
Кількість балів______ Оцінка ECTS______
Члени комісії:
_____________________________________
підпис прізвище та ініціали

_____________________________________
підпис прізвище та ініціали

м. Одеса – 2022 р.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ОДЕСЬКА ЮРИДИЧНА АКАДЕМІЯ»
ФАКУЛЬТЕТ КІБЕРБЕЗПЕКИ ТА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ

Кафедра інформаційних технологій

ЗАВДАННЯ НА КУРСОВУ РОБОТУ

з дисципліни «Алгоритмізація та програмування»


Студента Громова Андрія Андрійовича
спеціальності 122 Комп’ютерні науки першого курсу групи 121
Тема «Програмне опрацювання даних у файлах»
Варіант 5
Вхідні дані:
 текстовий файл F1.txt із числовими даними вимірювань датчиків у
вигляді матриці розмірності M на N (M – кількість датчиків, N –
кількість вимірювань);
 файл F3.txt з текстом (не менше 10 рядків).
Курсова робота виконується в такому обсязі:
I. Розрахунково-пояснювальна записка:
 аналіз засобів та методів розробки;
 словесний опис алгоритмів основного модуля;
 аналіз досягнутих результатів;
 інструкція з використання програми;
II. Графічна частина:
 схеми алгоритмів основного модуля для виконання завдань.
Індивідуальне завдання:
1) як вхідні дані для програмного опрацювання файлових даних створити
текстовий файл, наприклад, з ім’ям F1, в який записати числові дані вимірювань
датчиків у вигляді матриці розмірності M на N (M – кількість датчиків, N –
кількість вимірювань);
2) у програмному проекті розробити функцію, яка дозволить вивести на
екран вміст текстового файлу F1, ім’я якого передаватиметься як аргумент із
функції main();
3) створити функції для:
 формування числової матриці розмірності M на N зчитуванням її значень
із файлу F1. Для базового та підвищеного рівня (*) розмірність матриці
M та N задати константами;
 виведення цієї матриці на екран та у файл F2;
4) створити функцію для опрацювання числової матриці з обчисленням
значень відповідно до індивідуального варіанта: визначити значення
максимального значення вистаннього датчика (рядка матриці).
Результати обчислень записати у файл F2;
5) створити функцію для опрацювання числової матриці з формуванням
елементів вектора відповідно до індивідуального варіанта: обчислити елементи
вектора як середньоарифметичні значення тих елементів рядків, абсолютне
значення яких не перевищує 10.
Результати обчислень записати у файл F2;
6) як вхідні дані для програмного опрацювання текстових даних створити
ще один файл з ім’ям F3.txt та заповнити його коректними текстовими даними;
7) програмно переглянути на екрані вміст текстового файлу F3.txt, ім’я
якого передаватиметься як аргумент із функції main();
8) розробити функцію, яка виконуватиме програмне опрацювання даних з
файлу F3.txt:
 визначити, чи є в рядках літера А (маленька або велика);
 вивести слова файлу, які містять щонайменше дві літери ‘х’, та
обчислити їхню кількість.
Програмно записати результати опрацювання текстових даних у файл (або
файл F2.txt, або новий). Програмно переглянути на екрані вміст текстового файлу
з результатами опрацювання текстових даних.

КАЛЕНДАРНИЙ ПЛАН
№ Завдання Термін виконання
1 Ознайомлення з завданням до курсової роботи. 15.03.2022-20.03.2022
Підготування вхідних файлів
2 Частина 1. Опрацювання матриць 21.03.2021-01.04.2022
3 Частина 2. Опрацювання рядкових даних 04.04.2022-15.04.2022
4 Частина 3. Опрацювання текстових файлів 18.04.2022-29.04.2022
5 Оформлення пояснювальної записки 02.05.2022-13.05.2022
4

ЗМІСТ
Вступ................................................................................................................................5
1 Аналіз засобів та методів розробки.........................................................................7
1.1 Огляд вибраної мови програмування..............................................................7
1.2 Засоби розробки програми...............................................................................7
1.3 Елементи мови С++, які використовувалися при написанні
програмного коду....................................................................................................9
2 Словесний опис алгоритмів для розв’язування задач......................................11
2.1 Опис функції view_file().................................................................................11
2.2 Опис функції create_matrix()..........................................................................12
2.3 Опис функції output_matrix()..........................................................................13
2.4 Опис функції create_vector()...........................................................................14
2.5 Опис функції max().........................................................................................15
2.6 Опис функції letter()........................................................................................17
2.7 Опис функції word_a()....................................................................................18
3 Результати виконання програми..........................................................................20
4 Інструкція з використання програми..................................................................22
Висновки з аналізом досягнутих результатів........................................................24
Список використаних джерел...................................................................................26
Додаток А Програмний код......................................................................................27
Додаток Б Схеми алгоритмів программи..............................................................31
5
ВСТУП

Актуальність теми курсової роботи "Програмне опрацювання даних у


файлах" зумовлена повсюдною практичною затребуваністю вмінь з розробки
програмних проектів, які зберігають і обробляють дані у файлах. Тобто програма
сама має створювати файли того чи іншого формату, записувати у них дані, на
вимогу виводити або всі дані файлу, або лише ті, які задовольняють певній умові,
вміти редагувати і видаляти певні дані файлу, надавати можливість створення
нових файлів (звітних документів) з певними даними з основного файлу та ін.
Об'єктом дослідження є базові технології програмування алгоритмічною
мовою високого рівня і засоби створення програмних проектів.
Предмет дослідження – програмні засоби мови C++ для опрацювання
різнорідних даних, створення файлів різних форматів, записування у них даних,
виведення вмісту цих файлів, відбирання даних за умовою, можливості
редагування даних, створення нових файлів (звітних документів) з певними
даними з основного файлу.
Мета курсової роботи полягає у:
 систематизації, закріпленні та розширенні теоретичних і практичних
знань за фахом та використання їх під час розв’язання конкретних прикладних
задач у галузі комп’ютерних технологій та програмування;
 розвиненні навичок самостійної роботи з літературою, нормативними
документами, пошуку необхідної інформації, у тому числі в Інтернеті, оволодінні
методикою дослідження й експериментування під час розв’язання задач і питань,
які розроблюються у курсовій роботі;
 закріпленні знань алгоритмізації та навиків програмування
алгоритмічною мовою високого рівня при опрацюванні різнорідних даних у
файлах з можливістю їх програмного редагування;
 виявленні підготовки здобувачів вищої освіти до самостійної роботи.
Відповідно до поставленої мети визначено такі задачі:
 розкрити сутність технологій мови С++ з опрацювання різнорідних
даних у файлах;
 дослідити наявні сучасні програмні засоби, які дозволяють створювати
програмні проєкти мовою C++;
 вивчити засоби мови С++ з програмного створення файлів різних
форматів, записування у них даних, перегляду вмісту цих файлів, відбору даних
за умовою, редагування даних у файлах (для задач підвищеного рівня складності);
6
 розробити програмний проєкт для розв’язання завдання відповідно до
індивідуального варіанта, який передбачає створення, заповнення даними, відбір
та редагування файлів різних форматів.
Курсова робота складається зі вступу, чотирьох розділів, висновків та
списку використаних джерел. Загальний обсяг курсової роботи: 34 с., 11 рис., 2
додатки, 5 джерел.
7
1 АНАЛІЗ ЗАСОБІВ ТА МЕТОДІВ РОЗРОБКИ

1.1 Огляд вибраної мови програмування


Для досягнення поставленої мети використовується мова програмування С+
+, яка є універсальною мовою програмування з підтримкою трьох основних
концепцій програмування, а саме програмування низького рівня, об'єктно-
орієнтоване програмування, функціональне програмування. Головними
перевагами даної мови є: гнучкість; висока продуктивність; підтримка в
співтоваристві програмістів; використання в численних великих проектах;
масштабність, яка охоплює практично всі фактори нинішнього програмування
різного роду застосунків. Завдяки бібліотекам даних, С++ забезпечує високу
раціональність в проектуванні різного роду застосунків під різні платформи.
Для успішного виконання індивідуальних завдань даної курсової роботи
будуть використовуватися базові теоретичні знання з мови С++ , практичні
навички аналізу поставлених завдань, написання програмного коду, що буде
виконувати опрацювання даних у файлах.
Всі існуючі сьогодні мови програмування ґрунтуються завдяки такому
поняттю як алгоритм. Алгоритм – це система формальних правил, які описують
послідовність дій при виконанні обчислень від початкових даних до шуканого
результату. Основними властивостями алгоритму є дискретність (поділ на окремі
кроки під час обчислювальної роботи), ефективність (простота і швидкість
вирішення завдань), результативність (досягнення результату через певну
кількість кроків), детермінованість (однозначність результату обчислювального
процесу)[1].

1.2 Засоби розробки програми


Основними засобами які будуть використовуватись для розробки програми
в курсовій роботі, є файли, масиви, вказівники, рядки.
Під час роботи над курсовою, використовувались теоретичні знання про
роботу з файлами у мові С++. Більшість комп'ютерних програм працюють з
файлами, тому виникає необхідність створювати, відкривати, читати, записувати,
видаляти файли. Файл – це іменований набір байтів, який збережений на деякому
накопичувачі. В одній директорії не можуть перебувати файли з однаковими
назвами (наприклад, в курсовій роботі використовуються файли з назвою F1.txt,
F2.txt, F3.txt). Під файлом так само мається на увазі його розширення (наприклад
file.dat, file.txt). Також файли поділяють на текстові та бінарні файли. В курсовій
роботі здійснюється обробка текстових файлів. Текстовий файл – це файл, робота
8
над яким здійснюється по рядкам та розглядуються як сукупність рядків.
Алгоритм опрацювання текстового файлу в роботі такий: відкрити вже існуючий
файл, виконати дії, які прописані в індивідуальному завданні над даними файлу,
закрити файл [2].
У користувачів часто може виникати потреба зберігання великої кількості
однотипних значень з однаковим опрацюванням, тому такі елементи слід
зберігати в одній змінній для зручної роботи. Масив – набір даних одного типу
об'єднаних загальним ім'ям. Це можуть бути таблиці, вектори, матриці тощо. В
курсовій роботі використовуються масиви у вигляді матриці. Масив оголошується
таким способом:
<тип_даних>   <ім’я_масиву>  [<розмір_масиву>];
Опрацювання масивів полягає в виконані дій та операцій з його елементами. На
етапі компіляції виділяється пам'ять під масив. Виділення пам'яті для масиву в
процесі компіляції називається статичним зв'язуванням. За допомогою оператора
new ми можемо створювати динамічний масив, де розмір масиву визначається на
етапі виконання програми.
Пам’ять комп’ютера є сукупністю комірок для зберігання інформації та
мають свій власний номер, або ще їх називають адресами. Існують спеціальні
змінні в яких можна зберігати адреси комірок пам’яті, такі змінні називають
вказівниками. Вказівники – це така змінна, яка містить адресу іншої змінної.
Застосовуючи операцію розіменування, отримуємо значення записане за цією
адресою. Вказівники можуть застосовувати як операнди в арифметичних виразах,
здебільшого арифметичні операції використовуються з вказівниками на масиви
[1]. Насправді вказівники досить сильна сторона мови програмування С++, адже
вказівники можуть підвищити ефективність роботи деяких функцій, та
використовуються для підтримки структур даних або динамічного виділення
пам’яті для масиву.
Рядки в С++ розглядаються як масиви елементів типу char. Існує низка
функцій для роботи з символами та рядками. В розробці програмного коду
використовувались такі функції як:
 strlen – функція, яка обчислює кількість символів в рядку
 strtok – функція, яка виконує пошук лексем в рядку.
Розроблятися програмний проєкт буде в Visual C++. Це інтегроване
середовище розробки від Microsoft для налагодження і складання коду, а також
подальшої публікації. Воно використовується для розробки комп'ютерних
програм, вебдодатків, вебсервісів, вебсайтів. У роботі створюється консольний
застосунок, з виконанням коду в терміналі Windows [3].
9

1.3 Елементи мови С++, які використовувалися при написанні


програмного коду
Під час роботи над курсовою використовувались теоретичні знання базових
конструкцій мови програмування C++.
Кожна програма на C++, як правило, починається з директив препроцесора,
їх можна впізнати за символом #. Під час написання програмного коду
використовувались такі директиви:
 iostream – директива, яка організує введення та виведення;
 stdlib.h – директива, яка займається виділенням пам’яті та контролем
процесу виконання програми;
 string.h – директива, яка дозволяє працювати з рядками.
Змінна – це іменована частина пам'яті, до якої можна звертатися з програми
за її ім’ям. Кожна змінна має бути оголошеною і мати свій певний тип, що задає
розмір виділеної пам'яті, а так само можливий набір операцій з даними. До
базових типів даних в С++ можна віднести: тип char – для зберігання символів
або невеликих чисел; int – для роботи з цілими числами; float – для чисел з
плаваючою точкою; double для числі з подвійною точністю; void – без значення
[1].
Програма будується з окремих блоків, дані блоки називаються функціями.
Поділ програми на окремі логічні блоки (функції), дозволяє ефективніше керувати
кодом. Також в будь-якій програмі написаної на мові С++ повинна бути функція
main().Використання функції передбачає оголошення функції ім'ям функції, тип
повертаємого функцією значення, параметри функції [4].
Кожна функція, в свою чергу, складена з операторів, які є інструкціями для
нашого комп'ютера. Оператори це така команда або набір команд, що допомагає
виконувати різні математичні або логічні операції. Оператори діляться на три
види, а саме, унарні (ті що працюють лише с одним операндом), бінарні
(працюють с двома операндами) та тернарні (працюють с трьома операндами).
Часто під час написання програми виникає потреба перевірки умови, то для
таких випадків існують оператори розгалуження з командами, які залежно від
умови можуть виконуватись або не виконувались жодного разу. При цьому буде
працювати лише одна з гілок алгоритму. Для реалізації на практиці таких
обчислень ми використовуємо оператор умовного переходу if. Цей оператор має
таку форму:
if (<умова>)<оператор>;
10
Якщо умова оператору є істиною, то виконується оператор, якщо ні, то
здійснюється перехід до інших операторів.
Також під час написання програмного коду виникала необхідність в
використанні циклічних операторів, тобто тих операторів де обчислення
неодноразово повторюється, до тих пір поки виконується певна умова. А саме
оператор циклу for, оператор який використовується коли вже відома кількість
повторювань, або коли умова записується коротким виразом, та має таку форму:
for (<ініціалізація>; <умова>; <модифікації>) <тіло циклу>;
Як умова продовження циклу може використовуватися будь-який вираз, але
зазвичай це вираз порівняння. Поки умова істинна, виконується цикл. Коли при
першому обчисленні умови отримується значення буде нульовим (хибним) цикл
не виконується жодного разу. Будь-який блок оператора for може бути відсутнім.
Та не завжди відома кількість повторювань циклу, або немає чіткої умови
для змінювання параметра циклу. Тоді потрібні оператор циклу з після-умовою
або після-умовою. В програмному коді застосовувався оператор перед-умови
while, який має форму:
while (<умова>)
{ <тіло циклу>};
Цей оператор реалізує варіант циклу, в якому спочатку виконується тіло
циклу і тільки потім обчислюється умова продовження циклу. Якщо умова
нульове, цикл завершується, якщо ж відмінно від нуля, то виконується тіло циклу
з подальшою перевіркою умови [5].
11
2 СЛОВЕСНИЙ ОПИС АЛГОРИТМІВ ДЛЯ РОЗВ’ЯЗУВАННЯ ЗАДАЧ

2.1 Опис функції view_file()


Функція view_file() здійснює відкривання текстового файлу для перегляду та
зчитування.
Аргументами функції є: рядкова змінна name – назва фізичного файлу з
числовими даними вимірювань датчиків у вигляді матриці, створеного у Блокноті
для цієї частини роботи.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
 s – рядок довжиною до 100 символів для зчитування тексту із файлу;
 f – файлова змінна вказівник на структуру типу FILE, за допомогою
якої здійснюється доступ до файлу.
Словесний алгоритм функції:
1. Відкрити файл:
f = fopen(name, "rt");
Функція fopen() відкриває файл. Перший аргумент name – ім’я файлу, що
відкривається; другий аргумент "rt" – це режим відкривання:
"rt" – файл відкривається як текстовий для зчитування даних.
2. Перевірити, чи відкрилися файли. Якщо ні, то вивести на екран
відповідне
повідомлення і перервати виконання програми:
if (f == NULL) { cout << "Cannot open file to veiw\n"; return; }
cout << "\nПерегляд файлу " << name << endl;
3. У циклі while зчитувати з файлу послідовно рядки у s, допоки вони є у
файлі (до кінця файлу) та вивести рядок на екран:
while (fgets(s, 100, f))
{
s[strlen(s) - 1] = '\0';
puts(s);
}
Черговий рядок зчитується з файлу за допомогою функції fgets(s, 100, f3),
вона має три аргументи:
s – рядкова змінна, в яку записується рядок, зчитаний із файлу;
100 – максимальна кількість символів, які можуть бути зчитані за один раз;
f – файл, з якого зчитуються дані.
12
4. Після закінчення роботи з файлом закрити його.
fclose(f);

2.2 Опис функції create_matrix()


Функція create_matrix() заповнює матрицю значеннями з текстового файлу,
створеного у Блокноті для цієї частини роботи.
Аргументами функції є: дійсний двовимірний масив з ім’ям matr; змінна
name – назва фізичного файлу з числовими даними вимірювань датчиків у вигляді
матриці, створеного у Блокноті.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
 f – файлова змінна вказівник на структуру типу FILE, за допомогою
якої здійснюється доступ до файлу;
 s – рядок довжиною до 100 символів для зчитування тексту із файлу;
 *t – вказівник;
 i – змінна цілого типу, слугує як індекс рядків матриці;
 j – змінна цілого типу, слугує як індекс стовпців матриці;
Словесний алгоритм функції:
1. Відкрити файл:
f = fopen(name, "rt");
Функція fopen() відкриває файл. Перший аргумент name – ім’я файлу, що
відкривається; другий аргумент "rt" – це режим відкривання:
"rt" – файл відкривається як текстовий для зчитування даних.
2. Перевірити, чи відкрилися файли. Якщо ні, то вивести на екран
відповідне
повідомлення і перервати виконання програми:
if (f == NULL) { cout << "Cannot open file to veiw\n"; return; }
cout << "\nПерегляд файлу " << name << endl;
3. У циклі while зчитувати з файлу послідовно рядки у s, допоки вони є у
файлі (до кінця файлу):
while (fgets(s, 100, f) > 0)
4. Заповнюємо матрицю даними з файлу:
j = 0;
t = strtok(s, " \t");
13
У циклі використовуємо функцію strtok викликів функції розбиває рядок на
лексеми, розділені символами роздільниками.
while (t != NULL)
{
matr[i][j] = atof(t);
t = strtok(NULL, " \t");
j++;
}
i++;
Функція atof перетворює рядок в число типу double.
5. Після закінчення роботи з файлом закрити його.
fclose(f);

2.3 Опис функції output_matrix()


Функція output_matrix() здійснює виведення створеної матриці на екран та у
файл з ім’ям F2.txt.
Аргументами функції є: дійсний двовимірний масив з ім’ям matr; змінна
name2 – назва фізичного файлу з даними та з результатами відбору, створеного у
Блокноті.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
 i – змінна цілого типу, слугує як індекс рядків матриці;
 j – змінна цілого типу, слугує як індекс стовпців матриці;
 f – файлова змінна вказівник на структуру типу FILE, за допомогою
якої здійснюється доступ до файлу.
Словесний алгоритм функції:
1. Створити файл для записування даних:
f2 = fopen(name2, "wt");
Функція fopen() відкриває файл. Перший аргумент name – ім’я файлу, що
відкривається; другий аргумент "wt" – це режим відкривання:
"wt" – створити файл як текстовий для записування даних.
2. Перевірити, чи відкрилися файли. Якщо ні, то вивести на екран
відповідне
повідомлення і перервати виконання програми:
if (f == NULL) { cout << "Cannot open file to veiw\n"; return; }
cout << "\nПерегляд файлу " << name << endl;
14
3. За допомогою вкладеного циклу for здійснюємо виведення елементів
матриці на екран, та запис елементів у файл:
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
cout << matr[i][j] << "\t";
fprintf(f2, "%7.1f\t", matr[i][j]);
}
cout << endl;
fprintf(f2, "%s", "\n");
4. Після закінчення роботи з файлом закрити його.
fclose(f2);

2.4 Опис функції create_vector()


Функція create_vector() обчислює елементи вектора як
середньоарифметичні значення тих елементів рядків, абсолютне значення яких не
перевищує 10 у файлі з ім’ям F2.txt, виводить результати на екран та у файл з
ім’ям F2.txt.
Аргументами функції є: дійсний двовимірний масив з ім’ям matr; дійсний
одновимірний масив vekt; змінна name2 – назва фізичного файлу з даними та з
результатами відбору, створеного у Блокноті для цієї частини роботи.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
 sum – змінна дійсного типу яка рахує суму чисел значення яких не
перевищує 10;
 col – змінна цілого типу яка рахує кількість елементів значення яких
не перевищує 10;
 i – змінна цілого типу, слугує як індекс рядків матриці;
 j – змінна цілого типу, слугує як індекс стовпців матриці;
 f2 – файлова змінна, за допомогою якої здійснюється доступ до
файлів.
Словесний алгоритм функції:
1.Відкрити файл:
f2 = fopen(name2, "at");
15
Функція fopen() відкриває файл. Перший аргумент name2 – ім’я файлу, що
відкривається; другий аргумент "at" – це режим відкривання:
"at" – файл відкривається як текстовий для дописування даних у
кінець.
2. Перевірити, чи відкрилися файли. Якщо ні, то вивести на екран
відповідне повідомлення і перервати виконання програми:
if (f2 == NULL)
{
cout << "Неможливо відкрити файл \n"; return;}
3. Вивести повідомлення про характер розв’язуваної задачі на екран та у
файл із результатами:
cout << "\nСтворений вектор:\n";
fprintf(f2, "\nСтворений вектор:\n");
4. За допомогою оператора for реалізовано вкладений цикл де за допомогою
оператора if здійснюється перевірка елементів матриці на умову, якщо умова
виконується елементи підсумовуються в змінній sum, та записує кількість
елементів у змінну сol:
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
if (fabs(matr[i][j]) <= 10)
{
sum += matr[i][j]; col++;
}
}
5. За допомогою оператора if здійснюється перевірка змінної col. Якщо
змінна не дорівнює нулю, рахується середнє арифметичне елементів та
записується в одновимірний масив vekt:
if (col != 0)sum /= col;
vekt[i] = sum;
sum = 0;
col = 0;
6. Результат вивести на екран та у файл з результатами обчислення.
cout << vekt[i] << "\t";
fprintf(f2, "%7.1f\t", vekt[i]);
7. Після закінчення роботи з файлом закрити його.
fclose(f2);
16
2.5 Опис функції max()
Функція max() визначає значення максимального значення вимірювання
останнього датчика (рядка матриці) у файлі F2.txt, виводить їх на екран та у файл
з ім’ям F2.txt.
Аргументами функції є: дійсний двовимірний масив з ім’ям matr; змінна
name2 – назва фізичного файлу з даними та з результатами відбору, створеного у
Блокноті для цієї частини роботи.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
 max – змінна дійсного типу, у яку записується максимальне значення;
 i – змінна цілого типу, слугує як індекс рядків матриці;
 j – змінна цілого типу, слугує як індекс стовпців матриці;
 f2 – файлова змінна, за допомогою якої здійснюється доступ до
файлів.

Словесний алгоритм роботи функції:


1. Відкрити файл:
f2 = fopen(name2, "at");
Функція fopen() відкриває файл. Перший аргумент name2 – ім’я файлу, що
відкривається; другий аргумент "at" – це режим відкривання:
"at" – файл відкривається як текстовий для дописування даних у
кінець.
2. Перевірити, чи відкрилися файли. Якщо ні, то вивести на екран
відповідне повідомлення і перервати виконання програми:
if (f2 == NULL)
{
cout << "Неможливо відкрити файл \n"; return;
}
3. За допомогою оператора for реалізуємо вкладений цикл с умовним
оператор if, який визначає максимальне значення вимірювання другого датчика
(елемента матриці):
max = matr[M-1][0];
for (j = 0; j < N; j++)
{
if (matr[M-1][j] > max)
{
max = matr[1][j];
17
}
}
4. Результат вивести на екран та у файл з результатами відбору.
cout << "\n\nЗначення максимального значення останнього рядка
матриці=" << max << "\n\n";
fprintf(f2, "\n\nЗначення максимального значення останнього рядка
матриці= %7.1f\n", max);
5. Після закінчення роботи з файлами закрити їх.
fclose(f2);

2.6 Опис функції letter()


Функція letter() визначає, чи є в рядках літера А (маленька або велика) у
файлі з ім’ям F3.txt, виводить їх на екран та у файл з ім’ям F2.txt.
Аргументами функції є: рядкова змінна name3 – назва фізичного файлу з
текстовими даними, створеного у Блокноті для цієї частини роботи; name2 – ім’я
файлу з результатами відбору.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
s – рядок довжиною до 100 символів для зчитування тексту із файлу;
f2 та f3 – файлові змінні, за допомогою якої здійснюється доступ до файлів.
Словесний алгоритм роботи функції:
1. Відкрити файли та перевірити, чи відкрилися файли. Якщо ні, то вивести
на екран відповідне повідомлення і перервати виконання програми:
if (f2 == NULL)
{
cout << "Неможливо відкрити файл \n"; return;
}
f3 = fopen(name3, "rt");
if (f3 == NULL)
{
cout << "Неможливо відкрити файл \n"; return;
}
Функція fopen() відкриває файл. Перший аргумент name3 або name2 – ім’я
файлу, що відкривається; другий аргумент "rt" або "at" – це режим відкривання:
"rt" – файл відкривається як текстовий для зчитування даних;
18
"at" – файл відкривається як текстовий для дописування даних у
кінець.
2. У циклі while зчитувати з файлу послідовно рядки у s, допоки вони є у
файлі (до кінця файлу):
while (fgets(s, 100, f3))
3. За допомогою оператора for з функцією strlen(яка обчислює кількість
символів в рядку) реалізуємо вкладений цикл з умовним оператор if та
перевіряємо умову:
s[strlen(s) – 1] = '\0';
for (int i = 0; i<strlen(s); i++)
if (s[i] == 'А' || s[i] == 'а')
{
cout << "\nРядки з літерою А є" << endl;
fprintf(f2, "\nРядки з літерою А є");
return;
}
4. Результат вивести на екран та у файл з результатами відбору.
cout << "\nРядків з літерою А немає" << endl;
fprintf(f2, "\nРядки з літерою А немає");
5. Після закінчення роботи з файлами закрити їх:
fclose(f2);
fclose(f3);

2.7 Опис функції word_a()


Функція word_a() виводить слова, що містять щонайменше 2 літери «х» та
обчислює їх кількість у файлі з ім’ям F3.txt, виводить їх на екран та у файл з ім’ям
F2.txt.
Аргументами функції є: рядкова змінна name3 – назва фізичного файлу з
текстовими даними, створеного у Блокноті для цієї частини роботи; name2 – ім’я
файлу з результатами відбору.
Функція має тип void, тобто не повертає жодного значення за допомогою
оператора повернення return.
Локальні змінні:
 s – рядок довжиною до 100 символів для зчитування тексту із файлу;
 f2 та f3 – файлові змінні, за допомогою якої здійснюється доступ до
файлів.
Словесний алгоритм роботи функції:
19
1. Відкрити файли та перевірити чи відкрилися файли. Якщо ні, то вивести
на екран відповідне повідомлення і перервати виконання програми:
if (f2 == NULL)
{
cout << " Неможливо відкрити файл \n"; return;
}
f3 = fopen(name3, "rt");
if (f3 == NULL)
{
cout << " Неможливо відкрити файл \n"; return;
}
Функція fopen() відкриває файл. Перший аргумент name3 або name2 – ім’я
файлу, що відкривається; другий аргумент "rt" або "at" – це режим відкривання:
"rt" – файл відкривається як текстовий для зчитування даних;
"at" – файл відкривається як текстовий для дописування даних у
кінець.
2. У циклі while зчитувати з файлу послідовно рядки у s, допоки вони є у
файлі (до кінця файлу):
while (fgets(s, 100, f3))
{
s[strlen(s) – 1] = '\0';
Виокремити перше слово з рядка s і записати його у рядок t. Розділювачі
слів
зазначено другим аргументом функції strtok:
t = strtok(s, " .,;?!-");
while (t != NULL)
{
k = 0;
3. За допомогою оператора for з функцією strlen (яка обчислює кількість
символів в рядку) реалізуємо вкладений цикл з умовним оператор if та
перевіряємо умову:
for (int i = 0; i < strlen(t); i++)
if (t[i] == 'х' || t[i] == 'Х')
{
k++;
}
if (k >= 2)
20
{
col++;
puts(t);
fputs(t, f2);
}
4. Результат вивести на екран та у файл з результатами відбору.
cout << "\nКiлькiсть слiв, що мiстять щонаменше двi лiтери х- "
<<col<<endl;
fprintf(f2,"\nКiлькiсть слiв, що мiстять щонаменше двi лiтери х-
%f",col);
5. Після закінчення роботи з файлами закрити їх.
fclose(f2);
fclose(f3);
21
3 РЕЗУЛЬТАТИ ВИКОНАННЯ ПРОГРАМИ

Рисунок 3.1 – Скріншот консольного вікна з результатами роботи проекту

Рисунок 3.2 – Вигляд текстового файлу з вхідною матрицею числових


показників вимірювань
22

Рисунок 3.3 – Вигляд вхідного текстового файлу з текстовими даними для


подальшого програмного опрацювання

Рисунок 3.4 – Вигляд звітного текстового файлу з результатами


програмного опрацювання
23
4 ІНСТРУКЦІЯ З ВИКОРИСТАННЯ ПРОГРАМИ

Розроблена в роботі програма призначена для обробки текстових файлів, які


містять матрицю у вигляді масиву і символьні рядки.
Щоб програма коректо працювала, пристрій має відповідати таким
мінімальним системним вимогами:
 операційна система Windows 7 та вище;
 процесор з частотою 1,6 ГГц або більш потужний;
 2 ГБ оперативної пам'яті;
 відеокарта, що підтримує мінімальну роздільну здатність дисплея 720p
(1280 на 720).
У програмному коді використовуються цілі і дійсні типи даних, які
використовують більшу кількість пам'яті для роботи. Так само для роботи
програми необхідно створення двох текстових файлів. Ці файли повинні містити
вихідні дані. Перший містить початкову матрицю, яка буде оброблюватись.
Другий файл містить текстові рядки, які повинні бути написані виключно
англійською мовою. У третій файл будуть записуватись результати роботи.
Основний функціонал нашої програми:
 перегляд вхідної матриці з файлу F1;
 перегляд вхідних рядкових та текстових даних з файлу F3.
 обчислення елементів вектору як середньоарифметичні значення тих
елементів рядків, абсолютне значення яких не перевищує 5;
 визначення значення максимального значення вимірювання другого
датчика (рядка матриці);
 визначення, чи є в рядках літера Х (маленька або велика);
 виведення слів файлу, які містять щонайменше дві літери ‘a’, та
обчислення їх кількості;
 запис усіх опрацьованих результатів в текстовий файл F2.
Для роботи програми є обов’язковим створення двох текстових файлів з
назвами F1, F3. Вони повинні бути розташовані в кореневій папці програми, за
замовчуванням текстові файли розміщені за адресою:
C:\Users\і’мя_користувача\source\repos\CourseR
Як вхідні дані для опрацювання та обчислення датчиків матриці в
створеному файлі F1 потрібно записати числові дані вимірювань датчиків у
вигляді матриці розмірності M на N, де M – кількість датчиків, N – кількість
вимірювань.
24
Як вхідні дані для опрацювання текстових та символьних даних в
створеному файлі F3 потрібно записати потрібні текстові дані (виключно
англійською мовою).
Якщо усі пункти виконані і відповідають інструкції, то програма готова до
запуску, після чого ви можете переглянути результати опрацювання файлів F1 та
F3. Також для більшої зручності усі опрацьовані результати матриці, рядкових
даних та текстових рядків будуть доступні в кореневій папці в створеному файлі
F2.
Якщо програма правильно та точно запрацювала, то в консольному вікні
буде переглянута вхідна матриця з файлу F1. Далі будуть зображені результати
опрацювання датчиків (елементів) матриці згідно з основним функціоналом
програми, а саме: результатами обчислення елементів вектору як
середньоарифметичні значення тих елементів рядків, абсолютне значення яких не
перевищує 5; значенням максимального значення останнього датчика (елемента)
матриці.
На останок буде зображено результати опрацювання рядкових даних та
текстових рядків, вхідними даними якого є файл F3, а саме: визначення, чи є
серед написаних в файлі F3 рядкових даних літера X (маленька або велика);
перегляд слів файлу F3 які містять щонайменше дві літери «а» з обчислення
їхньої кількості, якщо такі слова наявні в текстовому файлі.
25
ВИСНОВКИ З АНАЛІЗОМ ДОСЯГНУТИХ РЕЗУЛЬТАТІВ

Під час роботи над курсовою роботою було закріплено та розширено


теоретичні та практичні навички і знання за фахом, які були використані під час
розв’язування прикладних задач індивідуального варіанта завдання. Розвинуто
навички самостійної роботи з літературою, нормативними документами, пошуку
необхідної інформації, оволодінні методикою дослідження та експериментування
під час розв’язування задач і питань, які розроблювались у курсовій роботі.
Закріплено знання алгоритмізації та навички програмування алгоритмічною
мовою при опрацюванні різнорідних даних у файлах з можливістю їх
програмного редагування. Досліджено наявні сучасні програмні засоби, які
дозволяють створювати програмні проєкти мовою С++. Розкрито сутність
технологій мови С++ з опрацюванням різнорідних даних у файлах. Вивчено
засоби мови С++ з програмного створення файлів різних форматів, записування у
них даних, перегляду вмісту файлів, відбору даних за умовою.
Розроблено програмний проєкт для розв’язування завдання відповідно до
індивідуального варіанта, який передбачав створення, заповнення даними, відбір
та редагування файлів різних форматів. Створено текстовий файл F1, в який
записали числові дані вимірювань датчиків у вигляді матриці розмірності M на N,
де M – кількість датчиків, N – кількість вимірювань. У програмному проекті
розроблено функцію, яка дозволить вивести на екран вміст текстового файлу F1,
ім’я якого передається як аргумент із функції main().
Створено функції для формування числової матриці розмірності M на N
зчитуванням її значень із файлу F1; виведення цієї матриці на екран та у файл F2.
Створено функції для опрацювання числової матриці з обчисленням
максимального значення вимірювання другого датчика (рядка матриці) та
результати обчислення програмно записано у файл F2. Створено функцію для
опрацювання числової матриці з формування елементів вектору та обчислено
елементи вектору як середньоарифметичні значення тих елементів рядків,
абсолютне значення яких не перевищує 5, та результати обчислення програмно
записано у файл F2.
Як вхідні дані для опрацювання текстових даних створено ще один файл з
ім’ям F3 та заповнено його коректними текстовими даними. Програмно
переглянули на екрані вміст текстового файлу F3, ім’я якого передається як
аргумент із функції main(). Розробили функцію, яка виконуватиме програмне
опрацювання даних з файлу F3, а саме: визначили, чи є в рядках літера X
(маленька або велика), вивели слова файлу, які містять щонайменше дві літери
26
«a», та обчислили їх кількість. Програмно записали всі результати опрацювання
текстових даних у файл F2. Програмно переглянули на екрані вміст текстового
файлу з результатами опрацювання текстових даних.
Написані функції в програмному коді можуть використовуватись у різних
сферах діяльності. Опрацювання матриць може бути корисним у роботі з
таблицями та даними у сфері бухгалтерії, при опрацюванні вимірювань
різнорідних датчиків під час автоматизації певних процесів тощо. Опрацювання
текстових рядків може бути корисним у сфері видавництва, наприклад, для
перевірки пунктуаційних помилок та їх виправлення.
27
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. Трофименко О.Г., Прокоп Ю.В., Задерейко О.В. Алгоритмізація та


програмування : навч.-метод. посібник. Одеса: Фенікс, 2020. 310 с. URL:
http://dspace.onua.edu.ua/handle/11300/12345.
2. Програмне опрацювання текстових файлів URL: https://goo-gl.ru/ozvhq
3. Документація Visual Studio URL: docs.microsoft.com/ru-ru/documentation/
4. Елементи мови С++ URL: it.inf.od.ua/mod/page/view.php?id=2033
5. Програмування базових алгоритмів URL: https://goo-gl.ru/G8OTo
28
ДОДАТОК А
ПРОГРАМНИЙ КОД

#include <iostream>

#include <stdlib.h>

#include <string.h>

#pragma warning(disable : 4996)

using namespace std;

const int M = 3, N = 5;

// Переглянути файл

void view_file(char* F1)

char s[100]; FILE* f;

f = fopen(F1, "rt"); // Відкрити файл для читання як текстовий

if (f == NULL) { cout << "Cannot open file to veiw\n"; return; }

cout << "\nПерегляд файлу " << F1 << endl;

while (fgets(s, 100, f))

{ // Зчитувати з файлу послідовно рядки у s, допоки вони є у файлi

s[strlen(s) - 1] = '\0';

puts(s); // Вивести рядок на екран

fclose(f);
29
}

// Заповнити матрицю значеннями з файлу

void create_matrix(double matr[M][N], char* F1)

FILE* f;

char s[100], * t;

int i = 0, j;

f = fopen(F1, "rt"); // Відкрити файл для читання як текстовий

if (f == NULL) { cout << "Cannot open file to veiw\n"; return; }

while (fgets(s, 100, f) > (char *) 0)

j = 0;

t = strtok(s, " \t");

while (t != NULL)

matr[i][j] = atof(t);

t = strtok(NULL, " \t");

j++;

i++;

fclose(f);
30

return;

// Вивести матрицю на екран та у файл

void output_matrix(double matr[M][N], char* F2)

int i, j;

FILE* f2;

f2 = fopen(F2, "wt"); // Створити файл як текстовий

if (f2 == NULL) { cout << "Cannot open file\n"; return; }

printf("\n\nПерегляд матрицi:\n");

fprintf(f2, "Перегляд матрицi:\n");

for (i = 0; i < M; i++)

for (j = 0; j < N; j++)

{ // Вивести елемент матриці на екран

cout << matr[i][j] << "\t";

// Записати елемент у файл

fprintf(f2, "%7.1f\t", matr[i][j]);

cout << endl;

fprintf(f2, "%s", "\n");


31
}

fclose(f2);

return;

// Обчислити елементи вектора як середньоарифметичні значення тих елементів


рядків, абсолютне значення яких не перевищує 5

void create_vector(double matr[M][N], double vekt[N], char* F2)

FILE* f2;

f2 = fopen(F2, "at"); // Відкрити файл для читання як текстовий

if (f2 == NULL)

cout << "Неможливо вiдкрити файл\n"; return;

cout << "\nСтворений вектор:\n";

fprintf(f2, "\nСтворений вектор:\n");

double sum=0;

int i, j, col = 0;

for (int i = 0; i < M; i++) {

for (int j = 0; j < N; j++) {

if (matr[i][j] <= 5 && matr[i][j] >= -5)

sum += matr[i][j]; col++;


32

if (col != 0)sum /= col;

vekt[i] = sum;

sum = 0;

col = 0;

cout << vekt[i] << "\t"; // Вивести елемент вектора на екран

fprintf(f2, "%7.1f\t", vekt[i]); // та у файл

fclose(f2);

// Визначити значення максимального значення вимірювання другого датчика (рядка


матриці)

void max(double matr[M][N], char* F2)

FILE* f2;

f2 = fopen(F2, "at"); // Відкрити файл для читання як текстовий

if (f2 == NULL)

cout << "Неможливо вiдкрити файл\n"; return;

double max;
33

int i, j;

max = matr[M-2][0];

for (j = 0; j < N; j++)

if (matr[M-2][j] > max)

max = matr[M-2][j];

// Виведення результатів обчислень на екран та у файл

cout << "\n\nЗначення максимального значення другого рядка матрицi=" << max <<
"\n\n";

fprintf(f2, "\n\nЗначення максимального значення другого рядка матрицi= %7.1f\


n", max);

fclose(f2);

// Визначити, чи є в рядках літера X (маленька або велика)

void letter(char* F3, char* F2)

setlocale(LC_ALL, ".1251");

FILE* f3;
34
FILE* f2;

char s[100];

f2 = fopen(F2, "at");

if (f2 == NULL)

cout << "Неможливо вiдкрити файл\n"; return;

f3 = fopen(F3, "rt");

if (f3 == NULL)

cout << "Неможливо вiдкрити файл\n"; return;

while (fgets(s, 100, f3))

s[strlen(s) - 1] = '\0';

for (int i = 0; i<strlen(s); i++)

if (s[i] == 'X' || s[i] == 'x')

cout << "\nРядки з лiтерою X є" << endl;

fprintf(f2, "\nРядки з лiтерою X є");

goto m1;
35

cout << "\nРядкiв з літерою Х немає" << endl;

fprintf(f2, "\nРядки з лiтерою X немає");

m1:

fclose(f2);

fclose(f3);

return;

// Вивести слова файлу, які містять щонайменше дві літери ‘a’, та обчислити їхню
кількість.

void word_a(char* F3, char* F2)

setlocale(LC_ALL, ".1251");

FILE* f3;

FILE* f2;

char s[100], *t;

f2 = fopen(F2, "at");

if (f2 == NULL)

cout << "Невозможно открыть файл\n"; return;


36

f3 = fopen(F3, "rt");

if (f3 == NULL)

cout << "Невозможно открыть файл\n"; return;

int k = 0, col = 0;

cout << "\nСлова рядка якi мiстять щонаменше двi лiтери A: " << endl;

fprintf(f2, "\nСлова рядка якi мiстять щонаменше двi лiтери A: ");

while (fgets(s, 100, f3))

s[strlen(s) - 1] = '\0';

t = strtok(s, " .,;?!-");

while (t != NULL)

k = 0;

for (int i = 0; i < strlen(t); i++)

if (t[i] == 'a' || t[i] == 'A')

k++;

}
37
if (k >= 2)

col++;

puts(t);

fputs(t, f2);

t = strtok(NULL, " .,;?!-");

cout << "\nКiлькiть слiв, що мiстять щонаменше двi лiтери a - " <<col<<endl;

fprintf(f2,"\nКiлькiть слiв, що мiстять щонаменше двi лiтери a - %7.1f", col);

fclose(f2);

fclose(f3);

return;

int main()

setlocale(0, ".1251");

double A[M][N], B[N];

char s[100];

char F1[] = "F1.txt";


38

char F2[] = "F2.txt";

char F3[] = "F3.txt";

view_file(F1);

create_matrix(A, F1);

output_matrix(A, F2);

create_vector(A, B, F2); //Обчислити елементи вектора як середньоарифметичні


значення тих елементів рядків, абсолютне значення яких не перевищує 5.

max(A, F2); // Визначити значення максимального значення вимірювання другого


датчика (рядка матриці).

view_file(F3);

letter(F3,F2); // Визначити, чи є в рядках літера Х (маленька або велика)

word_a(F3,F2); // Вивести слова файлу, які містять щонайменше дві літери


‘a’, та обчислити їхню кількість.

view_file(F2);

return 0;

}
39
ДОДАТОК Б
СХЕМИ АЛГОРИТМІВ ПРОГРАММИ

Вхід Вхід

Відкрити файл i=0

Відкрити файл
Ні
Кінець файлу

Так
Ні
Читати s із Кінець файлу?
файлу

Прибрати Enter Так


у кінці s
Читати s із файлу

Вивести рядок
s j=0; t=перше слово s

Ні
t не порожнє?
Закрити файл

Так

Вихід matr[i][j] = atof(t);

Рисунок Б.1 – Блок-схема функції view_file()


t=наступне слово s; j++

j++

Закрити файл

Вихід

Рисунок Б.2 – Блок-схема функції


create_matrix()
40
Вхід

Відкрити файл

Ні
Кінець файлу?

Так

i=0; i<M; i++

j=0; j<N; j++

Вивести matr[i][j] на екран

Вивести matr[i][j] у файл

Перехід на новий рядок на екрані

Перехід на новий рядок в файлі

Закрити файл

Вихід

Рисунок Б.3 – Блок-схема функції


output_matrix()
sum += matr[i][j]; col++

41
Ні
(col != 0)

Так
sum /= col; vekt[i] = sum;

sum = 0; col=0;

Виведення vekt[i]

Закрити файл

Вихід

Рисунок Б.4 – Блок-схема функції


create_vector()
42

Вхід Вхід

Відкрити файл
Відкрити файл

Кінець файлу? Ні
Ні
Кінець файлу
Так
Так
max=matr[M-1][0]
Читати s із
файлу
j=0; j<N; j++

i=0; i<strlen(s); i++


Ні
matr[M-1][j]>max

Ні Так
S[i]=’A’ || ‘a’
max=matr[M-1][j]
Так

Слова з A є
Виведення
max
Слів з A немає

Закрити файл

Закрити файл Вихід

Рисунок Б.6 – Блок-схема функції max()


Вихід

Рисунок Б.5 – Блок-схема функції letter()


43

Початок

name=”F1.txt”

name2=”F2.txt

name3=”F3.txt

view_file(name1)

create_matrix(A, name1)

output_matrix(A, name2);

create_vector(A, B, name2)

max(A, name2)

view_file(name3)

letter(name3,name2)

word_a(name3,name2)

view_file(name2)

Кінець

Рисунок Б.7 – Блок-схема функції main()

You might also like