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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы