تبليغاتX
یافته های من در علم کامپیوتر - برج هانوی
به نام خداوند جان و خرد که از این برتر اندیشه بر نگذرد
 برج هانوی
سلام دوستان:

من واسه این برنامه خیلی تلاش کردم اونو میزنم اینجا شاید کسی خواست ازش استفاده کنه

این برنامه برج هانوی به زبان ++c که خودم برای ایجاد گرافیکش خیلی تلاش کردم گرافیکی و کامله امیدوارم مفید باشه

 

 

#include
#include
#include
#include
#include
int a1,a2,n1;
class s2{int *a,*c;
   public:
void graph(int n,int a[20]);
void drow(int *a,int*c);
void subt1(int n,int a[20],int c[20],int b[20]); };
void s2::graph(int n, int a[20]){
int f=n1*20+20;
   int stangle = 0, endangle = 360;
   int xradius = f, yradius = 10;
   int gdriver = DETECT, gmode, errorcode;
   int midx, midy, i;
   initgraph(&gdriver, &gmode, "");
   errorcode = graphresult();
   if (errorcode != grOk) {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);}
   midx = getmaxx() / 2;
   midy = getmaxy() / 2;
      setfillstyle(1,2 ) ;  setcolor(2);
      bar(midx-600, midy+145, midx+650,
  midy+150);
      bar(midx-220, midy-300, midx-225,
  midy+150);
     bar(midx-5, midy-300, midx,
  midy+150);
     bar(midx+225, midy-300, midx+220,
  midy+150);  a1=20;
  for(i=1;i<=n;i++)
  {    fillellipse(midx-220, midy+150-a1,
    xradius-a1, yradius); a[1]=i;a1+= 20;}getch();
}
void s2::drow(int *a,int*c){int f=n1*20;
   int stangle = 0, endangle = 360;
   int xradius=f , yradius = 10;
  int   midx = getmaxx() / 2,
   midy = getmaxy() / 2;
setcolor(0); setfillstyle(0,0);
  a1=(*(a+1))*20-20;a2=*(a+2)*20-20; if(a1<0)a1=0;
  *(a+1)=*(a+1)-1;
   fillellipse(midx+*(a+0), midy+130-a1,
    xradius-a2, yradius);

    setcolor(2);
    setfillstyle(1, 2);
     bar(midx-600, midy+145, midx+650,
  midy+150);
      bar(midx-220, midy-300, midx-225,
  midy+150);
     bar(midx-5, midy-300, midx,
  midy+150);
     bar(midx+225, midy-300, midx+220,
  midy+150); a1=(*(c+1))*20;if(a1<0)a1=0;(*(c+1))+=1;
     *(c+12)=*(c+11); *(c+11)=*(c+10); *(c+10)=*(c+9); *(c+9)=*(c+8); *(c+8)=*(c+7); *(c+7)=*(c+6);  *(c+6)=*(c+5);*(c+5)=*(c+4);*(c+4)=*(c+3);*(c+3)=*(c+2);*(c+2)=*(a+2);
 *(a+2)=*(a+3); *(a+3)=*(a+4);*(a+4)=*(a+5);*(a+5)=*(a+6);*(a+6)=*(a+7);*(a+7)=*(a+8);*(a+8)=*(a+9);*(a+9)=*(a+10);*(a+10)=*(a+11);*(a+11)=*(a+12);*(a+12)=*(a+13);

       fillellipse(midx+*(c+0), midy+130-a1,
    xradius-a2, yradius);getch();

}
void s2::subt1(int n,int a[20],int b[20],int c[20])
{ int *q1,*q2;
   q1=a;q2=c;
 if(n==1)
drow(q1,q2);
else{ subt1(n-1,a,c,b);
drow(a,c);
 subt1(n-1,b,a,c);}
    }
int main(void)
{ int a[20],b[20],c[20];
   s2 bp;  int n;
 a[0]=-220;
 b[0]=-5;
 c[0]=225;
 a[1]=0;
 b[1]=0;
 c[1]=0;
 for(int i=2;i<20;i++){
 a[i]=0;
 b[i]=0;
 c[i]=0;}
 cout<<"enter a number for number of disk:";
    cin>>n;
    int y=n;
    for(i=2;i<=n+2;i++){
    a[i]=y;y--;}
    n1=n;
   bp.graph(n,a);
 bp.subt1(n,a,b,c);
      getch();
   closegraph();
   return 0;
 }

|+| نوشته شده توسط گرد آفرید در سه شنبه سی و یکم اردیبهشت 1387  |
 
 
بالا