第9週目プロジェクト3-疎マトリクスの三元グループ表現の実現と応用(1)

4689 ワード

質問:
/* 
Copyright (c)2016,               
All rights reserved. 
    :  3-1.cbp 
      :    
    :2016 10 27  
     :v1.0 
 
 
    :(1)               ,  :  
 
①   tup.h,      ,    ;  
 
②    tup.cpp,                ,      : 
    void CreatMat(TSMatrix &t,ElemType A[M][N]);  //                  
    bool Value(TSMatrix &t,ElemType x,int i,int j);  //        
    bool Assign(TSMatrix t,ElemType &x,int i,int j);  //              
    void DispMat(TSMatrix t); //      
    void TranTat(TSMatrix t,TSMatrix &tb);//     
 
③   main  ,            
    :  
    :     
*/  
tup.hヘッダファイルコード:
#ifndef TUP_H_INCLUDED  
#define TUP_H_INCLUDED  
  
  
#include   
#define M 6  
#define N 7  
#define MaxSize  100         //             
typedef int ElemType;  
  
  
typedef struct  
{  
    int r;                  //    
    int c;                  //    
    ElemType d;             //     
} TupNode;                  //       
  
  
typedef struct  
{  
    int rows;               //    
    int cols;               //    
    int nums;               //        
    TupNode data[MaxSize];  
} TSMatrix;                 //          
  
  
void CreatMat(TSMatrix &t,ElemType A[M][N]);  //                   
bool Value(TSMatrix &t,ElemType x,int i,int j);  //         
bool Assign(TSMatrix t,ElemType &x,int i,int j); //               
void DispMat(TSMatrix t);//       
void TranTat(TSMatrix t,TSMatrix &tb);//      
  
  
#endif // TUP_H_INCLUDED 
tup.cppコード:
#include "tup.h"  
  
  
void CreatMat(TSMatrix &t,ElemType A[M][N])  //                   
{  
    int i,j;  
    t.rows=M;  
    t.cols=N;  
    t.nums=0;  
    for (i=0; i=t.rows || j>=t.cols)  
        return false;               //     false  
    while (kt.data[k].r) k++;                  //     
    while (kt.data[k].c) k++;//     
    if (t.data[k].r==i && t.data[k].c==j)   //         
        t.data[k].d=x;  
    else                                    //                 
    {  
        for (k1=t.nums-1; k1>=k; k1--)  
        {  
            t.data[k1+1].r=t.data[k1].r;  
            t.data[k1+1].c=t.data[k1].c;  
            t.data[k1+1].d=t.data[k1].d;  
        }  
        t.data[k].r=i;  
        t.data[k].c=j;  
        t.data[k].d=x;  
        t.nums++;  
    }  
    return true;                        //     true  
}  
  
  
bool Assign(TSMatrix t,ElemType &x,int i,int j)  //               
{  
    int k=0;  
    if (i>=t.rows || j>=t.cols)  
        return false;           //     false  
    while (kt.data[k].r) k++;                  //     
    while (kt.data[k].c) k++;//     
    if (t.data[k].r==i && t.data[k].c==j)  
        x=t.data[k].d;  
    else  
        x=0;                //                 
    return true;            //     true  
}  
  
  
void DispMat(TSMatrix t)        //       
{  
    int i;  
    if (t.nums<=0)          //           
        return;  
    printf("\t%d\t%d\t%d
",t.rows,t.cols,t.nums); printf("\t------------------
"); for (i=0; i

main.cppコード:

#include "tup.h"   
int main()  
{  
    TSMatrix t,tb;  
    int x,y=10;  
    int A[6][7]=  
    {  
        {0,0,1,0,0,0,0},  
        {0,2,0,0,0,0,0},  
        {3,0,0,0,0,0,0},  
        {0,0,0,5,0,0,0},  
        {0,0,0,0,6,0,0},  
        {0,0,0,0,0,7,4}  
    };  
    CreatMat(t,A);  
    printf("b:
"); DispMat(t); if (Assign(t,x,2,5)==true) // true printf("Assign(t,x,2,5)=>x=%d
",x); else // false printf("Assign(t,x,2,5)=>
"); Value(t,y,2,5); printf(" Value(t,10,2,5)
"); if (Assign(t,x,2,5)==true) // true printf("Assign(t,x,2,5)=>x=%d
",x); else // false printf("Assign(t,x,2,5)=>
"); printf("b:
"); DispMat(t); TranTat(t,tb); printf(" tb:
"); DispMat(tb); return 0; }
tup.hは疎行列の三元グループのアルゴリズムライブラリ集合であり,よく用いられる各機能関数を宣言している.
tup.cppはtupに対応する.hで宣言された各機能関数は,各機能関数の実現方法を示す.
main.cppには、必要に応じて各関数を追加して、対応する機能を実現します.
実行結果: