Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2015, 20:14   #1
Slimping
Новичок
Джуниор
 
Регистрация: 13.05.2015
Сообщений: 1
По умолчанию "Ханойские башни", нужны комментарии к коду

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#define MAX 12
#define BegPos 105
#define AuxPos 305
#define EndPos 505

int width;
typedef struct disc
{
char val1[MAX];
char top,pos;
};

void push(disc *tt,int x);
pop(disc *tt);
void tower(int,disc *,disc *,disc *);
void draw_stack(disc *beg,disc *,disc *);
int main(void)
{

int gdriver = DETECT, gmode, errorcode;
int i,x=2;
disc beg,end,aux;
printf(" TOWER OF HANOI");
printf("=========================== ============================");
printf("How Many Disks[1-10]:- ");
scanf("%d",&x);

initgraph(&gdriver, &gmode, "d:\TC\BGI");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
width=50/x;

beg.top=end.top=aux.top=0;
beg.pos=1;end.pos=3;aux.pos=2;

for(i=0;i<x;i++)
push(&beg,(x-i)+1);

draw_stack(&beg,&end,&aux);
tower(x,&beg,&end,&aux);

closegraph();
return 0;
}
void tower(int n,disc *beg,disc *aux,disc *end)
{
if(n>0)
{
tower(n-1,beg,end,aux);
push(end,pop(beg));
draw_stack(beg,end,aux);
tower(n-1,aux,beg,end);
}

}
void push(disc *tt,int x)
{
tt->val1[tt->top]=x;
tt->top++;
}

pop(disc *tt)
{
int a;
tt->top--;
a=tt->val1[tt->top];
tt->val1[tt->top]=0;
return a;
}

void draw_stack(disc *beg,disc *end,disc *aux)
{
int ypos=295,i,height=10,xpos;
int ver=0;
cleardevice();

setfillstyle(1,2);
bar(20,300,580,310);

bar(100,100,110,300);
bar(300,100,310,300);
bar(500,100,510,300);

rectangle(20,300,580,310);

rectangle(100,100,110,300);
rectangle(300,100,310,300);
rectangle(500,100,510,300);

/* END TOWER*/
ypos=295;
if(end->pos==1)
xpos=BegPos;
else if(end->pos==2)
xpos=AuxPos;
else if(end->pos==3)
xpos=EndPos;

for(i=0;i<end->top;i++)
{
setfillstyle(end->val1[i],end->val1[i]);

bar(xpos-(end->val1[i]*width),ypos,xpos+(end->val1[i]*width),ypos-height);

rectangle(xpos-(end->val1[i]*width),ypos,xpos+(end->val1[i]*width),ypos-height);
ypos-=(height+2);
}
ver=end->pos;

/* BEG TOWER*/
if(beg->pos==1)
xpos=BegPos;
else if(beg->pos==2)
xpos=AuxPos;
else if(beg->pos==3)
xpos=EndPos;

ypos=295;
for(i=0;i<beg->top;i++)
{
setfillstyle(beg->val1[i],beg->val1[i]);

bar(xpos-(beg->val1[i]*width),ypos,xpos+(beg->val1[i]*width),ypos-height);

rectangle(xpos-(beg->val1[i]*width),ypos,xpos+(beg->val1[i]*width),ypos-height);
ypos-=(height+2);
}

/* AUX TOWER*/
ver=ver*10+beg->pos;

if(ver<20)
{
if(ver%10==2)
xpos=EndPos;
else
xpos=AuxPos;
}
else if(ver<30)
{
if(ver%10==1)
xpos=EndPos;
else
xpos=BegPos;
}
else if(ver<40)
{
if(ver%10==1)
xpos=AuxPos;
else
xpos=BegPos;
}

ypos=295;
for(i=0;i<aux->top;i++)
{
setfillstyle(aux->val1[i],aux->val1[i]);

bar(xpos-(aux->val1[i]*width),ypos,xpos+(aux->val1[i]*width),ypos-height);

rectangle(xpos-(aux->val1[i]*width),ypos,xpos+(aux->val1[i]*width),ypos-height);
ypos-=(height+2);
}
getch();
}
Slimping вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог игры "2 башни" TopAccount Помощь студентам 3 10.01.2013 16:54
Нужны комментарии к коду ClasterON Microsoft Office Excel 22 25.09.2012 18:43
Ханойские башни student71 Общие вопросы C/C++ 0 03.10.2011 21:52
Ханойские башни fs444 Общие вопросы C/C++ 10 30.03.2010 16:02
Ханойские башни.С++ nN1 Помощь студентам 1 09.11.2009 19:51