Заменить элементы ниже главной диагонали на элементы выше главной диагонали - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет! Можете помочь в Си? Есть начало, но как именно менять может кто-то подсказать? Дана квадратная матрица действительных чисел размером 6х6. Заменить элементы лежащие ниже главной диагонали соответствующими элементами, лежащими выше главной диагонали, умноженными на максимальный элемент всей матрицы
void form_matr (int *a, int n, int m) 
{
    int i,j;
    for (i=0;i<n;i++)
    { printf ("\n");
        for (j=0;j<m;j++)
        {
            *(a+i*m+j)=rand()%100;
            printf("%4d ",*(a+i*m+j));
        }
    }
}
void f1 (int *a, int n, int m, int *max)
{
    int i,j; *max=-1000;
    for(i=0; i<n; i++)
    {
        printf("\n");
        for(j=0; j<m; j++)
        {
            if(*(a+i*m+j)>*max) *max=*(a+i*m+j);
        }
    }
    printf("max= %d ", *max);
}
 int main()
 {
     int n=6, m=6, max, a[6][6];
     form_matr(&a[0][0], n, m);
     f1(&a[0][0], n, m, &max);
     getch(); 
     return 0;
 }

Решение задачи: «Заменить элементы ниже главной диагонали на элементы выше главной диагонали»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define N 6
#define M 6
void form_matr(int (*a)[N],int rows);
int max_matr(int (*a)[N],int rows);
void change_matr(int (*a)[N],int rows,int max);
void print_matr(int (*a)[N],int rows);
int main(void)
{
    int a[N][M],max;
    srand(time(NULL));
    form_matr(a,M);
    print_matr(a,M);
    max=max_matr(a,M);
    printf("max=%d\n",max);
    change_matr(a,M,max);
    print_matr(a,M);
    return 0;
}
void form_matr(int (*a)[N],int rows)
{
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<rows;j++)
            *(*(a+i)+j)=rand()%100;
}
int max_matr(int (*a)[N],int rows)
{
    int max=-200,i,j;
    for(i=0;i<N;i++)
        for(j=0;j<rows;j++)
            if(*(*(a+i)+j)>max)
                max=*(*(a+i)+j);
    return max;
    
}
void change_matr(int (*a)[N],int rows,int max)
{
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<i;j++)
            *(*(a+i)+j)=*(*(a+j)+i)*max;
 
    
}
void print_matr(int (*a)[N],int rows)
{
    int i,j;
    printf("\nMatrix:\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<rows;j++)
            printf("%5d",*(*(a+i)+j));
        printf("\n");
    }
    printf("\n");
}

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

Код представляет собой программу на языке C, которая работает с матрицей целых чисел. Список действий, выполняемых кодом:

  1. Создается матрица типа int, размерностью 6x6, и инициализируется случайными числами от 0 до 99.
  2. Находится максимальное значение в матрице.
  3. Заменяются элементы ниже главной диагонали на элементы выше главной диагонали, умноженные на максимальное значение.
  4. Выводится исходная матрица.
  5. Выводится матрица после замены элементов. Подробнее о каждой функции:
    • form_matr формирует начальную матрицу, заполняя ее случайными числами.
    • max_matr находит максимальное значение в матрице.
    • change_matr меняет элементы в соответствии с условиями задачи.
    • print_matr выводит матрицу на экран. В основной функции main вызываются все эти функции в нужной последовательности.

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

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