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

📄 frogwalk3.cpp

📁 C++&datastructure书籍源码,以前外教提供现在与大家共享
💻 CPP
字号:
#include <iostream>#include <fstream>#include <string>using namespace std;#include "prompt.h"#include "tvector.h"#include "randgen.h"#include "dice.h"class Walker;class WalkRecorder{  public:    WalkRecorder();    void Record(const Walker& walker);    void Print(ostream& out) const;      private:    static int MAX;    tvector<int> myRecord;    int          myBeyondCount;};class Walker{  public:    Walker(WalkRecorder* wrec);    void Walk(int steps);    int  Position() const;    void ChangeRecorder(WalkRecorder* wrec);  private:    int  myPosition;    WalkRecorder * myRecorder;};int WalkRecorder::MAX = 100;WalkRecorder::WalkRecorder()    : myRecord(2*MAX+1,0), myBeyondCount(0){    // record -MAX..MAX, all zero}void WalkRecorder::Record(const Walker& walker){    int pos = walker.Position();    if (fabs(pos) > MAX)    {   myBeyondCount++;    }    else    {   myRecord[pos+MAX]++;    }}void WalkRecorder::Print(ostream& out) const{    int lowIndex=-1,highIndex=0,k;    for(k=0; k < 2*MAX+1; k++)    {   if (myRecord[k] != 0)        {   if (lowIndex == -1) lowIndex = k;	        highIndex = k;	    }    }    if (lowIndex == -1)    {   out << " no steps taken" << endl;	    return;    }    for(k=lowIndex; k <= highIndex; k++)    {   cout << k-MAX << "\t" << myRecord[k] << endl;    }    cout << endl << "beyond boundaries = " << myBeyondCount << endl;}Walker::Walker(WalkRecorder * wrec)    : myPosition(0), myRecorder(wrec){    }void Walker::Walk(int steps){    Dice d(2);    int k;    for(k=0; k < steps; k++)    {   if (d.Roll() == 1)	    {   myPosition++;	    }	    else	    {   myPosition--;	    }	    myRecorder->Record(*this);    }}int Walker::Position() const{    return myPosition;}void Walker::ChangeRecorder(WalkRecorder* wrec){    myRecorder = wrec;}int main(){    WalkRecorder * rec =  new WalkRecorder();    WalkRecorder * rec2 = new WalkRecorder();    Walker w1(rec);    Walker w2(rec);    int steps = PromptRange("how many steps ",1,10000);    w1.Walk(steps);    w2.Walk(steps);    rec->Print(cout);        cout << endl << "another walk" << endl << endl;        w1.ChangeRecorder(rec2);    w2.ChangeRecorder(rec2);    w1.Walk(steps);    w2.Walk(steps);    rec2->Print(cout);    return 0;}

⌨️ 快捷键说明

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