You are on page 1of 9

Лабораторна Робота №10

Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Хід роботи
Виконання індивідуального завдання:
Задача 1.
Взявши за основу лабораторну роботу №7, змінити код програми таким
чином, щоб:
– вхідні дані вводилися не з клавіатури, а з файлу;
– згенерований масив виводився у файл;
– результати виконання виводились і на екран, і у файл.
Розв’язок:
Для початку створюю файл input.txt, де будуть знаходитись вхідні дані, і файл
output.txt в який будуть записуватися результати програми.

Рисунок 1. Місцезнаходження файлів input.txt та output.txt

Рисунок 2. Вхідні дані із файлу input.txt


Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Код програми:

Рисунок 3. Код програми в середовищі VS


Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Лістинг програми:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <locale>
#include <Windows.h>

using namespace std;

const int N = 100; // максимальний розмір масиву (кількість рядків)


const int M = 100; // максимальний розмір масиву (кількість стовпців)

int main() {
setlocale(LC_CTYPE, "ukr");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n, m, a, b;

// Відкриття файлу для зчитування вхідних даних


ifstream inputFile("C:/Users/1234/source/repos/input.txt");
if (!inputFile.is_open()) {
cout << "Помилка відкриття файлу input.txt!" << endl;
return 0;
}

// Зчитування розмірів масиву та інтервалу для генерації випадкових чисел


inputFile >> n >> m;
inputFile >> a >> b;
inputFile.close();

// Перевірка правильності введення даних


if (n > N || m > M || a >= b) {
cout << "Некоректні дані!" << endl;
return 0;
}

// Ініціалізація генератора випадкових чисел


srand(time(0));

// Ініціалізація масивів
int A[N][M], B[N][M], C[N][M];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
A[i][j] = rand() % (b - a) + a; // генерація випадкових чисел для першого
масиву
B[i][j] = rand() % (b - a) + a; // генерація випадкових чисел для другого
масиву
}
}

// Додавання елементів масивів та запис у третій масив


for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
C[i][j] = A[i][j] + B[i][j];
}
}

// Відкриття файлу для запису результатів


ofstream outputFile("C:/Users/1234/source/repos/output.txt");
if (!outputFile.is_open()) {
Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
cout << "Помилка відкриття файлу output.txt!" << endl;
return 0;
}

// Виведення елементів масивів на екран


cout << "Елементи масиву A:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}

cout << "Елементи масиву B:" << endl;


for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << B[i][j] << " ";
}
cout << endl;
}

cout << "Елементи масиву C:" << endl;


for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << C[i][j] << " ";
}
cout << endl;
}

// Виведення елементів масивів у файл


outputFile << "Елементи масиву A:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
outputFile << A[i][j] << " ";
}
outputFile << endl;
}
outputFile << endl; // додавання порожнього рядка

outputFile << "Елементи масиву B:" << endl;


for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
outputFile << B[i][j] << " ";
}
outputFile << endl;
}

outputFile << endl; // додавання порожнього рядка

outputFile << "Елементи масиву C:" << endl;


for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
outputFile << C[i][j] << " ";
}
outputFile << endl;
}

outputFile.close(); // закриття файлу для запису результатів

cout << "Результати успішно записано у файл output.txt" << endl;


return 0;
}
Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Роздруківку вхідних і вихідних файлів і результати виконання:
Результат виконання програми що був записаний до файлу output.txt

Рисунок 4. Результат програми записаний у файл output.txt Рисунок 5. Результат програми виведений на екран

Задача 2.
Взявши за основу лабораторну роботу №9 (задача1), змінити код програми
таким чином, щоб:
– вхідні дані (поля структури) вводилися з клавіатури і після введення
записувалися у файл (окрема функція);
– програма мала можливість дописувати дані у файл (окрема функція);
– дані з файлу виводились на екран (окрема функція);
– результати виконання другого підпункту виводились на екрані у файл.
Розв’язок:
Створюю файл plane.txt в якому будуть виведені рейси.

Рисунок 4. Розташування файлу plane.txt


Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Код програми:

Рисунок 5. Код програми


Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Лістинг програми:
#include <iostream>
#include <fstream>
#include <string>
#include <locale>
#include <Windows.h>

using namespace std;

// Оголошення структури AEROFLOT


struct AEROFLOT {
string CITY;
int NUM;
string TYPE;
};

// Функція введення даних в масив AIR та запису їх у файл


void writeToFile(AEROFLOT AIR[], int N, string fileName) {
ofstream outFile("C:/Users/1234/source/repos/plane.txt");
if (!outFile.is_open()) {
cout << "Помилка відкриття файлу." << endl;
return;
}
for (int i = 0; i < N; i++) {
cout << "Введіть місце прибуття: ";
cin >> AIR[i].CITY;
outFile << AIR[i].CITY << " ";
cout << "Введіть номер рейсу: ";
cin >> AIR[i].NUM;
outFile << AIR[i].NUM << " ";
cout << "Введіть тип літака: ";
cin >> AIR[i].TYPE;
outFile << AIR[i].TYPE << endl;
}
outFile.close();
}

// Функція дописування даних у файл


void appendToFile(AEROFLOT AIR[], int N, string fileName) {
ofstream outFile(fileName, ios::app);
if (!outFile.is_open()) {
cout << "Помилка відкриття файлу." << endl;
return;
}
for (int i = 0; i < N; i++) {
outFile << AIR[i].CITY << " " << AIR[i].NUM << " " << AIR[i].TYPE << endl;
}
outFile.close();
}

// Функція читання даних з файлу та виведення їх на екран


void readFromFile(string fileName) {
ifstream inFile(fileName);
if (!inFile.is_open()) {
cout << "Помилка відкриття файлу." << endl;
return;
}
AEROFLOT air;
cout << "Місце прибуття\tНомер рейсу\tТип літака" << endl;
while (inFile >> air.CITY >> air.NUM >> air.TYPE) {
cout << air.CITY << "\t\t" << air.NUM << "\t\t" << air.TYPE << endl;
Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
}
inFile.close();
}
void output(AEROFLOT AIR[], int N, string destCity);

int main() {
setlocale(LC_CTYPE, "ukr");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int N;
int M;
bool k;
string fileName = "plane.txt";
cout << "Заповніть дані рейсів та збережіть їх у файл " << fileName << endl;
cout << "Введіть кількість рейсів: ";
cin >> N;

AEROFLOT* AIR = new AEROFLOT[N];

writeToFile(AIR, N, fileName);

// Дописуємо дані у файл


cout << "\nЧи бажаєте доповнити файл " << fileName << "? [Так/Ні]" << endl;
string answer;
cin >> answer;
if (answer == "Так") {
cout << "Введіть кількість рейсів: ";
cin >> M;

AEROFLOT* newAIR = new AEROFLOT[M];

writeToFile(newAIR, M, fileName);

appendToFile(newAIR, M, fileName);
}

string destCity;
cout << "\nКуди плануєте летіти сьогодні?\n";
cout << "Місце прибуття: ";
cin >> destCity;

void output(AEROFLOT AIR[], int N, string destCity); {


bool found = false;
for (int i = 0; i < N; i++) {
if (AIR[i].CITY == destCity) {
cout << AIR[i].CITY << "\t\t" << AIR[i].NUM << "\t\t" << AIR[i].TYPE
<< endl;
found = true;
}
}
if (!found) {
cout << "Немає рейсів до міста " << destCity << endl;
}
}

// Виводимо всі записи з файлу на екран


cout << "\nДані про всі рейси:" << endl;
readFromFile(fileName);
return 0;
}
Лабораторна Робота №10
Становича Дениса
Тема: робота з файлами
Мета роботи: Вивчити програмні засоби для роботи з файлами та потоками. Дослідити основні
функції роботи з файлами та реалізовувати найпростіші операції з ними. Навчитись застосовувати у
своїх програмах вхідні і вихідні текстові і бінарні файли і файлові потоки.
Роздруківку вхідних і вихідних файлів і результати виконання:

Рисунок 6. Результат виконання програми виводиться на екран та у файл

Висновок:
Під час виконання даної лабораторної роботи я вивчив програмні засоби для
роботи з файлами та потоками, дослідив основні функції роботи з файлами та
здійснював найпростіші операції з ними. Я навчився застосовувати в своїх
програмах вхідні та вихідні тексти, бінарні файли та файлові потоки.
Ця лабораторна робота була корисною для мене, оскільки дозволила зрозуміти,
як працювати з файлами та потоками у своїх програмах. Я вивчив багато
нового, включаючи функції створення, відкриття та закриття файлів,
зчитування та запис до файлів, роботу з бінарними та текстовими файлами, та
багато іншого.

You might also like