В квадратной матрице найти максимум главной диагонали и минимум в побочной - C (СИ)

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

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

#include <stdio.h>
int main(int argc, char *argv[])
{
    int a, m[a][a], max, min;
    printf("Vvedite kolichestvo strok stolbcov: "); 
    scanf("%d",&a);
 
    printf("Vvedite matricu: \n");
    for(int i=0; i<a;i++) for(int j=0; j<a; j++)
        scanf("%d", &m[i][j]);
 
    min=m[0][0];
    max=m[0][0];
 
    for(int i=0; i<a;i++) for(int j=0; j<a; j++){
            if(i==j)
                if(max<m[i][j])
                    max=m[i][j];
            if(i+j==a-1)
                if(min>m[i][j])
                    min=m[i][j];
    }
 
    printf("%d %d",max, min);
    return 0;
}
Нужно в квадратной матрице найти максимум главной диагонали и минимум в побочной. Помогите, пожалуйста, найти ошибку. Понимаю, что это легко, но не могу сделать уже второй день. Буду очень благодарен.

Решение задачи: «В квадратной матрице найти максимум главной диагонали и минимум в побочной»

textual
Листинг программы
#include <stdio.h>  //Библиотека стандартного ввода/вывода 
int main(int argc, char *argv[]) 
{ 
  int N,M; //Переменные для хранения размера матрицы 
  //Приглашение к вводу размеров матрицы 
  printf("Введите размеры матрицы: "); 
  //Ввод размеров матрицы 
  scanf("%d %d",&N,&M); 
  //Если размеры введены некорректно, то выход из программы 
  if((N<2)||(M<2)){ 
    printf("Размеры введены некорректно!\n"); 
    return 0; 
  } 
  //Приглашение к вводу матрицы 
  printf("Введите матрицу:\n"); 
  //Создание динамической матрицы 
  int matrix[N][M]; 
  //Ввод матрицы в двух вложенных циклах 
  for(int i=0;i<N;i++) for(int j=0;j<M;j++) 
    scanf("%d",&matrix[i][j]); 
  //Объявление и инициализация переменных для хранения 
  //значений максимума и минимума матрицы 
  int max = matrix[0][0], min = matrix[0][0]; 
  //Объявление и инициализация переменных для хранения 
  //номеров строк, содержащих максимум и минимум матрицы 
  int imax = 0, imin = 0; 
  //Просмотр всей матрицы в двух вложенных циклах 
  for(int i=0;i<N;i++) for(int j=0;j<M;j++){ 
    //Если текущий элемент матрицы больше найденного ранее 
    //максимума, то записываем новый максимум и его строку 
    if(max < matrix[i][j]) {max = matrix[i][j]; imax = i;} 
    //Если текущий элемент матрицы меньше найденного ранее 
    //минимума, то записываем новый минимум и его строку 
    if(min > matrix[i][j]) {min = matrix[i][j]; imin = i;} 
  } 
  //Если номер строки минимума не равен номеру строки 
  //максимума, то обмениваем значения строк 
  if(imin != imax){ 
    //Обмен значений двух строк в цикле по всем столбцам 
    //через дополнительную переменную 
    for(int j=0;j<M;j++){ 
      int tmp = matrix[imin][j]; 
      matrix[imin][j] = matrix[imax][j]; 
      matrix[imax][j] = tmp; 
    } 
  }else{ //В противном случае 
    //Обнуление всех элементов строки 
    for(int j=0;j<M;j++) matrix[imin][j] = 0; 
  } 
  //Форматированный вывод результата 
  printf("Результат:\n"); 
  for(int i=0;i<N;i++){//Цикл по строкам матрицы 
    //Вывод строки матрицы 
    for(int j=0;j<M;j++) printf("%4d ",matrix[i][j]); 
    //Переход на новую строку 
    printf("\n"); 
  } 
  return 0; 
}

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

В этом коде выполняются следующие действия:

  1. Подключение библиотеки стандартного ввода/вывода.
  2. Определение переменных N и M для хранения размеров матрицы.
  3. Вывод приглашения к вводу размеров матрицы.
  4. Ввод размеров матрицы с помощью функции scanf.
  5. Проверка корректности введенных размеров матрицы. Если они некорректны, программа выводит сообщение об ошибке и завершается.
  6. Создание динамической матрицы с помощью массива matrix.
  7. Ввод матрицы в двух вложенных циклах с помощью функции scanf.
  8. Инициализация переменных max и min для хранения максимального и минимального значений матрицы, а также переменных imax и imin для хранения номеров строк, содержащих эти значения.
  9. Проход по всей матрице в двух вложенных циклах и обновление max и min, если найдены новые значения.
  10. Если min и max находятся в разных строках, обмен значений этих строк.
  11. Если min и max находятся в одной и той же строке, обнуление всех элементов этой строки.
  12. Форматированный вывод результата с помощью цикла for и функции printf.
  13. Возврат 0, указывающий на успешное выполнение программы.

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


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

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

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