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