#include <iostream.h>
void showtable(double **table,int n)
//显示裕度表
{
cout<<“裕度 “<<“累积概率 “<<“累积频率 “<<endl;
int i;
for(i=0;i<n;i=i+1)
{
cout<<table[i][0]<<” “<<table[i][1]<<” “<<table[i][2]<<endl;
}
}
void inputtable(double **table,int n)
{
cout<<“请输入裕度表各行所对应的”<<endl;
cout<<“裕度值 “<<“累积概率 “<<“累积频率 “<<endl;
for(int i=0;i<n;i=i+1)
{
cin>>table[i][0]>>table[i][1]>>table[i][2];
cout<<endl;
}
}
void supply(double **table1,double **table2,double **table,int n1,int n2)
//计算对A系统支援的等效发电机组的停运表
//table1为B系统的裕度表
//table2为输电系统的停运表
{
int i;
for(i=0;i<n1;i=i+1)
{
if (table1[i][0]==table2[0][0])
{
int j;
for(j=0;j<n2;j=j+1)
{
table[j][0]=table2[j][0];
table[j][1]=table2[j][1]+table1[i+j][1]-table2[j][1]*table1[i+j][1];
table[j][2]=table1[i+j][2]*(1-table2[j][1])+table2[j][2]*(1-table1[i+j][1]);
}
break;
}
}
}
void final(double **table1,double **table2,double **table,int n1,int n2)
//计算考虑到互联系统影响后的A系统的裕度表
//table1是对A系统支援的等效发电机组的停运表
//table2是原A系统的裕度表
{
int i;
for(i=0;i<n1-1;i=i+1)
{
table1[i][1]=table1[i][1]-table1[i+1][1];
table1[i][2]=table1[i][2]-table1[i+1][2];
//将累积概率、频率换成确切概率、频率
}
for(i=0;i<n1+n2-1;i=i+1)
{
table[i][0]=table1[0][0]+table2[0][0]-10.0*i;
table[i][1]=0.0;
table[i][2]=0.0;
int j;
for(j=0;j<n1;j=j+1)
{
if(i-j<0)
{
table[i][1]=table[i][1]+table1[j][1];
table[i][2]=table[i][2]+table1[j][2];
}
if(i-j>=0&&i-j<n2)
{
table[i][1]=table[i][1]+table1[j][1]*table2[i-j][1];
table[i][2]=table[i][2]+table1[j][2]*table2[i-j][1]+table1[j][1]*table2[i-j][2];
}
}
}
}
void calculate(double **table,int n)
//根据互联系统的裕度表计算并显示可靠性指标
{
int m;
int i;
for(i=0;i<n;i=i+1)
{
if(table[i][0]==-10.0)
{
m=i;
break;
}
}
double LOLP,EENS,LOLF,D;
LOLP=table[m][1];
EENS=0.0;
for(i=m;i<n;i=i+1)
{
EENS=EENS+table[i][1];
}
EENS=EENS*240.0;
LOLF=table[m][2];
D=LOLP*24.0/LOLF;
cout<<“互联系统的可靠性指标为:”<<endl;
cout<<“LOLP = “<<LOLP<<endl;
cout<<“EENS = “<<EENS<<endl;
cout<<“LOLF = “<<LOLF<<endl;
cout<<” D = “<<D<<endl;
}
void main()
{
int i;
int nA;
cout<<“请输入系统A的裕度表行数”<<endl;
cin>>nA;
double **tableA=new double *[nA];//动态生成nA*3的二维数组
for(i=0;i<nA;i=i+1)
{
tableA[i]=new double[3];
}
inputtable(tableA,nA);//输入系统A的裕度表
int nB;
cout<<“请输入系统B的裕度表行数”<<endl;
cin>>nB;
double **tableB=new double *[nB];
for(i=0;i<nB;i=i+1)
{
tableB[i]=new double[3];
}
inputtable(tableB,nB);//输入系统B的裕度表
int nC;
cout<<“请输入输电线路的裕度表行数”<<endl;
cin>>nC;
double **tableC=new double *[nC];
for(i=0;i<nC;i=i+1)
{
tableC[i]=new double[3];
}
inputtable(tableC,nC);//输入输电线路的裕度表
double **table_A=new double *[nC];
for(i=0;i<nC;i=i+1)
{
table_A[i]=new double[3];
}
supply(tableB,tableC,table_A,nB,nC);//生成支援A系统的B新的裕度表
showtable(table_A,nC);
delete []tableB;
delete []tableC;
double **table__A=new double *[nA+nC-1];
for(i=0;i<nA+nC-1;i=i+1)
{
table__A[i]=new double[3];
}
final(table_A,tableA,table__A,nC,nA);
showtable(table__A,nA+nC-1);
calculate(table__A,nA+nC-1);
delete []tableA;
delete []table_A;
delete []table__A;
}
void showtable(double **table,int n)
//显示裕度表
{
cout<<“裕度 “<<“累积概率 “<<“累积频率 “<<endl;
int i;
for(i=0;i<n;i=i+1)
{
cout<<table[i][0]<<” “<<table[i][1]<<” “<<table[i][2]<<endl;
}
}
void inputtable(double **table,int n)
{
cout<<“请输入裕度表各行所对应的”<<endl;
cout<<“裕度值 “<<“累积概率 “<<“累积频率 “<<endl;
for(int i=0;i<n;i=i+1)
{
cin>>table[i][0]>>table[i][1]>>table[i][2];
cout<<endl;
}
}
void supply(double **table1,double **table2,double **table,int n1,int n2)
//计算对A系统支援的等效发电机组的停运表
//table1为B系统的裕度表
//table2为输电系统的停运表
{
int i;
for(i=0;i<n1;i=i+1)
{
if (table1[i][0]==table2[0][0])
{
int j;
for(j=0;j<n2;j=j+1)
{
table[j][0]=table2[j][0];
table[j][1]=table2[j][1]+table1[i+j][1]-table2[j][1]*table1[i+j][1];
table[j][2]=table1[i+j][2]*(1-table2[j][1])+table2[j][2]*(1-table1[i+j][1]);
}
break;
}
}
}
void final(double **table1,double **table2,double **table,int n1,int n2)
//计算考虑到互联系统影响后的A系统的裕度表
//table1是对A系统支援的等效发电机组的停运表
//table2是原A系统的裕度表
{
int i;
for(i=0;i<n1-1;i=i+1)
{
table1[i][1]=table1[i][1]-table1[i+1][1];
table1[i][2]=table1[i][2]-table1[i+1][2];
//将累积概率、频率换成确切概率、频率
}
for(i=0;i<n1+n2-1;i=i+1)
{
table[i][0]=table1[0][0]+table2[0][0]-10.0*i;
table[i][1]=0.0;
table[i][2]=0.0;
int j;
for(j=0;j<n1;j=j+1)
{
if(i-j<0)
{
table[i][1]=table[i][1]+table1[j][1];
table[i][2]=table[i][2]+table1[j][2];
}
if(i-j>=0&&i-j<n2)
{
table[i][1]=table[i][1]+table1[j][1]*table2[i-j][1];
table[i][2]=table[i][2]+table1[j][2]*table2[i-j][1]+table1[j][1]*table2[i-j][2];
}
}
}
}
void calculate(double **table,int n)
//根据互联系统的裕度表计算并显示可靠性指标
{
int m;
int i;
for(i=0;i<n;i=i+1)
{
if(table[i][0]==-10.0)
{
m=i;
break;
}
}
double LOLP,EENS,LOLF,D;
LOLP=table[m][1];
EENS=0.0;
for(i=m;i<n;i=i+1)
{
EENS=EENS+table[i][1];
}
EENS=EENS*240.0;
LOLF=table[m][2];
D=LOLP*24.0/LOLF;
cout<<“互联系统的可靠性指标为:”<<endl;
cout<<“LOLP = “<<LOLP<<endl;
cout<<“EENS = “<<EENS<<endl;
cout<<“LOLF = “<<LOLF<<endl;
cout<<” D = “<<D<<endl;
}
void main()
{
int i;
int nA;
cout<<“请输入系统A的裕度表行数”<<endl;
cin>>nA;
double **tableA=new double *[nA];//动态生成nA*3的二维数组
for(i=0;i<nA;i=i+1)
{
tableA[i]=new double[3];
}
inputtable(tableA,nA);//输入系统A的裕度表
int nB;
cout<<“请输入系统B的裕度表行数”<<endl;
cin>>nB;
double **tableB=new double *[nB];
for(i=0;i<nB;i=i+1)
{
tableB[i]=new double[3];
}
inputtable(tableB,nB);//输入系统B的裕度表
int nC;
cout<<“请输入输电线路的裕度表行数”<<endl;
cin>>nC;
double **tableC=new double *[nC];
for(i=0;i<nC;i=i+1)
{
tableC[i]=new double[3];
}
inputtable(tableC,nC);//输入输电线路的裕度表
double **table_A=new double *[nC];
for(i=0;i<nC;i=i+1)
{
table_A[i]=new double[3];
}
supply(tableB,tableC,table_A,nB,nC);//生成支援A系统的B新的裕度表
showtable(table_A,nC);
delete []tableB;
delete []tableC;
double **table__A=new double *[nA+nC-1];
for(i=0;i<nA+nC-1;i=i+1)
{
table__A[i]=new double[3];
}
final(table_A,tableA,table__A,nC,nA);
showtable(table__A,nA+nC-1);
calculate(table__A,nA+nC-1);
delete []tableA;
delete []table_A;
delete []table__A;
}
解决方案
100
运行结果如下,原程序销毁内存有问题,已改,算法正确与否就不是本人能够判断的了。