Написать функцию f(a,n), определяющую , чередуются ли положительные и отрицательные элементы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать функцию f(a,n), определяющую , чередуются ли положительные и отрицательные элементы массива a из n элементов .Если элементы чередуются, то возвращается сумма положительных элементов , иначе возвращается произведение отрицательных элементов . 1) Динамически выделять память под массив. 2)У функции не должно быть возвращаемого значения . Результат ее работы передается через параметр этой функции, этот параметр должен быть указателем). 3)Помимо основной функции,решающей задачу, должны быть реализованы вспомогательные функции :для ввода данных (в ней выводиться поясняющее сообщение для пользователя ,и осуществляется ввод ), для вывода данных (также выводятся поясняющее сообщения ,и осуществляется вывод ,возможно, в зависимости от результата работы функции ), для выделения памяти под массив (массив не должен быть глобальной переменной ).

Решение задачи: «Написать функцию f(a,n), определяющую , чередуются ли положительные и отрицательные элементы»

textual
Листинг программы
  1. #ifdef  _MSC_VER
  2.     #ifndef _CRT_SECURE_NO_WARNINGS
  3.         #define _CRT_SECURE_NO_WARNINGS
  4.     #endif
  5. #endif
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <stdbool.h>
  10.  
  11. void input(int *ptr, const size_t n)
  12. {
  13.     for (int i = 0; i < n; i++)
  14.     {
  15.         printf("Input number: ");
  16.         scanf("%d", &ptr[i]);
  17.     }
  18. }
  19.  
  20. void output(const int *ptr, size_t n, const char* fmt, const char* end)
  21. {
  22.     while (n--)
  23.     {
  24.         printf(fmt, *ptr++);
  25.     }
  26.  
  27.     printf(end);
  28. }
  29.  
  30. bool sign_changed(int a, int b)
  31. {
  32.     return (a >= 0 && b < 0) || (a < 0 && b >= 0);
  33. }
  34.  
  35. void function(const int *ptr, const size_t n, int* result)
  36. {
  37.     bool sign_changes = true;
  38.  
  39.     for (int i = 0; i < n - 1; i++)
  40.     {
  41.         if (!sign_changed(ptr[i], ptr[i + 1]))
  42.         {
  43.             sign_changes = false;
  44.             break;
  45.         }
  46.     }
  47.  
  48.     if (sign_changes)
  49.     {
  50.         *result = 0;
  51.  
  52.         for (int i = 0; i < n; i++)
  53.         {
  54.             if (ptr[i] > 0)
  55.             {
  56.                 *result += ptr[i];
  57.             }
  58.         }
  59.     }
  60.     else
  61.     {
  62.         *result = 1;
  63.  
  64.         for (int i = 0; i < n; i++)
  65.         {
  66.             if (ptr[i] < 0)
  67.             {
  68.                 *result *= ptr[i];
  69.             }
  70.         }
  71.     }
  72. }
  73.  
  74. int main(int argc, char *argv[])
  75. {
  76.     size_t n = 0;
  77.  
  78.     printf("Enter array size: ");
  79.    
  80.     if (scanf("%u", &n) == 1)
  81.     {
  82.         int result = 0;
  83.         int* ptr = malloc(sizeof(int) * n);
  84.         input(ptr, n);
  85.         output(ptr, n, "%d ", "\n");
  86.         function(ptr, n, &result);
  87.         printf("Result: %d\n", result);
  88.         free(ptr);
  89.  
  90. #ifdef _MSC_VER
  91.         system("pause");
  92. #endif
  93.  
  94.         return EXIT_SUCCESS;
  95.     }
  96.     else
  97.     {
  98.         fprintf(stderr, "Invalid input");
  99.         return EXIT_FAILURE;
  100.     }
  101. }

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


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

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

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы