⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.cpp

📁 距阵的容错运行的距阵 ---------------------------------
💻 CPP
字号:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include "Matrix.h"

void Init(JUZHEN &x) {
  x.a = NULL;
  x.m = x.n = 0;
}

void Clear(JUZHEN &x) {
  if (x.a) {
  	delete [ ] x.a;
	  x.a = NULL;
	  x.m = x.n = 0;
	}
}

void Getin(JUZHEN &x) {
	int t, i, j;
	Clear(x);
	do{
	  cout<< "m = ?"; x.m=int(Putin( ));
	  if(x.m<1) cout<<"ERROR!\a"<<endl;
	}while(x.m<1);
	do{
	  cout<< "n = ?"; x.n=int(Putin( ));
	  if(x.n<1) cout<<"ERROR!\a"<<endl;
	}while(x.n<1);
  t = x.m * x.n;
  if(!(x.a = new JDATA [t])) {
  	x.m = x.n = 0;
  	cout<<"Not enough memory!\a\n";
  }
  else {
    for (i=0; i<x.m; i++) {
    	cout << "Row " << i+1 << ": ";
      for(j=0; j<x.n; j++) {
         x.a[i*x.n+j]=Putin( );
      }
    }
  }
}

void Add (JUZHEN &x, JUZHEN &y, JUZHEN &z){
  int t, k;
  if (x.m == y.m && x.n == y.n) {
  	Clear(z);
    z.a = new JDATA [x.m*x.n];
    z.m = x.m; z.n = x.n;
    t = x.m * x.n;
    for (k=0; k<t; k++) z.a[k] = x.a[k] + y.a[k];
  }
  else {
  	cout << "Error!\a\n";
  }
}

void Subtration (JUZHEN &x, JUZHEN &y, JUZHEN &z){
  int t, k;
  if (x.m == y.m && x.n == y.n) {
  	Clear(z);
    z.a = new JDATA [x.m*x.n];
    z.m = x.m; z.n = x.n;
    t = x.m * x.n;
    for (k=0; k<t; k++) z.a[k] = x.a[k] - y.a[k];
  }
  else {
  	cout << "Error!\a\n";
  }
}

void Mathmultiply(double r, JUZHEN &x, JUZHEN &z){
	int t, k;
  t=x.m*x.n;
  Clear(z);
  z.a = new JDATA [t];
  z.m=x.m; z.n=x.n;
  for (k=0; k<t; k++) z.a[k]=x.a[k]*r;
}

void Transpose (JUZHEN &x, JUZHEN &z) {
	int t, j, i;
  t=x.m*x.n;
  Clear(z);
  z.a = new JDATA [t];
  z.m=x.n; z.n=x.m;
  for (i=0; i<x.m; i++) {
    for (j=0; j<x.n; j++) {
      z.a[j*z.n+i] =  x.a[i*x.n+j];
    }
  }
}


void Output(JUZHEN &x) {
	int i, j;
	for(i=0; i<x.m; i++) {
		cout<<"Resaust Row " << i+1 << ": " ;
	  for(j=0; j<x.n; j++) {
	    cout<< x.a[i*x.n+j]<<" ";
	  }
	  cout << endl;
  }
}

void Xmultiply (JUZHEN &x, JUZHEN &y, JUZHEN &z){
  int i, j, k;
  JDATA t;
  Clear(z);
  if (x.n==y.m){
    z.m=x.m; z.n=y.n;
    z.a = new JDATA [z.m*z.n];
    for (i=0; i<z.m; i++) {
      for (j=0; j<z.n; j++) {
        for (t=k=0; k<x.n; k++) {
          t+=x.a[i*x.n+k]*y.a[k*y.n+j];
        }
        z.a[i*z.n+j] = t;
      }
    }
  }
  else cout << "Incorrect matrix size\n";
}

void Destroy(JUZHEN &x) {
	Clear(x);
}

bool Init(STRING &S) {
  bool ok = false;
  if(!(S = new char[1])) cout << "Not enough memory!\a\n";
  else {
    *S = '\0'; ok = true;
  }
  return ok;
}

bool Aestroy(STRING &S) {
  delete [] S;
  S = NULL;
  return true;
}

double Putin( ) {
  STRING s;
  double x, y, z;
  int k, n, m, i, j, l;
  do{
    Init(s);
    delete []s;
    s=new char[100];
    cin>>s;
    n=strlen(s);
    if(s[0]==45) l=1;
    else l=0;
    for(j=0, i=0, k=l; k<n; k++) {
    	if(s[k]==46) i++;
    	if(s[k]>=48&&s[k]<=57||s[k]==46) ; 
      else j++;
    }  
    if(j>0||i>1)cout<<"ERROR!\a"<<endl;
  } while(j>0||i>1);
  for(k=l; k<n&&s[k]!='.' ;k++);
  m=k;
  for(k=l, y=0; k<m; k++) y=(y+(int(s[k])-48))*10 ;
  y/=10;
  for(k=n-1, z=0; k>m; k--) z=(z+int(s[k])-48)*0.1;
  if(l) x=-(y+z);
  else  x=y+z;
  Aestroy(s);
  return x;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -