| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1493 人关注过本帖, 1 人收藏
标题:[求助]请教一下C语言高手,看看我的优化设计程序
只看楼主 加入收藏
flashman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-3-24
收藏(1)
 问题点数:0 回复次数:12 
[求助]请教一下C语言高手,看看我的优化设计程序

这以下是我们搞毕业设计时,老师要求我们编的一个优化程序。要求从取不同的船长L-length,船宽B-breadth,吃水T-draught,的组合,计算校核其性能(重量weight,稳性stability,船速velocity和经济性economy),将符合约束条件的输出。
这个程序编完后,编译时没有错误提示,可运行时却只显示了L、B、T的75种组合。
并提示:floating point error:doman 在此,请教一下各位高手,看看问题出在哪里,并指示一下如何解决问题。本人不甚感激

#include "math.h"
float L,B,T,Cb=0.6,D=1.1,Po=26.5,Go=1.13*0.198,Gm; 作为全局变量
float weight(float L, float B);
float stability(float B,float T);
float velocity(float L,float B,float T);
float economy(float disp);
main( )
{float length[5]={12.5,12.7,12.9,13.1,13.3},
breadth[3]={2.6,2.8,3.0},
draught[5]={0.53,0.55,0.57,0.59,0.61};
float disp,k=1.01,w=1.0,err,Pe,a,v1,v,t,index;
int i,j,n;
for(i=0;i<5;i++)
{for(j=0;j<3;j++)
{for(n=0;n<5;n++) 用三个for语句取数组中的个数构成一个组合
{L=length[i],B=breadth[j],T=draught[n];
disp=k*L*B*T*Cb*w; 计算排水量
err=(disp-weight(L,B))/disp; 计算重量与排水量的误差
if(abs(err)<0.01)Gm=stability(B,T); 约束条件1:误差要求小于1%,符合的L、B、T才继续往下算
if(Gm/B>0.2)Pe=velocity(L,B,T); 约束条件2,符合的L、B、T才继续往下算
if(Pe<Po) 约束条件3,符合的L、B、T才继续往下算
{a=pow(disp,0.667);
v1=pow(100*32.4/a,0.333);
v=1.852*v1; 计算速度
}
t=economy(disp); 计算投资回收期
index=0.5*t/0.5-0.2*v/20-0.3*Gm/2; 计算速度,投资回收期,稳性高度三者加权评价值
printf("While L=%f,B=%f,T=%f,its performance conforms to the requirement.\n",L,B,T); 输出L、B、T
printf("Here,its displacement=%f.\n",disp); 输出计算的排水量
printf("Its metacentric height is %f.\n",Gm); 输出稳性高度
printf("Its velocity is %f km/h.",v); 输出航速
printf("t=%f\n",t); 输出投资回收期
printf("index=%f\n",index); 输出加权评价值
}
}
}
}

float weight(float L, float B) 计算重量(排水量校核)
{int man=32;
float c=0.26,k=1.15;
float totalW,LW,DW,Wo,Wl,Ws,Wm;
LW=c*L*B*D;
Wo=0.001*Go*Po*10*k;
Wl=0.03*Wo;
Ws=0.005*LW;
Wm=man*65/1000;
DW=Wo+Wl+Ws+Wm;
totalW=LW+DW;
return(totalW); 返回总重量值
}

float stability(float B,float T) 计算稳性高度(稳性校核)
{float Zb,r,Zg,Cwp=0.77,e=1.0;
Zb=(0.85-0.372*Cb/Cwp)*T;
r=(0.1363*Cwp+0.0505)*B*B/Cb/T;
Zg=e*D;
Gm=Zb+r-Zg;
return(Gm); 返回稳性高度值
}

float velocity(float L,float B,float T) 计算主机功率(航速校核)
{float f=1.67,m=1.0,Cm=0.92,Am,S,e,g=9.81,v=14.5/3.6,Fn,R,Pe;
Am=Cm*B*T;
S=(1.2*T+Cb*B)*L;
e=17.36*m*pow(Cb,2.5)/(2+pow(L/6/B,3));
Fn=v/sqrt(g*L);
R=f*S*pow(v,1.83)+10*e*Cb*Am*pow(v,1.7+4*Fn);
Pe=R*v/1000;
return(Pe); 返回主机功率值
}

float economy(float disp) 计算投资回收期(经济性校核)
{float Qt,n=0.8,F=2143.0,R=0.15,K=0.8,S,S1,S2,S3,S4,S5,W,Pb=32.4,t=1.0,K1=1.2,
b,P,Y,A,T2,i=0.1;
int Wc=30,N=5*250;
Qt=n*Wc*N;
P=F*disp*pow(1+R,16)*K/10000;
S1=(1-0.1)*P/15;
S2=0.025*P;
S3=0.0055*P;
S4=2.0*1.0;
W=0.001*Go*Pb*N*t*K1;
S5=1.1*4640*W/10000;
S=(S1+S2+S3+S4+S5)/0.8;
b=Qt*P;
Y=S-S1;
A=b-Y;
T2=-log10(1-i*P/A)/log10(1+i);
return(T2); 返回投资回收期的值
}

[此贴子已经被作者于2006-3-26 19:18:36编辑过]

搜索更多相关主题的帖子: C语言 FONT 
2006-03-24 15:39
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
收藏
得分:0 
这以下是我们搞毕业设计时,老师要求我们编的一个优化程序。要求从取不同的船长L-length,船宽B-breadth,吃水T-draught,的组合,计算其性能(重量weight,稳性stability,船速velocity和投资回收期t),将符合约束条件的输出。
这个程序编完后,编译时没有错误提示,可运行时却只显示了L、B、T的75种组合。
并提示:floating point error:doman 在此,请教一下各位高手,看看问题出在哪里,并指示一下如何解决问题。本人不甚感激


要别人帮忙,也要把问题条件说明白呀,他们之间的关系怎样,什么是75中组合,要显示的究竟是什么,各个函数干啥的,你的思路是啥等等,不要人别人费劲去分析你的程序要干什么。

我把你的程序粘贴到vc里,出现一个错误,stability' : must return a value
你的一个函数要有返回值啊。

努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-03-24 16:11
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
收藏
得分:0 
好长啊

2006-03-24 17:31
flashman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-3-24
收藏
得分:0 
谢谢2楼的朋友,听从他的意见,我已经将程序进行了比较详细的注释,大家帮帮忙啊。

[此贴子已经被作者于2006-3-24 22:31:25编辑过]



2006-03-24 22:03
flashman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-3-24
收藏
得分:0 
其实这个程序算法核和语法应该没有问题,因为编译通过了啊。系统提示浮点数错误,不知道为什么

2006-03-24 22:14
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
收藏
得分:0 
我倒!

你的程序time和 encomy 是不是一个啊?time的定义呢?

我改了一下,试了一下,输出是3*5*5 75个结果!也没错啊?最优化,是不是要只输出一个最好的?怎么才是最优?没有判别语句啊?

你到底想要计算机干啥呀?什么输出

努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-03-26 07:55
flashman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-3-24
收藏
得分:0 
[讨论]谢谢你指出错误
谢谢你帮我改正了一个语法错误,这是我的粗心所致。至于你说的我的程序没有判别语句,我就不明白了。main()函数里写得清清楚楚啊。你说输出了75组数字,显然不是程序初衷,问题就出在这,下面还显示浮点错误,真不知该怎么改。

2006-03-26 19:26
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
收藏
得分:0 

我用vc编译你的程序,没有问题,输出是75个,你如果想输出一个,那就是你的判别条件不对,这些(75个)都满足你设定的条件。
如果要输出一个,就不能用你的if条件,而是要在它们(75个)之间进行比较才对,而你现在是满足条件就合格。


努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-03-27 09:04
flashman
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-3-24
收藏
得分:0 
我的程序不只是要求输出一组数据

谢谢你。这个优化程序要求输出所有满足条件的几组数据。有约束条件,所以75组都输出肯定不对。关键是不知道浮点错误错在哪了。


2006-03-27 12:48
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-27 12:53
快速回复:[求助]请教一下C语言高手,看看我的优化设计程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017809 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved