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

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

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

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

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

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

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

на тему:

«Структуры»

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

Шкутова А.В.

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

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

Омск 2024

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

11. Сформировать запись «типы С++»: имя, тип, операции, разрешен­ные в данном типе. Подсчитать количество разных операций и вывести списки типов для каждой операции.

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

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

#include <iostream>

#include <string>

using namespace std;

// Определение структуры для типа данных

struct Type {

string name; // Имя типа

string oper[10]; // Массив операций

};

int main() {

setlocale(LC_ALL, "RUS");

// Создание объектов структуры для каждого типа данных

Type integerType = { "Integer", {"Арифметические операции", "Операции сравнения", "Побитовые операции", "Присваивание", "Инкремент и декремент"} };

Type floatType = { "Float",{"Арифметические операции", "Операции сравнения", "Присваивание"} };

Type charType = { "Char", {"Операции сравнения", "Присваивание"} };

Type boolType = { "Bool", {"Логические операции", "Операции сравнения"} };

Type pointerType = { "Pointer", {"Операции сравнения", "Арифметические операции"} };

// Подсчет количества разных операций

string all_operations[50];

int operationCount = 0;

// Собираем все операции в один массив

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

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

if (integerType.oper[i] == "" || floatType.oper[j] == "") {

break;

}

if (integerType.oper[i] == floatType.oper[j]) {

break;

}

all_operations[operationCount] = integerType.oper[i];

operationCount++;

}

}

// Печать операций и соответствующих типов данных

cout << "Различные операции и соответствующие типы данных: " << endl;

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

cout << all_operations[i] << ": ";

cout << integerType.name << ", " << floatType.name << ", " << charType.name << ", " << boolType.name << ", " << pointerType.name << endl;

}

cout << "Количество различных операций: " << operationCount << endl;

return 0;

}

Результат:

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

Дополнить программу 12_1 заполнением и обработкой файлов. Имя файла вводить с клавиатуры в процессе работы программы.

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

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

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

// Структура для хранения информации о типе данных

struct Type {

string name;

string operations[10];

};

// Функция для сохранения данных структуры в файл

void saveStructToFile(string fileName, Type type) {

ofstream file(fileName, ios::app); // Открытие файла в режиме добавления (добавляет данные в конец файла)

if (file.is_open()) {

file << "Тип данных: " << type.name << endl;

file << "Операции:" << endl;

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

if (type.operations[i] != "") { //Проверка, что операция не пустая.

file << "- " << type.operations[i] << endl;

}

}

file << endl;

file.close();

}

else {

cout << "Ошибка открытия файла!" << endl;

}

}

int main() {

setlocale(LC_ALL, "RUS");

string fileName;

cout << "Введите имя файла для сохранения данных: ";

cin >> fileName;

Type integerType = { "Integer", {"Арифметические операции", "Операции сравнения", "Побитовые операции", "Присваивание", "Инкремент и декремент"} };

Type floatType = { "Float",{"Арифметические операции", "Операции сравнения", "Присваивание"} };

Type charType = { "Char", {"Операции сравнения", "Присваивание"} };

Type boolType = { "Bool", {"Логические операции", "Операции сравнения"} };

Type pointerType = { "Pointer", {"Операции сравнения", "Арифметические операции"} };

// Сохранение данных структуры в файл

saveStructToFile(fileName, integerType);

saveStructToFile(fileName, floatType);

saveStructToFile(fileName, charType);

saveStructToFile(fileName, boolType);

saveStructToFile(fileName, pointerType);

cout << "Данные сохранены в файл." << endl;

return 0;

}

Результат:

Задание 3 (программа 12_3)

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

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

#include <iostream>

using namespace std;

struct Matrix {

int mas[100][100];

int n;

int k;

};

Matrix func(Matrix A) { //определение функции func, которая принимает матрицу A и возвращает новую матрицу.

Matrix C; // создание новой матрицы C.

C.n = A.n - 1; //установка количества строк новой матрицы C.

C.k = A.k - 1;//установка количества столбцов новой матрицы C.

//пропуски последнего столбца и строки

for (int i = 0, iC = 0; i < A.n; i++) {

if (i == A.n - 1) {

continue;

}

for (int j = 0, jC = 0; j < A.k; j++) {

if (j == A.k - 1) {

continue;

}

C.mas[iC][jC] = A.mas[i][j];

jC++;

}

iC++;

}

return C;

}

Matrix input(Matrix A) { //определение функции input, которая принимает матрицу A и возвращает матрицу после заполнения значениями.

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

for (int j = 0; j < A.k; j++) {

cout << "Введите значение для [" << i << "][" << j << "]:";

cin >> A.mas[i][j];

}

}

return A;

}

int main() {

setlocale(LC_ALL, "RUS");

Matrix A, B;

cout << "Введите количество строк первой матрицы:";

cin >> A.n;

cout << "Введите количество столбцов первой матрицы: ";

cin >> A.k;

A = input(A);

cout << "Первый массив после удаления" << A.n << "-й строки и " << A.k << "-го столбца:" << endl;

Matrix C = func(A);

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

for (int j = 0; j < C.k; j++) {

printf("%d", C.mas[i][j]);

}

printf("\n");

}

cout << "Введите количество строк второй матрицы:";

cin >> B.n;

cout << "Введите количество столбцов второй матрицы: ";

cin >> B.k;

B = input(B);

cout << "Второй массив после удаления" << B.n << "-й строки и " << B.k << "-го столбца:" << endl;

C = func(B);

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

for (int j = 0; j < C.k; j++) {

printf("%d", C.mas[i][j]);

}

printf("\n");

}

return 0;

}

Результат:

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