Написать функцию 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;
}
}