سلام من برنامه برج های هانوی را در c++ میخواهم که وقتی خروجی میگری به صورت گرافیکی هم نشان دهد. در ضمن اگر کسی از دوستان بلده من تا 10 خرداد بیشتر وقت ندارم.از کمک همه شما متشکرم. ;)
Printable View
سلام من برنامه برج های هانوی را در c++ میخواهم که وقتی خروجی میگری به صورت گرافیکی هم نشان دهد. در ضمن اگر کسی از دوستان بلده من تا 10 خرداد بیشتر وقت ندارم.از کمک همه شما متشکرم. ;)
سلام عسل جان اينم جوابت فكر نكنم مشكلي داشته باشه.
قربانتکد:#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <cmath>
typedef char* Peg;
void move(Peg A, Peg B);
void transfer(size_t N, Peg A, Peg B, Peg C);
void get_disk_num(int &iNum);
int main()
{
while(1)
{
std::cout << "\t\t\tHanoi Towers Puzzle Solver" << std::endl << std::endl;
std::cout << "Enter number of disc on the first peg (enter -1 to quit): ";
int iDiskNum, iStepNum;
get_disk_num(iDiskNum);
if(iDiskNum == -1)
{
std::cout << "hope you enjoyed using these program!" << std::endl;
break;
}
else
{
iStepNum = pow(2, iDiskNum) - 1;
std::cout << "the shortest solution can be reach in " << iStepNum << " steps" << std::endl;
std::cout << "press any key to show the solution...";
getch();
std::cout << std::endl;
transfer(iDiskNum, "Peg1", "Peg2", "Peg3");
system("pause");
system("cls");
}
}
return 0;
}
// tedade jabejayi diskha
void move(Peg A, Peg B)
{
std::cout << "move top most disc from " << A << " to " << B << std::endl;
}
// chegonegiye harekate diskhara namayesh midahad
void transfer(size_t N, Peg A, Peg B, Peg C)
{
if(N > 0)
{
// enteghale avalin N - 1 disk be "B"
transfer(N - 1, A, C, B);
// enteghale akharin disk be "C"
move(A, C);
// enteghale dickhaye "B" be"C",
transfer(N - 1, B, A, C);
}
}
void get_disk_num(int &iNum)
{
std::cin >> iNum;
if(iNum != -1 && iNum < 1)
{
std::cout << "please notice that the number of disc needs to be an integer bigger than 0" << std::endl;
std::cout << "number of disc on the first peg: ";
get_disk_num(iNum);
}
}
سلام . اين برنامه كه نوشتيد به روش بازگشتيه يا غير بازگشتي ؟
برنامه بازگشتی برنامه ایه که خودش رو صدا بزنه
به طور مثال تو قسمت getdisc تابع خودش رو صدا زده
پس برنامه بازگشتیه
سلام دوستان
من الگوریتم برج های هانوی رو با یکی از روش های جستجو میخوام واگر الگوریتم رو به زبان c# بفرستید ممنون میشم
:11:
منم همچين سوالي مثل عسل برام پيش اومده ميخوام جوابي كه داده شده ببينمنميدونم چكار كنم؟
من برنامه ي برجهاي هانو رو دارم وپايين اونو نوشتم:
مشكلم اينه كه قسمت اول اونو نميفهمم:
قسمتهاي *دارو نميفهمم .يعني چي؟
#include <iostream.h>
#include <conio.h>
void hanoi(int n,int a,int b,int c,int d)
{
if (n==1); *
cout<< a<<"->"<<d<<endl; *
{if (n>1); *
{
hanoi (n-1,a,c,d,b); *
hanoi (n-1,b,a,d,c); *
cout<< a<<"->"<<d<< endl; *
hanoi(n-1,c,a,b,d); *
}
}
}
void main()
{ int n;
cin>>n;
hanoi (n,1,2,3,4);
getch();
}
:42: بچه ها الگوريتم و توضيحات كامل برجهاي هانو رو هرچه سريعتر برام بفرستيد.يهجوري كه بفهمم ساده ومفيد.
من خيلي نيازمندم.
باتشكر.
:41:برنامه برج هاي هانو با4 حلقه وبا توضيحات كاملالگوريتم
راستي بچه ها يه سوال چرا وقتي تابع فاكتوريل و با اعداد بزرگ انجام ميديم error ميده؟
* یعنی اشاره گر مثلا int* x; یعنی ایکس یه اشاره گر هست که میتونه ادرس متغیر از نوع اینت رو در خودش ذخیره کنه. مثلاx=&y; که ایگرگ یک متغییر عادی از نو ع اینت هست ونه اشاره گر.
حله؟
الگوریتم برج های هانوی هم اینجوریه:
اگه حلقه ها دو تا باشن از برج اول خالی کنید رو دومی بعد اونی که تو برج اول مونه رو تو سومی بریزد و بعد اوی که تو دومین برجرو تو سومی بریزید یعنی اگه دو تا حلقه داشته باشیم سه تا مرحله میشه. حالا اگه سه تا حلقه باشن دو تای اولی رو با سه تا حرکتی که گفتم میریزید تو دومی بعد بزررگترین حلقرو که الان تو اولین برجرو میریزید تو سومین برج و بعد دو تایی که تو دومین حلقه بود رو باسه مرحله میریزید تو سومین برج.
یعنی 7 مرحله در کل برای x تا حلقه به (دو به توان x منهای یک) مرحله نیاز داریم. الگوریتمش مشخصه دیگه!!حله؟:31:
سلام
شما در مورد ساختمان داده چیزی میدونید در مورد چیه؟
نه فعلا درسشو پاس نکردیم فکر کنم ترم بعدی باید برش دارم .
سلام
اینم حل برنامه برج هانوی ، ساده ساده میگی نه نگاه کن :20::46:
__________________________________________________ _____
#include <iostream.h>
#include <conio.h>
//-------------- hanoi function -----------------------
int counter=0;
void hanoi(int n,int a,int b,int c)
{
counter ++;
if (n==1)
cout<< a <<" -> "<< c <<endl;
else
{
hanoi (n-1,a,c,b);
cout<< a <<" -> "<< c << endl;
hanoi (n-1,b,a,c);
}
}
//-------------- main function -----------------------
int main()
{ int n;
cout<< " please enter disk number : ";
cin>>n;
cout << "execution with "<< n <<" disk: "<<endl<<endl;
hanoi (n,1,2,3);
cout<< endl <<"******** executed in " <<counter <<" step. ********"<< endl;
getch();
return 0;
}
__________________________________________________ _______
امیدوارم مفید باشه . :20::11::11::11::11::11::11::11::11:
اگر ممكن درمورد حل اين برج هانوي بيشتر توضيح بديد
سلام کسی میدونه برج هانوی گرافیکی چطوری درست میشه؟
لطفا هر چه سریعتر جواب بدید!:41:
ترم 1 برای دکتر شیری این رو نوشتیم،یادش به خیر،استاد خوبی بود:دی:
کد:#include <stdio.h> #include <dos.h> #include <conio.h> int counterL,counterR=0,counterC=0; void paye(); void mile(); void mohre(int n); void transfer(int n, char from, char to, char temp); void counter(char from,char to); void move(int n,char from,char to,int counterL,int counterC,int counterR); void pak(int n,int x,int y); void chap(int n,int x,int y); void main() { int n; printf("chand disk?" ); printf("[0<n<11]"); scanf("%d",&n); if(n>10||n<1) {printf("tedad eshtebah ast\n"); getch(); } else { counterL=n; textbackground(7); clrscr(); mile(); paye(); mohre(n); printf( "\n" ); transfer(n,'L','R','C'); getch();} } /*end main*/ void transfer( int n, char from, char to, char temp) { if (n > 0) { transfer(n-1, from, temp,to); counter(from,to); move(n,from,to,counterL,counterC,counterR); transfer(n-1,temp,to,from); } return; } /*end transfer*/ void paye() { for(int i=5;i<=75;i++) {if(i>=5&&i<=25) {gotoxy(i,23); textcolor(4); cprintf("%c",219);} else if(i>=30&&i<=50) {gotoxy(i,23); textcolor(4); cprintf("%c",219);} else if(i>=55&&i<=75) {gotoxy(i,23); textcolor(4); cprintf("%c",219);}} } /*end paye*/ void mile() { for(int i=10;i<=22;i++) {gotoxy(15,i); textcolor(12); textbackground(4); cprintf("%c",'|');} for(int i=10;i<=22;i++) {gotoxy(40,i); textcolor(12); textbackground(4); cprintf("%c",'|');} for(int i=10;i<=22;i++) {gotoxy(65,i); textcolor(12); textbackground(4); cprintf("%c",'|');}} /*end mile*/ void mohre(int n) { int x,y=22; x=15-n; for(int i=n;i>=1;i--) {gotoxy(x,y); for(int j=2*i+1;j>=1;j--) {textcolor(1); cprintf("%c",219);} x++; y--;} mile(); } /*end mohre*/ void counter(char from,char to) { switch(from) { case 'L':counterL--;break; case 'R':counterR--;break; case 'C':counterC--;break;} switch(to) { case 'L':counterL++;break; case 'R':counterR++;break; case 'C':counterC++;break;} } /*end counter*/ void move(int n,char from,char to,int counterL,int counterC,int counterR) {int x,y,x1,y1,x2; switch(from) { case 'C':x=40-n;y=22-counterC;pak(n,x,y);break; case 'L':x=15-n;y=22-counterL;pak(n,x,y);break; case 'R':x=65-n;y=22-counterR;pak(n,x,y);break;} switch(to) { case 'C':x1=40-n;y1=23-counterC;break; case 'L':x1=15-n;y1=23-counterL;break; case 'R':x1=65-n;y1=23-counterR;break;} while(y>=10) {y-=1; chap(n,x,y); sleep(0.5); pak(n,x,y);} //------------------------------------------------------------ x2=x1-x; if(x2>0) {for(int i=1;i<=x2;i++) {chap(n,x,y); sleep(0.25); pak(n,x,y); x+=1;}} //------------------------------------------------------------- else{ for(int i=1;i<=-x2;i++) {chap(n,x,y); sleep(0.25); pak(n,x,y); x-=1;}} //--------------------------------------------------------------- while(y<y1) {y+=1; chap(n,x,y); sleep(0.5); pak(n,x,y);} switch(to) { case 'C':x1=40-n;y1=23-counterC;chap(n,x1,y1);break; case 'L':x1=15-n;y1=23-counterL;chap(n,x1,y1);break; case 'R':x1=65-n;y1=23-counterR;chap(n,x1,y1);break;} } /*end move*/ void pak(int n,int x,int y) { for(int i=1;i<=2*n+1;i++) {gotoxy(x,y); textcolor(7); cprintf("%c",219); x++;}} /*end pak*/ void chap(int n,int x,int y) { for(int i=1;i<=2*n+1;i++) {gotoxy(x,y); textcolor(1); cprintf("%c",219); x++; } mile(); } /*end chap*/