📄 randwalk.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 + -