СИ Найти непрерывный участок, имеющий наибольшее количество положительных элементов, и вывести его

Дана программа, написанный на языке СИ по заданию: "Найти непрерывный участок, имеющий наибольшее количество положительных элементов, и вывести его". Основная часть программы есть, написан как понял. Но в итоге показывает не правильно! Что тут нужно делать? Работаю через генератор случайных чисел, т.е. для автоматического ввода двумерного массива, выводим их на экран, затем выполняет по заданию: находит в матрице непрерывный порядок по максимальному количеству положительных чисел, даже длина найденного порядка, количество найденного порядка и их индекса, и вывести их на экран. Но не выводит ничего из этого (можно увидеть на фото 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]);
    }
}

введите сюда описание изображения

введите сюда описание изображения


Ответы (0 шт):