Advertisement
LosPollos

Home task 2-2

Feb 27th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.77 KB | None | 0 0
  1. /************************************************************************
  2. Сгенерировать двумерный динамический массив из N×N элементов типа float, число N считать с клавиатуры (сделать цикл, который не позволит программе продолжиться, пока не будет введено 4 < N < 128). В этом массиве заменить элементы на их модули (math.h), если индексы равны (например, [3][3] или [2][2]), и поменять знак элементов в остальных случаях. Вывести оба массива. Код вывода элементов на экран, код генерации элементов и код преобразования массива оформить в виде отдельных функций.
  3.  
  4. Пример исходного массива:
  5.  
  6. +5.0 -3.2 -4.5 +6.1
  7. -2.0 -3.1 +3.9 +0.9
  8. +8.1 -2.4 +5.1 -8.3
  9. -4.7 +3.1 +8.3 -6.0
  10.  
  11. Результат:
  12.  
  13. +5.0 +3.2 +4.5 -6.1
  14. +2.0 +3.1 -3.9 -0.9
  15. -8.1 +2.4 +5.1 +8.3
  16. +4.7 -3.1 -8.3 +6.0
  17. */
  18.  
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <time.h>
  23. #include <math.h>
  24.  
  25. void generate(int* arr, int size)
  26. {
  27.     srand(time(NULL));
  28.  
  29.     for (unsigned i = 0; i < size; ++i)
  30.     {
  31.         arr[i] = rand() % 201 - 100;
  32.     }
  33. }
  34.  
  35.  
  36. void transform(int* arr, int h, int w)
  37. {
  38.     for (unsigned i = 0; i < h; ++i)
  39.     {
  40.         for (unsigned j = 0; j < w; ++j)
  41.         {
  42.             arr[h * i + j] *= (-1);
  43.  
  44.             if (i == j)
  45.             {
  46.                 arr[h * i + j] = abs(arr[h * i + j]);
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52.  
  53.  
  54. int* arrCopy(int* arrRes, const int* arrSource, int size)
  55. {
  56.     for (unsigned i = 0; i < size; ++i)
  57.     {
  58.         arrRes[i] = arrSource[i];
  59.     }
  60.  
  61.     return arrRes;
  62. }
  63.  
  64.  
  65.  
  66. void print(const int* arr, int h, int w)
  67. {
  68.     for (unsigned i = 0; i < h; ++i)
  69.     {
  70.         for (unsigned j = 0; j < w; ++j)
  71.         {
  72.             printf("%5d ", arr[h * i + j]);
  73.         }
  74.         puts(" ");
  75.     }
  76. }
  77.  
  78.  
  79.  
  80. int main()
  81. {
  82.     unsigned width = 0;
  83.     unsigned height = 0;
  84.  
  85.     // Input.
  86.     do
  87.     {
  88.         system("cls");
  89.         printf("Enter array height: ");
  90.         scanf_s("%u", &height);
  91.     } while (height < 4 || height > 128);
  92.  
  93.     do
  94.     {
  95.         system("cls");
  96.         printf("Enter array width: ");
  97.         scanf_s("%u", &width);
  98.     } while (width < 4 || width > 128);
  99.  
  100.     int* arr = (int*)malloc(width * height * sizeof(int));
  101.     int* arr2 = (int*)malloc(width * height * sizeof(int));
  102.  
  103.     // Generate, copy to arr2 and search.
  104.     generate(arr, width * height);
  105.     arrCopy(arr2, arr, width * height);
  106.     transform(arr2, height, width);
  107.  
  108.     // Print.
  109.     system("cls");
  110.     printf("First array: \n");
  111.     print(arr, height, width);
  112.     printf("\n\nSecond array: \n");
  113.     print(arr2, height, width);
  114.  
  115.     free(arr);
  116.     free(arr2);
  117.  
  118.     system("PAUSE");
  119.     return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement