资源简介
关于装备可靠性分析中的故障树程序,需要的可以看一看,写的不好请多包涵。
C++控制台程序
代码片段和文件信息
#include
#include
#include
using namespace std;
typedef struct CTBox{
int type;//0-与;1-或;2-叶子节点;3-根节点
int child;
string data;
CTBox * Next; //孩子链表头指针
} CTBox*pCTBox;
typedef struct{
CTBox nodes[100];
int nr; //结点数叶子节点数
}Tree;
bool equal(char * testchar * temp);//函数原型
bool noleaf(Tree ftaint pos);//识别非叶子节点
int findFTA(Tree ftachar * temp);//匹配字符对应节点在向量中的序号
int findFTAstr(Tree ftastring str);//匹配str对应节点的向量序号
int findRoot(Tree ftastring table[100][100] int j);//寻找第一个非叶子节点-2-没有,-1-空表,0,1,2-有
int MoveRootStr(Tree ftastring table[100][100]int iint j);//把分支节点移到开头
int CountFlag(string table[100][100]int iint j);//计算*个数
void OutPut(string table[100][100]int j);//输出割集
bool IfHasRoot(Tree ftastring table[100][100]int iint j);
void main()
{
cout<<“************************************************\n“;
cout<<“| 故障树程序 |\n“;
cout<<“| 王涛201105017009 |\n“;
cout<<“| 下行法求最小割集 |\n“;
cout<<“************************************************\n“;
int i=0j=0k=0l=0count=0;//循环变量
Tree fta;
cout<<“input the number of nodes(n) and leaves(r):\n [n-r=number of statements]\n“;
cin>>fta.n>>fta.r;//输入节点数
cout<<“input the statements:\n“;
char input[100];
char temp[50];
int root=0;//建树到哪了
for(i=0;i {
cin>>input;
int len=0;//计算input的长度
for(len=0;;len++)
if(input[len]==‘\0‘)
break;
int temk;
for(k=0;input[k]!=‘=‘;k++)
{
temp[k]=input[k];
}
temp[k]=‘\0‘;
if(count==0) //第一句付给根
{
fta.nodes[0].data.assign(temp);
count++;
}
root=findFTA(ftatemp);//给哪个节点连接子节点
for(l=0;l {
if(input[l]==‘*‘)
{
fta.nodes[root].type=0;
break;
}
if(input[l]==‘+‘)
{
fta.nodes[root].type=1;
break;
}
}
int sum=0;
CTBox * temchild*pre;
pre=&(fta.nodes[root]);
while(input[k]!=‘\0‘)
{
k++;//g1=‘g‘2+g3
temk=k;
for(k=k;input[k]!=‘+‘ && input[k]!=‘*‘ && input[k]!=‘\0‘;k++)
{
temp[k-temk]=input[k];
sum++;
}
temp[k-temk]=‘\0‘;
fta.nodes[count].data.assign(temp);
count++;//指向向量的游标begin with 0
temchild=new CTBox;//不能 直接CTBox temchild否则它只新建temchild一次
temchild->child=count-1;
temchild->Next=NULL;
if(sum==1)
{
pre->Next=temchild;
pre=temchild;
}
else
{
pre->Next=temchild;
pre=temchild;
}
}
}//end of 建立故障树
for(j=0;j {
if(fta.nodes[j].type!=1 && fta.nodes[j].type!=0)
fta.nodes[j].type=2;
}
cout<<“************************************************\n“;
cout<<“故障树向量如下:\n【序号-节点名-节点类型(0-与门、1-活门、2-叶子)】\n“;
for(j=0;j cout< cout<<“************************************************\n“;
//*************下行法求割集********
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-05-11 09:42 下行法求最小割集\
文件 10240 2014-05-11 09:42 下行法求最小割集\Thumbs.db
文件 9549 2014-04-24 00:02 下行法求最小割集\WangTao_FTA_test.cpp
文件 131127 2014-05-11 09:42 下行法求最小割集\输入实例.png
评论
共有 条评论