各位大侠,毕设问题,很急,有个程序麻烦帮忙看下

ding0209 2009-05-31 11:15:04
extern double zsmbsj[41];
double max;max=zsmbsj[0];int zdzb=380;//选取目标曲线中最大值
for(int kks=0;kks<40;kks++)
{ if (max<zsmbsj[kks+1])
{max=zsmbsj[kks+1];zdzb=380+(kks+1)*10;}
}
double sjbj=max*0.4;double xss1,dss1,xss2,dss2;
int rr1,rr2;
for(int ww=0;ww<40;ww++)//取最大值的10%相邻两点,且是小于max时
{if(zsmbsj[ww]<sjbj&&sjbj<zsmbsj[ww+1]&&ww+1<zdzb)
{rr1=ww;xss1=zsmbsj[ww];dss1=zsmbsj[ww+1];
break;}
}
for(int pps=0;pps<40;pps++)
{if(zsmbsj[pps]>sjbj&&sjbj>zsmbsj[pps+1]&&pps>zdzb)
{rr2=pps;dss2=zsmbsj[pps];xss2=zsmbsj[pps+1];
break;
}}
double dyd,drd;

dyd=380.0+10.0*rr1+10.0*(sjbj-xss1)/(dss1-xss1);//求10%max所对应的坐标
drd=380.0+10.0*rr2+10.0*(dss2-sjbj)/(dss2-xss2);



但是运行时max的数值是-9.2559631349317831e+061
我是新手 实在不知道为什么 这个是毕业设计 很着急 希望各位大侠能帮帮小弟,在此谢过!
...全文
141 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ding0209 2009-05-31
  • 打赏
  • 举报
回复
真的是太谢谢了,非常特别感谢,我以后一定注意。现在查了查,我库里文件里的数据都是.1234这种形式,也就是zsmbsj矩阵中的数据,不知这种数据能参加运算吗?
T技术沙龙 2009-05-31
  • 打赏
  • 举报
回复
	extern double zsmbsj[41];
double max;
max=zsmbsj[0];
int zdzb=380;//选取目标曲线中最大值
for(int kks=0;kks<40;kks++)
{
if (max<zsmbsj[kks+1])
{
max=zsmbsj[kks+1];
zdzb=380+(kks+1)*10;
}
}
double sjbj=max*0.4;
double xss1,dss1,xss2,dss2;
int rr1,rr2;
for(int ww=0;ww<40;ww++)//取最大值的10%相邻两点,且是小于max时
{
if(zsmbsj[ww]<sjbj&&sjbj<zsmbsj[ww+1]&&ww+1<zdzb)
{
rr1=ww;
xss1=zsmbsj[ww];
dss1=zsmbsj[ww+1];
break;
}
}
for(int pps=0;pps<40;pps++)
{
if(zsmbsj[pps]>sjbj&&sjbj>zsmbsj[pps+1]&&pps>zdzb)
{
rr2=pps;
dss2=zsmbsj[pps];
xss2=zsmbsj[pps+1];
break;
}
}
double dyd,drd;
dyd=380.0+10.0*rr1+10.0*(sjbj-xss1)/(dss1-xss1);//求10%max所对应的坐标
drd=380.0+10.0*rr2+10.0*(dss2-sjbj)/(dss2-xss2);

帮楼主把代码整理了一下,具体看不出哪里出问题了,不过我觉得应该是if后面括号中的判断出的问题,还有,楼主以后贴代码的时候得清晰一点,呵呵,这样才能更快的解决问题哦
ding0209 2009-05-31
  • 打赏
  • 举报
回复
没事儿:)
china_west 2009-05-31
  • 打赏
  • 举报
回复
看不懂抱歉
ding0209 2009-05-31
  • 打赏
  • 举报
回复
先谢谢大侠!zsmbsj这个数组在别的地方已经初试化了,这个是程序中的其中一部分,我想在这个数组中选出最大值,我用的是VC++6.0
draculamx 2009-05-31
  • 打赏
  • 举报
回复


extern double zsmbsj[41];
double max;max=zsmbsj[0];int zdzb=380;//选取目标曲线中最大值

//不知道你用的什么编译器,不过,你的 zsmbsj[41] 这个数组,应该要初始化一下才对
//如果不初始化的话,max=zsmbsj[0]; 这一句,max得到的就是一个随机的数字
//可以改成

extern double zsmbsj[41]={0}; //初始化 zsmbsj[41] 数组中的每个元素的值为“零”
double max;max=zsmbsj[0];int zdzb=380;//选取目标曲线中最大值


YaYiYaO 2009-05-31
  • 打赏
  • 举报
回复
代码太乱了
ding0209 2009-05-31
  • 打赏
  • 举报
回复
谢谢~ 估计还就是赋值那块儿有问题,这个数组是很久以前的一位学长做的,他用了这样一个语句zsmbsj[i ]=SjMb1[i]/SjMb2[i];而等式中的另两个数组在以下程序中已经赋值
CStdioFile BLFile;
mmm="C:\\GlsFilter\\优化数据\\标准光源与标准观察者\\";
mmm=mmm+m_mb1;
if(!BLFile.Open(mmm,CFile::modeRead))
{
BLFile.Abort();
AfxMessageBox("标准光源与标准观察者文件打不开");
// CanShow=false;
return ;
}
CString str,str2,str3;
int wjsmjsq=0;//文件数目记数器
int wjxh=0;
while( BLFile.ReadString(str))//读一行
{

for(int num=0;(num+6)<=str.GetLength();num+=7){(num+6+1,6);
str2=str.Mid(num+6,1);
str3=str.Mid(num,6);
SjMb1[wjxh]=atof(str3)
wjxh++;
}
}
moon2008moon 2009-05-31
  • 打赏
  • 举报
回复
个人觉得你的变量都没赋初值的问题, 这样如果你的if 的条件都不满足时
xss1 ,dss1 ,xss2,dss2;
rr1,rr2;全部是乱码的
可能对以后的运算有影响

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧