IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> ханойские башни, помогите, выдает ошибку
Юрий
сообщение 17.12.2005 7:29
Сообщение #1


Гость






в паскале я неочень силен, при запуске выдает ошибку "дивизион бай зиро", в чем ошибка? и как сделать чтоб после окончания перекладки колец он выдал число операций перекладки колец, помогите пожалуйста.
 

program Hanoy;
uses Crt,Graph;
type ArrType =array [1..1] of byte;
var Col,
Beg,End_ :byte;
Arr :^ArrType;
i,j :integer;
procedure GraphInit;
var GrDr,GrMode:integer;
begin
GrDr:=Detect;
GrMode:=0;
InitGraph(GrDr,GrMode,'');
end;
procedure DrawRings;
var a,b,c:byte;
begin
ClearDevice;
SetColor(White);
Line(100,200,100,400);
Line(300,200,300,400);
Line(500,200,500,400);
Line(50,400,550,400);
SetFillStyle(SolidFill, Red);
SetColor(Yellow);
j:=0;a:=0;b:=0;c:=0;
for i:=1 to Col do
case Arr^[i] of
0:Inc(a);
1:Inc(b);
2:Inc©;
end;
for i:=1 to Col do
begin
case Arr^[i] of
0:begin
Bar(100+Arr^[i]*200-i*5,400-a*5,100+Arr^[i]*200+i*5,400-a*5-5);
Rectangle(100+Arr^[i]*200-i*5,400-a*5,100+Arr^[i]*200+i*5,400-a*5-5);
Dec(a);
end;
1:begin
Bar(100+Arr^[i]*200-i*5,400-b*5,100+Arr^[i]*200+i*5,400-b*5-5);
Rectangle(100+Arr^[i]*200-i*5,400-b*5,100+Arr^[i]*200+i*5,400-b*5-5);
Dec(b);
end;
2:begin
Bar(100+Arr^[i]*200-i*5,400-c*5,100+Arr^[i]*200+i*5,400-c*5-5);
Rectangle(100+Arr^[i]*200-i*5,400-c*5,100+Arr^[i]*200+i*5,400-c*5-5);
Dec©;
end;
end;
end;
if ReadKey=#27 then begin
CloseGraph;
halt(1);
end;
while KeyPressed do Readkey;
end;
procedure PrintQuant(c,b,e:byte);
begin
Arr^[c]:=e;
DrawRings;
end;
procedure Move(c,b,e:byte);
begin
if c=1 then PrintQuant(c,b,e)
else
begin
Move(c-1,b,3-b-e);
PrintQuant(c,b,e);
Move(c-1,3-b-e,e);
end;
end;
begin
GraphInit;
Beg:=0;
End_:=2;
Col:=10;
GetMem(Arr,Col);
for i:=1 to Col do
Arr^[i]:=Beg;
DrawRings;
Move(Col,Beg,End_);
Freemem(Arr,Col);
CloseGraph;
end.



см. Ханойские башни ( http://forum.pascalnet.ru/index.php?showtopic=9254 )

Сообщение отредактировано: Altair - 10.02.2006 12:43
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
-Volvo-
сообщение 17.12.2005 10:56
Сообщение #2


Гость






А по поводу
Цитата(Юрий @ 17.12.2005 7:29)
как сделать чтоб после окончания перекладки колец он выдал число операций перекладки колец

{ Глобальная переменная }
Var
CountMoves: LongInt; { в начале программы присвоить 0 }
...
procedure PrintQuant(c,b,e:byte);
begin
Arr^[c]:=e;
DrawRings;
Inc(CountMoves); { Увеличиваем счетчик передвижений дисков }
end;
...

ну, и в конце программы распечатать CountMoves или еще в графическом режиме (перед CloseGraph, используя OutTextXY), или закрыть графику, и напечатать
Writeln(CountMoves, ' перекладок колец');
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 10:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"