- Гильберт қисықтары
Алғашқы ашушының қҧрметіне аталған, Гильберт1 қисықтары (1891 ж.), келесі рекурсивті схемамен қҧрылады:
А[i]: D[i-1] A[i-1] ↓ A[i-1] В[i-1]
B[i]: C[i-1] B[i-1] B[i-1] ↓ А[i-1]
C[i]: B[i-1] C[i-1] C[i-1] D[i-1]
D[i]: A[i-1] ↓ D[i-1] D[i-1] C[i-1]
Жалғанатын кесінділер кӛрсеткілермен белгіленген. 14.10- суретте бірінші, екінші және ҥшінші деңгейлі қисықтар кӛрсетілген. Жҧлдызшалар (*) қисықтардың басталу нҥктелерін кӛрсетеді.

-сурет
Сонымен, әр i-ші деңгейлі қисық, ҥш кесіндімен қосылған, (i-
1) - ші деңгейлі тӛрт қисықтан жасалады. Қисықты қҧрайтын кесінділер, деңгей ӛскенде екі есе кемиді.
Есеп
А[1], А[2], А[3], А[4], А[5] қисықтарын экранда қҧратын программаны жазу керек.
Шешімі
Қисықты қҧру экранның 600*400 нҥктелік аймағында іске асырылады. А[1] кесіндінің ҧзындығы – 70 нҥкте, онда келесі қисықтардың ҧзындықтары: (dl) – 35, 17, 8, 4-ке сәйкес болады.
![]()
1Давид Гильберт (1862-1943) – ҥздік неміс әмбебаб-математигі, кӛптеген математикалық бӛлiмдердің дамуына тҥбегейлi ҥлес енгiзген.
Бірінші қисықтың бастапқы нҥктесінің координаталары 80,140. Әр келесі қисықтың бірінші элементі, алдыңғы қисықтың басынан, 130 нҥктеге оңға қарай орналасқан нҥктеден бастап қҧрылады.
А, В, С, D қисықтарын қҧруын қамтамасыз ететін процедуралар сипатталды дейік. Қисықтың деңгейі – яғни қисықтың dl кесінділерінің ҧзындығы және i айнымалысының мәні – осы процедуралардың кіріс параметрлері болады.
Бҧл жағдайда, негізгі программаның логикасы келесі әрекеттердің бес рет қайталануына тіреледі:
i-ші деңгейлі қисықтың – бастапқы деректерін анықтау;
бейнеленетін қисықтың тҥсін қою;
және А қисығын қҧратын процедураға қатынасу.
Процедуралардың әрқайсысы, Гильберт қисығының анықтамасында келтірілген, сәйкестік қатынастарды іске асырады, яғни i-ң мәнін бірге кемітеді, кіші деңгейлі қисықтарды салатын процедураларға қатынасады және жалғаушы кесінділерді сызады.
Program Krivye_Gilberta; Uses graph;
Var x,y,n,i,k,cd,gm: Integer; Procedure D(i,dl:Integer); Forward; Procedure B(i,dl:Integer); Forward; Procedure C(i,dl:Integer); Forward;
Procedure A(i,dl:Integer); {А қисығы}
Begin
if i
Begin
Dec(i);
D(i,dl); linerel(-dl,0);
A(i,dl); linerel(0,dl);
A(i,dl); linerel(dl,0); B(i,dl);
End;
End;
Procedure B(i,dl:Integer); {В қисығы}
Begin
IfiBegin
Dec(i);
C(i,dl); linerel(0,-dl);
202