Переделать часть матрицы - 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, что означает успешное завершение программы.