Переделать часть матрицы - C (СИ)
Формулировка задачи:
Друзья! Добрый вечер.
Дали в универе задание, звучит примерно следующим образом:
Написать программу, в которой с помощью средств ди-намического распределения памяти создается квадрат-ная матрица целых чисел и заполняется случайными числами. Найти максимальный элемент в закрашенной области. Вывести на экран матрицу, максимальный элемент.
Размер матрицы: 9 x 9
Диапазон случайных значений: 0…70
Закрашенная область выглядит как пирамидка,начинающаяся с "низа" матрицы, растущая вверх и сужающаяся на один элемент слева и справа. Растет до 5 строчки включительно.
Возникла следующая проблема: иногда пропадают элементы из матрицы при её выводе в консоль(например, не отображается элемент с индексом [5,7], на его месте пустота). Серьезно .
В чём ошибка?
Начинаю "проходить" матрицу снизу вверх (i), а параметр (j) контролирую одновременно и слева и справа при помощи переменных f и s,ч
#include <malloc.h> #include <stdio.h> #include <time.h> #include <stdlib.h> #define SIZE 9 #define Rand 71 int main(void) { int *matr[SIZE]; int i,j,f=SIZE,s=-1; for(i=0;i<SIZE;i++) matr[i]=(int*)calloc(SIZE,sizeof(int)); srand(time(NULL)); for(i=0;i<SIZE;i++){ printf("\n"); for(j=0;j<SIZE;j++){ matr[i][j]=rand()%Rand; printf(" %2.d", matr[i][j]); } } int max=0; for(i=SIZE-1;i>SIZE/2;i--){ f--; s++; for(j=s;j<=f;j++){ if(max<matr[i][j]) max=matr[i][j]; } } free(*matr); printf(" Max = %2.d\n", max); }
Решение задачи: «Переделать часть матрицы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 9 #define M 9 #define Ar(i,j) x[M * (i-1) + (j-1)] int main(void) { srand(time(NULL)); int *x =(int*)malloc(N*M*sizeof(int)); int i, j, c, max; for(i=0; i<N*M; ++i) x[i]=rand()%71; for(i=1; i<=N; ++i) { puts(""); for(j=1; j<=M; ++j) printf("%3d ", Ar(i, j)); } c=0; max=0; for(i=N; i>=5; --i) { for(j=1+c; j<=M-c; ++j) { if(max<Ar(i, j)) max=Ar(i, j); } ++c; } printf("\n%d\n", max); return 0; }
Объяснение кода листинга программы
- Объединение всех исходных файлов в один исполняемый файл.
- Создание исходной матрицы размером N на M заполненной случайными числами от 0 до 70.
- Вывод на экран исходной матрицы.
- Создание переменной c, которая будет использоваться для вычисления максимального элемента в матрице.
- Создание переменной max, которая будет использоваться для хранения максимального элемента в матрице.
- Сортировка матрицы по столбцам с помощью алгоритма сортировки пузырьком.
- При каждой итерации внутреннего цикла находим максимальный элемент в неотсортированной части матрицы и обновляем max.
- Выводим на экран максимальный элемент матрицы.
- Освобождение памяти, выделенной под матрицу.
- Возврат 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д