DAPP代币质押智能合约模式系统开发详情

91 阅读2分钟

  Web(World Wide Web)即全球广域网,18I链上合约-259l开发系统3365也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。

  Web 1.0是关于获取和阅读信息的。

  Web 2.0是关于阅读、创建、分享以及与用户的交互。Web 3.0是第三代万维网,一个运行在“区块链”技术之上的“去中心化”网络。Web1.0时代Web 1.0是万维网发展的第一阶段。大致是从1991年到2004年。在Web 1.0时代只有少数内容生产者,绝大多数用户是内容的消费者。个人网页很常见,主要由托管在ISP运行的Web服务器或免费Web托管服务上的静态页面组成.

  Web 1.0是一种内容分发网络(CDN),可以在网站上展示信息。可以用作个人网站,根据查看的页面向用户收费,具有使用户能够检索特定信息的目录。

/* author: cclplus date : 2018 / 12 / 09 if you think it is necessary to reward me, my alipay account number is / #include "pch.h" #include "matrix.h" using std::endl; using std::cout; using std::istream; const double EPS = 1e-10; void Matrix::initialize() {//初始化矩阵大小 p = new double[rows_num];//分配rows_num个指针 for (int i = 0; i < rows_num; ++i) { p[i] = new double[cols_num];//为p[i]进行动态内存分配,大小为cols } } //声明一个全0矩阵 Matrix::Matrix(int rows, int cols) { rows_num = rows; cols_num = cols; initialize(); for (int i = 0; i < rows_num; i++) { for (int j = 0; j < cols_num; j++) { p[i][j] = 0; } } } //声明一个值全部为value的矩阵 Matrix::Matrix(int rows, int cols, double value) { rows_num = rows; cols_num = cols; initialize(); for (int i = 0; i < rows_num; i++) { for (int j = 0; j < cols_num; j++) { p[i][j] = value; } } }

//析构函数 Matrix::~Matrix() { for (int i = 0; i < rows_num; ++i) { delete[] p[i]; } delete[] p; } //实现矩阵的复制 Matrix& Matrix::operator=(const Matrix& m) { if (this == &m) { return *this; }

if (rows_num != m.rows_num || cols_num != m.cols_num) {
	for (int i = 0; i < rows_num; ++i) {
		delete[] p[i];
	}
	delete[] p;

	rows_num = m.rows_num;
	cols_num = m.cols_num;
	initialize();
}

for (int i = 0; i < rows_num; i++) {
	for (int j = 0; j < cols_num; j++) {
		p[i][j] = m.p[i][j];
	}
}
return *this;

} //将数组的值传递给矩阵(要求矩阵的大小已经被声明过了) Matrix& Matrix::operator=(double *a){ for(int i=0;i<rows_num;i++){ for(int j=0;j<cols_num;j++){ p[i][j]= (a+icols_num+j); } } return *this; } //+=操作 Matrix& Matrix::operator+=(const Matrix& m) { for (int i = 0; i < rows_num; i++) { for (int j = 0; j < cols_num; j++) { p[i][j] += m.p[i][j]; } } return this; } //实现-= Matrix& Matrix::operator-=(const Matrix& m) { for (int i = 0; i < rows_num; i++) { for (int j = 0; j < cols_num; j++) { p[i][j] -= m.p[i][j]; } } return this; } //实现= Matrix& Matrix::operator=(const Matrix& m) { Matrix temp(rows_num, m.cols_num);//若C=AB,则矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。 for (int i = 0; i < temp.rows_num; i++) { for (int j = 0; j < temp.cols_num; j++) { for (int k = 0; k < cols_num; k++) { temp.p[i][j] += (p[i][k] * m.p[k][j]); } } } *this = temp; return this; } //实现矩阵的乘法 Matrix Matrix::operator(const Matrix & m)const{ Matrix ba_M(rows_num,m.cols_num,0.0); for(int i=0;i<rows_num;i++){ for(int j=0;j<m.cols_num;j++){ for(int k=0;k<cols_num;k++){ ba_M.p[i][j]+=(p[i][k]*m.p[k][j]); } } } return ba_M; }

//解方程Ax=b Matrix Matrix::Solve(const Matrix &A, const Matrix &b) { //高斯消去法实现Ax=b的方程求解 for (int i = 0; i < A.rows_num; i++) { if (A.p[i][i] == 0) {

		cout << "请重新输入" << endl;
	}
	for (int j = i + 1; j < A.rows_num; j++) {
		for (int k = i + 1; k < A.cols_num; k++) {
			A.p[j][k] -= A.p[i][k] * (A.p[j][i] / A.p[i][i]);
			if (abs(A.p[j][k]) < EPS)
				A.p[j][k] = 0;
		}
		b.p[j][0] -= b.p[i][0] * (A.p[j][i] / A.p[i][i]);
		if (abs(A.p[j][0]) < EPS)
			A.p[j][0] = 0;
		A.p[j][i] = 0;
	}
}

// 反向代换
Matrix x(b.rows_num, 1);
x.p[x.rows_num - 1][0] = b.p[x.rows_num - 1][0] / A.p[x.rows_num - 1][x.rows_num - 1];
if (abs(x.p[x.rows_num - 1][0]) < EPS)
	x.p[x.rows_num - 1][0] = 0;
for (int i = x.rows_num - 2; i >= 0; i--) {
	double sum = 0;
	for (int j = i + 1; j < x.rows_num; j++) {
		sum += A.p[i][j] * x.p[j][0];
	}
	x.p[i][0] = (b.p[i][0] - sum) / A.p[i][i];
	if (abs(x.p[i][0]) < EPS)
		x.p[i][0] = 0;
}

return x;

}

//矩阵显示 void Matrix::Show() const { //cout << rows_num <<" "<<cols_num<< endl;//显示矩阵的行数和列数 for (int i = 0; i < rows_num; i++) { for (int j = 0; j < cols_num; j++) { cout << p[i][j] << " "; } cout << endl; } cout << endl; } //实现行变换 void Matrix::swapRows(int a, int b) { a--; b--; double *temp = p[a]; p[a] = p[b]; p[b] = temp; } //计算矩阵行列式的值 double Matrix::det(){ //为计算行列式做一个备份 double ** back_up; back_up=new double [rows_num]; for(int i=0;i<rows_num;i++){ back_up[i]=new double[cols_num]; } for(int i=0;i<rows_num;i++){ for(int j=0;j<cols_num;j++){ back_up[i][j]=p[i][j]; } } if(rows_num!=cols_num){ std::abort();//只有方阵才能计算行列式,否则调用中断强制停止程序 } double ans=1; for(int i=0;i<rows_num;i++){ //通过行变化的形式,使得矩阵对角线上的主元素不为0 if(abs(p[i][i])<=EPS){ bool flag=false; for(int j=0;(j<cols_num)&&(!flag);j++){ //若矩阵的一个对角线上的元素接近于0且能够通过行变换使得矩阵对角线上的元素不为0 if((abs(p[i][j])>EPS)&&(abs(p[j][i])>EPS)){ flag=true; //注:进行互换后,p[i][j]变为p[j][j],p[j][i]变为p[i][i] //对矩阵进行行变换 double temp; for(int k=0;k<cols_num;k++){ temp=p[i][k]; p[i][k]=p[j][k]; p[j][k]=temp; } } } if(flag) return 0; } } for(int i=0;i<rows_num;i++){ for(int j=i+1;j<rows_num;j++){ for(int k=i+1;k<cols_num;k++){ p[j][k]-=p[i][k](p[j][i]p[i][i]); } } } for(int i=0;i<rows_num;i++){ ans=p[i][i]; } for(int i=0;i<rows_num;i++){ for(int j=0;j<cols_num;j++){ p[i][j]=back_up[i][j]; } } return ans; } //返回矩阵第i行第j列的数 double Matrix::Point(int i, int j) const{ return this->p[i][j]; } //求矩阵的逆矩阵 Matrix Matrix::inv(Matrix A){ if(A.rows_num!=A.cols_num){ std::cout<<"只有方阵能求逆矩阵"<<std::endl; std::abort();//只有方阵能求逆矩阵 } double temp; Matrix A_B=Matrix(A.rows_num,A.cols_num); A_B=A;//为矩阵A做一个备份 Matrix B=eye(A.rows_num); //将小于EPS的数全部置0 for (int i = 0; i < A.rows_num; i++) { for (int j = 0; j < A.cols_num; j++) { if (abs(A.p[i][j]) <= EPS) { A.p[i][j] = 0; } } } //选择需要互换的两行选主元 for(int i=0;i<A.rows_num;i++){ if(abs(A.p[i][i])<=EPS){ bool flag=false; for(int j=0;(j<A.rows_num)&&(!flag);j++){ if((abs(A.p[i][j])>EPS)&&(abs(A.p[j][i])>EPS)){ flag=true; for(int k=0;k<A.cols_num;k++){ temp=A.p[i][k]; A.p[i][k]=A.p[j][k]; A.p[j][k]=temp; temp=B.p[i][k]; B.p[i][k]=B.p[j][k]; B.p[j][k]=temp; } } } if(!flag){ std::cout<<"逆矩阵不存在\n"; std::abort(); } } } //通过初等行变换将A变为上三角矩阵 double temp_rate; for(int i=0;i<A.rows_num;i++){ for(int j=i+1;j<A.rows_num;j++){ temp_rate=A.p[j][i]/A.p[i][i]; for(int k=0;k<A.cols_num;k++){ A.p[j][k]-=A.p[i][k]*temp_rate; B.p[j][k]-=B.p[i][k]*temp_rate; } A.p[j][i]=0; } } //使对角元素均为1 for(int i=0;i<A.rows_num;i++){ temp=A.p[i][i]; for(int j=0;j<A.cols_num;j++){ A.p[i][j]/=temp; B.p[i][j]/=temp; } } //std::cout<<"算法可靠性检测,若可靠,输出上三角矩阵"<<std::endl; //将已经变为上三角矩阵的A,变为单位矩阵 for(int i=A.rows_num-1;i>=1;i--){ for(int j=i-1;j>=0;j--){ temp=A.p[j][i]; for(int k=0;k<A.cols_num;k++){ A.p[j][k]-=A.p[i][k]*temp; B.p[j][k]-=B.p[i][k]*temp; } } } std::cout<<"算法可靠性检测,若可靠,输出单位矩阵"<<std::endl; for(int i=0;i<A.rows_num;i++){ for(int j=0;j<A.cols_num;j++){ printf("%7.4lf\t\t",A.p[i][j]); } cout << endl; } A=A_B;//还原A return B;//返回该矩阵的逆矩阵 } //制造一个单位矩阵 Matrix Matrix::eye(int n){ Matrix A(n,n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==j){ A.p[i][j]=1; }else{ A.p[i][j]=0; } } } return A; } //读取矩阵行列数 int Matrix::row() const{ return rows_num; } int Matrix::col() const{ return cols_num; } //实现矩阵的转置 Matrix Matrix::T(const Matrix & m) { int col_size=m.col(); int row_size=m.row(); Matrix mt(col_size, row_size); for (int i = 0; i <row_size; i++) { for (int j = 0; j <col_size; j++) { mt.p[j][i] = m.p[i][j]; } } return mt; } //高斯消元法 Matrix Matrix::gaussianEliminate() { Matrix Ab(*this); int rows = Ab.rows_num; int cols = Ab.cols_num; int Acols = cols - 1;

int i = 0; //跟踪行
int j = 0; //跟踪列
while (i < rows)
{
	bool flag = false;
	while (j < Acols && !flag)
	{
		if (Ab.p[i][j] != 0) {
			flag = true;
		}
		else {
			int max_row = i;
			double max_val = 0;
			for (int k = i + 1; k < rows; ++k)
			{
				double cur_abs = Ab.p[k][j] >= 0 ? Ab.p[k][j] : -1 * Ab.p[k][j];
				if (cur_abs > max_val)
				{
					max_row = k;
					max_val = cur_abs;
				}
			}
			if (max_row != i) {
				Ab.swapRows(max_row, i);
				flag = true;
			}
			else {
				j++;
			}
		}
	}
	if (flag)
	{
		for (int t = i + 1; t < rows; t++) {
			for (int s = j + 1; s < cols; s++) {
				Ab.p[t][s] = Ab.p[t][s] - Ab.p[i][s] * (Ab.p[t][j] / Ab.p[i][j]);
				if (abs(Ab.p[t][s]) <EPS)
					Ab.p[t][s] = 0;
			}
			Ab.p[t][j] = 0;
		}
	}
	i++;
	j++;
}
return Ab;

} //实现矩阵的输入 istream& operator>>(istream& is, Matrix& m) { for (int i = 0; i < m.rows_num; i++) { for (int j = 0; j < m.cols_num; j++) { is >> m.p[i][j]; } } return is; }