СИ Найти непрерывный участок, имеющий наибольшее количество положительных элементов, и вывести его
Дана программа, написанный на языке СИ по заданию: "Найти непрерывный участок, имеющий наибольшее количество положительных элементов, и вывести его". Основная часть программы есть, написан как понял. Но в итоге показывает не правильно! Что тут нужно делать? Работаю через генератор случайных чисел, т.е. для автоматического ввода двумерного массива, выводим их на экран, затем выполняет по заданию: находит в матрице непрерывный порядок по максимальному количеству положительных чисел, даже длина найденного порядка, количество найденного порядка и их индекса, и вывести их на экран. Но не выводит ничего из этого (можно увидеть на фото 1). А должен быть вот так (см. фото 2 на примере нахождения по максимальной сумме пол. чисел). Найдите, пожалуйста, проблему и исправьте его!
#define _CRT_SECURE_NO_WARNINGS
#define _GNU_SOURCE
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#define size 180
//=====================//ПРИСВАИВАНИЕ ТИПОВ ДАННЫХ\\=====================//
int main()
{
int a[size][size];
int n, v, p=0;
void vvod_rnd(int,int,int[][size],int);
void vivod(int[][size],int);
void neprerubuiy_uhastok(int[][size],int);
void vvod_hands(int[][size],int);
srand(time(0)); //чтобы числа были разными каждый раз!
setlocale(LC_ALL, "Rus");
//==================================//ОСНОВНОЕ МЕНЮ ПРОГРАММЫ\\===================================//
char ch;
do
{
system("cls");
printf("F1: 'Информация о программе'\n");
printf("F2: 'Ввод и показ массивов (формирование массиов)''\n");
printf("F3: 'Обработка и результат'\n");
printf("Esc: 'Выход из программы'\n");
ch=getch();
if (ch == 0) ch = getch();
switch (ch)
{
case 59: system("cls"); //сведение об авторе и работе
printf("Информация о программе:\n");
printf("Тема: 'Указатели и массивы. Динамическое выделение памяти'\n");
printf("Задание: 'Найти непрерывный участок, имеющий наибольшее количество положительных элементов, и вывести его.'\n");
printf("Диапозон значений: от –50 до 150 \n");
printf("Размерность: от 5 до 180 \n");
printf("\nДля продолжения, нажмите любую клавишу...");
getch(); break;
case 60: system("cls"); //ввод массива
printf("Выберите режим ввода матрицы? 1-Клавиатуры, 2-Генератор случайных чисел\n");
printf("Кнопка: ");
scanf("%d",&v);
if(v==2) //ввод массива при помощи Random
{
printf("\n> Введите размер массива (%d)= ", size);
scanf ("%d",&n);
vvod_rnd(-8,8,a,n);
p=1;
break;
}
if(v==1) //ручной ввод
{
printf("\n> Введите размер массива (%d)= ", size);
scanf ("%d",&n);
vvod_hands(a,n);
p=1;
break;
}
if(v<1||v>2) //другая кнопка
{
printf("Ошибка! Попробуйте еще раз!");
getch(); break;
}
printf("Исходная матрица в размерности %dx%d\n", n, n);
vivod(a,n);
p=1;
printf("\nНеобходимые данные введены. Для продолжения, нажмите любую клавишу...");
getch();
break;
case 61: //результат
system("cls");
if (p==1)
{
printf("Исходная матрица в размерности %dx%d\n", n, n);
vivod(a,n);
printf("\n\nНепрерывный участок, имеющий наибольшее количество положительных элементов\n");
neprerubuiy_uhastok(a,n);
printf("\n\nГОТОВО! Для выхода, нажмите на любую клавишу...");
}
else
printf("\nВведите массивы! Для этого вернитесь к пункту 1 (F2).");
getch();
break;
}
} while (ch != 27);
}
void vvod_rnd(int xn, int xk, int x[][size], int size_1) //ввод массива при промощи генератора случайных чисел
{
int i,j;
for (i=0; i<size_1;i++){
for (j=0; j<size_1;j++){
x[i][j] = -150 + rand()%200;}}
}
void vvod_hands(int x[][size],int size_1) //ручной ввод массива
{
int i,j;
for(i=0;i<size_1;i++)
for(j=0;j<size_1;j++)
{
printf("Элемент матрицы[%d,%d]:",i,j);
scanf(" %d ",&x[i][j]);
}
}
void vivod(int x[][size], int size_1) //вывод матриц на экран
{
int i,j;
for (i=0;i<size_1;i++)
{
for (j=0; j<size_1;j++)
printf(" %3d ",x[i][j]);
printf("\n");
}
}
void neprerubuiy_uhastok(int x[][size], int size_1) //поиск непрерывного участка
{
int k = 0; //текущая количество чисел больших 0
int max_k = 0; //максимальная из таких количеств
int len = 0; //длина цепочки
int maxlen = 0; //максимальная из длин цепочек
int index = -1; //начало самой длинной цепочки
for (int i = 0; i < size_1; i++)
{
if (x[i] >= 0) {
k++;
k=x[i];
len++;
if (len > 1) {
if (k > max_k) {
index = i + 1 - len;
max_k = k;
maxlen = len;
}
}
}
else len = k = 0;
}
if (index == -1) {
printf("ОШИБКА! Непрерывного участка не найдено!\n");
}
else
{
printf("> Длина последовательности = %3d \n", maxlen);
printf("> Количество = %3d \n", max_k);
printf("> Индекс = %3d \n", index);
printf("> Последовательность = ");
for (int i = index; i < index+maxlen; i++)
printf("%3d", x[i]);
}
}

