Определить максимальное значение в матрице и номер его столбца и строки. Почему не работает программа? - C (СИ)
Формулировка задачи:
Дана матрица размером N*M. Напишите программу, определяющую максимальное значение в матрице и номер его столбца и строки.Ввод с экрана.Динамические массивы.
#include<stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ( ) {
setlocale(LC_ALL, "Russian");
int **a,i,max,x,y,n,m,j;
printf("N= ");
scanf("%d", &n);
printf("M= ");
scanf("%d", &m);
printf("\n Матрица \n");
a=new int*[m];
for(j=0;j<m;j++)
a[j]=new int[n];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d", &a[j][i]);
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf ("%d ", a[j][i]);
printf ("\n");
printf ("\n");}
{
max=a[i][j];
for( i=0; i<=n; i++)
for( j=0; j<m; j++)
if(max< a[i][j]){
max=a[i][j];
x=i;
y=j;
}}
printf("x=%f",x);
printf("y=%f",y);
printf("max=%d",max);
system("pause");
return 0;
}Решение задачи: «Определить максимальное значение в матрице и номер его столбца и строки. Почему не работает программа?»
textual
Листинг программы
#include<stdio.h>
#include <locale.h>
#include <stdlib.h>
int main ( )
{
int **a,i,max,x,y,n,m,j;
setlocale(LC_ALL, "Russian");
printf("N= ");
scanf("%d", &n); // Количество строк
printf("M= ");
scanf("%d", &m); // Количество столбцов
printf("\n Матрица \n");
a=new int*[n];
for(i=0;i<n;i++)
a[i]=new int[m];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d", &a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf ("%d ", a[i][j]);
printf ("\n");
}
printf ("\n");
max=a[0][0];
x=y=0;
for( i=0; i<n; i++)
for( j=0; j<m; j++)
if(max< a[i][j])
{
max=a[i][j];
x=i;
y=j;
}
for(i=0;i<n;i++)
delete[] a[i];
delete[] a;
printf("x=%d\n",x);
printf("y=%d\n",y);
printf("max=%d\n",max);
system("pause");
return 0;
}
Объяснение кода листинга программы
- Программа начинает с ввода количества строк и столбцов матрицы с помощью функции scanf.
- Затем происходит выделение памяти под матрицу с помощью оператора new.
- Далее, с помощью двух вложенных циклов, происходит заполнение матрицы значениями с помощью функции scanf.
- Затем, с помощью двух вложенных циклов, происходит вывод значений матрицы на экран с помощью функции printf.
- После этого происходит поиск максимального значения в матрице с помощью двух вложенных циклов. Если текущее значение больше максимального, оно становится новым максимальным, а индексы (строка и столбец) этого значения сохраняются в переменных x и y.
- После этого происходит освобождение памяти, выделенной под матрицу, с помощью функции delete.
- Наконец, с помощью функции printf выводятся на экран найденные максимальное значение, строка и столбец.
- Программа завершается с помощью функции system(
pause) и возвращает 0. Возможные причины ошибок:- Неверно указаны входные данные (количество строк или столбцов).
- Недостаточно памяти для выделения под матрицу.
- Возможно, ввод значений в матрицу или поиск максимального значения выполняются некорректно.
- Некорректно освобождается память после использования функции delete.