对称矩阵算法2

来源:互联网 发布:若星汉天空 知乎 编辑:程序博客网 时间:2024/06/06 23:18

 

#include <iostream>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
using namespace std;

///两个对称矩阵的加减乘除
void InIt(int **A,int n)///对一维矩阵(上三角或者是下三角)进行初始化
{
    (*A)=(int*)malloc(sizeof(int)*(n*(n+1)/2));
}

void INIT(int ***C,int n)///初始化,两个***表示二维数组
{
    *C=new int*[n]; ///初始一个m行n列的矩
    for (int i=0;i<n;i++)
    {
    (*C)[i]=new int[n];
    }
}

int ReturnElem(int A[],int i,int j)///返回A[M]z中的元素给对应B[i][j]中的值(这里最主要是下三角)
{
    if(i>=j)
      return A[(i*(i+1)/2+j)] ;
    else
      return A[(j*(j+1)/2+i)] ;
}

void  AssignElem(int A[],int e,int i,int j)///返回A[M]z中的元素给对应B[i][j]中的值(这里最主要是下三角)
{
    if(i>=j)
     A[(i*(i+1)/2+j)]=e ;
    else
     A[(j*(j+1)/2+i)]=e;
}

void OutPut(int A[],int n)///通过输入压缩的下三角矩阵输出全部元素
{
  for(int i=0;i<n;i++)///作为行
  {
    for(int j=0;j<n;j++)
    cout<<setw(4)<<ReturnElem(A,i,j);
    cout<<endl<<endl;
  }
}

void ADDcolumn(int A[],int B[],int **C,int n)///计算两个对称矩阵的和
{
    for(int i=0;i<n;i++)
      for(int j=0;j<n;j++)
        C[i][j]=ReturnElem(A,i,j)+ReturnElem(B,i,j);
}

void Multiply(int A[],int B[],int **C,int n)///两个矩阵的相乘
{
    int sum;
    for(int i=0;i<n;i++)///行
    {
     for(int j=0;j<n;j++)///列
     {
       sum=0;
       for(int k=0;k<n;k++)///个数
       {
       sum+=ReturnElem(A,i,k)*ReturnElem(B,k,i);
       }
       C[i][j]=sum;
     }
    }
}

void OUTPUT(int A[],int n)///通过输入压缩的下三角矩阵输出全部元素
{
  for(int i=0;i<n;i++)///作为行
  {
    for(int j=0;j<n;j++)
    cout<<setw(4)<<ReturnElem(A,i,j);
    cout<<endl;
  }
}

void OUTput(int **C,int n)///通过输入压缩的下三角矩阵输出全部元素
{
  for(int i=0;i<n;i++)///作为行
  {
    for(int j=0;j<n;j++)
    cout<<setw(4)<<C[i][j];
    cout<<endl;
  }
}

void INput(int A[],int n,int e)///输入一个下三角
{
   for(int i=0;i<n;i++)
   {
    cout<<"请输入第"<<i+1<<"行的"<<i+1<<"个元素";
    for(int j=0;j<=i;j++)
    {
       cin>>e;
       AssignElem(A,e,i,j);
    }
    cout<<endl;
   }
}
int main()
{
    int e,*A,*B,**C,n=5;
    InIt(&A,n);
    InIt(&B,n);
    INIT(&C,n);
    cout<<"输入矩阵A的下三角"<<endl;
    INput(A,n,e);
    cout<<"输出对称矩阵A"<<endl;
    OUTPUT(A,n);
    cout<<endl<<endl<<"输入矩阵A的下三角"<<endl;
    INput(B,n,e);
    cout<<endl<<"输出对称矩阵B"<<endl;
    OUTPUT(B,n);
    ADDcolumn(A,B,C,n);
    cout<<endl<<endl<<"输出两个对称矩阵A和对称矩阵B相加之后为矩阵C(C=A+B):"<<endl;
    OUTput(C,n);
    Multiply(A,B,C,n);
    cout<<endl<<endl<<"输出两个对称矩阵A和对称矩阵B相乘之后为矩阵C(C=A*B):"<<endl;
    OUTput(C,n);
    return 0;
}

 

 

输出的结果

原创粉丝点击