-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDrakonDi.pas
68 lines (60 loc) · 1.8 KB
/
DrakonDi.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{ MK 2001 }
{ Mantas Kanaporis }
{ Vilniaus Ïemynos gimnazija }
{ -------------------------- }
{ VII skyrius }
{ 3 uØdavinys }
program Drakonas;
uses
graph;
Const
cx = 400; { centro koordinatÓ }
cy = 350; { centro koordinatÓ }
ln = 1; { linijos ilgis }
l = 18; { laipsnis, max 31 }
kryptys : array [0 .. 3, 0 .. 1] of shortint = { judÓjimo kryptys }
((0, -ln), (-ln, 0), (0, ln), (ln, 0));
var
x, y, { linijos pabaigos koordinatÓs }
gm, gd : integer;
ck, { pagalbinis ciklo kintamasis }
sk, { nagrinÓjamas skaiÑius }
n : longint; { kuria kryptimi brÓÕim linijÐ }
{ Funcija randa laipsnÔ, kuriuo pakÓlus 2, rezultatas butu kiek galima
maØiau didesnis arba lygus pradiniui duomeniui }
function didz (sk : longint) : longint;
var
pg : longint;
begin
pg := 1;
while sk div pg > 0 do
if sk = pg then break
else pg := pg shl 1;
didz := pg;
end;
begin
initgraph (gd, gm, '');
setcolor (7);
x := cx;
y := cy;
moveto (x, y);
sk := 1 shl (l - 1); { kiek viso skaiÑiu sudarys l laipsnio kreivÒ }
for ck := 1 to sk do
begin
sk := ck;
n := 1;
{ skaiÑiavimas ck elemento krypties }
while sk <> 1 do
begin
sk := didz (sk) - sk + 1;
inc (n)
end;
n := (n - 1) mod 4;
{ pieÕimas }
x := x + kryptys [n, 0];
y := y + kryptys [n, 1];
lineto (x, y);
end;
repeat until port [$60] = 1; { laukiama Esc paspaudimo }
closegraph;
end.