if n=
0
then begin
line(round(x),round(y),round(x+d/
2
), round(y-d*sqrt(
3
)/
2
));
line (round(x+d/
2
),round(y-
d*sqrt(
3
)/
2
),round(x+d),round(y));
line (round(x),round(y),round(x+d),round(y));
and else begin
Sierp_Tr(x,y,d/
2
,n-
1
);
Sierp_Tr(x+d/
2
,y,d/
2
,n-
1
);
Sierp_Tr(x+d/
4
,y-d*sqrt(
3
)/
4
,d/
2
,n-
1
);
end;
end;
var n:
integer
;
gd,gm:
integer
;
begin
readln(n);
gd:=detect;
InitGraph(Gd,Gm,
'c:\lang\bp\bgi'
);
if GraphResult<>grOk
then
exit
;
Sierp_Tr(
70.0
,
475.0
,
500.0
,n);
readkey;
closeGraph;
end.
3.3.3. Ajdarxo siniqligi
Nolinchi tartibli Ajdarxo siniqligi – bu kesma. n (n>=1) tartibli Ajdarxo siniqligi n-1
tartibli Ajdarxo siniqligidan quyidagicha olinadi: chiziq ikkiga “ajratiladi” va ularning bir qismi
joyida qoladi, ikkinchisi esa (n-1) – tartibli aniqlikning dumiga nisbatan soat strelkasiga qarshi
90◦ buriladi(3.3 -rasm).
3.3 rasm. N-1 tartibli siniqlik bo‘yiga n- tartibli ajdarxo siniqligini tuzish.
0,1,2,3,4 tartibli ajdarxo siniqliklari 3.4 –rasmda tasvirlanga.
3.4 –rasm . 0,1,2,3 va 4 tartibli ajdarxo siniqliklari .
3.5 – masala. Ajdarxo siniqligini tuzuvchi dasturni yozing.
Masalaning tahlili. Ta’rif bo‘yicha, 0 tartibli siniqlik - bu oddiy vertikal birlik kesma
(rasmdan yuqoriga chizilgan), n tartibli siniqlik esa (n-1) - tartibli ikkita siniqlikdan tashkil
topgan. Xulosa chiqarish mumkin, n (n≥1) tartibli siniqlikni tuzish uchun
dragon(n-1); TurnRight(90); dragon(n-1);
Harakatlarining ketma–ketliklarini bajarishi kerak. Biroq, bunday sodda yondashish
muvaffaqiyatga olib kelmaydi (avvalo, o‘zingiz tushunishga urinib ko‘ring – bunday rekursiya
natijasida nima bo‘ladi). 0 va 1 tartibli siniqliklar to‘g‘ri tuziladi, biroq 2 tartibdan boshlab zarur
bo‘lmagan narsalar boshlanadi. Aynan n≥2 2
n-2
ga marta aylantirib chizilgan birlik kvadrat
olamiz. Buni kutish mumkin edi: yoritilgan sodda yondashishda faqat o‘ngga burilishlardan bor,
tartibli to‘g‘ri siniqliklarga esa –chapga burilishlar ham, o‘ngga burilishlar ham bor. Qachon
o‘ngga va qachon chapga burilishni tushunish maqsadida 3.3 –rasmga qaraylik. N-tartibli
siniqlikni chizish A da B orqali tartibida ro‘y beradi, ya’ni ikki etapdan tashkil topadi: A dan B ga
va B dan A ga. O‘z –o‘zidan ayon bo‘lgan – siniqlik boshi va dumi terminlarni kiritamiz;
boshidan dumga bo‘lgan yo‘nalishni to‘g‘ri, dumdan boshga yo‘nalishni esa –teskari deb
ataymiz. Shunday qilib, oldin keltirilgan sodda yondashuvni aniqlashtiramiz: n (n≥1) tartibli
siniqlikni (to‘g‘ri tartibda) tuzish uchun n-1 tartibli siniqlikni boshidan dumigacha chizib, o‘ngga
burilib keyin (n-1) tartibli teskari siniqlikni chizish kerak. Boshdan dumgacha chizish va dumdan
boshgacha chizish bir –biridan nima bilan farq qilishini aniqlashtiramiz. 3.3-rasmda ushbu
tuzilishlar bitta aylanish bilan farq qiladi, bunda birikish nuqtalarida siniqliklar n-2 tartibida
bo‘lgan barcha tartiblar uchun bu vaziyatda shunday bo‘lishiga ishonch hosil qilaylik.
Trayektoriyaning bitta burilishi bir yo‘nalishda – o‘ngda, teskari yo‘nalishda – chapda bo‘ladi.
Shuning uchun n-2 tartibli siniqliklarning birikish nuqtalarida burilishlar hamma vaqt qarama -
qarshi bo‘ladilar. Qolgan qismlari farq qilmaydi, chunki istalgan tartibli siniqlik n-2 tartibli
to‘rtta qismga bo‘linadi. Ularning birinchisi boshidan dumga, ikkinchisi – aksinchasiga to‘g‘ri
keladi.
Uchinchsi bilan shug‘ullanamiz.
n-2 tartibli uchinchi siniqlik bilan teskari
(n-1) – tartibli siniqlik
boshlanadi. Biroq, (n-1) tartibli siniqlik, agarda boshida dumgacha o‘tsak, n-2 tartibli teskari
siniqlik bilan tugaydi, demak, qaralayotgan uchinchi qism teskariga hisoblanadi, ya’ni boshidan
dumgacha o‘tadi. Anologik ravishda to‘rtinchi qism ham teskari hisoblanadi. Shunday qilib, n-1
(n≥2) tartibli siniqlikning tashkil etuvchilari faqat
n-2 tartibli siniqliklarni bog‘lovchi burilish
yo‘nalishlari bilan farq qiladilar.
3.5 –rasm.10 darajali Ajdarxo siniqligi
Nihoyat, yechimga “odatiy” grafika yordamida ikkita yondashuvni qarab chiqamiz.
Hammasidan oddiysi x-, y- koordinatalarni va yo‘nalishni saqlaydigan global o‘zgaruvchilar
bilan ishlash toshbaqacha grafikani emulsiya hisoblanadi.
“Odatiy” grafikada prinsip jihatdan farq qiluvchi boshqa yondashuvni ham amalga
oshirish mumkin: AB ni tuzib, nuqtaga sakrab o‘tiladi va ning boshidan B ning dumiga tuziladi.
Biroq buning uchun siniqlikning birinchi kesmasining yo‘nalishini hisoblash kerak; bu esa
toshbaqacha grafikasi emulsiyalashga qaraganda qiyinroq ekan.
Mashqlar
3.1 n natural sonning o‘nlik yozuvi raqamlari qiymatlarining summasini ifodalovchi
funksiyaning ta’rifi berilsin.
3.2 integer tipidagi son o‘nlik raqamlarini chop qilishning rekursiv protsedurasi yozilsin:
kerak razryadlardan boshlab teskari yo‘nalishda;
katta razryaddan boshlab odatiy yo‘nalishda.
3.3 “Mak-Kartinit 91 – funksiyasi” F quyidagicha berilsin: F(n)=n-10 n>100 da, n≤100 da esa
F(n)=F(F(n+1)). Norekursiv ta’rifi berilsin. n< 200 da F(n) ni hisoblashning funksiyasini
yozing (Paskal tilida).
3.4. Uzunliklari m va n bo‘lgan a va b qatorlar yozilgan. Ularning simvollarining umumiy
ketma–ketliklarining maksimal uzunligini topish talab etilmoqda (“eshak”qatorlari uchun – 3
uzunlikdagi “oyo‘l”). L
m,n
kattalik singari izlanayotgan uzunlikni hisoblashning quyidagi
rekursiv
usulini
qarab
chiqamiz
va
qatorlar
boshi
ucun
izlanayotgan
uzunlik
. Nima uchun rekursiv funksiyaning bevosita amalga oshirishning ushbu
usuli –aqlsizlik?
3.5. Rekursiyadan foydalanmasdan 3.1- masala yechilsin.
3.6. 3.5 – va 3.6- listinglardagi dasturostilarni qarab chiqamiz. Unga bir xil harakatlar uch
martadan takrorlanadigan fragmentlar for i=1 to 3 do … ko‘rinishdagi sikllar bilan almashtirish
mumkinmi? Buning uchun qandaydir qo‘shimcha shartlar talab etiladimi?
3.7. Rekursiv bo‘lmagan va juda oddiy bo‘lgan Ɵ(2
n
) xotira hajmini talab etuvchi Ajdarxo
siniqlarini ( 3.3 –rasmga qarang ) tuzishning usulini taklif qiling.