Найти максимальное значение элементов, расположенных в заштрихованной части матрицы - C (СИ)
Формулировка задачи:
Вот такое задание:
заданна квадратная матрица порядка n. Найти максимальное значение элементов, расположенных в заштрихованной части матрицы.(прикрепил рисунок).
задания я почти сделал,но никак не могу разобраться с этим двумерным динамическим массивом. Искал в интернете,на форуме тоже, но ничего не выходит, всегда выдает ошибки и не работает. Я переделал все в статический массив и все хорошо работает(строчку ввода оставил,но ввожу всегда значение меньше чем в define).
Прошу,помогите переделать это под динамический массив.
Заранее спасибо!
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <stdlib.h>
#define k 10
int main()
{
int arr[k][k];
int y,n,a,i,x,j;
setlocale(LC_ALL,"Ukrainian");
printf("Введiть число n:");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("Введiть елемент в комiрку %d %d: ", i, j);
scanf_s("%d", &arr[i][j]);
}
}
i = 0;
j = 0;
a = arr[0][0];
i = 0;
j = 0;
while ( i < n )
{
while ( j < n - i )
{
if ( a < arr[i][j] )
{
a = arr[i][j];
j = j + 1;
}
else
j = j + 1;
}
i = i + 1;
}
printf("Вiдповiдь : %d \n", a);
return 0;
}Решение задачи: «Найти максимальное значение элементов, расположенных в заштрихованной части матрицы»
textual
Листинг программы
/*задана квадратная матрица порядка n.
Найти максимальное значение элементов, расположенных в заштрихованной части
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int **Create(int N)
{ int i,j;
int **res = (int**) malloc (N * sizeof(int*));
for (i = 0; i<N; i++)
res[i] = (int*) malloc (N*sizeof(int));
for (i = 0; i<N; i++)
for (j = 0; j<N; j++)
res[i][j] = rand()%100;
return res;
}
void Show(int **a, int N)
{ int i,j;
for (i = 0; i<N; i++)
{ for (j = 0; j<N; j++)
printf("%5d", a[i][j]);
printf("\n");
}
}
void Destroy(int **a, int N)
{ for (int i = N-1; i>-1; i--)
free (a[i]);
free(a);
}
//поиск максимума в области
int MaxInArea(int **a, int N, int &imax, int &jmax)
{ int max = a[0][0], i , j;
for (i = 0; i<N; i++)
for (j = 0; j<N-i; j++)
if(a[i][j] > max)
{ max = a[i][j];
imax = i;
jmax = j;
}
return max;
}
int main()
{ srand ((unsigned int) time (NULL));
int **a, N, max, imax = 0, jmax = 0;
printf("N = ");
scanf("%d", &N);
fflush(stdin);
printf("Array A:\n");
a = Create(N);
Show(a, N);
max = MaxInArea(a, N, imax, jmax);
printf("\n\nWithin given area MAX = %d, found in position [%d][%d]", max, imax, jmax);
Destroy(a, N);
getchar();
return 0;
}
Объяснение кода листинга программы
- В функции
Createсоздается квадратная матрица порядкаN. Каждому элементу матрицы присваивается случайное значение от 0 до 99. - В функции
Showвыводится содержимое матрицы на экран. - В функции
Destroyосвобождаются выделенные в функцииCreateпамяти. - В функции
MaxInAreaищется максимальное значение элементов в заштрихованной части матрицы (начиная с верхнего левого угла, до последнего столбца). Если найденное значение больше текущего максимума, то обновляются значения переменныхimaxиjmax, а также значение переменнойmax. - В функции
mainсоздается матрица, выводится ее содержимое на экран, затем находится максимальное значение элементов в заштрихованной части матрицы и выводится на экран. - В конце программы вызывается функция
Destroy, чтобы освободить память, выделенную под матрицу.