Определить второй по величине элемент двумерного массива - C (СИ)

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

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

Доброго дня! По условию задачи надо определить второй по величине элемент двумерного массива и вывести на экран номера строк и количество данных элементов в этих строках. вот что получилось:
int main()
{
    system ("chcp 1251");
    system ("cls");
    int a[10][10],n,m,i,j;               
    printf("введите количество строк от 1 до 10\n");
    scanf("%d",&n);
       while(n<1||n>10)
       {printf("введено неверное значение, пробуй еще\n");         
       scanf("%d",&n);
       }
    printf("введите количество элементов в каждой строке от 1 до 10\n");
    scanf("%d",&m);
       while(m<1||m>10)
       {printf("введено неверное значение, пробуй еще\n");
        scanf("%d",&m);
       }
    srand(time(0));
    for(i=0;i<n;i++)
    {   
        for(j=0;j<m;j++)
        {
        a[i][j]=rand()%30+1;
        } 
    }
    for(i=0;i<n;i++)
    { 
        for(j=0;j<m;j++)
        {
        printf("%4d",a[i][j]);
        }
    printf("\n"); 
    }
    int max=a[0][0],max2=a[0][0];
    for(i=0;i<n;i++)
    {
       for(j=0;j<m;j++)
       {   
           if(a[i][j]>max) 
           {
           max=a[i][j];
           }
              if(a[i][j]>max2&&a[i][j]<max)
              {
               max2=a[i][j];
              }
       }
    }
    
    printf("second max element =%d\n",max2);
    int sum[i];
    for(i=0;i<n;i++)
    {
     sum[i]=0;
       for(j=0;j<m;j++)
       {
          if(a[i][j]==max2)
          {sum[i]++;
          }
       }
    if(sum[i]>0) printf("количество вторых по величине элементов %d строки равно %d\n",i+1,sum[i]); 
    }
return 0;
}
Проблема в том, что программа иногда выводит максимальный элемент вместо второго по величине... подскажите где ошибка.
Вроде как если в условии:
              if( ( a[i][j]>max2 ) && ( a[i][j]<max ) )
              {
               max2=a[i][j];
              }
добавить выделенные скобки, то вроде как ошибка появляется реже, но все равно проскакивает

Решение задачи: «Определить второй по величине элемент двумерного массива»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#define n 5
#define m 4
//вывести на экран второй наибольший элемент массива
int main()
{
    bool flag = false;
    int i, j, max, max2, a[n][m];
    srand(time(0));
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++){
            printf("%3d", a[i][j] = rand() % 150 - 60);
            if(i == 0 && j == 0)
                max = max2 = a[0][0];
            if(!flag){
                if(a[i][j] < max){
                    max2 = a[i][j];
                    flag = true;
                }
            }
            if(a[i][j] > max){
                max2 = max;
                max = a[i][j];
            }
            if(a[i][j] > max2 && a[i][j] < max)
                max2 = a[i][j];
        }
    }
    printf("\n%d\n", max2);
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с C
  2. Задаем размерность двумерного массива с помощью макросов
  3. Инициализируем переменные, в том числе флаг, который указывает, найден ли уже второй максимальный элемент
  4. Заполняем массив случайными числами с помощью функции rand() и операции модуля %
  5. В цикле находим второй максимальный элемент, сравнивая текущий элемент с уже найденными максимальными значениями
  6. Выводим на экран второй максимальный элемент массива
  7. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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