Написать функцию f(a,n), определяющую , чередуются ли положительные и отрицательные элементы - C (СИ)
Формулировка задачи:
Написать функцию f(a,n), определяющую , чередуются ли положительные и отрицательные элементы массива a из n элементов .Если элементы чередуются, то возвращается сумма положительных элементов , иначе возвращается произведение отрицательных элементов .
1) Динамически выделять память под массив.
2)У функции не должно быть возвращаемого значения . Результат ее работы передается через параметр этой функции, этот параметр должен быть указателем).
3)Помимо основной функции,решающей задачу, должны быть реализованы вспомогательные функции :для ввода данных (в ней выводиться поясняющее сообщение для пользователя ,и осуществляется ввод ), для вывода данных (также выводятся поясняющее сообщения ,и осуществляется вывод ,возможно, в зависимости от результата работы функции ), для выделения памяти под массив (массив не должен быть глобальной переменной ).
Решение задачи: «Написать функцию f(a,n), определяющую , чередуются ли положительные и отрицательные элементы»
textual
Листинг программы
#ifdef _MSC_VER #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #endif #include <stdio.h> #include <stdlib.h> #include <stdbool.h> void input(int *ptr, const size_t n) { for (int i = 0; i < n; i++) { printf("Input number: "); scanf("%d", &ptr[i]); } } void output(const int *ptr, size_t n, const char* fmt, const char* end) { while (n--) { printf(fmt, *ptr++); } printf(end); } bool sign_changed(int a, int b) { return (a >= 0 && b < 0) || (a < 0 && b >= 0); } void function(const int *ptr, const size_t n, int* result) { bool sign_changes = true; for (int i = 0; i < n - 1; i++) { if (!sign_changed(ptr[i], ptr[i + 1])) { sign_changes = false; break; } } if (sign_changes) { *result = 0; for (int i = 0; i < n; i++) { if (ptr[i] > 0) { *result += ptr[i]; } } } else { *result = 1; for (int i = 0; i < n; i++) { if (ptr[i] < 0) { *result *= ptr[i]; } } } } int main(int argc, char *argv[]) { size_t n = 0; printf("Enter array size: "); if (scanf("%u", &n) == 1) { int result = 0; int* ptr = malloc(sizeof(int) * n); input(ptr, n); output(ptr, n, "%d ", "\n"); function(ptr, n, &result); printf("Result: %d\n", result); free(ptr); #ifdef _MSC_VER system("pause"); #endif return EXIT_SUCCESS; } else { fprintf(stderr, "Invalid input"); return EXIT_FAILURE; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д