Вычислить для заданной квадратной матрицы A её симметричную часть - C (СИ)
Формулировка задачи:
Здравствуйте Уважаемые!
Не могли бы Вы помочь мне в решении вот такой задачи на языке СИ:
С уважением,
Alina_1986
Написать функцию, которая вычисляет для заданной квадратной матрицы A её симметричную часть S(ij)=(A(ij)+A(ji))/2 и кососимметричную часть K(ij)=(A(ij)-A(ji))/2????
Вот моя программа: (работает только Данная матрица и транспонированная, а симметричная часть(главная диагональ как у данной матрицы) и кососимметричная(главная диагональ нули, а по обе стороны от нее значения равные по модулю но противоположные по знаку) не работает
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define n 3
int main()
{int a1[n][n],a2[n][n],s[n][n],k[n][n];
int i,j;
clrscr();
randomize();
printf("Dannaja matrica:\n\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{a1[i][j]=random(50);
printf(" %d",a1[i][j]);
}
printf("\n\n");
}
printf("Transponirovannaja matrica:\n\n");
for(j=0;j<n;j++)
for(i=0;i<n;i++)
a2[j][i]=a1[i][j];
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
{
printf(" %d",a2[j][i]);
}
printf("\n\n");
}
printf("Simmetrichnaya chast:\n\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{
s[i][j]=(a1[i][j]+a2[j][i])/2;
printf(" %d",s[i][j]);
}
printf("\n\n");
}
printf("Kososimmetrichnaya chast:\n\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{
k[i][j]=(a1[i][j]-a2[j][i])/2;
printf(" %d",k[i][j]);
}
printf("\n\n");
}
getch();
}Решение задачи: «Вычислить для заданной квадратной матрицы A её симметричную часть»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include<time.h>
#define n 3
void Simmetrichnaya (int a1[n][n]);
int main(void)
{
int a1[n][n],a2[n][n],k[n][n];
int i,j;
printf("Dannaja matrica:\n\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a1[i][j]= rand()%50;
printf(" %d",a1[i][j]);
}
printf("\n\n");
}
printf("Transponirovannaja matrica:\n\n");
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
a2[j][i] = a1[i][j];
}
}
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
printf(" %d",a2[j][i]);
}
printf("\n\n");
}
printf("Simmetrichnaya chast:\n\n");
Simmetrichnaya(a1);
printf("Kososimmetrichnaya chast:\n\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
k[i][j]=(a1[i][j]-a1[j][i])/2;
printf(" %d",k[i][j]);
}
printf("\n\n");
}
getch();
return 0;
}
void Simmetrichnaya (int a1[n][n])
{
int s[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
s[i][j] = (a1[i][j]+a1[j][i])/2;
printf(" %d",s[i][j]);
}
printf("\n\n");
}
}
Объяснение кода листинга программы
Вот список действий, которые выполняются в коде:
- Задание размера матрицы. Название переменной:
n. Значение: 3. - Инициализация матрицы a1 случайными значениями. Название переменной:
a1. Тип: int[n][n]. - Вывод матрицы a1 на экран. Название функции:
printf. - Инициализация матрицы a2 элементами матрицы a1, переставленными по диагонали. Название переменной:
a2. Тип: int[n][n]. - Вывод матрицы a2 на экран. Название функции:
printf. - Вычисление симметричной части матрицы a1 и вывод её на экран. Название функции:
Simmetrichnaya. Вложенный цикл for (итерация по строкам матрицы). Вложенный цикл for (итерация по столбцам матрицы). Вычисление суммы элементов a1[i][j] и a1[j][i]. Деление суммы на 2. Сохранение результата в переменной s[i][j]. Вывод значения переменной s[i][j] на экран с помощью функции printf. - Вывод матрицы s на экран. Название функции:
printf. - Вычисление кососимметричной части матрицы a1 и вывод её на экран. Название переменной:
k. Тип: int[n][n]. Вложенный цикл for (итерация по строкам матрицы). Вложенный цикл for (итерация по столбцам матрицы). Вычисление разности элементов a1[i][j] и a1[j][i]. Деление разности на 2. Сохранение результата в переменной k[i][j]. Вывод значения переменной k[i][j] на экран с помощью функции printf. - Завершение работы программы. Название функции:
getch.