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

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

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

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

23-4 ترسیم لاک پشتی گرچه قبلا در وبلاگ بود یکی از بازدیدکنندگان درخواست کردند.(متاسفانه با 12 روز تاخیر متوجه شدم.)

ترسیم لاک پشتی  زبان لوگو(Logo) که از محبوبیت خاصی بین کاربران کامپیوتر برخوردار است. به خوبی مفهوم لاک پشتی را گسترش داده است. یک لاک پشش مکانیکی را که تحت کنترل  یک برنامه ++C در اتاق در حال گردش است را در نظر بگیرید. قلمی در اختیار این لاک پشت است که در یکی از وضعیت های بالا یا پایین قرار می گیرد. زمانی که قلم رو به پایان است لاک پشت شکلی را در هنگام حرکت ترسیم می کند. هنگامی که قلم رو به بالا باشد. لاک پشت می تواند ازادانه بدون ترسیم چیزی حرکت کند. در این مسئله باید عملیات لاک پشت را شبیه سازی کرده و هم چنین یک تخته رسم کامپیوتری ایجاد شود.

یک ارایه ی 20 * 20 در نظر بگیرید و مقدار اولیه ی ان را صفر قرار دهیددستورات را از ارایه خوانده و بالا یا پایین بودن قلم و محل واقعی لاک پشت را در هر لحظه تعیین کنید. فرض کنید که لاک پشت همیشهاز محل(0.0) و با قلم رو به بالا شروع به حرکت می کند. مجموعه ی فرمان های برنامه به  صورت زیر است:

 

معنی                      

فرمان

قلم بالا

1

قلم پایین

2

چرخش به سمت راست

3

چرخش به سمت چپ

4

به انداره ی 10 فاصله حرکت به سمت جلو(یا عدد دیگری غیر از 10)

10 , 5

چاپ ارایه ی 20 * 20

6

پایان داده ها(مقدار نگهبان)

9

 

 

فرض کنید که لاک پشت نزدیک مرکز صفحه است. در این صورت برنامه ی زیر یک مربع 12 * 12 رسم کرده و سپس قلم را رو به بالا نگه می دارد.

2

5, 12

3

5, 12

3

5, 12

3

5, 12

1

6

9

هنگامی که لاک پشت با قلم رو به پایین حرکت می کند ... عناصر مناسب را با 1 پر کنید. با دستور 6(با توجه به جدول) هر جایی در ارایه که 1 وجود دارد یک ستاره(یا هر کاراکتر دیگری که دوست دارید) و هر جا در ارایه صفر وجود دارد کاراکتر خالی چاپ نمایید. برنامه ای به زبان  ... بنویسید که قابلیت های گفته شده را برای ترسیم لاک پشت شبیه سازی کند. چندین برنامه ی ترسیم لاک پشت نوشته و شکل های مختلفی ترسیم کنید.

برای افزایش کارایی زبان ترسیم لاک پشت فرمان های دیگری را به برنامه اضافه کنید.

 


 #include<iostream>

#include<conio.h>

using namespace std;

const int MAXCOMMANDS = 100, SIZE = 20;

int turnRight(int);
int turnLeft(int);
void getCommands(int [][2]);
void movePen(int, int [][SIZE], int, int);
void printArray(const int[][SIZE]);

int main()
{
int floor[SIZE][SIZE] = {0}, command, direction = 0,
commandArray[MAXCOMMANDS][2] = {0}, distance, count = 0;
bool penDown = false;

getCommands(commandArray);
command = commandArray[count][0];

while(command != 9) {
switch(command) {
case 1:
penDown = false;
break;
case 2:
penDown = true;
break;
case 3:
direction = turnRight(direction);
break;
case 4:
direction = turnLeft(direction);
break;
case 5:
distance = commandArray[count][1];
movePen(penDown, floor, direction, distance);
break;
case 6:
cout << "\nThe drawing is:\n\n";
printArray(floor);
break;
}
command = commandArray[++count][0];
}
getch();
return 0;
}

//****************
void getCommands(int commands[][2])
{
int tempCommand;
cout << "Enter command (9 to end input): ";
cin >> tempCommand;
for(int i = 0; tempCommand  != 9 && i < MAXCOMMANDS; ++i) {
commands[i][0] = tempCommand;
if(tempCommand == 5) {
cin.ignore(); //skip comma
cin >> commands[i][1];
}
cout << "Enter command (9 to end input): ";
cin >> tempCommand;
}
commands[i][0] = 9; //last command
}
//------------------
int turnRight(int d)
{
return ++d > 3 ? 0 : d;
}
//___________________
int turnLeft(int d) 
{
return --d < 0 ? 3 : d;
}
//+++++++++++++++++++

void movePen(int down, int a[][SIZE], int dir, int dist)
{
static int xPos = 0, yPos = 0;
int j;  //looping variable
switch (dir) {
case 0:   //move to the right
for(j = 1; j <= dist && yPos + j < SIZE; ++j)
if(down)
a[xPos][yPos + j] = 1;

yPos += j - 1;
break;
case 1: //move down
for(j = 1; j <= dist && xPos + j < SIZE; ++j)
if(down)
a[xPos + j][yPos] = 1;

xPos += j - 1;
break;
case 2: //move to the left
for(j = 1; j <= dist && yPos - j >= 0; ++j)
if(down)
a[xPos][yPos - j] = 1;

yPos -= j - 1;
break;
case 3: // move up
for(j = 1; j <= dist && xPos - j >= 0; ++j)
if(down)
a[xPos - j][yPos] = 1;

xPos -= j - 1;
break;
}
}
//^^^^^^^^^^^^^^^^^^^
void printArray(const int a[][SIZE])
{
for(int i = 0; i < SIZE; ++i) {
for(int j = 0; j < SIZE; ++j)
cout << ( a[i][j] ? '*' : ' ' );

cout << endl;
}
}
نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.