Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- using namespace std;
- void Create(int**& mass, int hight, int width)
- {
- mass = new int* [hight];
- for (int i = 0; i < hight; i++)
- mass[i] = new int[width];
- }
- void Delete(int** mass, int hight)
- {
- for (int i = 0; i < hight; i++)
- delete[] mass[i];
- delete[] mass;
- }
- void Fill(int** mass, int hight, int width)
- {
- for (int i = 0; i < hight; i++)
- for (int j = 0; j < width; j++)
- mass[i][j] = rand() % 100;
- }
- void Show(int** mass, int hight, int width)
- {
- for (int i = 0; i < hight; i++)
- {
- for (int j = 0; j < width; j++)
- {
- cout << setw(2) << mass[i][j] << " ";
- }
- cout << "\n";
- }
- cout << "\n";
- }
- //функция добавления последней строки в массив
- //получает указатель на массив (по ссылке), высоту (по ссылке), ширину
- void AddLastRow(int**& mass, int& hight, int width)
- {
- int** temp = nullptr;//создаем новый указатель на массив указателей
- Create(temp, hight + 1, width);//выделяем память под новый массив размером
- //+1 строка
- for (int i = 0; i < hight; i++)//в цикле перебираем все элементы
- for (int j = 0; j < width; j++)
- temp[i][j] = mass[i][j];//копируем из старого массива в новый
- Delete(mass, hight);//удаляем старый массив
- mass = temp;//записываем в указатель адрес нового массива
- for (int i = 0; i < width; i++)//в цикле
- mass[hight][i] = 0;//заполняем последнюю строку ноликами
- hight++;//изменяем высоту на +1
- }
- //функция добавления последнего столбца в массив
- //получает указатель на массив (по ссылке), высоту и ширину (по ссылке)
- void AddLastCol(int**& mass, int hight, int& width)
- {
- int** temp = nullptr;//указатель
- Create(temp, hight, width + 1);//выделили памяти на 1 столбец больше
- //привязали его к указателю
- for (int i = 0; i < hight; i++)//в цикле перебрали все элементы массива
- for (int j = 0; j < width; j++)
- temp[i][j] = mass[i][j];//скопировали в новый массив
- Delete(mass, hight);//удалили старый массив
- mass = temp;//в указатель записали адрес нового массива
- for (int i = 0; i < hight; i++)//в цикле заполнили последнюю строку
- mass[i][width] = 0;
- width++;//ширина + 1
- }
- void DeleteLastRow(int**& mass, int& hight, int width)
- {
- int** temp = nullptr;
- Create(temp, hight, width);
- for (int i = 0; i < hight - 1; i++)
- for (int j = 0; j < width; j++)
- temp[i][j] = mass[i][j];
- Delete(mass, hight);
- mass = temp;
- hight--;
- }
- void DeleteLastCol(int**& mass, int hight, int& width)
- {
- int** temp = nullptr;
- Create(temp, hight, width);
- for (int i = 0; i < hight; i++)
- for (int j = 0; j < width-1; j++)
- temp[i][j] = mass[i][j];
- Delete(mass, hight);
- mass = temp;
- width--;
- }
- int main()
- {
- srand(time(0));
- int hight, width, choice, index;
- bool job = 1;
- int** mass = nullptr;
- cout << "Enter hight\n"; cin >> hight;
- cout << "Enter width\n"; cin >> width;
- //mass = Create(hight, width);//альтернативный вариант
- Create(mass, hight, width);
- Fill(mass, hight, width);
- while (job)
- {
- cout << "Enter your choice\n1-Show\n2-Add Last Row\n3-Add Last Col\n4-Delete Last Row\n5-Delete Last Col\n";
- cout << "0-Exit\n";
- cin >> choice;
- switch (choice)
- {
- case 1: Show(mass, hight, width); break;
- case 2: AddLastRow(mass, hight, width); break;
- case 3: AddLastCol(mass, hight, width); break;
- case 4: DeleteLastRow(mass, hight, width); break;
- case 5: DeleteLastCol(mass, hight, width); break;
- case 0: job = 0; break;
- default:cout << "Wrong choice\n"; break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement