1、 程序设计所涉及二叉树解释任意一棵树或一个森林都能唯一地对应一棵二叉树,由此而编写本程序.本程序采用类二叉树为整体结构,二叉树类下定义节点类,每一条支路均为树的一个节点,支路所有的参数均作为节点的属性,并给节点加入属性“支路编号,并以支路编号为依据构建二叉树,这就要求提前根据二叉树结构给每一个支路编号。支路编号原则:左子树上所有编号均小于其双亲的编号,右子树上所有编号均大于其双亲的编号,为了便于查看,本程序在节点较少时编号从1开始,逐个递加至支路数;当支路较多时,可不必拘泥于逐个递加,只要满足支路编号原则即可.例如习题3-4:程序二叉树结构示意图:本二叉树中节点1即支路1为题目中节点1与节点2
2、之间的部分;本二叉树中节点2即支路2为题目中节点2与节点3之间的部分;对于习题3-3:程序二叉树结构示意图:本二叉树中节点2即支路2为题目中节点1与节点2之间的部分;本二叉树中节点1即支路1为题目中节点2与节点3之间的部分;本二叉树中节点3即支路3为题目中节点2与节点4之间的部分.拓展:如下多支路网络:对于三节点网络需先进行以下网络处理转化为标准二叉树,而后进行计算;图中三角形表明该项阻抗为零,为纯导线,并进行相应参数补充进行计算。程序说明文档*本程序测试使用方法:在E盘根目录下建立输入文件: 输入文件名:input。txt; 将所附算例对应输入文件内容复制粘贴至上述文件中,在VC+6。0环境
3、下运行cpp文件得出结果。 输出文件在E盘根目录下 输出文件名为:data。txt;*程序功能说明:本程序可以计算任意长度线型开始网络潮流; 支持多电压等级下的计算; 可在除供电节点外任意节点引出负载;* 输入格式说明:以支路为基本单位,按潮流方向输入数据: 以下例示意: 2 /支路个数 1,110,118,8。5,20。5,0.000564,0,0,1,0,0 /线路等效的支路 2,11,110,1.22,20.2,0,40,30,10,0.17,1。7 /变压器等效的支路 . /按此方式知道输入所有的支路 . /输入从上到下的顺序为潮流在 。 /线型开式网络中的流动方向 /* 第一行输入支
4、路个数,回车 第二行至后输入各个支路参数,回车分隔不同支路; 各行输入的支路参数顺序是: 支路编号,末端电压,始端电压,线路等效电阻,线路等效感抗,线路等效容纳,末端输入有功,末端输入无功,变比,变压器有功励磁损耗,变压器无功励磁损耗 对于线路等效电路:变压器有功/无功损耗输入零,变比输入1; 对于变压器等效电路:所有的参数均归算至高压侧,Rt,Xt对应输入线路等效电阻/感抗的位置,线路等效容抗为零; 对于个节点的引出负荷:输入至以此节点为末节点的支路的末端输入有功/无功部分; */*输出文件格式说明:输出的内容包括 (1)支路信息:每个支路元件的始端有功、无功和末端有功、无功;有功损耗无功损
5、耗;电压损耗; (2)全网信息:全网的总电源有功、总负荷有功、有功损耗、网损率; (3)迭代信息:每次完整迭代后的所有内容; 具体在输出文件中都明确标出.*程序中变量定义说明:类中定义的变量class line_part /定义支路类 double U2; /支路电压降落:U0电压降落横分量,U1电压降落纵分量 double k; /变压器变比 double val; /支路排序 double U_end; /支路末端电压 double U_begin; /支路首段电压 double X3; /支路等效阻抗: X0电阻,X1感抗,X2容纳 double S_end2; /支路末端功率:S_en
6、d0有功,S_end1无功 double S_begin2; /支路首段功率:S_begin0有功,S_begin1无功 double S02; /变压器励磁损耗:S00有功,S01无功 double S_org2; /支路末端负载:S_org0有功,S_org1无功 line_part *lchild,rchild; /支路的后继两个支路class BinTree /定义树类void PreOrder()PreOrder(root);; /树的先序遍历修改电压void PostOrder()PostOrder(root);; /树的后序遍历修改潮流void display()display(
7、root); /树的先序遍历显示数据line_part *root; /树的根,是一个支路类;主函数中定义的数据 ofstream outfile; /输出数据流定 ifstream infile; /输入数据流定 const int M(a); /支路个数常量主程序(复制粘贴到C+就能用)*includeincludeiostream。hincludemath.hdouble p_cost_all=0;double sqr(double x) /平方计算函数return x*x;;class line_part /定义支路类private: double val; /支路排序 double
8、U_end; /支路末端电压 double U_begin; /支路首段电压 double X3; /支路等效阻抗: X0电阻,X1感抗,X2容纳 double S_end2; /支路末端功率:S_end0有功,S_end1无功 double S_begin2; /支路首段功率:S_begin0有功,S_begin1无功 double S02; /变压器励磁损耗:S00有功,S01无功 double S_org2; /支路末端负载:S_org0有功,S_org1无功 line_part *lchild,rchild;public: double U2; /支路电压降落:U0电压降落横分量,U1
9、电压降落纵分量 double k; /变压器变比public:line_part()val=0;U_end=0;U_begin=0;X0=0;X1=0;X2=0;S_end0=S_org0=0;S_end1=S_org1=0;S_begin0=0;S_begin1=0;k=1;S00=0;S01=0;U0=0;U1=0;lchild = rchild= NULL;line_part(double vall,double u_end=0,double u_begin=0,double r=0, double x=0,double b=0,double Pe=0,double Xe=0,doubl
10、e K=0,double P0=0,double Q0=0) val=vall; U_end=u_end;U_begin=u_begin;X0=r;X1=x;X2=b;S_end0=S_org0=Pe;S_end1=S_org1=Xe;S_begin0=0;S_begin1=0;k=K;S00=P0; S01=Q0;U0=0;U1=0;lchild = rchild= NULL;;friend class BinTree;friend void pass_U(line_parta,line_partb,line_part*c); /电压传递函数friend void pass_w(line_p
11、arta,line_part*b,line_partc); /功率传递函数friend void pass_U2(line_part*a,line_part*b); /电压传递函数friend void pass_w2(line_part*a,line_partb); /功率传递函数void Sbegin() /支路首段功率计算函数double Uend,I2;Uend=k*U_end;I2=(sqr(S_end0)+sqr(S_end1sqr(U_end)X2/2)/sqr(Uend);S_begin0=S_end0+I2X0+S00;S_begin1=S_end1+I2X1+S01sqr(
12、U_begin)X2/2sqr(U_end)*X2/2; ;void Uend() /支路末端电压计算函数 double U_heng(0),U_zong(0);double p_begin,q_begin;p_begin=S_begin0S00;q_begin=S_begin1+sqr(U_begin)X2/2S01;U_heng=(p_beginX0+q_beginX1)/U_begin; /U_heng即是u2U_zong=(p_beginX1q_begin*X0)/U_begin; /U_zong即是u2U_end=sqrt(sqr(U_beginU_heng)+sqr(U_zong)
13、/k;U0=U_heng;U1=U_zong;;double get_val() /返回支路编号if(this=0)return 1;elseif(val0&valget_val();if(t=0t-get_val()=0) t=new line_part (vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);else if(vall0tget_val()100)display(tlchild);display(trchild);ofstream outfile1; outfile1.open(”e:data。txt”,ios::ate); p_cost_all +
14、=tget_Pcost();double U; / 计算并存放各个节点的电压相角(始端为零)U=atan2(tU1,(tget_Ubegin()-t-U0))/3.1415926180;outfile1get_val()”电压相角” Uendl;outfile1 首端电压 ”get_Ubegin()endl;/计算并存放各个支路的首端电压outfile1” ”末端电压 ”get_Uend()get_Uend();outfile1 电压损耗” ”U_costendl;outfile1” ”始端有功” tget_Pbegin()endl;/计算并存放各个支路的首端电压outfile1” get_Q
15、begin()endl; /计算并存放各个支路的末端电压outfile1 末端有功” ”tget_Pend()endl;/计算并存放各个支路的首端电压outfile1” ”末端无功” ”get_Qend()endl; /计算并存放各个支路的末端电压double P_cost; /计算并存放各个支路的有功损耗P_cost=tget_Pcost();outfile1 ”有功损耗” P_costendl;double Q_cost; /计算并存放各个支路的无功损耗Q_cost=t-get_Qcost();outfile1 ”无功损耗” ”0&t-get_val()get_lchild()-get_v
16、al()0&tget_lchild()-get_val()100)if(tget_rchild()get_val()0tget_rchild()get_val()100)tUend();pass_U(t,tlchild,t-rchild);t-lchild-Uend();t-rchild-Uend();elsetUend();pass_U2(t,t-lchild);t-lchild-Uend();elseif(t-get_rchild()get_val()0tget_rchild()-get_val()rchild);t-rchild-Uend();elsePreOrder(tlchild);
17、PreOrder(t-rchild);void BinTree::PostOrder(line_part t) /后序遍历二叉树修改潮流if(tget_val()0tget_val()100)PostOrder(tlchild);PostOrder(trchild);if(t-get_lchild()get_val()0t-get_lchild()-get_val()100)if(tget_rchild()-get_val()0tget_rchild()-get_val()lchild-Sbegin();trchildSbegin();pass_w(t,t-lchild,t-rchild);
18、tSbegin();elset-lchildSbegin();pass_w2(t,tlchild);t-Sbegin();elseif(t-get_rchild()get_val()0&tget_rchild()get_val()rchild-Sbegin();pass_w2(t,t-rchild); t-Sbegin();else;void main()ofstream outfile; /输出数据流定义outfile.open(e:data。txt”); outfile。clear();outfile。close();ifstream infile;infile。open(e:input。
19、txt); /输入数据流定义int a;int l(0);char b; infilea; cout”节点个数 aendl; const int M(a); /支路节点数常量 double A=new double10M; /输入流输入各支路数据数组 while(l11M) infileAl; infile.get(b); l+; ;outfile.open(”e:data。txt”,ios:ate); outfile”节点个数 ”aendl;outfileendl;outfile.close();BinTree elec;for(int i=0;iM;i+) /添加节点elec。insert
20、line_part(A11*i+0,A11i+1,A11*i+2,A11i+3,A11i+4,A11i+5,A11*i+6,A11*i+7,A11i+8,A11i+9,A11*i+10);for(i = 0;i5;i+)outfile.open(”e:data.txt”,ios:ate); outfileendl;outfile第i+1”次迭代结果如下”endl;outfileendl;outfile.close();elec。PostOrder();elec.PreOrder();elec.display();outfile.open(e:data。txt,ios:ate); outfileget_Pbegin();outfile全网的总电源有功”aaendl;outfile。close();outfile.open(e:data。txt”,ios::ate); double bb ;bb =aa - p_cost_all;outfile”全网的总负荷有功”bbendl;outfile”全网的总有功损耗”p_cost_allendl;double cc;cc = p_cost_all/aa*100;outfile全网的网损率”cc”endl;outfile.close();p_cost_all=0.0;*