⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d2r6.cpp

📁 Visual C++ 常用数值算法集 源代码
💻 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 + -