Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д