ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

مساله‌ی گردش اسب
Goto page 1, 2  Next
 
Post new topic   Reply to topic    ParsX.com Forum Index -> راهنمايي در پروژه
View previous topic :: View next topic  
Author Message
Amir
مدير مباحث عمومي سايت


Joined: 30 Nov 2004
Posts: 1088
Location: Age Hammam Nabasham To Lebasamam

PostPosted: Sat Jul 09, 2005 1:06 pm    Post subject: مساله‌ی گردش اسب Reply with quote

فقط بايد زود آماده بشه. واسه دوشنبه صبح مي‌خواد طرف. قيمت بدين Wink

(گردش اسب) یکی از معماهای جالب شطرنج بازان، مساله ی گردش اسب است که توسط یاضیدان مشهور ،اولر مطرح شد.سوال این است : آیا مهره ی اسب در شطرنج می تواند در یک صفحه ی خالی شطرنج به گونه ای گردش کند که با هریک از 64 خانه یک بار و فقط یک بار تماس پیدا کند؟ این مسئله ی جالب را در اینجا به تفصیل مورد مطالعه قرار می دهیم.
اسب می تواند حرکاتی به شکل انجام دهد(دو خانه در یک جهت و سپس یک خانه در جهت عمود بر جدول اول) . به این ترتیب یک اسب از خانه ای در وسط صفحه ی خالی شطرنج می تواند هر یک از هشت حرکت مختلفی را که در شکل 4-25 با اعداد 0 تا 7 نشان داده شده اند انجام دهد.

الف)یک صفحه ی شطرنج 8 در 8 روی صفحه ی کاغذی رسم کنید و سعی کنید مساله ی گردش اسب را با دست حل کنید.در اولین خانه که قرار می گیرد عدد 1 ، در دومین خانه عدد 2 ، در سومین خانه عدد 3 و... را بنویسید.پیش از آغاز گردش ، مسافتی را که می توانید طی کنید تخمین بزنید. پس از انجام کاربا دست چقدر به این تخمین نزدیک بودید؟

ب)برنامه ای را بنویسید که اسبی را در یک صفحه شطرنج گردش دهد. این صفحه را با یک آرایه ی دو اندیسی به نام* نمایش دهید.در ابتدا همه ی خانه ها را برابر با صفر قرار دهید.هر یک ازهشت حرکت ممکن بر حسب هر دو جزء افقی و عمودی آنها توصیف می شود.مثلاً حرکتی از نوع 0 به صورتی که در شکل 4-25 نشان داده شده شامل یک حرکت افقی به سمت راستبه اندازه ی دو خانه و یک حرکت عمودی به سمت بالا به اندازه ی یک خانه است.حرکت نوع 2 شامل یک حرکت افقی به سمت چپ به اندازه ی یک خانه و یک حرکت عمودی به سمت بالا به اندازه ی دو خانه است.حرکات هفقی به سمت چپ و حرکات عمودی به سمت بالا را با اعداد منفی نشان می دهیم.این هشت حرکت را می توان با دو آرایه ی تک اندیسی * و * به صورت زیر توصیف نمود:

برای نمایش ردیف و ستون محل جاری اسب از متغیرهای * و * استفاده کنید.برای انجام حرکتی از نوع * که * عددی بین 0 تا 7 است- برنامه از دو دستور زیر استفاده می کند :
Currentrow +=vertical[movenumber];
Currentcolumn +=horizontal[movenumber];

شمارنده ای را در نظر بگیرید که از 1 تا 64 تغیر می کند و در آن تعداد حرکاتی را که اسب تا به حال انجام داده است ثبت کنید.به خاطر داشته باشید که هر حرکت را از ÷یش بررسی کنید و ببینید که آیا اسب قبلا به آن خانه رفته است یا خیرو البته هر حرکت را بررسی کنید تا اسب از صفحه سطرنج خارج نشود.حال برنامه ای بنویسید که اسب را در صفحه شطرنج گردش دهد.برنامه را اجرا کنید.اسب مزبور چند حرکت انجام داد؟

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

می توان با دسته بندی خانه ها بر حسب میزان قابلیت دسترسی به آنها ، یک (( روش ذهنی مبتنی بر قابلیت دسترسی)) ابداع کرد.به این ترتیب که همواره اسب را به خانه ای با بیشترین دسترسی حرکت دهیم ( البته در بین حرکتها مجاز * شکل ). یک آرایه دو اندیسی به نام * را با اعدادی پر می کنیم که نشان دهنده ی تعداد خانه هایی باشد که از آن می توان به یک خانه ی مشخص دست یافت. در یک صفحه ی خالی هر یک از خانه های مرکزی امتیاز 8 ، هر یک از گوشه ها 2 امتیاز و بقثه خانه ها امتیازهای 3 ، 4 یا 6 را به ترتیب زیر خواهند گرفت:

2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3



اینک با استفاده از روش ذهنی قابلیت دسترسی برود. برنامه ای برای گردش اسب بنویسید. در هر لحظه اسب باید به خانه ای با کمترین قابلیت دسترسی برود.در حالت تستوی امتیاز دو یا چند خانه ، اسب می تواند به هر کدام از این خانه ها برود. بنابرین گردش را می توان از هر یک از چهار گوشه آغاز کرد.(توجه : برنامه باید هنگام گردش در صفحه ی شطرنج و اشغال خانه ها، از امتیاز قابلیت دستری بعضی از خانه ها کم کند.بدین ترتیب در هر لحظه امتیاز هر یک از خانه های باقی مانده دقیقا برابر با تعداد خانه هایی است که در حال حاضر می توانند به این خانه دست یابند.) این نخسه از برنامه را اجرا کنید.آیا یک گردش کامل انجام شد؟ حال این برنامه را به گونه ای تغییر دهید که 64 گردش را انجام دهد به طوری که هر گردش ، از یکی از خانه های صفحه شطرنج آغاز شود.در این اجرا چند گردش کامل انجام شد؟

د) نسخه ی دیگری از برنامه ی گردش اسب را بنویسید که هنگام برخورد با دو یا چند خانه با امتیازهای مساوی ، با نگاه به خانه های قابل دسترسی توسط این خانه های هم امتیاز ، تصمیم بگیرد که کدام یک را انتخاب کند. برنامه باید به خانه ای برود که در آن ، حرکت بعدی به خانه ای با کمترین امتیاز دسترسی صورت پذیرد.
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sat Jul 09, 2005 7:18 pm    Post subject: Reply with quote

با عرض سلام خدمت امیر جان
1) امیر جان می شه دقیقا مشخص کنید کدوم سوال رو باید جواب بدند
2) امیر جان نمی خوام فضولی کنم ولی بنظر نمی یاد این سوال به تریپ کاردانی بخوره بیشتر به قسمت هوش مصنوعی کارشناسی ارشد می خوره ( البته شاید هم اشتباه می کنم )
3) نمی شه تا آخر هفته وقتش رو بیشتر کنی
4) در مورد قیمت باید اول سوال رو واضح بودنیم ( گرچه در اون صودت هم باز ... )
Back to top
Amir
مدير مباحث عمومي سايت


Joined: 30 Nov 2004
Posts: 1088
Location: Age Hammam Nabasham To Lebasamam

PostPosted: Sun Jul 10, 2005 12:09 am    Post subject: Reply with quote

اين رفيقمون انگار جواب رو از يكي گرفته. حالا مي‌خواهد يك تغييراتي بده كه كپي برابر اصل نباشه و استاد گرام تشخيص نده!
قيمت!؟
Back to top
forouzan
مهمون يكي دو روزه


Joined: 10 Jul 2005
Posts: 6

PostPosted: Sun Jul 10, 2005 9:48 am    Post subject: Reply with quote

سلام

بابا چرا هیچ کس جواب این سوال رو نمیده؟

تو رو خدا حلش کنین.
Back to top
unknown
مدير بخش ويژوال بيسيك
مدير بخش ويژوال بيسيك


Joined: 05 Dec 2004
Posts: 439
Location: Tehran

PostPosted: Sun Jul 10, 2005 12:39 pm    Post subject: Reply with quote

من که اصلا حوصلم نیومد بخونمش...
Back to top
forouzan
مهمون يكي دو روزه


Joined: 10 Jul 2005
Posts: 6

PostPosted: Sun Jul 10, 2005 1:06 pm    Post subject: Reply with quote

این جواب سوال هستش ولی من اینو نمیخوام.هر کی میتونه یکم توش تغیرات بده
اگه سوالی داشتین آف !! بذارین forouzan_666 !YAhoo Wink


//---------------------------------last edit by yazdan attarian by 84/4/18
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>                //random function

//---------------------------------golbal variable

int x1=3,y1=3,print=0;
int chess[8][8];
void movehorse(int key2);
void prnresult();
void automove();

//---------------------------------board function

void board()
{
int i;
gotoxy(0,0);
cout<<"\n";
for (i=1;i<=8;++i)
{
gotoxy(i*8,2);
cout<<char(64+i);
}
cout<<"\n\n";

for (i=1;i<=8;i++)
if (i % 2!=0)
{
cout<<"   ++++++++        ++++++++        ++++++++        ++++++++        "<<"\n";
cout<<"   ++++++++        ++++++++        ++++++++        ++++++++        "<<"\n";
cout<<i;

if (print==0)
cout<<"  ++++++++        ++++++++        ++++++++        ++++++++        "<<"\n";
else
cout<<"                                                                  "<<"\n";

cout<<"   ++++++++        ++++++++        ++++++++        ++++++++        "<<"\n";
cout<<"   ++++++++        ++++++++        ++++++++        ++++++++        "<<"\n";
}
else
{
cout<<"           ++++++++        ++++++++        ++++++++        "<<"\n";
cout<<"           ++++++++        ++++++++        ++++++++        "<<"\n";
cout<<i;

if (print==0)
cout<<"          ++++++++        ++++++++        ++++++++        "<<"\n";
else
cout<<"                                                           "<<"\n";

cout<<"           ++++++++        ++++++++        ++++++++        "<<"\n";
cout<<"           ++++++++        ++++++++        ++++++++        "<<"\n";
}
cout<<"\n"<<" please enter nimber bettween 1..8 for move horse,c=result,a=ayto move ";
}

//--------------------------------------erase function
void erase(int x,int y)
{
int x2,y2;

x2=(x * 8)+ 4;
y2=(y * 5)+ 6;

gotoxy(x2,y2);      //------------------x,y
textcolor(1);

x=++x;
y=++y;
x2= x % 2;
y2= y % 2;

if (((x2!=0) && (y2==0)) || ((x2==0) && (y2!=0)))
cout<<"        ";
else
cout<<"++++++++";
}





//--------------------------------------draw function
void draw(int x,int y)
{

x=(x * 8)+ 4;
y=(y * 5)+ 6;

gotoxy(x,y);//-------------------------x,y
textcolor(3);
cout<<" Horse  ";
}

//-------------------------------------move_hors function
void movehorse(int key2)
{
switch(key2)
{
case 49://-----------------------------1= up left

if ((y1-2>=0) &&(x1-1>=0)){

erase (x1,y1);
y1=y1-2;
x1=x1-1;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;





case 50://-----------------------------2= up right

if ((y1-2>=0) &&(x1+1<=7)){

erase (x1,y1);
y1=y1-2;
x1=x1+1;
draw (x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;




case 51://-----------------------------3= down left

if ((y1+2<=7) &&(x1-1>=0)){

erase (x1,y1);
y1=y1+2;
x1=x1-1;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;



case 52://-----------------------------4= up right

if ((y1+2<=7) &&(x1+1<=7)){

erase (x1,y1);
y1=y1+2;
x1=x1+1;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;




case 53://-----------------------------5= left up

if ((y1-1>=0) &&(x1-2>=0)){

erase (x1,y1);
y1=y1-1;
x1=x1-2;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;





case 54://-----------------------------6= left down

if ((y1+1<=7) &&(x1-2>=0)){

erase (x1,y1);
y1=y1+1;
x1=x1-2;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;




case 55://-----------------------------7= right up

if ((y1-1>=0) &&(x1+2<=7)){

erase (x1,y1);
y1=y1-1;
x1=x1+2;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;




case 56://-----------------------------8= right down

if ((y1+1<=7) &&(x1+2<=7)){

erase (x1,y1);
y1=y1+1;
x1=x1+2;
draw(x1,y1);
chess[x1][y1]=chess[x1][y1]+1;
}

break;

//--------------------------------------C character = for calculate
case 99:

prnresult();
break;

//--------------------------------------A character= for random(automotic)
case 97:
automove();
break;



break;
}
}
//-------------------------------------print_result function
void prnresult()
{
int x,y,place,move,xp,yp;

place=0;
move=0;

for (x=0;x<8;++x)
  for (y=0;y<8;++y)
    if (chess[x][y]!=0)
    {
    place=place+1;
    move=move+chess[x][y];

    }
gotoxy(67,2);
cout<<"        ";

gotoxy(67,2);
cout<<"move = "<<move;

gotoxy(67,3);
cout<<"        ";

gotoxy(67,3);
cout<<"place = "<<place;

if(move>=1)
{
print=1;
board();

for (y=0;y<8;++y)
for (x=0;x<8;++x)
if(chess[x][y]!=0)
{
xp=(x * 8)+7;
yp=(y * 5)+6;
gotoxy(xp,yp);//----------------------------x,y
cout<<chess[x][y];
}
}
}

//-----------------------------------------auto move function
void automove()
{
int x,y,key,place1,move1,go_out=0;

do{
    do{
     key=random(8);
     }while((key>8) && (key<1));

movehorse(key+48);
place1=0;
move1=0;

for (y=0;y<8;++y)
for (x=0;x<8;++x)
if (chess[x][y]!=0)
{

move1=move1+chess[x][y];
place1=++place1;
}
else
break;

if((place1==64)||(move1>=1000))
{
     prnresult();
     getch();
     getch();

     print=0;
     board();
     draw(x1,y1);
     go_out=1;

     for (x=0;x<8;++x)
   for (y=0;y<8;++y)
     chess[x][y]=0;

     }
     else
     {
     gotoxy(67,3);
     cout<<"        ";
     gotoxy(67,3);
     cout<<" place = "<<place1;
     }
     }
while(go_out==0);
}

//------------------------------------main part

void main()
{
int xx,yy,key1;

for (xx=0;xx<8;++xx)
      for (yy=0;yy<8;++yy)
    chess[xx][yy]=0;

clrscr();
board();
draw(x1,y1);

//-------------------------------------report

do{

    key1=getch();
    gotoxy(75,1);//----------------------x,y
    cout<<key1<<" ";

    if (print==1)
    {
    print=0;
    board();
    draw(x1,y1);
    }

    movehorse(key1);

    }while(key1!=27);

    }

Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sun Jul 10, 2005 2:33 pm    Post subject: Reply with quote

منظورت اینکه به زبان C می خواهی نه C++ درسته ؟؟؟
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sun Jul 10, 2005 3:06 pm    Post subject: Reply with quote

این چیزی که این نوشته هیچ ربطی به سوال نداره بابا
امیر هنوزم می گم می شه ولی بیشتر از یک هفته نه کمتر( حداقل برای من )
Back to top
forouzan
مهمون يكي دو روزه


Joined: 10 Jul 2005
Posts: 6

PostPosted: Sun Jul 10, 2005 5:04 pm    Post subject: Reply with quote

سلام
برنامه رو باید با C++ بنویسید.در ضمن جوابش همینه که بالا دادم ولی باید تغیرات توش بدین.
باشه قبول تا هفته ی دیگه دوشنبه خوبه ، آهان راستی قیمتم بگین زودتر.مرسی.
Back to top
Dr.marmolak
مهمون يكي دو روزه


Joined: 12 Jul 2005
Posts: 3

PostPosted: Tue Jul 12, 2005 12:26 pm    Post subject: Reply with quote

من با 20000 تومان حاظرم
Back to top
forouzan
مهمون يكي دو روزه


Joined: 10 Jul 2005
Posts: 6

PostPosted: Tue Jul 12, 2005 3:19 pm    Post subject: Reply with quote

دکتر جون، من برنامه رو بالا دادم ، فقط میخوام یه تغیرات کوچولو روش بدین.همین.مرسی
Back to top
Dr.marmolak
مهمون يكي دو روزه


Joined: 12 Jul 2005
Posts: 3

PostPosted: Tue Jul 12, 2005 8:11 pm    Post subject: Reply with quote

من برنامه ای بهتر از این می نویسم. و البته کاملتر.
نصفشم رو هم پیش می گیرم.
اگه می خاین شروع کنم.قابله شمارم نداره.
Back to top
Amir
مدير مباحث عمومي سايت


Joined: 30 Nov 2004
Posts: 1088
Location: Age Hammam Nabasham To Lebasamam

PostPosted: Wed Jul 13, 2005 1:50 pm    Post subject: Reply with quote

20 تومن بالاست!
آرش كمتر از اين‌ها راه مي‌ياد ...
Back to top
forouzan
مهمون يكي دو روزه


Joined: 10 Jul 2005
Posts: 6

PostPosted: Tue Jul 19, 2005 4:56 pm    Post subject: Reply with quote

Dr.marmolak wrote:
من برنامه ای بهتر از این می نویسم. و البته کاملتر.
نصفشم رو هم پیش می گیرم.
اگه می خاین شروع کنم.قابله شمارم نداره.


سلام دکتر
باشه قبول، شروع کن برنامه رو بنویس .من برنامه رو تا شنبه صبح میخوام.باشه؟در مورد قیمت و نحوه ی پرداخت هم ایمیل بزن که صحبت کنیم.

forouzan_666@yahoo.com
Back to top
Dr.marmolak
مهمون يكي دو روزه


Joined: 12 Jul 2005
Posts: 3

PostPosted: Wed Jul 20, 2005 10:36 pm    Post subject: Reply with quote

با سلام
چون خیلی دیر جواب دادی قیمت می ره رو 30 تومن چون من یه جمعه بیشتر وقت ندارم .
در مورد بقیه موارد هم باید بگم طبق قوانین سایت عمل می شود . نصف قیمت رو برا آقا وحید ارسال کن . در صورتی که شنبه هفته بعد بخوای می آید رو 20 تومن .
بستگی به خودت داره . لطفا آقا وحید در صورت دریافت پول اطلاع بدهید.
زودتر جواب بده تا دیرتر از این نشه .
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> راهنمايي در پروژه All times are GMT + 3.5 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum