Найти максимальное значение элементов, расположенных в заштрихованной части матрицы - 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
, чтобы освободить память, выделенную под матрицу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д