Переделать часть матрицы - 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;
}

Объяснение кода листинга программы

  1. Объединение всех исходных файлов в один исполняемый файл.
  2. Создание исходной матрицы размером N на M заполненной случайными числами от 0 до 70.
  3. Вывод на экран исходной матрицы.
  4. Создание переменной c, которая будет использоваться для вычисления максимального элемента в матрице.
  5. Создание переменной max, которая будет использоваться для хранения максимального элемента в матрице.
  6. Сортировка матрицы по столбцам с помощью алгоритма сортировки пузырьком.
  7. При каждой итерации внутреннего цикла находим максимальный элемент в неотсортированной части матрицы и обновляем max.
  8. Выводим на экран максимальный элемент матрицы.
  9. Освобождение памяти, выделенной под матрицу.
  10. Возврат 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы