
Лабораторные работы / лабы / 11lb
.docxФедеральное государственное автономное образовательное учреждение высшего образования
«ОМСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра Информатика и вычислительная техника
Лабораторная работа №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;
}
Результат программы: