Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

link - http://joeparis.squarespace.com/storage/data_files/cs271/cs271_final_prog

ID: 3622373 • Letter: L

Question

link -

http://joeparis.squarespace.com/storage/data_files/cs271/cs271_final_programming_exam_fall_2010.pdf

Part 2 only

In this problem, you’ll re-create the classic race of the tortoise and the hare. You’ll use random-number generation to develop a simulation of this memorable event. Our contenders begin the race at square 1 of 70 squares. Each square represents a possible position along the race course. The finish line is at square 70. The first contender to reach or pass square 70 is rewarded with a pail of fresh carrots and lettuce. The course weaves its way up the side of a slippery mountain, so occasionally the contenders lose ground. A clock ticks once per second. With each tick of the clock, your application should adjust the position of the animals according to the rules in the table below. Use variables to keep track of the positions of the animals (i.e., position numbers are 1–70). Start each animal at position 1 (the “starting gate”). If an animal slips left before square 1, move it back to square 1.
Animal       Move type     Percentage of the time     Actual move

Tortoise    Fast plod           50%                          3 squares to the right
                    Slip                20%                          6 squares to the left
                  Slow plod          30%                          1 square to the right

Hare           Sleep                20%                          No move at all
               Big hop                20%                          9 squares to the right
               Big slip                10%                          12 squares to the left
               Small hop             30%                          1 square to the right
               Small slip             20%                           2 squares to the left

Generate the percentages in the table by producing a random integer i in the range 1 =i =10. For the tortoise, perform a “fast plod” when 1 = i = 5, a “slip” when 6 = i = 7 or a “slow plod” when 8 = i = 10. Use a similar technique to move the hare. Begin the race by displaying

ON YOUR MARK, GET SET
BANG !!!!!
AND THEY'RE OFF !!!!!

Then, for each tick of the clock (i.e., each repetition of a loop), display a 70-position line showing the letter T in the position of the tortoise and the letter H in the position of the hare. Occasionally, the contenders will land on the same square. In this case, the tortoise bites the hare, and your application should display OUCH!!! beginning at that position. All output positions other than the T, the H or the OUCH!!! (in case of a tie) should be blank.
After each line is displayed, test for whether either animal has reached or passed square 70. If so, display the winner and terminate the simulation. If the tortoise wins, display TORTOISE
WINS!!! YAY!!! If the hare wins, display Hare wins. Yuch. If both animals win on the same tick of the clock, you may want to favor the tortoise (the “underdog”), or you may want to display It's a tie. If neither animal wins, perform the loop again to simulate the next tick of the clock. When you are ready to run your application, assemble a group of fans to watch the race. You’ll be amazed at how involved your audience gets!

Explanation / Answer

#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
void movetort(int*);
void movehare(int*);
void print(int*,int*);
int main()
{int finish=70,tort=1,hare=1,rtime=0;
srand(time(0));
cout<<"ON YOUR MARK, GET SET BANG !!!!! AND THEY'RE OFF !!!!! ";
do
{movehare(&hare);
movetort(&tort);
print(&tort,&hare);
rtime++;
}while(tort<finish&&hare<finish);
if(tort>hare )
    cout<<" TORTOISE WINS!!! YAY!!! ";
else if(tort<hare )
    cout<<"Hare wins. Yuch. ";
else
    cout<<"Would you believe IT'S A TIE!! ";
cout<<"time of race: "<<rtime<<" simulated seconds ";
system("pause");
return 0;
}
void print(int* t,int* h)
{if(*h==*t)
    cout <<setw(*h)<<"OUCH!!!";     
else if(*h<*t)
    cout<<setw(*h)<<'H'<<setw(*t-*h)<<'T';
else
    cout<<setw(*t)<<'T'<<setw(*h-*t)<<'H';
cout<<endl;
}
void movehare(int* r )
{int num;
num=rand()%10;
if(num<2)
     *r-=2;
else if(num<5)
      *r++;
else if(num<6)
      *r-=12;
else if(num<8)
      *r+=9;
if(*r< 1 )
      *r=1;
}
void movetort(int* t)
{int num;
num=rand()%10;
if(num<5)
   *t+=3;
else if(num<7)
   *t-= 6;
else
    *t++;
if(*t<1)
   *t=1;
}