Advertisement
Yurko_UA

Malinina_Matrix

Oct 16th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. const int N = 4; // размерность марицы
  5.  
  6. int inputMatrix(float *matrix)
  7. {
  8.     printf("Input matrix %dx%d\n", N, N);
  9.  
  10.     // в цикле вводим каждый элемент матрицы
  11.     // доступ к нему получаем: кол-во столбцов * i + j
  12.     int i, j;
  13.     for (i = 0; i < N; i++)
  14.         for (j = 0; j < N; j++)
  15.             scanf("%f", &matrix[N * i + j]);
  16.  
  17.     return 0;
  18. }
  19.  
  20. int outputMatrix(float *matrix)
  21. {
  22.     // функция вывода матрицы
  23.     int i, j;
  24.  
  25.     for (i = 0; i < N; i++)
  26.     {
  27.         for (j = 0; j < N; j++)
  28.         {
  29.             printf("%f ", matrix[N * i + j]);
  30.         }
  31.  
  32.         printf("\n");
  33.     }
  34.  
  35.     return 0;
  36. }
  37.  
  38. int sortFirst(float *first, int *firstIndexes)
  39. {
  40.     /*
  41.         функция для сортировки первых элементов
  42.         столбцов матрицы
  43.  
  44.         сортировка производится по методу "пузырька"
  45.  
  46.         в функцию передаются первые элементы столбцов
  47.         и массив с индексами - они тоже сортируются в соответствии
  48.         с сортировкой самих элементов - это поможет
  49.         в создании новой матрицы
  50.     */
  51.     int i, counter, temp_i; // переменная для цикла, счетчик (для сортировки) и временная переменная для индекса
  52.     float temp; // временная переменная для элемента массива
  53.  
  54.     do
  55.     {
  56.         counter = 0;
  57.         for(i = 0; i < N - 1; i++)
  58.         {
  59.             if(first[i] > first[i + 1])
  60.             {
  61.                 temp = first[i];
  62.                 first[i] = first[i + 1];
  63.                 first[i + 1] = temp;
  64.  
  65.                 temp_i = firstIndexes[i];
  66.                 firstIndexes[i] = firstIndexes[i + 1];
  67.                 firstIndexes[i + 1] = temp_i;
  68.  
  69.                 counter++;
  70.             }
  71.         }
  72.     }
  73.     while(counter != 0);
  74.  
  75.     return 0;
  76. }
  77.  
  78. int main()
  79. {
  80.     int i, j;
  81.     float matrix[N * N], newMatrix[N * N], first[N];
  82.     int firstIndexes[N];
  83.  
  84.     // индексы
  85.     for (i = 0; i < N; i++)
  86.         firstIndexes[i] = i;
  87.  
  88.     inputMatrix(matrix); // вводим матрицу
  89.  
  90.     for (i = 0; i < N; i++)
  91.     {
  92.         // в цикле получаем первые элементы столбцов
  93.         first[i] = matrix[i];
  94.     }
  95.  
  96.     sortFirst(first, firstIndexes); // сортируем
  97.  
  98.     // в цикле новую матрицу создаем
  99.     for (i = 0; i < N; i++)
  100.     {
  101.         for (j = 0; j < N; j++)
  102.         {
  103.             newMatrix[N * i + j] = matrix[N * i + firstIndexes[j]];
  104.         }
  105.     }
  106.  
  107.     printf("\nNew matrix:\n");
  108.     outputMatrix(newMatrix); // выводим
  109.  
  110.     getch();
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement