Advertisement
SteelK

Untitled

May 19th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.17 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include <iostream>
  4. #include <time.h>
  5. #include <cstdlib>
  6. #include <cmath>
  7.  
  8. using namespace std;
  9.  
  10. // Расчет значения нормированых Евклидовых векторов.
  11. double norm (int **in_matrix, unsigned int number, unsigned int in_size_x)
  12. {
  13.     double sum_norm = 0;
  14.     for (unsigned int i = 0; i < in_size_x; i++)
  15.     {
  16.         sum_norm = sum_norm + pow(in_matrix[number][i], 2);
  17.     }
  18.     return sqrt(sum_norm);
  19. }
  20.  
  21. // Функция вывода на экран двумерных массивов.
  22. void cout_matrix(int **in_matrix, unsigned int size_y, unsigned int size_x)
  23. {
  24.     for (unsigned int y = 0; y < size_y; y++)
  25.     {
  26.         for (unsigned int x = 0; x < size_x; x++)
  27.             cout << in_matrix[y][x] << " ";
  28.         cout << endl;
  29.     }
  30. }
  31.  
  32. // Функция выделения памяти двумерному массиву
  33. int **matrix_new(unsigned int size_y, unsigned int size_x)
  34. {
  35.     int **matrix = new int *[size_y];
  36.     for (unsigned int y = 0; y < size_y; y++)
  37.         matrix[y] = new int[size_x];
  38.  
  39.     return matrix;
  40. }
  41.  
  42. // Функция вывода на экран одномерного массива
  43. void cout_mas(int *mas, unsigned int size)
  44. {
  45.     for (unsigned int i = 0; i < size; i++)
  46.         cout << mas[i] << endl;
  47. }
  48.  
  49. // Перегружаем функцию для вывода массивов типа double
  50. void cout_mas(double *mas, unsigned int size)
  51. {
  52.     for (unsigned int i = 0; i < size; i++)
  53.         cout << mas[i] << endl;
  54. }
  55.  
  56. //Функция удаления двумерного массива
  57. void delete_two_mas(int **matrix, unsigned int size_y)
  58. {
  59.     for (unsigned int y = 0; y < size_y; y++)
  60.         delete[] matrix[y];
  61.     delete[] matrix;
  62. }
  63.  
  64.  
  65. int main()
  66. {
  67.     setlocale(0, "");
  68.     srand(time(NULL));
  69.     unsigned int size_x, size_y;
  70.    
  71.     cout << "Введите длинну и ширину матрицы..." << endl;
  72.     cin >> size_x;
  73.     cin >> size_y;
  74.  
  75.     // Выделение памяти под матрицу.
  76.     int **matrix = matrix_new(size_y, size_x);
  77.  
  78.     // Задаем эелементам рандомные значения.
  79.     for (unsigned int y = 0; y < size_y; y++)
  80.     {
  81.         for (unsigned int x = 0; x < size_x; x++)
  82.             matrix[y][x] = rand() % 9 + 1;
  83.     }
  84.  
  85.     //Массив из номеров строк матрицы
  86.     unsigned int *number_mas = new unsigned int[size_y];
  87.     for (unsigned int i = 0; i < size_y; i++)
  88.         number_mas[i] = i;
  89.  
  90.     // Выводим иначальную матрицу на экран.
  91.     cout << endl << "Матрица" << endl;
  92.     cout_matrix(matrix, size_y, size_x);
  93.  
  94.     // Выделяем место под новую, отсортированую матрицу, задаем значения нормированых векторов
  95.     double *norm_mas = new double [size_y];
  96.     for (unsigned int i = 0; i < size_y; i++)
  97.         norm_mas[i] = norm(matrix, i, size_x);
  98.  
  99.     cout << endl << "Значения не отсортированых векторов" << endl;
  100.     cout_mas(norm_mas, size_y);
  101.  
  102.     // Сортировка нормированых векторов
  103.     for (unsigned int i = 0; i < size_y - 1; i++)
  104.     {
  105.         for (unsigned int j = 0; j < size_y - i - 1; j++)
  106.         {
  107.             if (norm_mas[j] > norm_mas[j + 1])
  108.             {
  109.                 swap(norm_mas[j], norm_mas[j + 1]);
  110.                 swap(number_mas[j], number_mas[j + 1]);
  111.             }
  112.         }
  113.     }
  114.  
  115.     cout << endl << "Значения отсортированых векторов" << endl;
  116.     cout_mas(norm_mas, size_y);
  117.  
  118.     // Выделение памяти под отсортированую матрицу.
  119.     cout << endl << "Отсортированая матрица" << endl;
  120.     int **matrix_end = matrix_new(size_y, size_x);
  121.  
  122.     // Копирование строк, используя отсортированые нормировыные строки
  123.     for (unsigned int i = 0; i < size_y; i++)
  124.     {
  125.         for (unsigned int j = 0; j < size_x; j++)
  126.             matrix_end[i][j] = matrix[number_mas[i]][j];
  127.     }
  128.  
  129.     // Вывод на экран отсортированой матрицы
  130.     cout_matrix(matrix_end, size_y, size_x);
  131.  
  132.     // Освобождаем выделенную память.
  133.     delete_two_mas(matrix, size_y);
  134.     delete_two_mas(matrix_end, size_y);
  135.  
  136.     delete[] number_mas;
  137.     delete[] norm_mas;
  138.  
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement