| 查看: 765 | 回复: 4 | ||
smileheaven金虫 (小有名气)
|
[求助]
这个C++程序到底哪里出了问题了?已有1人参与
|
|
最近需要交一个关于求解杆系问题的程序设计作业,但是苦于没有太多C++编程经验,因此在编写过程中出现了不能运行的错误,但是编译的时候是没有什么问题的,所以还请各位大神能够帮忙解答,不胜感激! 其中HELP.txt是程序文件 RZSCI.DAT是要读入的数据文件! 谢谢 |
» 本帖附件资源列表
-
欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com - 附件 1 : HELP.txt
2015-06-18 15:19:20, 14.02 K
» 猜你喜欢
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
孩子确诊有中度注意力缺陷
已经有12人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求助,visual studio 2013编写C++程序中出现的问题,不胜感激。
已经有13人回复
请问下面这段c++小程序为什么不能运行
已经有6人回复
关于C++找工作
已经有8人回复
科学计算首选语言是C++
已经有20人回复
请问C++编译完成后形成了exe可执行文件,可是运行时报错是为什么?
已经有3人回复
一个简单的C++程序运行问题
已经有8人回复
c++编程如何判断输入的数据是不是字符呢
已经有4人回复
一下的数据如何通过C++读取
已经有20人回复
C++程序怎么实现时间的转换呢?
已经有9人回复
C\C++ 可以用来做什么
已经有5人回复
请问Microsoft visual C++有什么用,我电脑里有10多个,2005,2008,2010的都有!
已经有12人回复
C++编程,关于循环结构的,大家看看我这程序哪里错了?
已经有21人回复
c++编写一个关于时间的程序,谢谢
已经有7人回复
【求助】c++如何发布独立的程序?
已经有15人回复
【求助】请问谁知道怎么生成一个C++程序的exe文件?
已经有8人回复

smileheaven
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 994.8
- 帖子: 204
- 在线: 82.4小时
- 虫号: 1730328
- 注册: 2012-04-01
- 性别: GG
- 专业: 爆炸与冲击动力学

2楼2015-06-18 19:09:14
smileheaven
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 994.8
- 帖子: 204
- 在线: 82.4小时
- 虫号: 1730328
- 注册: 2012-04-01
- 性别: GG
- 专业: 爆炸与冲击动力学

3楼2015-06-19 16:44:41
smileheaven
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 994.8
- 帖子: 204
- 在线: 82.4小时
- 虫号: 1730328
- 注册: 2012-04-01
- 性别: GG
- 专业: 爆炸与冲击动力学
|
还是把源程序放上来吧,省的大神们还要下载 #include<iostream.h> #include<fstream.h> #include<stdlib.h> #include<math.h> #include<iomanip.h> //以下定义函数 void INPUT(double X[], double Y[], int NCO[], double PROP[], double AL[], int IB[], double REAC[]); //定义原始数据输入 void ASSEM(double X[], double Y[], int NCO[], double PROP[], double TK[][20], double ELST[][5], double AL[]); //生成总刚度矩阵 void STIFF(int NEL, double X[], double Y[], int NCO[], double PROP[], double ELST[][5], double AL[]); //生成单元刚度矩阵 void ELASS(int NEL, int NCO[], double TM[][20], double ELMAT[][5]); //单刚总刚传递 void BOUND(double TK[][20], double AL[], double REAC[], int IB[]); void SLBSI(double A[][20], double B[], double D[], int N, int MS, int NRMX, int NCMX); void FORCE(int NCO[], double PROP[], double FORC[], double REAC[], double X[], double Y[], double AL[]); void OUTPT(double AL[], double FORC[], double REAC[]); // 以下初始化全局变量 int NN,NE,NLN,NBN,N,MS; double E,G; // 定义输入输出数据 ifstream READ_IN; //声明一个输入流 ofstream WRITE_IO; //声明一个输出流 // 初始化程序参数 int NRMX=200; int NCMX=20; int NDF=2; int NNE=2; int NDFEL=NDF*NNE; int main() { double X[100], Y[100], PROP[100], TK[200][20], AL[200], FORC[100], REAC[200] , ELST[5][5], V[20]; int NCO[200], IB[60]; char file1[20], file2[20]; // //打开所有文件 cin>>file1>>file2; WRITE_IO.open(file1); READ_IN.open(file2); //输入数据 INPUT(X,Y,NCO,PROP,AL,IB,REAC); // //定义总体刚度矩阵 ASSEM(X,Y,NCO,PROP,TK,ELST,AL); // //引入边界条件 BOUND(TK,AL,REAC,IB); //解总体方程 SLBSI(TK,AL,V,N,MS,NRMX,NCMX); //计算外载荷数量 FORCE(NCO,PROP,FORC,REAC,X,Y,AL); // //输出 OUTPT(AL,FORC,REAC); // // 关闭所有文件 READ_IN.close(); WRITE_IO.close(); return 0; } // 子程序1:桁架静力分析子程序开始 // /////////////////////////////////////////////////////////////////////// void INPUT(double X[], double Y[], int NCO[], double PROP[], double AL[], int IB[], double REAC[]) //定义原始数据输入 { //输入程序 // int I,NUM,N1,IC[2],K,L,L1,L2,N2; double W[3]; WRITE_IO.setf(ios::fixed); WRITE_IO.setf(ios::showpoint); WRITE_IO<<" "<< "****************************************************" <<endl; // //读取基本参数 READ_IN >> NN >> NE>> NLN >> NBN >> E; WRITE_IO <<"\n\n 内部数据 \n\n"<<"结点数 :" <<setw(10) << NN << "\n"<< "单元数 :" <<setw(10) << NE << "\n"<<"受载结点数 :" <<setw(10) << NLN <<"\n"<<"支持结点数 :" <<setw(10) << NBN <<"\n"<<"弹性模量 :" <<setw(15)<< setprecision(0) <<E<<"\n\n" << "结点坐标\n" <<setw(11)<< "结点" <<setw(7) << "X" <<setw(10)<< "Y\n"; // //按行读取结点坐标 for(I=1; I<=NN; I++) { READ_IN>>NUM>>X[NUM]>>Y[NUM]; } for(I=1; I<=NN; I++) { WRITE_IO.precision(2); WRITE_IO<<setw(10)<<I<<setw(10)<<X[I]<<setw(10)<<Y[I]<<"\n"; } //按行读取单元连接 //单元属性 WRITE_IO<<"\n 单元连接及属性\n" <<setw(11) << "单元" <<setw(23) << "开始结点 结束结点" <<setw(9) << "区域" <<endl; for(I=1;I<=NE; I++) { READ_IN>>NUM>>IC[0]>>IC[1]>>PROP[NUM]; WRITE_IO.precision(5); WRITE_IO <<setw(10) <<NUM <<setw(10) <<IC[0] <<setw(10) <<IC[1] <<setw(15) <<PROP[NUM] <<"\n"; N1=NNE* (NUM-1); NCO[N1+1]=IC[0]; NCO[N1+2]=IC[1]; } // //计算实际未知数目并清除载荷向量 N=NN*NDF; for(I=1; I<=N;I++) { REAC[I]=0.0; AL[I]=0.0; } //读取结点载荷并按行存储 WRITE_IO <<"\n 结点载荷\n" <<setw(11) <<"结点" <<setw(7) <<"PX" <<setw(10) <<"PY" <<endl; for(I=1; I<=NLN; I++) { READ_IN>> NUM >>W[0] >>W[1]; WRITE_IO.precision(2); WRITE_IO <<setw(10) <<NUM <<setw(10) <<W[0] <<setw(10) <<W[1] <<"\n"; for(K=1; K<=NDF; K++) { L=NDF*(NUM-1)+K; AL[L]=W[K-1]; } } //读取边界结点数据,存储位置状态的indicatiors //IN ARRAY IB, AND PRESCRIBED UNKNOWN VALUES IN ARRAY REAC WRITE_IO <<"\n 边界条件数据 \n" <<setw(29) <<"状态" <<setw(31) <<"prescribed values\n" <<setw(37) <<"(0:prescribed, 1:free)\n" <<setw(11) <<"结点" <<setw(9) <<"U" <<setw(10) <<"V" <<setw(17) <<"U" <<setw(10) <<"V" <<endl; for(I=1; I<=NBN; I++) { READ_IN >>NUM>> IC[0]>> IC[1]>> W[0]>> W[1]; WRITE_IO.precision(4); WRITE_IO <<setw(10)<< NUM <<setw(10)<< IC[0] <<setw(10)<< IC[1] <<setw(20)<< W[0] <<setw(10)<< W[1] <<"\n"; L1=(NDF+1)*(I-1)+1; L2=NDF*(NUM-1); IB[L1]=NUM; for(K=1; K<=NDF; K++) { N1=L1+K; N2=L2+K; IB[N1]=IC[K-1]; REAC[N2]=W[K-1]; } } //子程序结束 return; } //子程序2:桁架静力分析子程序开始 // ///////////////////////////////////////////////////////////////////////////////////////// void ASSEM(double X[], double Y[], int NCO[], double PROP[], double TK[][20], double ELST[][5], double AL[]) //生成总刚度矩阵 { //定义总矩阵 int N1,I,L1,J,L2,J1,K,L3,L,NEL; //计算半带宽并存入MS N1=NNE-1; MS=0; for(I=1; I<=NE; I++) { L1=NNE*(I-1); for(J=1; J<=N1; J++) { L2=L1+J; J1=J+1; for(K=J1; K<=NNE; K++) { L3=L1+K; L=abs(NCO[L2]-NCO[L3]); if((MS-L)<=0) { MS=L; } } } } MS=NDF*(MS+1); //清空总体刚度矩阵 for(I=1;I<=N;I++) { for(J=1;J<=MS;J++) { TK[I][J]=0.0; } } for(NEL=1; NEL<=NE; NEL++) { //计算单元刚度矩阵 STIFF(NEL,X,Y,NCO,PROP,ELST,AL); //放入总体刚度矩阵 ELASS(NEL,NCO,TK,ELST); } // return; } // 子程序3:刚度矩阵分析子程序开始 // /////////////////////////////////////////////////////////////////////////////////////////// void STIFF(int NEL, double X[], double Y[], int NCO[], double PROP[], double ELST[][5], double AL[]) //生成单元刚度矩阵 { //计算所在单元刚度矩阵 // int L,N1,N2,I,J,K1,K2; double D,CO,SI,COEF; // // L=NNE*(NEL-1); N1=NCO[L+1]; N2=NCO[L+2]; // //计算单元长度以及X轴的正弦与余弦值 D=sqrt(pow((X[N2]-X[N1]),2)+pow((Y[N2]-Y[N1]),2)); CO=(X[N2]-X[N1])/D; SI=(Y[N2]-Y[N1])/D; // //计算单元刚度矩阵 COEF=E*PROP[NEL]/D; ELST[1][1]=COEF*CO*CO; ELST[1][2]=COEF*CO*SI; ELST[2][2]=COEF*SI*SI; for (I=1;I<=2;I++) { for(J=1;J<=2;J++) { K1=I+NDF; K2=J+NDF; ELST[K1][K2]=ELST[I][J]; ELST[I][K2]=-ELST[I][J]; } } ELST[2][3]=-ELST[1][2]; return; } // //子程序4 /////////////////////////////////////////////////////////////////////////////////////////////// void ELASS(int NEL, int NCO[], double TM[][20], double ELMAT[][5]) //单刚总刚传递 { //在总体刚度矩阵中存储单元刚度矩阵值 int L1,I,L2,N1,I1,J1,J,N2,I2,J2,K,KI,KR,IC,K1,K2,L,KC; L1=NNE*(NEL-1); for(I=1;I<=NNE;I++) { L2=L1+I; N1=NCO[L2]; I1=NDF*(I-1); J1=NDF*(N1-1); for(J=1;J<=NNE;J++) { L2=L1+J; N2=NCO[L2]; I2=NDF*(J-1); J2=NDF*(N2-1); for(K=1;K<=NDF;K++) { KI=1; if((N1-N2)==0) { KI=K; } if((N1-N2)<=0) { KR=J1+K; IC=J2-KR+1; K1=I1+K; } else { KR=J2+K; IC=J1-KR+1; K2=I2+K; } for(L=KI;L<=NDF;L++) { KC=IC+L; if((N1-N2)<=0) { K2=I2+L; } else { K1=I1+L; } TM[KR][KC]=TM[KR][KC]+ELMAT[K1][K2]; } } } } return; } // //子程序5 /////////////////////////////////////////////////////////////////////////////// void BOUND(double TK[][20], double AL[], double REAC[], int IB[]) { //引入边界条件 int L,L1,NO,K1,I,L2,KR,J,KV; for (L=1;L<=NBN;L++) { L1=(NDF+1)*(L-1)+1; NO=IB[L1]; K1=NDF*(NO-1); for(I=1;I<=NDF;I++) { L2=L1+I; if(IB[L2]==0) { KR=K1+I; for(J=2;J<=MS;J++) { KV=KR+J-1; if((N-KV)>=0) { AL[KV]=AL[KV]-TK[KR][J]*REAC[KR]; TK[KR][J]=0.0; } KV=KR-J+1; if(KV>0) { AL[KV]=AL[KV]-TK[KV][J]*REAC[KR]; TK[KV][J]=0.0; } } TK[KR][1]=1.0; AL[KR]=REAC[KR]; } } } return; } // //子程序6 ///////////////////////////////////////////////////////////////////////////////////////////// void SLBSI(double A[][20], double B[], double D[], int N, int MS, int NRMX, int NCMX) { // // int N1,K,K1,NI,L,J,K2,I,K3; double C; // N1=N-1; for(K=1;K<=N1;K++) { C=A[K][1]; K1=K+1; if(C<=0.000001&&C>=-0.000001) { WRITE_IO<<"****row奇异性****"<<setw(5)<<K; return; } else { NI=K1+MS-2; if(N1<=N) {L=N1;} else {L=N;} for(J=2;J<=MS;J++) { D[I]=A[K][J]; } for(J=K1;J<=L;J++) { K2=J-K+1; A[K][K2]=A[K][K2]/C; } B[K]=B[K]/C; // // for(I=K1;I<=L;I++) { K2=I-K1+2; C=D[K2]; for(J=I;J<=L;J++) { K2=J-I+1; K3=J-K+1; A[I][K2]=A[I][K2]-C*A[K][K3]; } B[I]=B[I]-C*B[K]; } } } if(A[N][1]<=0.000001&&A[N][1]>=0.000001) { WRITE_IO<<"****ROW奇异****"<<setw(5)<<K; return; } else { B[N]=B[N]/A[N][1]; // // for(I=1;I<=N1;I++) { K=N-I; K1=K+1; NI=K1+MS-2; if(NI<=N) {L=NI;} else {L=N;} for(J=K1;J<=L;J++) { K2=J-K+1; B[K]=B[K]-A[K][K2]*B[J]; } } } // return; } // //子程序7 ////////////////////////////////////////////////////////////////////////////////////////////////////// void FORCE(int NCO[], double PROP[], double FORC[], double REAC[], double X[], double Y[], double AL[]) { int I,NEL,L,N1,N2,K1,K2; double D,CO,SI,COEF; // // for(I=1;I<=N;I++) { REAC[I]=0.0; } for(NEL=1;NEL<=NE;NEL++) { L=NNE*(NEL-1); N1=NCO[L+1]; N2=NCO[L+2]; K1=NDF*(N1-1); K2=NDF*(N2-2); D=sqrt(pow((X[N2]-X[N1]),2)+pow((Y[N2]-Y[N1]),2)); CO=(X[N2]-X[N1])/D; SI=(Y[N2]-Y[N1])/D; COEF=E*PROP[NEL]/D; FORC[NEL]=COEF*((AL[K2+1]-AL[K1+1])*CO+(AL[K2+2]-AL[K1+2])*SI); REAC[K1+1]=REAC[K1+1]-FORC[NEL]*CO; REAC[K1+2]=REAC[K1+2]-FORC[NEL]*SI; REAC[K2+1]=REAC[K2+1]+FORC[NEL]*CO; REAC[K2+2]=REAC[K2+2]+FORC[NEL]*SI; } return; } // //子程序8 ////////////////////////////////////////////////////////////////////////////////////// void OUTPT(double AL[], double FORC[], double REAC[]) { int I,K1,K2,J; WRITE_IO<< "\n\n ******************************************************\n\n" <<"结果\n\n"<<"结点位移\n" <<setw(11)<<"结点" <<setw(12)<<"U" <<setw(15)<<"V" <<endl; for(I=1;I<=NN;I++) { K1=NDF*(I-1)+1; K2=K1+NDF-1; WRITE_IO<<setw(10)<<I; for(J=K1;J<=K2;J++) { WRITE_IO<<setw(15)<<AL[J]; } WRITE_IO<<endl; } WRITE_IO <<"\n 结点支反力 \n" <<setw(11)<<"结点" <<setw(12)<<"PX" <<setw(15)<<"PY\n"; for(I=1;I<=NN;I++) { K1=NDF*(I-1)+1; K2=K1+NDF-1; WRITE_IO<<setw(10)<<I; for(J=1;J<=K2;J++) { WRITE_IO<<setw(15)<<REAC[J]; } WRITE_IO<<endl; } WRITE_IO<<"\n 结点数" <<setw(27)<<"结点 轴力\n"; for(I=1;I<=NE;I++) { WRITE_IO<<setw(10)<<I<<setw(15)<<FORC[I]<<endl; } WRITE_IO<< "\n\n ************************************************* \n"; return; } |

4楼2015-06-19 21:59:14
dk1013
木虫 (正式写手)
- 应助: 61 (初中生)
- 金币: 4285.5
- 散金: 246
- 红花: 13
- 帖子: 988
- 在线: 3204.6小时
- 虫号: 980198
- 注册: 2010-03-23
- 性别: GG
- 专业: 凝聚态物性 II :电子结构

5楼2015-06-20 08:36:15














回复此楼