#include
#include
#include
#include
#include
#include
#include
#include
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
using namespace std;
using T = int;
size_t count(const char* prompt, size_t mn, size_t mx) {
size_t value = -1;
while (value < mn || value > mx) {
cout << prompt;
cin >> value;
cin.ignore(0x1000, '\n');
}
return value;
}
void fill_random(vector>& mx, const size_t n, const size_t m, T a, T b) {
if (a > b) swap(a, b);
uniform_int_distribution uid(a, b);
mt19937 gen{ random_device()() };
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) mx[i][j] = uid(gen);
}
}
void show(const vector>& mx, const size_t n, const size_t m, const streamsize w) {
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) cout << ' ' << setw(w) << mx[i][j];
puts("");
}
puts("");
}
static void resize(size_t& n, size_t& m, const size_t h, const size_t w) {
n = count("N: ", h, w);
m = count("M: ", h, w);
}
void add_with_number(vector>& mx, const size_t n, const size_t m, T number) {
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) mx[i][j] += number;
}
}
void multiply_by_number(vector>& mx, const size_t n, const size_t m, T number) {
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) mx[i][j] *= number;
}
}
T max_element(vector>& mx, const size_t n, const size_t m) {
T x = numeric_limits::min();
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) if (mx[i][j] > x) x = mx[i][j];
}
return x;
}
void show_submatrix(vector>& mx, const size_t ii, const size_t jj, const size_t n, const size_t m, const streamsize w) {
for (size_t i = ii; i < n; ++i) {
for (size_t j = jj; j < m; ++j) cout << ' ' << setw(w) << mx[i][j];
puts("");
}
puts("");
}
int main() {
srand(static_cast(time(nullptr)));
constexpr size_t h = 10;
constexpr size_t w = 1000;
vector> mx(w, vector(w));
auto n = count("N: ", h, w);
auto m = count("M: ", h, w);
T a = 10;
T b = 99;
fill_random(mx, n, m, a, b);
auto width = static_cast(log10(b) + 1);
show(mx, n, m, width);
cout << "Resize:\n";
resize(n, m, h, w);
show(mx, n, m, width);
cout << "Number for sum: ";
T number{};
cin >> number;
add_with_number(mx, n, m, number);
width = static_cast(log10(max_element(mx, n, m)) + 1);
show(mx, n, m, width);
cout << "Number for multiply: ";
cin >> number;
multiply_by_number(mx, n, m, number);
width = static_cast(log10(max_element(mx, n, m)) + 1);
show(mx, n, m, width);
auto ii = count("Start row: ", 0, n);
auto jj = count("Start column: ", 0, m);
auto nn = count("Last row: ", ii, n);
auto mm = count("Last column: ", jj, m);
show_submatrix(mx, ii, jj, nn, mm, width);
}