Advertisement
Guest User

Snake

a guest
Oct 23rd, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <locale.h>
  4.  
  5. void transform(float** v, float* arr, int n, int m);
  6. void enterMat(float** arr, int n, int m);
  7. void printMat(float** arr, int n, int m);
  8. void sortMat(float** arr, int n, int m);
  9. void postItems(float** arr, float** a, int n, int m);
  10. void swap(float* a, float* b);
  11. void clearMat(float** arr);
  12.  
  13. int main()
  14. {
  15.     setlocale(LC_ALL, "rus");
  16.     int n, m;
  17.  
  18.     printf("Введите количество строк и столбцов\n");
  19.  
  20.     do {
  21.         scanf("%d %d", &n, &m);
  22.         if (n < 0 || m < 0)
  23.             printf("Некорректные данные, введите заново\n");
  24.     } while (n < 0 || m < 0);
  25.  
  26.  
  27.     float* arr = new float[n * m];
  28.     float** v = new float* [n];
  29.     transform(v, arr, n, m);
  30.  
  31.     float* dest = new float[n * m];
  32.     float** a = new float* [n];
  33.     transform(a, dest, n, m);
  34.     for (int i = 0; i < n; i++)
  35.         for (int j = 0; j < m; j++)
  36.             a[i][j] = 0;
  37.  
  38.     printf("Введите элементы\n");
  39.     enterMat(v, n, m);
  40.     printf("\n");
  41.     printMat(v, n, m);
  42.     printf("\n");
  43.     sortMat(v, n, m);
  44.     postItems(v, a, n, m);
  45.     printMat(a, n, m);
  46.     clearMat(v);
  47.     getch();
  48. }
  49.  
  50. void transform(float** v, float* arr, int n, int m)
  51. {
  52.     for (int i = 0; i < n; i++)
  53.         v[i] = arr + i * m;
  54. }
  55.  
  56. void enterMat(float** arr, int n, int m)
  57. {
  58.     for (int i = 0; i < n; i++)
  59.         for (int j = 0; j < m; j++)
  60.             scanf("%f", arr[i] + j);
  61. }
  62.  
  63. void printMat(float** arr, int n, int m)
  64. {
  65.     for (int i = 0; i < n; i++)
  66.     {
  67.         for (int j = 0; j < m; j++)
  68.             printf("%9.2f", *(arr[i] + j));
  69.         printf("\n");
  70.     }
  71. }
  72.  
  73. void sortMat(float** arr, int n, int m)
  74. {
  75.     for (int i = 0; i < m * n - 1; i++)
  76.         for (int j = i + 1; j < m * n; j++)
  77.         {
  78.             if (*(*(arr)+i) > * (*(arr)+j))
  79.                 swap((*(arr)+i), (*(arr)+j));
  80.         }
  81. }
  82.  
  83. void postItems(float** arr, float** a, int n, int m)
  84. {
  85.     int count = 0; int i = 0; int j = 0;
  86.     int f = 0;//1 - по диагонали сверху вниз, 0 - по диагонали снизу вверх
  87.     while (count != n * m)
  88.     {
  89.         a[i][j] = *(*arr + count);
  90.         if (f == 0)
  91.         {
  92.             if ((i == 0) && (j != m - 1))
  93.             {
  94.                 j++;
  95.                 f = 1;
  96.             }
  97.             else if (j == m - 1)
  98.             {
  99.                 i++;
  100.                 f = 1;
  101.             }
  102.             else
  103.             {
  104.                 i--;
  105.                 j++;
  106.             }
  107.         }
  108.         else
  109.         {
  110.             if ((j == 0) && (i != n - 1))
  111.             {
  112.                 i++;
  113.                 f = 0;
  114.             }
  115.             else if (i == n - 1)
  116.             {
  117.                 j++;
  118.                 f = 0;
  119.             }
  120.             else {
  121.                 j--;
  122.                 i++;
  123.             }
  124.         }
  125.         count++;
  126.     }
  127. }
  128.  
  129. void swap(float* a, float* b)
  130. {
  131.     float temp = *a;
  132.     *a = *b;
  133.     *b = temp;
  134. }
  135.  
  136. void clearMat(float** arr)
  137. {
  138.     delete[] * arr;
  139.     delete[]arr;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement