Подсчитать максимальное количество подряд идущих отрицательных элементов - 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;
}
Объяснение кода листинга программы
- В функции
getposперебираются все элементы массиваxс отрицательными значениями, и подсчитывается максимальное количество таких элементов. - В функции
mainсоздается массивxразмеромn, и с помощью циклаforпроисходит заполнение его элементами. - Затем вызывается функция
getpos, передавая ей размер массиваnи указатель на массивx. - Результат работы функции
getposсохраняется в переменнойk. - С помощью функции
printfвыводится сообщение с результатом подсчета максимального количества отрицательных элементов. - Выполняется операция
freeдля освобождения памяти, выделенной под массивx. - Программа возвращает 0, заканчивая свое выполнение.