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;
- // Расчет значения нормированых Евклидовых векторов.
- double norm (int **in_matrix, unsigned int number, unsigned int in_size_x)
- {
- double sum_norm = 0;
- for (unsigned int i = 0; i < in_size_x; i++)
- {
- sum_norm = sum_norm + pow(in_matrix[number][i], 2);
- }
- return sqrt(sum_norm);
- }
- // Функция вывода на экран двумерных массивов.
- void cout_matrix(int **in_matrix, unsigned int size_y, unsigned int size_x)
- {
- for (unsigned int y = 0; y < size_y; y++)
- {
- for (unsigned int x = 0; x < size_x; x++)
- cout << in_matrix[y][x] << " ";
- cout << endl;
- }
- }
- // Функция выделения памяти двумерному массиву
- int **matrix_new(unsigned int size_y, unsigned int size_x)
- {
- int **matrix = new int *[size_y];
- for (unsigned int y = 0; y < size_y; y++)
- matrix[y] = new int[size_x];
- return matrix;
- }
- // Функция вывода на экран одномерного массива
- void cout_mas(int *mas, unsigned int size)
- {
- for (unsigned int i = 0; i < size; i++)
- cout << mas[i] << endl;
- }
- // Перегружаем функцию для вывода массивов типа double
- void cout_mas(double *mas, unsigned int size)
- {
- for (unsigned int i = 0; i < size; i++)
- cout << mas[i] << endl;
- }
- //Функция удаления двумерного массива
- void delete_two_mas(int **matrix, unsigned int size_y)
- {
- for (unsigned int y = 0; y < size_y; y++)
- delete[] matrix[y];
- delete[] matrix;
- }
- int main()
- {
- setlocale(0, "");
- srand(time(NULL));
- unsigned int size_x, size_y;
- cout << "Введите длинну и ширину матрицы..." << endl;
- cin >> size_x;
- cin >> size_y;
- // Выделение памяти под матрицу.
- int **matrix = matrix_new(size_y, size_x);
- // Задаем эелементам рандомные значения.
- for (unsigned int y = 0; y < size_y; y++)
- {
- for (unsigned int x = 0; x < size_x; x++)
- matrix[y][x] = rand() % 9 + 1;
- }
- //Массив из номеров строк матрицы
- unsigned int *number_mas = new unsigned int[size_y];
- for (unsigned int i = 0; i < size_y; i++)
- number_mas[i] = i;
- // Выводим иначальную матрицу на экран.
- cout << endl << "Матрица" << endl;
- cout_matrix(matrix, size_y, size_x);
- // Выделяем место под новую, отсортированую матрицу, задаем значения нормированых векторов
- double *norm_mas = new double [size_y];
- for (unsigned int i = 0; i < size_y; i++)
- norm_mas[i] = norm(matrix, i, size_x);
- cout << endl << "Значения не отсортированых векторов" << endl;
- cout_mas(norm_mas, size_y);
- // Сортировка нормированых векторов
- for (unsigned int i = 0; i < size_y - 1; i++)
- {
- for (unsigned int j = 0; j < size_y - 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_y);
- // Выделение памяти под отсортированую матрицу.
- cout << endl << "Отсортированая матрица" << endl;
- int **matrix_end = matrix_new(size_y, size_x);
- // Копирование строк, используя отсортированые нормировыные строки
- for (unsigned int i = 0; i < size_y; i++)
- {
- for (unsigned int j = 0; j < size_x; j++)
- matrix_end[i][j] = matrix[number_mas[i]][j];
- }
- // Вывод на экран отсортированой матрицы
- cout_matrix(matrix_end, size_y, size_x);
- // Освобождаем выделенную память.
- delete_two_mas(matrix, size_y);
- delete_two_mas(matrix_end, size_y);
- delete[] number_mas;
- delete[] norm_mas;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement