#include <iostream>
#include <iomanip>
using namespace std;
const int STROKI = 3; // сколько строк в массиве
const int STOLBCY = 4; // сколько столбцов в массиве
// красивый вывод двумерного массива, всё считается внутри
void pipicka(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;
}
}
int main()
{
int masiv[STROKI][STOLBCY] = {
{1, 2, 3, 4},
{10, -5, 100, 7},
{8, 9, 0, 11}
};
pipicka(masiv);
}