Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C (СИ) (74238)

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

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

Ребят, подскажите хотя бы с чего начать и как делать Необходимо в одномерном массиве,состоящем из N вещественных элементов, вычислить: 1) Сумму отрицательных элементов массива 2) Произведение элементов массива, расположенных между максимальным и минимальным элементами 3)Заполнить его случайными значениями и распечатать его по 10 чисел в строке 4) Упорядочить элементы массива по возрастанию

Решение задачи: «Найти произведение элементов массива, расположенных между максимальным и минимальным элементами»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int is_negative(const int n)
{
    return n < 0;
}
 
int sum_if(const int *ptr, size_t count, int (*predicate)(int))
{
    int s = 0;
    while (count--)
    {
        if (predicate(*ptr))
        {
            s += *ptr;
        }
        ptr++;
    }
    return s;
}
 
const int* max_element(const int* begin, const int* end)
{
    const int* max = begin;
    while (++begin != end)
    {
        if (*begin > *max)
        {
            max = begin;
        }
    }
    return max;
}
 
const int* min_element(const int* begin, const int* end)
{
    const int* min = begin;
    while (++begin != end)
    {
        if (*begin < *min)
        {
            min = begin;
        }
    }
    return min;
}
 
int accumulate(const int* begin, const int *end, int start_value, int (*func)(int, int))
{
    while (begin != end)
    {
        start_value = func(start_value, *begin++);
    }
    return start_value;
}
 
int mul(int n1, int n2)
{
    return n1 * n2;
}
 
void fill(int *ptr, size_t size)
{
    while (size--)
    {
        *ptr++ = rand() % 20 - 10;
    }
}
 
void dump(const int *ptr, size_t size, size_t in_row_count)
{
    size_t i = 0;
    for (; i < size; i++)
    {
        printf("%d ", *ptr++);
        if ((i + 1) % in_row_count == 0)
        {
            putchar('\n');
        }
    }
}
 
int compare_int(const void* ptr1, const void *ptr2)
{
    return *(const int*)ptr1 - *(const int*)ptr2;
}
 
int main()
{
    const int *min, *max, *buf;
    int array[45];
    srand(time(NULL));
    fill(array, 45);
    dump(array, 45, 10);
    printf("\nNegative elemets sum: %d\n", sum_if(array, 45, is_negative));
    
    min = min_element(array, array + 45);
    max = max_element(array, array + 45);
    if (min > max)
    {
        buf = min;
        min = max;
        max = buf;
    }
    printf("Between max and min: %d\n", accumulate(min + 1, max, 1, mul));
    qsort(array, 45, sizeof(int), compare_int);
    dump(array, 45, 45);
    putchar('\n');
    return EXIT_SUCCESS;
}

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

Код решает задачу поиска произведения элементов массива, расположенных между максимальным и минимальным элементами. Вот список функций и их назначений:

  1. is_negative — функция, которая проверяет, является ли число отрицательным.
  2. sum_if — функция, которая суммирует все элементы массива, удовлетворяющие заданному условию.
  3. max_element — функция, которая находит максимальный элемент в заданном диапазоне массива.
  4. min_element — функция, которая находит минимальный элемент в заданном диапазоне массива.
  5. accumulate — функция, которая последовательно применяет заданную функцию к элементам массива, начиная с заданного значения.
  6. mul — функция, которая перемножает два числа.
  7. fill — функция, которая заполняет массив случайными числами.
  8. dump — функция, которая выводит содержимое массива на экран.
  9. compare_int — функция, которая сравнивает два числа и возвращает их разницу.
  10. main — главная функция программы. Список действий, выполняемых в коде:
  11. Инициализация переменных и загрузка начальных значений.
  12. Заполнение массива случайными числами.
  13. Вывод содержимого массива на экран.
  14. Поиск суммы элементов массива, которые меньше нуля.
  15. Поиск минимального и максимального элементов массива.
  16. Если минимальный и максимальный элементы находятся не в правильном порядке, то их меняют местами.
  17. Поиск произведения элементов массива, расположенных между максимальным и минимальным элементами.
  18. Сортировка массива по возрастанию.
  19. Вывод отсортированного массива на экран.
  20. Программа заканчивает работу и возвращает значение EXIT_SUCCESS.

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

15   голосов , оценка 3.867 из 5
Похожие ответы