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

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

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

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

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;
}

15   голосов, оценка 3.867 из 5


СОХРАНИТЬ ССЫЛКУ