Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <valarray>
- #include <random>
- #include <iomanip>
- #include <numeric>
- #include <algorithm>
- using namespace std;
- int randomize();
- void random_fill(valarray<int>& matrix);
- void print(valarray<int>& matrix, const size_t columns, const streamsize width = 5);
- void print(valarray<int>& line, const streamsize width = 5);
- valarray<int> permutation(valarray<int>& matrix, const size_t rows, const size_t columns);
- int specification(valarray<int>& column);
- int sum(valarray<int>& column);
- void print_sum(valarray<int>& matrix, const size_t rows, const size_t columns, const streamsize width = 5);
- int main() {
- setlocale(LC_CTYPE, "Russian");
- cout << "\n\t Введите количество строк матрицы: ";
- size_t rows;
- cin >> rows;
- cout << "\t Введите количество столбцов матрицы: ";
- size_t columns;
- cin >> columns;
- size_t size = rows * columns;
- valarray<int> matrix(size);
- random_fill(matrix);
- print(matrix, columns);
- valarray<int> spec = permutation(matrix, rows, columns);
- print(matrix, columns);
- print(spec);
- print_sum(matrix, rows, columns);
- cin.sync();
- cin.get();
- }
- int specification(valarray<int>& column) {
- return abs(accumulate(begin(column), end(column), 0, [](int sum, int next) { return next < 0 ? sum + next : sum; }));
- }
- int sum(valarray<int>& column) {
- return accumulate(begin(column), end(column), 0);
- }
- void print_sum(valarray<int>& matrix, const size_t rows, const size_t columns, const streamsize width) {
- valarray<int> temp;
- cout << endl;
- for (size_t index = 0; index < columns; ++index) {
- slice slise_matrix(index, rows, columns);
- temp = matrix[slise_matrix];
- if (specification(temp)) cout << setw(width) << sum(temp);
- else cout << setw(width) << '-';
- }
- cout << endl;
- }
- valarray<int> permutation(valarray<int>& matrix, const size_t rows, const size_t columns) {
- valarray<int> specifications(columns);
- valarray<valarray<int>> temp(columns);
- for (size_t index = 0; index < columns; ++index) {
- slice slise_matrix(index, rows, columns);
- temp[index] = matrix[slise_matrix];
- specifications[index] = specification(temp[index]);
- }
- print(specifications);
- for (size_t n = 1; n < columns; ++n)
- for (size_t m = 0; m < columns - n; ++m)
- if (specifications[m] > specifications[m + 1]) {
- swap(specifications[m], specifications[m + 1]);
- swap(temp[m], temp[m + 1]);
- }
- for (size_t j = 0, k = 0; j < rows; ++j) for (size_t i = 0; i < columns; ++i) matrix[k++] = temp[i][j];
- return specifications;
- }
- void print(valarray<int>& line, const streamsize width) {
- cout << endl;
- for (auto element : line) cout << setw(width) << element;
- cout << endl;
- }
- void print(valarray<int>& matrix, const size_t columns, const streamsize width) {
- size_t column = 0;
- cout << endl;
- for (auto element : matrix) {
- cout << setw(width) << element;
- if (++column % columns) continue;
- cout << '\n';
- }
- }
- void random_fill(valarray<int>& matrix) {
- generate(begin(matrix), end(matrix), randomize);
- }
- int randomize() {
- uniform_int_distribution<int> rand(-10, 10);
- random_device rnd;
- return rand(rnd);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement