Массивы, сумма и количество - C (СИ)
Формулировка задачи:
Добрый день.
Помогите с программой, заранее спасибо.
Вычислить Z , где S1, K1, S2, K2 – сумма и количество положительных элементов массива А (75) и В (60) соответственно.
Решение задачи: «Массивы, сумма и количество»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE_1 75 #define SIZE_2 60 size_t count_if(const int* ptr, size_t size, int (*predicate)(int)) { size_t count = 0; while (size--) if (predicate(*ptr++)) count++; return count; } int sum_if(const int* ptr, size_t size, int (*predicate)(int)) { int s = 0; while (size--) { if (predicate(*ptr)) s += *ptr; ptr++; } return s; } void dump(const int* ptr, size_t size, const char* fmt) { while (size--) printf(fmt, *ptr++); putchar('\n'); } void fill(int* ptr, size_t size) { while (size--) *ptr++ = (rand() % 20) - 10; } int is_positive(int value) { return value > 0; } int main(void) { int a[SIZE_1], b[SIZE_2]; double s1 = 0, s2 = 0, k1 = 0, k2 = 0; srand(time(0)); fill(a, SIZE_1); fill(b, SIZE_2); dump(a, SIZE_1, "%d "); dump(b, SIZE_2, "%d "); s1 = sum_if(a, SIZE_1, is_positive); s2 = sum_if(b, SIZE_2, is_positive); k1 = count_if(a, SIZE_1, is_positive); k2 = count_if(b, SIZE_2, is_positive); printf("%lf\n", (s1 + s2) / (k1 + k2)); return EXIT_SUCCESS; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h и time.h
- Определяются константы SIZE_1 и SIZE_2, которые задают размер массивов a и b соответственно.
- Определяются функции:
- count_if, которая принимает указатель на первый элемент массива, размер этого массива и предикат (условие) для элементов массива и возвращает количество удовлетворяющих элементов.
- sum_if, которая принимает указатель на первый элемент массива, размер этого массива и предикат (условие) для элементов массива и возвращает сумму удовлетворяющих элементов.
- dump, которая принимает указатель на первый элемент массива, размер этого массива и форматную строку и выводит элементы массива с заданным форматом.
- fill, которая принимает указатель на первый элемент массива и размер этого массива и заполняет его случайными значениями.
- is_positive, которая принимает целое число и возвращает true, если число положительное, и false в противном случае.
- В функции main создаются два массива a и b, инициализируются случайными числами, выводится их содержимое, затем подсчитывается сумма и количество элементов, удовлетворяющих условию is_positive, для обоих массивов.
- Наконец, вычисляется среднее значение суммы и количества элементов, удовлетворяющих условию is_positive, для обоих массивов и выводится на экран.
- Функция main возвращает EXIT_SUCCESS.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д