Advertisement
zhukov000

LR 4

Nov 20th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1. #include<math.h>
  2. #include<stdio.h>
  3. #include<malloc.h>
  4.  
  5. // функция ввода массива, указатель на начало массива передается результатом,
  6. // через параметр передается переменная для хранения размера массива
  7. double * input_array(int * psize)
  8. {
  9.   printf("Input array size: ");
  10.   scanf("%d", psize);
  11.   // выделение памяти: (*psize) элементов, каждый размера под double
  12.   // *psize - это значение, которое лежит по адресу в указателе n
  13.   double * arr = malloc(*psize * sizeof(double)); // выделение памяти под массив
  14.   // ввод элементов массива
  15.   for(int i=0; i<*psize; ++i)
  16.   {
  17.     printf("Input element #%d: ", i + 1); // Input element #1:
  18.     scanf("%lf", arr + i); // ввод в массив arr[0], arr[1] ...
  19.   }
  20.   return arr; // возвращаем массив
  21. }
  22.  
  23. // функция вывода на экран: первый параметр - массив, второй - количество элементов в массиве
  24. void print_array(double * arr, int n)
  25. {
  26.   printf("Array of %d elements:\n", n);
  27.   for(int i=0; i<n; ++i)
  28.     printf("#%d - %lf\n", i + 1, arr[i]);
  29. }
  30.  
  31. // получаем указатель на массив и количество элементов, которые изменяем
  32. void task(double *arr, int *n)
  33. {
  34.   int x, k = *n;
  35.   printf("Input number: ");
  36.   scanf("%d", &x);
  37.   for(int i=0; i<k; ++i)
  38.   {
  39.     if ( x > fabs(arr[i]) )
  40.     {
  41.       // удаление элемента i
  42.       for(int j=i; j < k-1; ++j)
  43.         arr[j] = arr[j + 1];
  44.       k--; // уменьшили размер массива
  45.       i--; // возвращение к предыдущему элементу
  46.     }
  47.   }
  48.   *n = k; // сохраняем новый размер
  49. }
  50.  
  51. int main()
  52. {
  53.   int n = 0;
  54.   double * arr = input_array( &n );
  55.   task(arr, &n);
  56.   print_array(arr, n);
  57.   if (arr != 0) free(arr); // освобождаем память, если она была выеделена
  58.   return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement