Добавил:
AiSora
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая 1 семестр. Власенко
.cpp#include<iostream>
#include<cmath>
#include<fstream>
using namespace std;
int ind_i,ind_j; //Глобальные переменные, отвечающие за индексы редактируемого элемента
int n; //Глобальная переменная, отвечающая за размерность массивов. Предполагается, что размерность будет одинаковой для 2-х массивов и будет совпадать с размерностью вводимых массивов
int i, j; //Индексы элементов матриц
float **array_1 = NULL;
float **array_2 = NULL;
float **task1_1 = NULL;
float **task1_2 = NULL;
float **task2 = NULL;
float new_value; //Значение, на которое меняют элемент в массиве
void DeleteArray(float **&mass) //Очистка памяти от динамического массива
{
if (mass)
{
for (i = 0; i < n; i++)
delete[] mass[i];
delete[] mass, mass = NULL;
}
};
float **NewArray(float **&mass) //Создание массивов, их пересоздание в случае, если они не пустые
{
float **arr;
if (mass != NULL)
DeleteArray(mass);
arr = new float*[n];
for (i = 0; i < n; i++)
arr[i] = new float[n];
return arr;
};
void InputArrayConsole(float **&mass) //Ввод массива через консоль
{
cout << "Размерность:" << endl << endl;
cin >> n;
cout << "Матрица: "<< endl << endl;
mass = NewArray(mass);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> mass[i][j];
system("cls");
};
void InputArrayFile(ifstream & f, float **&mass) //Считывание массива из файла
{
f >> n;
mass = NewArray(mass);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
f >> mass[i][j];
};
void OutputArrayConsole(float **mass) //Вывод массива через консоль
{
if (mass != NULL)
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << mass[i][j] << "\t";
cout << endl;
}
else
cout << "Нечего выводить!" << endl;
system("pause");
system("cls");
};
void OutputArrayFile(ofstream & f, float **mass) //Сохранение массива в файл
{
if (mass != NULL)
{
f << n << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
f << mass[i][j] << "\t";
f << endl;
}
}
else
{
cout << "Нечего выводить!" << endl;
system("pause");
system("cls");
}
};
void EditArrayElement(float **&mass)
{
system("cls");
cout << "Введите индекс элемента в формате: <Номер строки> <Номер столбца>" << endl;
cin >> ind_i >> ind_j;
ind_i--;
ind_j--;
cout << "Введите новое значение элемента" << endl;
cin >> new_value;
mass[ind_i][ind_j] = new_value;
system("cls");
};
void CompleteTask_1(float **mass, float **&arr1, float **&arr2)
{
if (n % 2 == 0)
{
int half;
half = (n - 1) / 2;
arr1 = NewArray(arr1);
arr2 = NewArray(arr2);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (i <= half && j <= half)
{
arr1[i][j] = 0;
arr2[i][j] = mass[i + half + 1][j + half + 1];
}
if (i <= half && j > half)
{
arr2[i][j] = mass[i + half + 1][j - half - 1];
arr1[i][j] = 0;
}
if (i > half && j > half)
{
arr1[i][j] = mass[i - half - 1][j];
arr2[i][j] = 0;
}
if (i > half && j <= half)
{
arr1[i][j] = mass[i - half - 1][j];
arr2[i][j] = 0;
}
}
}
else
{
cout << "Ошибка! Размерность должна быть четной!";
system("pause");
}
system("cls");
};
void OutputArrayTask1Console(float **arr1, float **arr2)
{
if (arr1 != NULL || arr2 != NULL)
{
cout << "Первая матрица:" << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << arr1[i][j] << "\t";
cout << endl;
}
cout << "Вторая матрица" << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << arr2[i][j] << "\t";
cout << endl;
}
}
else
cout << "Нечего выводить!" << endl;
system("pause");
system("cls");
};
void OutputArrayTask1File(ofstream & f, float **arr1, float **arr2)
{
if (arr1 != NULL || arr2 != NULL)
{
f << "Первая матрица:" << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
f << arr1[i][j] << "\t";
f << endl;
}
f << "Вторая матрица" << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
f << arr2[i][j] << "\t";
f << endl;
}
}
else
{
cout << "Нечего выводить!"<<endl;
system("pause");
system("cls");
}
};
float *SearchAverage(float **mass) //Нахождение среднего арифметического i-строки
{
float *average = new float[n];
for (i = 0; i < n; i++)
{
average[i] = 0;
for (j = 0; j < n; j++)
{
average[i] += mass[i][j];
}
average[i] = average[i] / n;
}
return average;
};
float **CompleteTask2(float **arr1, float **arr2)
{
float *average1 = new float[n];
float *average2 = new float[n];
average1 = SearchAverage(arr1);
average2 = SearchAverage(arr2);
float *maxaverage = new float[n];
for (i = 0; i < n; i++)
if (average1[i] >= average2[i])
maxaverage[i] = average1[i];
else
maxaverage[i] = average2[i];
task2 = NewArray(task2);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (maxaverage[i] != 0)
task2[i][j] = (arr1[i][j] + arr2[i][j]) / maxaverage[i];
else
task2[i][j] = arr1[i][j] + arr2[i][j];
}
}
return task2;
};
void main()
{
setlocale(LC_ALL, "Russian");
int menu;
while (1) //Начало меню, меню состоит из 4 уровней. Выход из программы осуществяет exit. Возвращение на предыдущий уровень - goto
{
cout << "Меню: \n1.Ввод матриц;\n2.Вывод матриц;\n3.Редактировать элемент;\n4.Индивидуальное задание;\n0.Выход из программы. " << endl << endl;
cin >> menu;
system("cls"); //Очистка консоли, работает только в Windows
switch (menu)
{
case 1:
{
while (1)
{
cout << "1.Ввод 1 матрицы;\n2.Ввод 2 матрицы;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
while (1)
{
cout << "1.Ввести через консоль;\n2.Взять из файла;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
InputArrayConsole(array_1);
goto end;
}
case 2:
{
ifstream arr1("Array1.txt");
InputArrayFile(arr1, array_1);
arr1.close();
goto end;
}
case 0:
goto end21;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
end21:;
break;
}
case 2:
{
while (1)
{
cout << "1.Ввести через консоль;\n2.Взять из файла;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
InputArrayConsole(array_2);
goto end;
}
case 2:
{
ifstream arr2("Array2.txt");
InputArrayFile(arr2, array_2);
arr2.close();
goto end;
}
case 0:
goto end21;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
break;
}
case 0:
goto end;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
end:;
break;
}
case 2:
{
while (1)
{
cout << "1.Вывод 1 матрицы;\n2.Вывод 2 матрицы;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
while (1)
{
cout << "1.Вывести через консоль;\n2.Сохранить в файл;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
OutputArrayConsole(array_1);
goto end;
}
case 2:
{
ofstream outarr1("OutArray1.txt");
OutputArrayFile(outarr1, array_1);
outarr1.close();
goto end;
}
case 0:
goto end31;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
end31:;
break;
}
case 2:
{
while (1)
{
cout << "1.Вывести через консоль;\n2.Сохранить в файл;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
OutputArrayConsole(array_2);
goto end;
}
case 2:
{
ofstream outarr2("OutArray2.txt");
OutputArrayFile(outarr2, array_2);
outarr2.close();
goto end;
}
case 0:
goto end31;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
break;
}
case 0:
goto end;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
break;
}
case 3:
{
while (1)
{
cout << "1.В 1 матрцие;\n2.Во 2 матрице;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
EditArrayElement(array_1);
goto end;
}
case 2:
{
EditArrayElement(array_2);
goto end;
}
case 0:
goto end;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
break;
}
case 4:
{
while (1)
{
cout << "1.Задание 1;\n2.Задание 2;\n3.Вывести получившиеся матрицы;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
while (1)
{
cout << "1.Использовать 1 матрицу;\n2.Использовать 2 матрицу;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
CompleteTask_1(array_1, task1_1, task1_2);
goto end;
}
case 2:
{
CompleteTask_1(array_2, task1_1, task1_2);
goto end;
}
case 0:
goto end51;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
end51:;
break;
}
case 2:
{
task2 = CompleteTask2(array_1, array_2);
goto end;
}
case 3:
{
while (1)
{
cout << "1.Из 1 задания;\n2.Из 2 задания;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
while (1)
{
cout << "1.Вывести через консоль;\n2.Сохранить в файл;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
OutputArrayTask1Console(task1_1, task1_2);
goto end;
}
case 2:
{
ofstream outarrtask1("Task1.txt");
OutputArrayTask1File(outarrtask1, task1_1, task1_2);
outarrtask1.close();
goto end;
}
case 0:
goto end531;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
end531:;
break;
}
case 2:
{
{
while (1)
{
cout << "1.Вывести через консоль;\n2.Сохранить в файл;\n0.Назад." << endl << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
{
OutputArrayConsole(task2);
goto end;
}
case 2:
{
ofstream outarrtask2("Task2.txt");
OutputArrayFile(outarrtask2, task2);
outarrtask2.close();
goto end;
}
case 0:
goto end531;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
break;
}
}
case 0:
goto end53;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
end53:;
break;
}
case 0:
goto end;
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
break;
}
case 0:
exit(1);
default:
{
cout << "Ошибка! Нет такого пункта меню. Введите номер заново." << endl;
break;
}
}
}
};