资源简介

关于装备可靠性分析中的故障树程序,需要的可以看一看,写的不好请多包涵。 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

评论

共有 条评论