سلام دوستان:
من واسه این برنامه خیلی تلاش کردم اونو میزنم اینجا شاید کسی خواست ازش استفاده کنه
این برنامه برج هانوی به زبان ++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
|