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

📄 randwalk.cpp

📁 我学习C++ Primer Plus过程中写下的课后作业的编程代码
💻 CPP
字号:
// randwalk.cpp -- using the Vector class
// compile with the vect.cpp file
#include <iostream>
#include <cstdlib>		// rand(),srand()prototypes
#include <ctime>		// time()prototype
#include "vect.h"
#include <fstream>
#include <vector>

int main()
{
	const int MAX = 50;
	using namespace std;
	using VECTOR::Vector;				// 用VECTOR名称
	srand ( time(0) );					// seed random-number generator
	double direction;	
	Vector step;						// 每一步行走的方向
	Vector result ( 0.0, 0.0 );			// 每行走一步后的方向
	unsigned long steps = 0;			//  每次随机走的总步数
	double target;						// 目标距离	
	double dstep;						// 每一步行走的距离
	
	char filename[MAX];
	cout<<"请输入所要保存随机行走路径的文件名:";
	cin.get(filename,MAX-1);			// 文件名过长则截短到MAX-1字符
	filename[MAX-1] = '\0';
	while (cin.get() != '\n' )			
		continue;
	ofstream fout;						
	fout.open(filename);							
	if( !fout.is_open() )
	{
		cerr<<"Could not open file: "<<filename<<endl;
		fout.clear();
	}
	
	int	N = 0;							// N次测试
	float	maxSteps = 0.0;				// 最大步数
	float	minSteps = 0.0;				// 最小步数
	float	averageSteps = 0.0;			// 平均步数
	float	totalSteps = 0.0;			// 总步数
	std::vector<float> stepsArray;		// 存储steps最后找出maxSteps和minSteps
	cout<<"Enter target distance and test time(N)(q to quit):";
	while(  cin>>target && cin>>N )		// 从这开始输入测试
	{
		stepsArray.resize(N);	// 设向量大小为N
		cout<<"Enter step length: ";
		if ( !(cin>>dstep) )
			break;
		fout<<"下面是\""<<filename<<"\""<<N<<"次成功走出 "<<target<<" 米的艰辛路程!\n";
		fout<<"Target Distance: "<<target<<", Step Size: "<<dstep<<endl;
		for( int i = 0; i < N; i++ )
		{
			fout<<"第"<<i+1<<"次试走:\n";
			while(result.magval() < target )
			{
				direction = rand()% 360;
				step.set ( dstep, direction, 'p' );
				result = result + step;
				fout<<++steps			// 每一步直到目标,输出到文件
					<<": (x,y) = ("
					<<result.xval()
					<<","
					<<result.yval()
					<<")\n";
				
			}// 走到了目标
			stepsArray[i] = steps;		
			cout<<"After "<<steps<<" steps,the subject "
				  "has the following location: \n";
			cout<< result <<endl;
			// 输出到文件中
			fout<<"花了 "<<steps<<"步!"<<filename
				<<"才跑出距离中心"
				<<target
				<<"米"
				<<endl;
			fout<< result <<endl;
			
			result.polar_mode();		// 改成极坐标系输出
			cout<<" or\n"<<result<<endl;
			fout<<" or\n"<<result<<endl;

			maxSteps = stepsArray[0];
			minSteps = stepsArray[0];
			for( int j = 1; j < N; j++ )// 最大步数与最小步数
			{
				maxSteps = ( maxSteps < stepsArray[j] ) ? stepsArray[j] : maxSteps;
				minSteps = ( minSteps > stepsArray[j] ) ? stepsArray[j] : minSteps;
			}
			totalSteps += steps;		// 把总步数记录到totalStep中,再重新一次测试
			steps = 0;
			result.set( 0.0, 0.0 );	
			fout<<"\n\n\n\n\n";
		}
		if(N != 0)
			averageSteps = totalSteps / N;				
		cout<<"maxSteps="<<maxSteps<<endl;		// 输出各种统计数据
		cout<<"minSteps="<<minSteps<<endl;
		cout<<"averageSteps="<<averageSteps<<endl;
		fout<<"------------------------------------------------------------"
			"-----------------------------------------------------------\n";
		fout<<"共试了 "<<N<<" 次.\n";
		fout<<"maxSteps="<<maxSteps<<endl;		// 输出各种统计数据到文件
		fout<<"minSteps="<<minSteps<<endl;
		fout<<"averageSteps="<<averageSteps<<endl;
		fout<<"------------------------------------------------------------"
		      "------------------------------------------------------------"
			<<"\n\n\n\n\n\n\n\n\n";	
		// 重置数据,直到N次结束
		maxSteps = 0.0;				// 最大步数
		minSteps = 0.0;				// 最小步数
		averageSteps = 0.0;			// 平均步数
		totalSteps = 0.0;			// 总步数
        cout<<"Enter target distance and test time(N)(q to quit):";
	}// 这里结束N次测试
	
	cout<<"Bye!\n";
	fout.close();					// 关闭文件
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -