Код:
#include <iostream>
#include <ctime>
#include <iomanip> //для форматирования вывода
#include <cstdlib>
using namespace std;
int SIZE, k, nstr, nstb;
//инициирует массив
int* form_mas(int* mas, int& SIZE)
{
cout << "Введите количество элементов массива= ";
cin >> SIZE;
mas = new int[SIZE];
return mas;
}
//формирует массив
void input_mas(int* mas, int SIZE, int mx, int mn)
{
for (int i = 0; i < SIZE; i++)
{
mas[i] = rand() % (mx - mn + 1) + mn;
}
}
//выводит массив
void print_mas(int* masq, int& SIZE)
{
for (int i = 0; i < SIZE; i++)
cout << masq[i] << ' ';
cout << endl;
}
//вычисляет среднее арифметическое
int srA(int* a, int n)
{
int s = 0;//сумма элементов
for (int i = 0; i < n; i++)
{
s += a[i];//суммирует
}
return s;//среднее арифметическое
}
int* del_mas(int* mas, int& SIZE)
{
int n;
cout << "Размер массива N=";
cin >> SIZE;
srand((unsigned)time(0));//инициирует генератор сл.чисел
int mn, mx;
cout << "Интревал значений min max: ";
cin >> mn >> mx;
if (mn > mx) swap(mn, mx);//если неправильно поменяли
mas = form_mas(mas, SIZE);//создали массив
cout << "Массив:\n";
form_mas(mas, SIZE);//вывели массив
int med = srA(mas, SIZE);//среднее
int nmed = 0;//к-во средних
for (int i = 0; i < SIZE; i++)
if (mas[i] == med)//нашли
{
for (int j = i; j < SIZE - 1; j++)
{
mas[j] = mas[j + 1];//"сжали" массив
}
i--;//на то же место
SIZE--;//уменьшили размер
nmed++;//к-во+1
}
cout << "Среднее значение: " << med << " ,к-во: " << nmed << endl;
cout << "Измененный массив:\n";
print_mas(mas, SIZE);//вывели массив
delete[] mas;//удалили массив
system("pause");
return mas;
}
int** form_mas2(int& nstr, int& nstb)
{
cout << "Введите кол-во строк и столбцов ";
cin >> nstr;
cin >> nstb;
int** mas2 = new int* [nstr + 1];
for (int i = 0; i < nstr; i++)
mas2[i] = new int[nstb];
return mas2;
}
//выводит массив
void input_mas2(int** mas2, int& nstr, int& nstb, int mx, int mn)
{
for (int i = 0; i < nstr; i++)
for (int j = 0; j < nstb; j++)
mas2[i][j] = rand() % (mx - mn + 1) + mn;
}
void print_mas2(int** mas2, int& nstr, int nstb)
{
for (int i = 0; i < nstr; i++) {
for (int j = 0; j < nstb; j++)
cout << setw(3) << mas2[i][j] << ' ';
cout << endl;
}
cout << endl;
}
int** add_mas(int** mas2, int& nstr, int nstb)
{
int n, m;
cout << "Размеры массива N M: ";
cin >> n >> m;
srand((unsigned)time(0));//инициирует генератор случ.чисел
int mn, mx;
cout << "Интревал значений min max: ";
cin >> mn >> mx;
if (mn > mx) swap(mn, mx);//поменяли
int** b = form_mas2(n, m);//массив
cout << "Массив:\n";
input_mas2(b, n, m, mn, mx);//вывели
for (int i = 0; i < n; i++)
{
int* c = new int[m + 1];//строка большего размера
for (int j = 0; j < m; j++)
c[j] = b[i][j];//скопировали старое
c[m] = rand() % (mx - mn + 1) + mn;//последнее значение
delete[] b[i];//удалили старую строку
b[i] = c;//установили новую
}
m++;//длина строк увеличилась
cout << "Измененный массив:\n";
print_mas2(b, n, m);//вывели
for (int i = 0; i < n; i++)//удаляем строки
delete[] b[i];
delete[] b;//удалили массив указателей строк
system("pause");
return mas2;
}
int main()
{
int k;
setlocale(LC_ALL, "rus");
srand(time(0));
int mx;
int mn;
int* mas;
int** mas2;
int q;
int n = 10;
cout << "С каким массивом работать (1 - одномерный, 2 - двумерный) ";
cin >> q;
if (q == 1) {
do
{
cout << "1.Формирование массива\n";
cout << "2.Печать массива\n";
cout << "3.Удаление из массива\n";
cout << "4.Выход\n";
cin >> k;
switch (k)
{
case 1: mas = form_mas(mas, SIZE); input_mas(mas, SIZE, mx, mn); break;
case 2: print_mas(mas, SIZE); break;
case 3: del_mas(mas, n);
break;
}
} while (k != 4);
}
else {
do {
cout << "1.Формирование массива\n";
cout << "2.Печать массива\n";
cout << "3.Добавление в массив\n";
cout << "4.Выход\n";
cin >> k;
switch (k)
{
case 1: mas2 = form_mas2(nstr, nstb); input_mas2(mas2, nstr, nstb, mx, mn); break;
case 2: print_mas2(mas2, nstr, nstb); break;
case 3: add_mas(mas2, nstr, nstb);
break;
}
} while (k != 4);
}
return 0;
}