Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - 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;
}
Объяснение кода листинга программы
Код решает задачу поиска произведения элементов массива, расположенных между максимальным и минимальным элементами. Вот список функций и их назначений:
- is_negative — функция, которая проверяет, является ли число отрицательным.
- sum_if — функция, которая суммирует все элементы массива, удовлетворяющие заданному условию.
- max_element — функция, которая находит максимальный элемент в заданном диапазоне массива.
- min_element — функция, которая находит минимальный элемент в заданном диапазоне массива.
- accumulate — функция, которая последовательно применяет заданную функцию к элементам массива, начиная с заданного значения.
- mul — функция, которая перемножает два числа.
- fill — функция, которая заполняет массив случайными числами.
- dump — функция, которая выводит содержимое массива на экран.
- compare_int — функция, которая сравнивает два числа и возвращает их разницу.
- main — главная функция программы. Список действий, выполняемых в коде:
- Инициализация переменных и загрузка начальных значений.
- Заполнение массива случайными числами.
- Вывод содержимого массива на экран.
- Поиск суммы элементов массива, которые меньше нуля.
- Поиск минимального и максимального элементов массива.
- Если минимальный и максимальный элементы находятся не в правильном порядке, то их меняют местами.
- Поиск произведения элементов массива, расположенных между максимальным и минимальным элементами.
- Сортировка массива по возрастанию.
- Вывод отсортированного массива на экран.
- Программа заканчивает работу и возвращает значение EXIT_SUCCESS.