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