Procedure middle (kiruvchi parametr bo’lib massiv uzunligi hizmat qilishi kerak k: integer; chiquvchi parametrlar – massiv va “o’rta” element nomeri);
var
l, r : integer; {Elementlarning chap va o’ng nomerlari}
begin
Elementlarning chap va o’ng nomerlariga boshlang’ich qiymatlar 1 va k ni (massiv uzunligini) berib qo’yish kerak.
Asosiy yoki tashqi sikl o’ng va chap indekslari nomerlari o’zaro teng bo’lib qolgunicha davom etishi kerak (l = r), demak tashqi sikl repeat ni tashkil etish kerak.
So’ngra o’ng tomondan boshlab elementlarni ko’rib chiqish sikli bo’lishi kerak, u chap element o’ng elementdan kichik yoki teng bo’lguncha davom etishi, shu bilan bir qatorda chap indeks nomeri o’ngidan kichik bo’lishi kerak, bu yerda quyidagi sikl o’rinli:
while (x[l] <= x[r]) and (l < r) do
(Siklda o’ng element indeksini kamaytirib, o’rtaga siljib borish kerak) r := r – 1.
O’ngidan katta bo’lgan chap element topilishi bilan, bu elementlarning o’rnini almashtirish kerak. Buning uchun esa elementlarning o’rnini almashtrish prosedurasiga murojaat etish kerak, uni asosiy dasturda exchange (almashuv) deb ataymiz;
Almashtirishdan so’ng, o’ng tomondagi elementlarni ko’rib chiqish kerak, buning uchun ham “bo’lguncha” siklini tashkil qilamiz:
while (x[l] <= x[r]) and (l < r) do.
Siklda elemntlarni ko’zdan kechirgan holda chapdan o’ngga siljish, buning uchun esa chap element indeksini l := l + 1 ga oshirish kerak.
Agar o’ngidan katta bo’lgan chap element topilsa, ularning o’rnini almashtirish kerak.
Almashtirish prosedurasiga yana murojaat qilamiz.
Tashqi sikl: until l = r sharti bilan tugaydi.
Dastur
Program L196; {Massivning “o’rta” elementini qidirish}
uses Crt;
const
n = 20;
type
t = array[1..n] of integer;
Do'stlaringiz bilan baham: |