Advertisement
SteelK

Untitled

Apr 21st, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.53 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. int norm (int **in_matrix, int number, int in_size_y)
  12. {
  13.     int sum_norm = 0;
  14.     for (int i = 0; i < in_size_y; 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, int size_x, int size_y)
  23. {
  24.     for (int x = 0; x < size_x; x++)
  25.     {
  26.         for (int y = 0; y < size_y; y++)
  27.             cout << in_matrix[x][y] << " ";
  28.         cout << endl;
  29.     }
  30. }
  31.  
  32. // Функция выделения памяти двумерному массиву
  33. int **matrix_new(int size_x, int size_y)
  34. {
  35.     int **matrix = new int *[size_x];
  36.     for (int x = 0; x < size_x; x++)
  37.         matrix[x] = new int[size_y];
  38.  
  39.     return matrix;
  40. }
  41.  
  42. //Функция вывода на экран одномерного массива
  43. void cout_mas(int *mas, int size)
  44. {
  45.     for (int i = 0; i < size; i++)
  46.         cout << mas[i] << endl;
  47. }
  48.  
  49.  
  50. int main()
  51. {
  52.     srand(time(NULL));
  53.     int size_x, size_y;
  54.    
  55.     cout << "Введите длинну и ширину матрицы..." << endl;
  56.     cin >> size_y;
  57.     cin >> size_x;
  58.  
  59.     //Выделение памяти под матрицу.
  60.     int **matrix = matrix_new(size_x, size_y);
  61.  
  62.     //Задаем эелементам рандомные значения.
  63.     for (int x = 0; x < size_x; x++)
  64.     {
  65.         for (int y = 0; y < size_y; y++)
  66.             matrix[x][y] = rand() % 9 + 1;
  67.     }
  68.  
  69.     int *number_mas = new int[size_x];
  70.     for (int i = 0; i < size_x; i++)
  71.         number_mas[i] = i;
  72.  
  73.     //Выводим иначальную матрицу на экран.
  74.     cout << endl << "Матрица" << endl;
  75.     cout_matrix(matrix, size_x, size_y);
  76.  
  77.     //Выделяем место под новую, отсортированую матрицу, задаем значения нормированых векторов
  78.     int *norm_mas = new int [size_x];
  79.     for (int i = 0; i < size_x; i++)
  80.         norm_mas[i] = norm(matrix, i, size_y);
  81.  
  82.     cout << endl << "Значения не отсортированых векторов" << endl;
  83.     cout_mas(norm_mas, size_x);
  84.  
  85.     //Сортировка нормированых векторов
  86.     for (int i = 0; i < size_x - 1; i++)
  87.     {
  88.         for (int j = 0; j < size_x - i - 1; j++)
  89.         {
  90.             if (norm_mas[j] > norm_mas[j + 1])
  91.             {
  92.                 swap(norm_mas[j], norm_mas[j + 1]);
  93.                 swap(number_mas[j], number_mas[j + 1]);
  94.             }
  95.         }
  96.     }
  97.  
  98.     cout << endl << "Значения отсортированых векторов" << endl;
  99.     cout_mas(norm_mas, size_x);
  100.  
  101.     //Выделение памяти под отсортированую матрицу.
  102.     cout << endl << "Отсортированая матрица" << endl;
  103.     int **matrix_end = matrix_new(size_x, size_y);
  104.  
  105.     //Копирование строк, используя отсортированые нормировыные строки
  106.     for (int i = 0; i < size_x; i++)
  107.     {
  108.         for (int j = 0; j < size_y; j++)
  109.             matrix_end[i][j] = matrix[number_mas[i]][j];
  110.     }
  111.  
  112.     //Вывод на экран отсортированой матрицы
  113.     cout_matrix(matrix_end, size_x, size_y);
  114.  
  115.     //Освобождаем выделенную память.
  116.     for (int x = 0; x < size_x; x++)
  117.         delete[] matrix[x];
  118.     delete[] matrix;
  119.  
  120.     for (int x = 0; x < size_x; x++)
  121.         delete[] matrix_end[x];
  122.     delete[] matrix_end;
  123.  
  124.     delete[] number_mas;
  125.     delete[] norm_mas;
  126.  
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement