Подсчитать максимальное количество подряд идущих отрицательных элементов - C (СИ) (70061)

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

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

Дан одномерный массив А, состоящий из N элементов. Подсчитать максимальное количество подряд идущих отрицательных элементов. Появляется ошибка: Ошибка C2372 x: переопределение; различные типы косвенного обращения.Прошу помощи.
#include <stdio.h>
#include <locale.h>
 
//Дан одномерный массив А, состоящий из N элементов. Подсчитать мак-
//симальное количество подряд идущих отрицательных элементов.

int main()
{
    setlocale(LC_ALL, "Rus");
int n;
int * x;
printf_s ("Введите кол-во элементов");
scanf_s ("%d",&n);
int x[] = {n};
 
for (int i = 0;i < n; i++)
{
    printf_s("x[%d", i + 1, " ] = ");
    scanf_s("%d",x[i]);
}
int N = getpos(n, x);
if (N <= 0)
printf_s("В массиве только положитльные элементы");
else
{
    printf_s(" Максимальное кол-во отрицательных элементов %d",N);
    printf_s("\r\nСейчас программа закроется...\r\n");
    scanf_s("%d",&n);
}
int getpos(int n, int * x);
{
int i;
    int N = 0, M = 0;
    for (i = 0; i < n; i++)
    {
        if (x[i] < 0)
            break;
    }
    if (i < n)
    {
        while (i < n)
        {
            while (x[i] < 0)
            {
                M++;
                i++;
            }
            if (N < M)
            {
                N = M;
                M = 0;
            }
            i++;
        }
    }
}
system("PAUSE");
return 0 ;
}

Решение задачи: «Подсчитать максимальное количество подряд идущих отрицательных элементов»

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <malloc.h>
int getpos(int n, int *x)
{
    int i;
    int N = 0, M = 0;
    for (i = 0; i < n; i++)
    {
        if (x[i] < 0)
            break;
    }
    if (i < n)
    {
        while (i < n)
        {
            while (x[i] < 0)
            {
                M++;
                i++;
            }
            if (N < M)
            {
                N = M;
                M = 0;
            }
            i++;
        }
    }
    return N;
}
void main()
{
    int i;
    int n;
    int *x = 0;
    int k;
//    int kol-vo = 0;
    int flag = 0;
    setlocale(LC_ALL, "Rus");
 
    printf("Введите кол-во элементов в массиве ");
    scanf("%d", &n);
 
    x = (int *)malloc(n*sizeof(int));
 
    for( i = 0; i < n; i++)
    {
        printf("x[%d]=", i+1);
        scanf("%d", &x[i]);
    }
 
    k = getpos(n, x);
    printf(" Максимальное кол-во отрицательных элементов %d",k);
 
    free(x);
    return 0;
}

Объяснение кода листинга программы

  1. В функции getpos перебираются все элементы массива x с отрицательными значениями, и подсчитывается максимальное количество таких элементов.
  2. В функции main создается массив x размером n, и с помощью цикла for происходит заполнение его элементами.
  3. Затем вызывается функция getpos, передавая ей размер массива n и указатель на массив x.
  4. Результат работы функции getpos сохраняется в переменной k.
  5. С помощью функции printf выводится сообщение с результатом подсчета максимального количества отрицательных элементов.
  6. Выполняется операция free для освобождения памяти, выделенной под массив x.
  7. Программа возвращает 0, заканчивая свое выполнение.

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

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