CaesarWhite
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Люди !!! Помогите плз "оптимизировать" код,тобиш упростить до невозможности,и повыкидывать все ненужное.Ато программа то работает,но уж больно чё то я намудрил (желательно "упростить" без использования приёмов "высшего пилотажа" Задание: Написать программу, которая осуществляет добавление строки или столбца в любое место двумерной матрицы по выбору пользователя. Код: Код: #include <iostream> #include <clocale> #include <conio.h> #include <time.h> using namespace std; template <typename type>void Create_Array (type ***pArr, const int m, const int n); template <typename type>void Fill_Array (type **pArr, const int m, const int n); template <typename type>void Add_Line (type **Destination, type **Source, const int m, const int n, const int b); template <typename type>void Add_Field (type **Destination, type **Source, const int m, const int n, const int b); template <typename type>void Print_Array (type **pArr, const int m, const int n); template <typename type>void Delete_Array (type **pArr, const int m, const int n); void Menu (int &a, int &b, int &m, int &n, const int select = 0); void main() { setlocale (LC_CTYPE, "Russian"); srand (time (NULL)); cout << "Добавление строки или столбца в матрицу.\n"; char Exit = 'y'; while (Exit == 'y' || Exit == 'Y') { int m = 0, n = 0, a = 0, b = 0; char **pArr, **pAdd; Menu (a, b, m, n, 1); //pArr = new char *[m]; Create_Array (&pArr, m, n); Fill_Array (&*pArr, m, n); Print_Array (&*pArr, m, n); Menu (a, b, m, n, 2); //pAdd = new char *[m]; Create_Array (&pAdd, m, n); a == 1? Add_Line (&*pAdd, &*pArr, m, n, b): Add_Field (&*pAdd, &*pArr, m, n, b); Print_Array (&*pAdd, m, n); Delete_Array (&*pAdd, m, n); a == 1? Delete_Array (&*pArr, m-1, n): Delete_Array (&*pArr, m, n-1); cout << "\n\n\t\tTo continue press \"Y\".\n\t\tFor exit press any key.\t"; Exit = getch(); cout << "\n"; } } /* Создание двумерного массива. Принимает указатель на указатель массивов, размеры матрицы. */ template <typename type> void Create_Array (type ***pArr, const int m, const int n) { *pArr = new type *[m]; for (int i = 0; i < m; ++i) { (*pArr)[i] = new type [n]; } } /* Заполнение массива значениями. Принимает указатель на указатель массивов, размеры матрицы. */ template <typename type> void Fill_Array (type **pArr, const int m, const int n) { for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { pArr [i][j] = rand() % 28 + 97; } } } /* Добавление строки. Принимает указатель на указатель массивов для исходного и целевого массивов, размеры матрицы, номер строки. */ template <typename type> void Add_Line (type **Destination, type **Source, const int m, const int n, const int b) { int k = 0; for (int i = 0; i < m; ++i) { if (i + 1 == b) { for (int j = 0; j < n; ++j) { Destination [i][j] = 0; } ++i; } for (int j = 0; j < n; ++j) { Destination [i][j] = Source [k][j]; } ++k; } } /* Добавление столбца. Принимает указатель на указатель массивов для исходного и целевого массивов, размеры матрицы, номер поля. */ template <typename type> void Add_Field (type **Destination, type **Source, const int m, const int n, const int b) { int k = 0; for (int i = 0; i < m; ++i) { k = 0; for (int j = 0; j < n; ++j) { if (j + 1 == b) { Destination [i][j] = 0; } else { Destination [i][j] = Source [i][k]; ++k; } } } } /* Выводит двумерный массив на экран. Принимает указатель на указатель массивов, размеры матрицы. */ template <typename type> void Print_Array (type **pArr, const int m, const int n) { cout << "\n\n\t"; int k = 192; for (int i = 0; i < n; ++i, ++k) { cout << (char) k << " "; } cout << "\n\t"; k = 1; for (int i = 0; i < m; ++i, ++k) { cout << "\n\n " << k << ".\t"; for (int j = 0; j < n; ++j) { cout << pArr [i][j] << " "; } } } /* Удаляет массив. Принимает указатель на указатель массивов, размеры матрицы. */ template <typename type> void Delete_Array (type **pArr, const int m, const int n) { for (int i = 0; i < m; ++i) { delete [] pArr [i]; } delete [] pArr; } /* Меню оператора. Принимает ссылки на изменяемые переменные и аргумент для выбора меню. */ void Menu (int &a, int &b, int &m, int &n, const int select) { switch (select) { case 1: { cout << "\n\tКоличество строк:\t"; cin >> m; cout << "\tКоличество столбцов:\t"; cin >> n; return; } case 2: { cout << "\n\n\t1. Добавить строку.\n\t2. Добавить столбец.\t"; cin >> a; if (a == 1) { cout << "\n\tНомер строки:\t"; while (b < 1 || b > m) { cin >> b; } ++m; } else { cout << "\n\t2. Номер столбца:\t"; while (b < 1 || b > n) { cin >> b; } ++n; } return; } default: { cout << "Неправильный аргумент."; } } } | |