/* Динамические многомерные массивы
Инициализация:
int * A=new int [10]; // инициализация одномерного массива(через указатели)
int **A = new int*[10]; // а это инициализация многомерного масива через указатели)
for(int i=0;i<10;i++)
A[i]=new int [i+2];
...
for[int i=0;i<10;i++)
delete[]A[i];
delete[]A;
Задание:
написать прогу с многомерным массивом осуществляющую добавление,удаление определенной строки
Решение:
* иниц многомерный массив
* заполнить его рандомом
* вывести для контроля
* запросить какую строку удалить
* удалить это строку
* вывести для контроля
* добавить строку
* вывести для контроля
*/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <ctype.h>
#include <string>
#include <time.h>
using namespace std;
// Ф У Н К Ц заполнения массива
void Zapoln(int **A,int x, int y)
{
for(int i=0;i<x;i++){
for(int j=0;j<y; j++) {
A[i][j]=rand()%100-50;
}
}
}
// Ф У Н К Ц вывода елементов массива
void Show(int **A,int x, int y)
{
cout<<"Our massiv:"<<endl;
for(int i=0;i<x; i++) {
for(int j=0;j<y; j++) {
cout<<A[i][j]<<"\t\t";;
}
cout<<"\n\n";
}
}
// Ф У Н К Ц. добавка одной строки в массив
int **Add(int **A, int size1, int size2)
{
int **B = new int*[size1+1];
for(int i=0;i<size1;i++)
B[i]=A[i];
B[size1]=new int[size2];
for(int i=0;i<size2;i++)
B[size1][i]=rand()%100-50;
delete[]A;
return B;
}
// Func delete i-ing(index) string of array
int **Del( int **A, int size1, int index)
{
int **B = new int*[size1-1];
for (int i=0, j=0; i<size1; i++)
{
if(i==index)
{ delete[]A[i];
continue;
}
B[j]=A[i];
j++;
}
delete[]A;
return B;
}
void main() {
srand(time(NULL)); // обнуляем так как есть у рандома привязка к времени
int x, y, del;
cout << "Input number of row: ";
cin >> x;
cout << "Input number of column: ";
cin >> y;
// инициализация многомерного динамического массива A / выделение для него памяти
int **A = new int *[x];
for (int i = 0; i < x; i++)
{
A[i] = new int [y];
}
// заполнение рандомом
Zapoln(A,x,y); // x длинна строки, y кол-во строк
// вывод для контроля
Show(A,x,y);
//exit(1); // выход с проги
cout<<"Input number of string wich you want delete: "<<endl;
cin>>del;
// удаляем строку под номером del
A=Del(A,x,del);
cout<<"Massiv bez elementa:"<<endl;
x--;
// вывод для контроля
Show(A,x,y);
A=Add(A,x,y);
x++; // x тот размер который мы будем передавать в функцию вывода, а ведь массив уже на один больше
cout<<"Massiv s dobavlennoy strokoy:"<<endl;
// вывод для контроля
Show(A,x,y);
}
/* удаление нашего массива указателей на указатели
for (int i = 0; i < M; i++) {
delete []mas[i];
}
delete []mas;
}
*/