پروژه برنامه مویسی

پروژه برنامه نویسی

پروژه برنامه مویسی

پروژه برنامه نویسی

5-17 شبیه سازی مسابقه ی خرگوش و لاک پشت

5-17 – (شبیه سازی مسابقه ی خرگوش و لاک پشت) در این مسئله مسابقه ی معروف خرگوش و لاک پشت را شبیه سازی می کنیم و از اعداد تصادفی(random) برای شبیه سازی این داستان معروف استفاده می شود.

   

 شرکت کنندگان مسابقه را از خانه ی 1 (از 70 خانه) شروع می کنند. هر خانه نشان دهنده ی یک محل در طول مسیر مسابقه است. خانه 70 خط پایان مسابقه است. اولین شرکت کننده ای که به خانه ی شماره ی 70 برسد و از ان عبور کند یک سطل کاهو و هویج جایزه می گیرد. مسیر مسابقه جاده ای لغزنده و شیب دار به سمت بالای کوه است. به همین علت گاهی شرکت کنندگان به عقب برمی گردند.

ساعتی داریم که در هر ثانیه یکی ضربه می زند. برنامه باید بر اساس قوانین زیر با هر ضربه ی ساعت محل دو حیوان ذکر شده را تنظیم نماید.

  حیوان         نوع حرکت         درصد دفعات                حرکت واقعی

لاک پشت      گام سریع            50%                         3 خانه با راست

                  سر خوردن         20%                         6 خانه به چپ

                  گام کند              30%                       1 خانه به راست

خرگوش        خواب                20%                       ثابت(بی حرکت)

                 پرش بلند             20%                       9 خانه به راست

                 سر خوردن بلند      10%                       12 خانه به چپ

                 پرش کوچک         30%                      1 خانه به راست

                 سر خوردن کوچک  20%                      2 خانه به چپ

 

از دو متغیر برای تعقیب این دو (یعنی شماره محل های 1 تا 70) استفاده کنید. از محل 1 حرکت هر دو حیوان را شروع کنید. اگر شرکت کننده ای به قبل از خانه ی 1 یعنی به سمت چپ سرخورد ان را به خانه ی 1 برگردانید. با تولید عددی صحیح مانند i در محدوده ی 10 بزرگ تر مساوی i و i برزگ تر مساوی 1 درصد جدول بالا را ایجاد نمایید. برای لاک پشت وقتی که 5 بزرگ تر مساوی i , i بزرگ تر مساوی 1 است یک گام سریع و هنگامی که 7 بزرگ تر مساوی i , i بزرگ تر مساوی 6 یک سر خوردن و هنگامی که 10بزرگ تر مساوی i و i بزرگ تر مساوی 8 است یک گام کند در نظر بگیرید. برای حرکت خرگوش نیز از همین روش استفاده کنید 

با نمایش جدول زیر مسابقه را شروع کنید:

 

!!!!!    BANG 

                 !!!!!  AND THEY'RE OFF                                     

به ازای هر ضربه ی ساعت(یعنی هر بار که حلقه تکرار می شود) یک خط با 70 محل نمایش دهید که در ان محل لاک پشت با حرف T و خرگوش با حرف H مشخص شده باشد. گاهی اوقات هر دو شرکت کننده در یک محل قرار گیرند. در این حالت خرگوش لاک پشت را گاز می گیرد و در ان محل باید عبارت !!! OUCH را نمایش دهد. تمام محل ها به غیر از H و T و عبارت !!! OUCH(در صورت روی هم افتادنH و T) باید با کاراکتر فضای خالی(blanck) نمایش داده شود.

بعد از نمایش هرخط مشخص کنید که ایا هیچ شرکت کننده ای به خانه ی 70 رسیده یا نرسیده و یا از ان رد شده است. در صورت برنده شدن لاک پشت عبارت YAY!!! !!!TORTOISE WINSو در صورت برنده شدن خرگوش عبارت Yuch ,Hare Wins را نمایش دهید. سپس شبیه سازی را به پایان برسانید. اگر هر دو شرکت کننده در یک ضربه ساعت برنده شده شدند ممکن است بخواهید به طرفداری از شرکت کننده ضعیف لاک پشت را برنده ی مسابقه اعلام کنید و یا جمله ی it's a tie را نمایش دهید. در صورتی که هیچ یک برنده نشدند حلقه را دوباره اجرا کنید تا ضربه ی بعدی ساعت شبیه سازی شود. بعد از اماده شدن برنامه از یک سری تماشاچی برای تماشای مسابقه دعوت کنید. خواهید دید چقدر تماشاچیان سرگرم مسابقه می شوند.



#include<iostream>

using std::cout;

using std::cin;

using std::endl;

#include<cstdlib>

#include<iomanip>

using std::setw;

const int RACE_END = 70;

void moveTortoise(int * const);

void moveHare(int * const);

void printCurrentPositions(const int * const, const int * const);

int main()

{

int tortoise = 1, hare = 1, timer = 0;

srand(time(0));

cout << "ON YOUR MARK, GET SET\nBANG              !!!!"

<< "\nAND THEY'RE OF   !!!\n";

while(tortoise != RACE_END && hare != RACE_END) {

moveTortoise(&tortoise);

moveHare(&hare);

printCurrentPositions(&tortoise, &hare);

++timer;

}

if(tortoise >= hare)

cout << "\nTORTOISE WIN. Yuch.\n";

cout << "TIME ELABSED = " << timer << " seconds" << endl;

getch();

return 0;

}

void moveTortoise(int * const turtlePtr)

{

int x = 1 + rand() % 10;

if(x >= 1 && x <= 5)            //fast plod

*turtlePtr += 3;

else if (x == 6 || x == 7)      //slip

*turtlePtr -= 6;

else                            //slow plod

++(*turtlePtr);

if(*turtlePtr < 1)

*turtlePtr = 1;

else if (*turtlePtr > RACE_END)

*turtlePtr = RACE_END;

}

//+++++++++++++++

void moveHare(int * const rabbitPtr)

{

int y = 1 + rand() % 10;

if(y == 3 || y == 4)    //big hop

*rabbitPtr += 9;

else if(y == 5)             //big slip

*rabbitPtr -= 12;

else if(y >= 6 && y <= 8)   //small hop

++(*rabbitPtr);

else if (y > 8)        //small slip

*rabbitPtr -= 2;

if(*rabbitPtr < 1)

*rabbitPtr = 1;

else if (*rabbitPtr > RACE_END)

*rabbitPtr = RACE_END;

}


//-------------------

void printCurrentPositions(const int * const snapperPtr, const int * const bunnyPtr)

{

if(*bunnyPtr == *snapperPtr)

cout << setw(*bunnyPtr) << "oUCH!!!";

else if (*bunnyPtr < *snapperPtr)

cout << setw(*snapperPtr - *bunnyPtr) << 'T'

        << setw(*snapperPtr - *bunnyPtr) << 'T';

else

cout << setw(*snapperPtr) << 'T'

    << setw(*bunnyPtr - *snapperPtr) << 'H';

cout << '\n';

}


نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.