📄 d2r6.cpp
字号:
# include<iostream.h>
# include<math.h>
# include<iomanip.h>
void hunt(double xx[], int n,double x, int& jlo)
{
int lhi,inc,jm;
int ascnd = xx[n] > xx[1];
if( (jlo<= 0 )|| (jlo > n))
{
jlo = 0;
lhi = n + 1;
goto loop3;
}
inc= 1;
if( (x >= xx[jlo] )&& ascnd )
{
loop1: lhi = jlo + inc;
if (lhi > n )
lhi= n + 1;
else
if ((x >= xx[lhi] )&& ascnd )
{
jlo= lhi;
inc = inc + inc;
goto loop1;
}
}
else
{
lhi = jlo;
loop2: jlo = lhi - inc;
if (jlo < 1 )
jlo = 0;
else
{
if((x < xx[jlo] )&& ascnd )
{
lhi = jlo;
inc = inc + inc;
goto loop2;
}
}
}
loop3: if(( lhi - jlo) == 1 )
return;
jm = (lhi + jlo)/ 2;
if( (x > xx[jm] )&& ascnd)
jlo= jm;
else
lhi = jm;
goto loop3;
}
void main()
{
//program d2r6
//driver for routine hunt
double x,xx[101];
int j,ji,i,n = 100;
//create array to be searched
for (i = 1;i<=n;i++)
xx[i] = exp(double(i) / 20.0) - 74.0;
cout<<endl;
cout<< "Result of: j=0 indicates x too small"<<endl;
cout<< " j=100 indicates x too large"<<endl;
cout<< " locate guess j xx[j] xx[j+1]"<<endl;
//for test
cout<<setprecision(6)<<setiosflags(ios::fixed);
for( i = 1; i<=19; i++)
{
x = -100.0 + 200.0 * i / 20.0;
//trial parameter
ji = 5 * i;
j = ji;
//begin search
hunt(xx, n, x, j);
if (j== 0 )
{
cout<<setprecision(1)<<setw(8)<<x;
cout<<setprecision(0)<<setw(8)<<ji;
cout<<setprecision(0)<<setw(8)<<j;
cout<<setprecision(6)<<setw(16)<<"lower lim";
cout<<setprecision(6)<<setw(16)<<xx[j + 1]<<endl;
}
else
{
if (j== n )
{
cout<<setprecision(1)<<setw(8)<<x;
cout<<setprecision(0)<<setw(8)<<ji;
cout<<setprecision(0)<<setw(8)<<j;
cout<<setprecision(6)<<setw(16)<<xx[j];
cout<<setprecision(6)<<setw(16)<<"upper lim"<<endl;
}
else
{
cout<<setprecision(1)<<setw(8)<<x;
cout<<setprecision(0)<<setw(8)<<ji;
cout<<setprecision(0)<<setw(8)<<j;
cout<<setprecision(6)<<setw(16)<<xx[j];
cout<<setprecision(6)<<setw(16)<<xx[j + 1]<<endl;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -