Dinamik xotira haqida
# include direktivasining yana shunday protseduralari mavjudki, ular yordamida chizmalarni ekran bo’ylab xarakatga keltirish mumkin. Figuralarni xarakatga keltirishning bir necha usullari bor. Ulardan biri xarakatni takrorlanish buyrug’i orqali tashkilkilishdir. Ikkinchi usul ekranda chizilgan chizma joylashgan soxani massiv ko’rinishida eslab qolib, uni maxsus protsedura yordamida ekranning kerakli nuqtasiga ko’chirishdir. Bunda dinamik xotiradan foydalaniladi. Katta miqdordagi ma’lumotlar ishlatiladigan masalalarni yechishda, kompyuterning grafik imkoniyatlaridan foydalanganimizda xotira xajmi yetishmasligi mumkin. Bunday xollarda dinamik xotira juda qo’l keladi. Dinamik xotira bu kompyuterning dasturga ma’lumotlar segmentidan tashkari yuklatilgan tezkor xotiradir. Bu xotira taxminan 200-300 Kb ni tashkil qiladi. Dinamik xotiradan foydalanish uchun ko’rsatkichlar ishlatiladi. Bu o’zgaruvchilarni (kursatkichlarni) xotirada joylashtirishni kompilyator amalga oshiradi. Kursatkich shunday o’zgaruvchiki, uning qiymati o’zgaruvchi qiymatiga emas, balki shu o’zgaruvchi joylashgan xotira adresiga tengdir. Dinamik xotira soxasidan joy ajratish uchun new operatori ishlatiladi. Bu suzdan keyin xotiraga joylashtiriladigan ob’ektti pi aniqlanadi. Masalan: new int; deb yozsak, dinamik xotiradan 2 bayt joy ajratgan bo’lamiz. Masalan: int *p; p = new int; yoki int *p = new int ; Ajratilgan xotira soxasiga biror qiymatni joylashtirish mumkin: *r = 750 ; Bu yozuvni quyidagicha o’qiladi: « r ko’rsatkichida adresi saqlanayotgan xotiraga 750 sonini yozing ». Dinamik xotira soxasi chegaralangan, u to’lib qolganda new operatori orqali joy ajratish xatolikka olib keladi. Bu xolni biz xotiraning to’lib ketishi yoki oqib ketishi deymiz (utechka pamyati). Shuning uchun xotira boshqa kerak bo’lmasa uni bo’shatish zarurdir. Buni delete operatori yordamida bajariladi. Masalan: delete p;
Ekranda chizmalarni xarakatlantirish
Ekranda chizmalarni xarakatlantirish uchun kerak bo’ladigan protseduralar:
1. imagesize (x1, y1, x2, y2) – ekranning chap yuqori nuqtasi va o’ng pastki nuktasi koordinatalaridan to’g’ri turtburchakli soxani saqlash uchun kerak bo’ladigan xotiraning o’lchami (baytlarda olinadi);
2. getimage (x1, y1, x2, y2, p) – dinamik xotiraning berilgan r maydonida tug’ri turtburchakli tasvirni saqlash. Bu yerdar – tasvir saqlanadigan joyning adresini saqlaydigan o’zgaruvchi, ya’ni kursatkich.
3. putimage (x, y, p, m) – ekranning berilgan joyiga tasvirni chiqarish; bu yerda x va y – xotiraning p maydonidagi tasvirdan nusxa ko’chiriladigan ekran maydonining chap yuqori nuqtasi; m – tasvirni ekranga chiqarish rejimi. Agar: m = 0 (Normal Put) – tasvirni kuchirish. Bunda eskisi o’chib, yangisi paydo bo’ladi (xuddi yurib ketayotgandek) m = 1 (XorPut) m = 2 (Orput) – m = 3 (AndPut) Masalan: quyidagi dasturda kvadrat ichidagi bo’yalgan aylana ekran bo’ylab xarakatlanadi.
Do'stlaringiz bilan baham: |