Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <time.h>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- //Расчет значения нормированых Евклидовых векторов.
- int norm (int **in_matrix, int number, int in_size_y)
- {
- int sum_norm = 0;
- for (int i = 0; i < in_size_y; i++)
- {
- sum_norm = sum_norm + pow(in_matrix[number][i], 2);
- }
- return sqrt(sum_norm);
- }
- //Функция вывода на экран двумерных массивов.
- void cout_matrix(int **in_matrix, int size_x, int size_y)
- {
- for (int x = 0; x < size_x; x++)
- {
- for (int y = 0; y < size_y; y++)
- cout << in_matrix[x][y] << " ";
- cout << endl;
- }
- }
- // Функция выделения памяти двумерному массиву
- int **matrix_new(int size_x, int size_y)
- {
- int **matrix = new int *[size_x];
- for (int x = 0; x < size_x; x++)
- matrix[x] = new int[size_y];
- return matrix;
- }
- //Функция вывода на экран одномерного массива
- void cout_mas(int *mas, int size)
- {
- for (int i = 0; i < size; i++)
- cout << mas[i] << endl;
- }
- int main()
- {
- srand(time(NULL));
- int size_x, size_y;
- cout << "Введите длинну и ширину матрицы..." << endl;
- cin >> size_y;
- cin >> size_x;
- //Выделение памяти под матрицу.
- int **matrix = matrix_new(size_x, size_y);
- //Задаем эелементам рандомные значения.
- for (int x = 0; x < size_x; x++)
- {
- for (int y = 0; y < size_y; y++)
- matrix[x][y] = rand() % 9 + 1;
- }
- int *number_mas = new int[size_x];
- for (int i = 0; i < size_x; i++)
- number_mas[i] = i;
- //Выводим иначальную матрицу на экран.
- cout << endl << "Матрица" << endl;
- cout_matrix(matrix, size_x, size_y);
- //Выделяем место под новую, отсортированую матрицу, задаем значения нормированых векторов
- int *norm_mas = new int [size_x];
- for (int i = 0; i < size_x; i++)
- norm_mas[i] = norm(matrix, i, size_y);
- cout << endl << "Значения не отсортированых векторов" << endl;
- cout_mas(norm_mas, size_x);
- //Сортировка нормированых векторов
- for (int i = 0; i < size_x - 1; i++)
- {
- for (int j = 0; j < size_x - i - 1; j++)
- {
- if (norm_mas[j] > norm_mas[j + 1])
- {
- swap(norm_mas[j], norm_mas[j + 1]);
- swap(number_mas[j], number_mas[j + 1]);
- }
- }
- }
- cout << endl << "Значения отсортированых векторов" << endl;
- cout_mas(norm_mas, size_x);
- //Выделение памяти под отсортированую матрицу.
- cout << endl << "Отсортированая матрица" << endl;
- int **matrix_end = matrix_new(size_x, size_y);
- //Копирование строк, используя отсортированые нормировыные строки
- for (int i = 0; i < size_x; i++)
- {
- for (int j = 0; j < size_y; j++)
- matrix_end[i][j] = matrix[number_mas[i]][j];
- }
- //Вывод на экран отсортированой матрицы
- cout_matrix(matrix_end, size_x, size_y);
- //Освобождаем выделенную память.
- for (int x = 0; x < size_x; x++)
- delete[] matrix[x];
- delete[] matrix;
- for (int x = 0; x < size_x; x++)
- delete[] matrix_end[x];
- delete[] matrix_end;
- delete[] number_mas;
- delete[] norm_mas;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement