Другие языки программирования и технологии

Написать программу на Си

Помогите, пожалуйста, написать программу на языке Си:
Дан одномерный массив А, состоящий из N элементов. Подсчитать максимальное количество подряд идущих отрицательных элементов.
Заранее большое спасибо!)
#include

int main()
{
int n = 100;
int m[n];
int max = 0;
int counter = 0;
int i;
for(i = 0;i<n;i++)
{
if(m[i]<0)
{
counter++;
if(counter>max)
max = counter;
}
else
counter = 0;
}
printf("%d",max);
system("PAUSE");
return 0;
}

Вроде должно работать
Алексей Колесников
Алексей Колесников
2 254
Лучший ответ
Ирина Гайдукова Да, работает, но как-то странно. Написано либо 1, либо 2 и все
Ирина Гайдукова Не думаю, что это норма)
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
typedef struct {
long* first;
size_t len;
} segment;
long* create(size_t size);
void random(long* arr, size_t size);
void show(long* arr, size_t size);
segment max_length(long* arr, size_t size);
int main(void) {
long* arr = NULL;
size_t size;
setlocale(LC_CTYPE, "Russian");
printf(" Введите размер массива: ");
scanf_s("%ull", &size);
if (arr = create(size)) {
segment result;
long* first = arr;
random(arr, size);
show(arr, size);
result = max_length(arr, size);
if (result.first) show(result.first, result.len);
else printf(" Отрицательные элементы не найдены! \n");
free(arr);
arr = NULL;
} else printf("\a Произошла ошибка при выделении памяти! \n");
fflush(stdin);
getchar();
return 0;
}
segment max_length(long* arr, size_t size) {
segment result;
result.first = NULL;
result.len = 0;
long* tmp = NULL;
long* p = arr;
long* q = arr + size;
size_t count = 0;
while (p != q) {
if (*p < 0) {
if (!count) tmp = p;
++count;
}
if ((p == q - 1 && * p < 0) || *p >= 0) {
if (count > result.len) {
result.first = tmp;
result.len = count;
}
tmp = NULL;
count = 0;
}
++p;
}
return result;
}
long* create(size_t size) {
return (long*)malloc(size * sizeof(long));
}
void random(long* arr, size_t size) {
long* p = arr;
long* q = arr + size;
srand((unsigned int)time(NULL));
while (p != q) {
*p = rand() % 119 - 99;
++p;
}
}
void show(long* arr, size_t size) {
long* p = arr;
long* q = arr + size;
while (p != q) {
printf("%4d", *p);
++p;
}
printf("\n");
}
мой вариант точно работает
http://pastebin.com/TUKfTMEj
!{~Den~} !
!{~Den~} !
2 570