新手请教:这个程序怎么运行不了?

gyw800 2004-11-29 05:51:03
#include<iostream.h>
#include<math.h>
const double E=0.001;
const double c1=5;


double * formf(double m,double n,double M)//*HOOKE——JEEVES法
{
double e[2][2]={1,0,0,1};
double x1[2]={m,n},a1,b1,c1,d1;
double x[1000][2],y[3][2];
double *pf;
x[0][0]=x1[0];x[0][1]=x1[1];
double d=1,a=1;
double a0,b0;
y[0][0]=x[0][0];
y[0][1]=x[0][1];
int k=0;
for(int g=0;g<3;g++){
for(int j=0;j<2;j++){
a1=(y[j][0]+d*e[j][0])+(y[j][1]+d*e[j][1])-M/(-(y[j][0]+d*e[j][0])*(y[j][0]+d*e[j][0])+(y[j][1]+d*e[j][1]))-M/(y[j][0]+d*e[j][0]);
b1=y[j][0]+y[j][1]-M/(-y[j][0]*y[j][0]+y[j][1])-M/y[j][0];
cout<<"a1="<<a1<<"b1="<<b1<<"\n";
if(a1<b1)
{ y[j+1][0]=y[j][0]+d*e[j][0];
y[j+1][1]=y[j][1]+d*e[j][1];}
else {
c1=(y[j][0]-d*e[j][0])+(y[j][1]-d*e[j][1])-M/(-(y[j][0]-d*e[j][0])*(y[j][0]-d*e[j][0])+(y[j][1]-d*e[j][1]))-M/(y[j][0]-d*e[j][0]);
d1=y[j][0]+y[j][1]-M/(-y[j][0]*y[j][0]+y[j][1])-M/y[j][0];
cout<<"c1="<<c1<<"d1="<<d1<<"\n";
if(c1<d1)
{
y[j+1][0]=y[j][0]-d*e[j][0];
y[j+1][1]=y[j][1]-d*e[j][1];
}
else{y[j+1][0]=y[j][0];y[j+1][1]=y[j][1];}
}



}
a0=y[2][0]+y[2][1]-M/(-y[2][0]*y[2][0]+y[2][1])-M/y[2][0];
b0=x[k][0]+x[k][1]-M/(-x[k][0]*x[k][0]+x[k][1])-M/x[k][0];
if(a0<b0)
{x[k+1][0]=y[2][0];x[k+1][1]=y[2][1];
y[0][0]=x[k+1][0]+a*(x[k+1][0]-x[k][0]);
y[0][1]=x[k+1][1]+a*(x[k+1][1]-x[k][1]);
k++;}
else{
if(d<E){
pf=&x[k][0];break;}

else{
y[0][0]=x[k][0];y[0][1]=x[k][1];
x[k+1][0]=x[k][0];x[k+1][1]=x[k][1];
d=d/2;k++;}
}

}
return pf;
}
void main (void )
{
double x[1000][2]={2,5};
double t,*p,r1=1;
int k=1;
for(int i=0;i<1;i++)
{
p=formf(x[k-1][0],x[k-1][1],r1);
x[k][0]=*p;x[k][1]=*(p+1);
cout<<x[k-1][0]<<"\t"<<x[k-1][1]<<"\t"<<x[k][0]<<"\t"<<x[k][1]<<"\n";
t=(x[k][0]-x[k-1][0])*(x[k][0]-x[k-1][0])+(x[k][1]-x[k-1][1])*(x[k][1]-x[k-1][1]);
cout<<"T="<<t<<"\n";
if(pow(t,0.5)<E)
{
cout<<"最优解为:"<<x[k][0]<<"\t"<<x[k][1]<<"\n";
break;
}
else
{
r1=r1/c1;cout<<"R!+"<<r1<<"\n";k++;
}
}
}
**********
编译时没错误,可运行不了,请高手指教!谢谢!
...全文
258 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyw800 2004-12-02
  • 打赏
  • 举报
回复
xu123:我按你的改法还是会有溢出//
xu223:你说的我都明白了//请问如何改正呢//我的水平有限//还望指教:)
gyw800 2004-12-01
  • 打赏
  • 举报
回复
帮我改好了这个程序//我把分给他//急用(在线等待)谢谢
xu233 2004-12-01
  • 打赏
  • 举报
回复
formf函数中pf的付值语句只有这一句:
if(d<E){pf=&x[k][0];break;}
而且还被条件d<E和a0<b0条件保护着,所以在用debug调试时发现a0<b0条件成立,所以pf没有能取到值,就被return了。
所以在main函数中的p指针没有取到值,是一个非法指针,
然后x[k][0]=*p;用了一个非法的指针地址去取值当然会报错了。
xu123 2004-12-01
  • 打赏
  • 举报
回复
a0 = -1.#INF000000000000 // 有问题吧
//formf
double *pf; // double *pf = NULL;
//main
for(int i=0;i<1;i++)
{
p=formf(x[k-1][0],x[k-1][1],r1);
if(p == NULL) continue;
gyw800 2004-11-30
  • 打赏
  • 举报
回复
请问:应该如何修改呢?
whoho 2004-11-29
  • 打赏
  • 举报
回复
楼上似乎已给出答案了
whoho 2004-11-29
  • 打赏
  • 举报
回复
运行的时候有溢出错误
ma100 2004-11-29
  • 打赏
  • 举报
回复
formf中if(a0<b0)时没对 pf 赋值
soft_bird 2004-11-29
  • 打赏
  • 举报
回复
你先说一下你的程序思想
healer_kx 2004-11-29
  • 打赏
  • 举报
回复
到处都是1,0,[]/////////...

64,642

社区成员

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

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