Поменять местами максимально положительный и минимально отрицательный элементы массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, надо поменять местами максимально положительный и минимально отрицательный элементы массива Т(14)

Решение задачи: «Поменять местами максимально положительный и минимально отрицательный элементы массива»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int* max_positive(const int* ptr, size_t len)
  6. {
  7.     size_t i = 0;
  8.     int* retval = NULL;
  9.     for (i = 0; i < len; i++)
  10.     {
  11.         if (retval == NULL && ptr[i] > 0)
  12.         {
  13.             retval = ptr + i;
  14.         }
  15.         else if (retval != NULL && ptr[i] > *retval)
  16.         {
  17.             retval = ptr + i;
  18.         }
  19.     }
  20.     return retval;
  21. }
  22.  
  23. int* min_negative(const int *ptr, size_t len)
  24. {
  25.     size_t i = 0;
  26.     int* retval = NULL;
  27.     for (i = 0; i < len; i++)
  28.     {
  29.         if (retval == NULL && ptr[i] < 0)
  30.         {
  31.             retval = ptr + i;
  32.         }
  33.         else if (retval != NULL && ptr[i] < *retval)
  34.         {
  35.             retval = ptr + i;
  36.         }
  37.     }
  38.     return retval;
  39. }
  40.  
  41. void swap(int *ptr1, int* ptr2)
  42. {
  43.     if (ptr1 != NULL && ptr2 != NULL)
  44.     {
  45.         int buf = *ptr1;
  46.         *ptr1 = *ptr2;
  47.         *ptr2 = buf;
  48.     }
  49. }
  50.  
  51. #define SIZE 14
  52.  
  53. int main()
  54. {
  55.     int array[SIZE];
  56.     size_t i = 0;
  57.     srand(time(NULL));
  58.     for (i = 0; i < SIZE; i++)
  59.     {
  60.         printf("%d ", array[i] = rand() % 21 - 10);
  61.     }
  62.     swap(max_positive(array, SIZE), min_negative(array, SIZE));
  63.     putchar('\n');
  64.     for (i = 0; i < SIZE; i++)
  65.     {
  66.         printf("%d ", array[i]);
  67.     }
  68.     putchar('\n');
  69.     return EXIT_SUCCESS;
  70. }

Объяснение кода листинга программы

В данном коде реализованы три функции:

  1. max_positive(const int* ptr, size_t len) - функция для поиска максимального положительного элемента в массиве. Работает следующим образом:
    • инициализирует переменную retval как NULL, которая будет хранить максимальный положительный элемент;
    • перебирает все элементы массива, начиная с первого;
    • если retval равен NULL, то текущий элемент больше 0 и становится новым значением retval;
    • если retval не равен NULL, то текущий элемент сравнивается с текущим значением retval. Если текущий элемент больше значения retval, то он становится новым значением retval.;
    • по окончанию цикла возвращает retval.
  2. min_negative(const int *ptr, size_t len) - функция для поиска минимального отрицательного элемента в массиве. Работает аналогично функции max_positive, но с использованием знака < вместо >.
  3. swap(int ptr1, int ptr2) - функция для обмена значений двух указателей. Если оба указателя не равны NULL, то происходит обмен значений между ними. В функции main создается массив array размером 14, заполняемый случайными числами от -10 до 10 с шагом 1. Затем вызывается функция max_positive, которая возвращает указатель на максимальный положительный элемент массива, и функция min_negative, которая возвращает указатель на минимальный отрицательный элемент массива. После чего вызывается функция swap, которая меняет местами максимальный положительный и минимальный отрицательный элементы массива. И, наконец, выводится исходный массив и массив после обмена элементов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы