#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
// размеры идут первыми, массив после них
void vivod_dvymernogo_masiva(int stroki, int stolbcy, int masiv[stroki][stolbcy]);
void Zapolnenie_dvymernogo_masiva(int stroki, int stolbcy, int masiv[stroki][stolbcy]);
int main()
{
int N_Kol_Strok, M_Kol_Stolbcov;
cout << "Введите кол-во строк: "; cin >> N_Kol_Strok;
cout << "Введите кол-во столбцов: "; cin >> M_Kol_Stolbcov;
int masiv[N_Kol_Strok][M_Kol_Stolbcov];
Zapolnenie_dvymernogo_masiva(N_Kol_Strok, M_Kol_Stolbcov, masiv);
vivod_dvymernogo_masiva(N_Kol_Strok, M_Kol_Stolbcov, masiv);
}
// красивый вывод двумерного массива, всё считается внутри
void vivod_dvymernogo_masiva(int stroki, int stolbcy, int masiv[stroki][stolbcy])
{
int stroka, stolbec, i;
int shirina = 1;
int chislo, kol;
// ищем самое длинное число (минус тоже считается за символ)
for (stroka = 0; stroka < stroki; stroka++)
{
for (stolbec = 0; stolbec < stolbcy; stolbec++)
{
chislo = masiv[stroka][stolbec];
kol = 0;
if (chislo <= 0)
{
kol = 1;
}
while (chislo != 0)
{
chislo = chislo / 10;
kol++;
}
if (kol > shirina)
{
shirina = kol;
}
}
}
// верхняя линия
for (stolbec = 0; stolbec < stolbcy; stolbec++)
{
cout << "+";
for (i = 0; i < shirina + 2; i++)
{
cout << "-";
}
}
cout << "+" << endl;
// строки с числами и линия под каждой строкой
for (stroka = 0; stroka < stroki; stroka++)
{
cout << "|";
for (stolbec = 0; stolbec < stolbcy; stolbec++)
{
cout << " " << setw(shirina) << masiv[stroka][stolbec] << " |";
}
cout << endl;
for (stolbec = 0; stolbec < stolbcy; stolbec++)
{
cout << "+";
for (i = 0; i < shirina + 2; i++)
{
cout << "-";
}
}
cout << "+" << endl;
}
}
// Заполнение двумерного масива рандомам
void Zapolnenie_dvymernogo_masiva(int stroki, int stolbcy, int masiv[stroki][stolbcy])
{
srand(time(NULL));
int a, b;
cout << "Введите начало рандома: "; cin >> a;
cout << "Введите конец рандома: "; cin >> b;
for (int stroka = 0; stroka < stroki; stroka++)
{
for (int stolbec = 0; stolbec < stolbcy; stolbec++)
{
masiv[stroka][stolbec] = a + rand() % (b - a + 1);
}
}
}