Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
03.07.2024
Размер:
212.47 Кб
Скачать

Федеральное государственное автономное образовательное учреждение высшего образования

«ОМСКИЙ ГОСУДАРСТВЕННЫЙ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра Информатика и вычислительная техника

Лабораторная работа №11

по дисциплине «Программирование»

на тему:

«Файлы»

Выполнил ст.гр. ИВТ-234

Шкутова А.В.

Проверила профессор

Дорошенко М.С

Омск 2024

Задание 1 (программа 11_1)

Выполнить задачу из лабораторной работы 9, считывая исходные данные из одного файла и записывая полученные результаты в другой текстовый файл. Файл с исходными данными должен быть подготовлен предварительно.

Схема алгоритма:

Код программы:

#include <iostream>

#include <fstream> //функция для работы с файлами.

using namespace std;

// Функция для подсчета четных и нечетных чисел в массиве

int countOddAndEven(int* arr, int n, int* odd) {

*odd = 0;

int even = 0;

for (int i = 0; i < n * n; i++) {

if ((*(arr + i) % 2) == 0) {

even++;

}

else {

(*odd)++;

}

}

return even;

}

// Функция для обработки массива (установка элементов в четных позициях на 0)

void processArray(int* arr, int n) {

for (int i = 0; i < n * n; i++) {

if (i / n % 2 == 0 && i % n % 2 == 0) { // выполняет условие, при котором элементы массива устанавливаются в 0, если они расположены на четных позициях(1 часть по строке, 2 по столбцу)

*(arr + i) = 0;//массив + индекс

}

}

}

// Функция для вывода массива в файл

void printArray(int* arr, int n, ofstream& file) { //ofstream используется для записи данных в текстовый файл

for (int i = 0; i < n * n; i++) {

file << *(arr + i) << " ";//записывает значение элемента массива

if (i % n == n - 1) { // если i делится нацело на n, но при этом остается остаток равный n - 1.

file << endl;

}

}

}

int main() {

setlocale(LC_ALL, "RUS");

// Инициализация переменных

int n = 4;

int oddCount10, oddCount20, oddCount11, oddCount21;

// Чтение исходных данных из файла

ifstream inputFile("input.txt");

int matrix1[4][4];

int matrix2[4][4];

// Заполнение матрицы 1

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

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

inputFile >> matrix1[i][j];

}

}

// Заполнение матрицы 2

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

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

inputFile >> matrix2[i][j];

}

}

inputFile.close();

// Запись результатов в файл

ofstream outputFile("output.txt"); //чтение

// Подсчет четных и нечетных чисел в матрице 1 и вывод в файл

int evenCount10 = countOddAndEven(*matrix1, n, &oddCount10);

outputFile << "Исходная матрица 1:" << endl; //запись

printArray(*matrix1, n, outputFile);

outputFile << "Количество четных чисел в матрице 1: " << evenCount10 << endl;

outputFile << "Количество нечетных чисел в матрице 1: " << oddCount10 << endl;

outputFile << endl;

// Подсчет четных и нечетных чисел в матрице 2 и вывод в файл

int evenCount20 = countOddAndEven(*matrix2, n, &oddCount20);

outputFile << "Исходная матрица 2:" << endl;

printArray(*matrix2, n, outputFile);

outputFile << "Количество четных чисел в матрице 2: " << evenCount20 << endl;

outputFile << "Количество нечетных чисел в матрице 2: " << oddCount20 << endl;

outputFile << endl;

// Обработка матрицы 1 и вывод в файл

processArray(*matrix1, n);

int evenCount11 = countOddAndEven(*matrix1, n, &oddCount11);

outputFile << "Итоговая матрица 1:" << endl;

printArray(*matrix1, n, outputFile);

outputFile << "Количество четных чисел в матрице 1: " << evenCount11 << endl;

outputFile << "Количество нечетных чисел в матрице 1: " << oddCount11 << endl;

outputFile << endl;

// Обработка матрицы 2 и вывод в файл

processArray(*matrix2, n);

int evenCount21 = countOddAndEven(*matrix2, n, &oddCount21);

outputFile << "Итоговая матрица 2:" << endl;

printArray(*matrix2, n, outputFile);

outputFile << "Количество четных чисел в матрице 2: " << evenCount21 << endl;

outputFile << "Количество нечетных чисел в матрице 2: " << oddCount21 << endl;

outputFile << endl;

outputFile.close();

return 0;

}

Результат программы:

Задание 2 (программа 11_2)

11. В файле D1 задана квадратная матрица вещественных чисел. Сформировать файл D2, в котором поменять местами первую и последнюю строки матрицы.

Схема алгоритма:

Код программы:

#include <iostream>

#include <fstream>

int main() {

std::ifstream file("D1.txt"); // Открываем файл D1 только для чтения

int n; // Размерность квадратной матрицы

file >> n; // Считываем размерность из файла D1

double temp; // Переменная для временного хранения элементов строки

double** matrix = new double* [n]; // Создаем двумерный массив для хранения матрицы

// Считываем матрицу из файла D1

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

matrix[i] = new double[n]; // Выделяем память под строку матрицы

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

file >> matrix[i][j]; // Считываем элементы матрицы

}

}

file.close(); // Закрываем файл D1

// Меняем местами первую и последнюю строки матрицы

double* tempRow = matrix[0];

matrix[0] = matrix[n - 1];

matrix[n - 1] = tempRow;

std::ofstream outFile("D2.txt"); // Создаем файл D2 для записи

// Записываем измененную матрицу в файл D2

outFile << n << std::endl; // Записываем размерность матрицы

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

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

outFile << matrix[i][j] << " "; // Записываем элементы матрицы

}

outFile << std::endl;

}

outFile.close(); // Закрываем файл D2

// Освобождаем выделенную память

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

delete[] matrix[i];

}

delete[] matrix;

return 0;

}

Результат программы:

Соседние файлы в папке лабы