• 1-BOSQICH AKT-11-22-GURUH TALABASINING “ Dasturlash ” FANIDAN TAYYORLAGAN 5-MUSTAQIL ISHI Bajardi: Tilakov J
  • O’zbekiston respublikasi axborot texnologiyalari va kommunikatsiyalarini rivojlantirish vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali kompyuter injiniringi fakulteti




    Download 25.26 Kb.
    Sana20.04.2024
    Hajmi25.26 Kb.
    #202399
    Bog'liq
    Dasturlash” fanidan tayyorlagan-fayllar.org
    Bituruv oldi amaliyoti 070-19, Findbugs vositasi yordamida Java kodidan baglarni aniqlash-fayllar.org, O�zbekiston respublikasi axborot texnologiyalari va kommunikatsi

    Dasturlash” fanidan tayyorlagan

    O’ZBEKISTON RESPUBLIKASI
    AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI
    RIVOJLANTIRISH VAZIRLIGI
    MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
    QARSHI FILIALI

    KOMPYUTER INJINIRINGI FAKULTETI
    1-BOSQICH AKT-11-22-GURUH TALABASINING
    Dasturlash
    FANIDAN TAYYORLAGAN

    5-MUSTAQIL ISHI


    Bajardi: Tilakov J
    Qabul qildi: Ro`ziqulova M.
    Mavzu: Shablon funksiyalarda funksiyalarni qayta yuklash maxanizmi
    Funksiyalarni qayta yuklash
    M a’lumki, funksiyalarni aniqlashda ularning qaytarishi lozim
    bo‘lgan qiymatlar tipi va funksiya uchun zarur bo ‘lgan parametrlar
    tipini ko'rsatish lozim edi.
    Faraz qilaylik, ikkita butun sonni q o ‘shish uchun funksiya
    ciurilgan b o ‘lsin. Agar uchta butun sonni q o ‘shish talab qilingan
    bo‘lsa, ular uchun boshqa nomdagi funksiyani qurish talab qilinadi.
    Ikkita haqiqiy sonni qo‘shish uchun esa boshqa funksiya qurish lozim
    bo'ladi.
    Bunday hollarda bir xil funksiyani takror va takror yozishning
    o'm iga, C++ tili bir xil nomdagi funksiyalarni qurish imkonini beradi.
    Dastumi kompilatsiya qilish jarayonida C++ funksiyalaming har
    biridagi argumentlar miqdori e ’tiborga olinadi va aynan kerak bo'lgan
    funksiyani chaqiradi. Kompilyatorga bir nechta funksiyalar orasidan
    kcragini tanlash imkoniyati funksiyalarni qayta yuklash deb ataladi.
    105
    Funksiyalami qayta yuklash amali bir xil nomdagi param etrlam i

    har xil tipga mansub b o ‘lgan turli funksiyalar uchun qo‘llashga ruxsat


    beradi.
    Masalan, quyidagi dastur addjvalues nomli ikkita funksiyani
    qayta yuklash uchun xizmat qiladi:
    #include
    int add_values (int a, int b)
    {
    return(a + b);
    }
    int add_values (int a, int b, int c)
    f
    return(a + b + c);
    }
    void main(void)
    {
    cout « “200 + 801 = “ « add_values(200, 801) « endl;
    cout « “100 + 201 + 700 = “ « add_values(100, 201, 700)
    « endl;
    }
    Ushbu dastur quyidagi natijani beradi:
    D :\TC \B IK \Q A YTA .EXE
    -
    3j X
    2 0 0 + 801 = 1001
    10 0
    + 201 + 7 0 0 = 1O01
    K o‘rinib turibdiki, dasturda ikkita bir xil nomdagi, ammo para­
    metrlari soni har xil b o ‘lgan addjvalues funksiyasi aniqlangan. Bu
    holda kompilyator param etrlar soniga k o ‘ra qaysi funksiyani qo‘llash
    haqida mustaqil ravishda xulosa qiladi.
    Quyidagi misolga e ’tibor bering. Unda show message funksiyasi
    qayta yuklanadi. Birinchi show_message funksiyasiga parametrlar
    uzatilmaydi va u ekranga standart axborotni chiqaradi. Ikkinchisi unga
    uzatilgan bitta m a’lumotni, uchinchisi esa ikkita m a’lumotni ekranga
    chiqaradi.
    106
    ^include

    void show_message(void)


    {
    cout « “ Standart axborot: “ « “ C + + da dastrulashni
    o ‘rganamiz ” « endl;
    }
    void show_message(char *message)
    {
    cout « message « endl;
    }
    void show_message(char *first, char *second')
    { cout «
    first « endl;
    cout « second « endl; }
    void main(void)
    {
    show_message();
    show_m essage(“ C + + tili da dastrulash o so n ”);
    show_m essage(“ C + + tili z o ‘r til!”, “Qayta yukalsh yaxshi
    imkoniyat!”) ;
    }
    Bu dastur quyidagi natijani beradi:
    D:\TC\RIN\QAYTA1 .EXE
    . □ X
    S t a n d a r t a x b o r o t :
    C++ da d a s t r u l a s h n i 0
    C++ t i l i da d a s t r u la s h oson
    C++ t i l i z o ' r t i l *
    Q a yta y u k ls h y a x s h i in k o n iy a t ?
    rg a n a m iz
    Qayta yuklanadigan funksiyalar bir xil tipdagi qiymatlami qay-
    tarishi lozim, ammo parametrlarining miqdori va tiplari har xil bo‘lishi
    ham mumkin. 1 -misolga kichik o ‘zgarish kiritamiz:
    #include
    int add values (int a, int b, int c)
    {
    return (a + b + c);
    }
    void main (void)
    107
    {
    cout « “ 100 + 300+601 = “ «

    add_values(100, 300, 601) « endl;


    cout « “ 100.4 + 201.6 + 700.7 = “
    « add_values(100.4, 201.6, 700.1) « endl;
    }
    Dastum ing natijasi quyidagicha b o‘ladi:
    c
    D:\TC\BIN\QAYTA.EXE
    _ n| x
    100 + 300+601 = 1001
    100.4
    + 201.6 + 700.7 = 1001‘
    Takrorlash uchun savol va topshiriqlar
    1. Formal va joriy o ‘zgaruvchilaming farqini tushuntiring.
    2. Oraliq o ‘zgaruvchi nima va undan qachon foydalaniladi?
    3. Funksiyalar qachon va qanday tashkil qilinadi?
    4. Funksiyalaming umumiy tarkibini aytib bering.
    Jurabek Kitob, [13.12.2022 19:31]

    5. Funksiyalardan qanday foydalanish mumkin?


    6. Funksiyalami qayta yuklash nima?
    7. Quyidagi masalalar uchun dastur ishlab chiqing.
    a) k, I va m natural sonlari hamda x t, ..., x„, yj, ..., y m,
    zh ..., zm
    haqiqiy sonlari berilgan bo ‘lsin. Flisoblang:
    J(m ax(x,,...,xk) + m ax(zp ...,zm) )/ 2, agar m ax(x,,...,xk) > 0
    I min(y x,...,y l) + m ax(zj,...,z m), boshqa hollarda
    b) s va t haqiqiy sonlari berilgan b o ‘lsin. Flisoblang:
    h(s,t)+max(h2(s~t, st), h4(s—t, s+ t))+ h (l+ s, 1+t).

    j
    , , , \
    a
    b
    a + b
    _
    Bu yerda h(a,b) = -— - j + ------ T ------— + 2.
    1 + b
    1 -h ci
    (ib
    c) a, b, c va d natural sonlari berilgan. Bu sonlar uchun a/b va
    c/d kasrlami qisqarmaydigan k o ‘rinishga keltiring. (Ikki natural
    sonning eng katta umumiy b o ‘luvchisini topish funksiyasidan foy-
    dalaning.)
    108
    d) x It y h ... , X/o, y I0 haqiqiy sonlari berilgan bo ‘lsin. 0 ‘nburchak

    uchlarining koordinatalari mos ravishda (xj.yi), ... , (xi0,yio) b o ‘lsin.


    Shu o‘nburchakning perimetrini toping. (Koordinatalari berilgan kes­
    ma uzunligini topish funksiyasidan foydalaning.)
    e) N > 2 natural soni berilgan b o ‘lsin. Bu son uchun Goldbax
    gipotezasini tekshiring. (Sonni tub yoki tub emasligini topish
    funksiyasidan foydalaning.)
    Agar funksiya o ‘zidan yordamchi funksiya sifatida foydala-
    nadigan b o ‘lsa, bunday funksiyalar rekursiv deyiladi.
    Rekursiv funksiyalar ikki turga bo‘linadi:
    a) to ‘g ‘ri rekursiya. Bunda dastur o‘ziga-o‘zi m urojaat qiladi.
    b) yondosh rekursiya. Bunda A funksiya B ga, B funksiya A ga
    murojaat qiladi.
    Rekursiv funksiya yozish uchun aw alo : 1) rekkurent munosabat;
    2) shu munosabat uchun boshlang‘ich holatlar aniqlangan bo‘lishi shart.
    Rekkurent munosabat deganda qaralayotgan jarayonga doir
    muayyan bosqichlami avvalgi bosqichlar bilan bog‘lovchi munosa-
    batlar tushuniladi. M asalan, TV! =N-(N—1)\ formulani AH uchun rekku-
    i cut munosabat deb qarash mumkin. Boshlang‘ich holat sifatida esa
    11 1 olinadi.
    Keltirilgan m a’lumotlami hisobga olsak, faktorialni hisoblash
    masalasi uchun rekkurent va boshlang‘ich munosabatlar quyidagicha
    bo'ladi:
    Ko‘rinib turibdiki, N\ ni hisoblash uchun (N -l)\ m a’lum b o ‘lishi
    kciak. Lekin, (AM)!=(A'-2)!-(7v'-]) bo‘lgani uchun o‘z navbatida (N-2) ! ni
    inpish talab qilinadi. (A'-2)! esa (N-3)\-(N-2) ga teng va hokazo. Bu
    vi ida .V! ni hisoblash algoritmi o ‘zining ichiga o ‘zi “cho‘kib” borishi
    8-§. REKURSIYA
    8.1. Rekursiya tushunchasi
    109
    hodisasi ro‘y bermoqda. C ho‘kish jarayoni boshlang‘ich holat sodir

    b o ‘lgunga qadar, y a’ni 1! gacha davom etadi. Shundan keyin, “ch o‘-


    kish” jarayoni to‘xtaydi, 1!=1 ekanligi haqida k o ‘rsatma olgan kom ­
    pyuter yuqoriga qarab “suzib” chiqish bosqichini boshlaydi. Y a’ni,
    2!=1, 2!=l-2=2, 3 !=2!-3=6 va hokazo. Bu holat to N\ hisoblan-
    maguncha davom etaveradi.
    Yuqorida keltirilgan jarayon dasturi quyidagicha yoziladi:
    # include
    longfak(int m)
    { longf;
    i f ( m = = l ) f —1; elsef=fak(m -l)*m ;
    return f;
    }
    void main()
    {
    int n;
    cout « “Butun sonni kiriting ”■
    c i n » n ;
    c o u t« fa k (n );
    return;
    }
    N=4 uchun “cho‘kish” va “suzib chiqish” jarayoni quyidagicha:
    N ning
    qiymatlari
    4
    4
    3
    2
    1
    Rekursiyadan
    chiqishdagi oraliq
    qiymatlar
    N= 1
    sharti
    natijasi
    Y o‘q
    yo‘q yo‘q
    ha
    \ f a k ( 3)*4
    \ f a k ( 2)*3
    \
    fak( 1)*2
    1
    p : = p * 4=24 A
    p := p * 3 = 6
    p : = p * 2=2
    ^ .= 1
    no
    Demak, EHM N=4 bo ‘lgan hoi uchun 24 natijani beradi.

    Shunday m asalalar sinfi mavjudki, ularni rekursiyadan foydaian-


    may turib yechishning boshqa usullari yo‘q.
    Masala. f ( n ) funksiyaning qiymatlari /(0 ) = 1 , f(2 n )= f{n ) va
    Jurabek Kitob, [13.12.2022 19:31]

    f (2 n + \)= f (ri)+\ ifodalar yordamida topiladi. Berilgan A: natural soni


    uchun f(k) ni toping.
    Yechish g'oyasi. Yuqoridagi masalani k ta elementli massiv
    yordamida yechish ko‘pchilikning nazarida oson usulga o ‘xshaydi.
    Lekin bu to‘g ‘ri emas. Chunki, k yetarlicha katta son b o ‘lsa, k ta
    elementli m assiv kom pyuter xotirasiga sig‘m ay qolishi mumkin. Qola-
    versa, siqqan taqdirda ham, bu elementlaming hammasidan foyda-
    lanilmaydi. M asalan, k= 1000 bo‘lganda bu masalani yechish uchun
    massivning 1000 ta elementidan k o ‘pi bilan 11 tasi kerak b o ‘ladi
    (nima uchunligini o ‘ylab k o ‘ring), qolganlari esa kompyuter xotirasini
    befoyda band qiladi. Bunda xotiradan n o ‘orin foydalanish holati yuz
    beradi va u keyinchalik salbiy oqibatlarga olib kelishi mum kin.
    Shuning uchun qo‘yilgan masalani massivdan foydalanmay yechish
    eng yaxshi usul hisoblanadi. Bu usulning mohiyati rekursiya
    mexanizmini qo ‘llashdan iborat.
    Zarur b o ‘lgan rekkurent munosabat va boshlang‘ich holatlam ing
    masala shartida keltirilganligi ishni yanada osonlashtiradi.
    # include
    int fun(int m)
    { '
    int f;
    i f (m ==0) f = l ; else
    {
    int h=m/2;
    i f (m % 2 = = 0 ) f=fun(h); else f=fun(h)+1 ;
    i
    /
    return f;
    }
    void main()
    {
    i l l
    in t n;
    cout «

    ’’Butun sonni kiriting”;


    cin » n ;
    cout « ”f ( “« n « ”) = ”«fiun (n);
    return;
    x
    /
    Bu dastumi k = l 1 b o ‘lgan hoi uchun bajargan EHM
    / ( H ) = 4
    natijani ekranga chiqaradi.
    Yuqoridagi m a’lumotlardan k o ‘rinib turibdiki, rekursiya oddiy
    protsedura yoki funksiyaga nisbatan murakkabroq tushuncha, lekin u
    m ohir dasturchi q o ‘lida juda ham yaxshi vositaga aylanishi mumkin.
    8.2. Tez sara lash ning rekursiv aigoritmi
    Rekursiyani amalda q o ‘llash uchun namuna sifatida massiv
    elementlarini tez saralash aigoritmi Quicksort ni ko‘rib chiqamiz.
    Ushbu algoritm massiv elementlarini o ‘sish (yoki kamayish) tartibida
    tartiblash uchun xizmat qiladi.
    Faraz qilaylik, massivning 11 elementi quyidagicha joylashgan
    b o ‘lsin (2-rasm).
    14
    3
    2
    11 | 5
    8
    0
    2
    9
    4
    20
    a[0]
    a[10]
    2-rasm .
    Massivning boshlang‘ich holati.
    Algoritm g ‘oyasi massivni rekursiv asosda ikkiga ajratish va
    tartiblash amalini ulam ing har biri uchun bajarishni o ‘z ichiga oladi.
    Ajratish chegaraviy deb ataladigan biror elementni tanlash orqali
    amalga oshiriladi. M assiv ikkiga ajratilganidan so‘ng, ular shunday
    qayta ishlanadiki, chegaraviy elementning bir tomonida undan kichik
    yoki teng b o ‘lgan elementlar, ikkinchi tomonida esa katta yoki teng
    b o ‘lgan elementlar joylashadi.
    Agar chegaraviy element sifatida 8 ni tanlasak, birinchi tartib­
    lashdan keyin m assiv 3-rasmdagi holga keladi. Endi xuddi shu
    jarayonni massivning o ‘ng va chap qismlari uchun qo'llanadi.
    112
    4 | 3 | 2 | 2 | 5 | 0 |

    |"1T|
    | 11 j 9 |l4 120


    a[0]
    a[10]
    3-rasm .
    Massivning dastlabki saralashdan keyingi holati.
    Massivni qismlarga ajratish va ularda tartiblash amalini rekursiv
    inexanizm yordamida bajarish mumkin, Buning uchun chegaraviy
    clement indeksi o ‘rtadagi element indeksi shaklida hisoblanadi. Bunda
    “lirst” va “last” lar massiv qismining birinchi va oxirgi element-
    larining indekslarini angalatadi.
    M assiv elementlarini rekursiv tartiblash protsedurasini batafsil
    lahlil qilamiz.
    M assivning qayta ishlanayotgan qismi chetki elementlari indeks­
    larini “left_arrow” hamda “right_arrow” orqali belgilaymiz (4-rasm).
    p iv o t
    14 | 3 | 2 111 | 5
    ©
    0
    2
    9
    4
    20
    le ft _ a r r o w
    rig h t_ a rr o w
    4-rasm .
    “left_aiTow” va “right arrow” laming
    tartiblashdan avvalgi indekslari.
    Tartiblash jarayonida “left_arrow” va “right arrow” indekslar
    Jurabek Kitob, [13.12.2022 19:31]

    chegaraviy elementlar tomonga qarab surilib boradi. Masalan,


    “right arrow” indeksli element chegaraviy elem entdan kichik yoki
    leng b o iib qolmaguncha chapga suriladi. Xuddi shuningdek,
    “left_arrow” indeksli element chegaraviy elem entdan katta yoki teng
    b o iib qolmaguncha o ‘ngga surilib boradi. Biz qarayotgan holda bu
    clement massivning boshida joylashgan (5-rasm).
    p iv o t
    [U ~| 3 | 2 | 11 1 5 1 (3) [ 0 | 2 | 9 j 4 [~20~|
    I
    I
    l e f t arrow
    right_arrow
    5-rasm.
    A lm ashtirish uchun chap va o 'n g elem en tlam i izlash.
    113
    Shundan keyin bu elementlar o ‘zaro o ‘rin almashadi (6-rasm).

    p iv o t


    R | 3 I 2 | l l I 5 i d ; I 0 1 2 i 9 114 12 0 ]
    I
    I
    l e f t arrow
    right_arrow
    6-rasm. Ikki element o‘zaro o‘rin almashganidan keyingi holat.
    Almashuvdan so‘ng, “right_arrow” chap tomonga qarab, to
    chegaraviy elementdan kichik yoki teng bo ‘lgan element topilguncha
    surilib boradi (7-rasm).
    p i v o t
    M | 3 | 2 111 1 5 1(|? | 0 1 2 | 9 114 |20 |
    I
    I
    l e f t arrow
    right_arrow
    7-rasm. 0 ‘ng tomonda o‘rin almashish uchun element topildi.
    “left arrow” indeks o ‘rin almashtirish uchun zarur b o ‘lgan ele­
    ment topilguncha o ‘ng tomonga qarab surilib boradi (8-rasm).
    p iv o t
    | 4 | 3 | 2 | 11 | 5 | d ) I 0 | 2 | 9 114 | 20 |
    I
    I
    l e f t arrow
    right^arrou
    8-rasm. Chap tomonda almashish uchun element topildi.
    So'ngra topilgan elementlaming o ‘rinlari o ‘zaro almashtiriladi
    (9-rasm).
    p i v o t
    1 4 I 3 I 2 I 2 I 5 | ® | 0 I 11 I 9 |14 [20 I
    I
    I
    left_arrow
    right_arrow
    9-rasm. Ikkinchi marta o‘rin almashgandan keyingi holat.
    M assiv qismlarini tartiblash “left_arrow > right_arrow” sharti
    o ‘rinli bo‘lganidan so‘ng yakunlanadi. 9-rasmdagi holda bu shart
    114
    “yolg‘on”, shuning uchun “right_arrow” chap tomonga qarab suri-

    lishda davom etmoqda. Bu holat 10-rasmdagi holat yuzaga kelguncha


    davom etadi.
    p iv o t
    [ A 1 3 1 2 I 2 I 5 | j ) l 0 j 11 I 9 1 14 |20~|
    l e f t _ a r r o w
    r i a h t . a r r o w
    10-rasm, 0 ‘ng tomonda almashish uchun element topildi.
    “left arrow”ning surilishi 11-rasmdagi holatga sabab bo ‘ladi.
    0 ‘ng tomonga surilishda “pivot”dan katta yoki teng elementni topish
    talab qilingani uchun “left_arrow” chegaraviy elementga yetganidan
    kcyin surishni to ‘xtatadi.
    p i v o t
    | 4 | 3 | 2 | 2 | 5 | ( ! ) | 0 | 11 | 9 | 14 |20 |
    I
    |
    le ft _ a r r o w
    r ia h t arrow
    11-rasm. Chap element ci egaraviy bilan ustma-ust tushdi.
    Shundan keyin chegaraviy elementni o ‘z ichiga oluvcbi alma-
    shuv bajariladi va massiv 12-rasmdagi holatga o ‘tadi.
    p i v o t
    A
    3 | 2
    2
    5
    0
    © 1 11
    9
    14 j 20
    I
    l e f t _ a r r o w
    ric rh t arro w
    1 2-rasm .
    Uchinchi almashuvdan keyingi holat.
    Elementlar o'rin almashganlaridan so‘ng “right_arrow” chap,
    "lol't arrow” esa o ‘ng tomonga suriladi (13-rasm).
    115
    pivot
    \ 4 | 3 | 2 | 2 | 5 | 0 |d ) | 11 | 9 114 120 |

    I
    I


    I left_arrow
    right arrow
    13-rasm. Tartiblash indekslar massiv o‘rtasidan o‘tganda
    yakunlanadi.
    13-rasmda tartiblash sharti “left_arrow>right_arrow” o ‘rinli
    b o ig a n hoi tasvirlangan. Shuning uchun massivni ikkiga ajratish va
    qayta tartiblash jarayonini tugatilgan deb hisoblash mumkin.
    Quyida tez tartiblash algoritmi Quicksort ni amalga oshiruvchi
    funksiya keltirilgan.
    void quick_sort( int listf], int left, int right)
    (
    int pivot, left_arrow, right_arrow;
    left arrow = left;
    right_arrow = right;
    pivot = list [(left + right)/2J;
    do {
    while ( list[right_arrow] > p iv o t)
    right arrow—; while ( list[left_arrow] < p iv o t)
    1eft_arrow++; if ( left_arrow < = right arrow )
    {
    sw ap( list[left_arrow], list[right_arrow] );
    left_arrow++;
    right_arrow ~;}
    }
    while ( right_arrow > = left jjr r o w );
    i f ( left < right arrow )
    quick_sort( list, left, right arrow );
    i f ( left arrow < right)
    quick_sort( list, left arrow, right);
    }
    116
    Jurabek Kitob, [13.12.2022 19:31]

    Takrorolash uchun savol va topshiriqlar


    1. Rekursiya nima?
    2. Rekursiv “cho‘kish” va “suzib chiqish” deganda nimani tushu-
    nasiz? M isollar bilan iizohlang.
    3. Rekursiyaning afzalliklarini nimada deb o ‘ylaysiz?
    4. Quyidagi masalalar uchun dastur ishlab chiqing.
    a) a ni eng kam k o ‘paytirish amallari yordam ida hisoblang;
    b) faqat 1 sonini q o‘shish orqali ikkita natural sonni qo‘shing;
    c) faqat qo‘shish amalidan foydalanib, ikki natural sonni k o ‘pay-
    tiring;
    d) rekursiyadan foydalanib hisoblang:
    e) Fibonachchi sonlari ketma-ketligi / 0=1 , / i = l , f n-
    2
    =f i- \+f» n> 1
    formulalar bilan aniqlanadi. Shu ketma-ketlikning dastlabki k ta hadini
    rekursiv usulda toping.
    9-§. K O R SA T K IC H VA XOTIRA BILAN ISHLASH
    9.1. Boshlang‘ich tushunchalar
    Unchalik murakkab bo im a g a n dasturlam i ishlab chiqish uchun
    biz hozirgacha ko‘rgan m aium o tlar yetarli, ammo murakkab dasturlar
    uchun kamlik qiladi.
    Dasturchi murakkab kompyuter dasturlarini ishlab chiqishda
    quyidagi m aium otlarga ham javob berishi lozim:
    • m aiu m o tlar qayerda saqlanadi?
    • u yerda qanday qiymatlar saqlanmoqda?
    • saqlanayotgan m aium otlam ing ko ‘rinishi.
    Bu masalalarga javob variantlaridan birinchisi o ‘zgaruvchilami
    oddiy usulda e io n qilishni nazarda tutadi. E io n qilish b u y ru g i orqali
    m aium otning tipi va nomi k o ‘rsatiladi. Kompilyator bu m a’lumot
    ucluin kompyuter xotirasidan maxsus joy ajratishni ta ’minlaydi va
    ichki vositalar yordamida uning manzilini nazorat qiladi.
    117
    K o‘rsatkichlardan foydalanishni nazarda tutuvchi ikkinchi va­

    riant barcha dasturchilar uchun o ‘ta m uhim ahamiyat kasb etadi.


    K o ‘rsatkichlar ham o ‘zgaruvchi bo Tib, o ‘zida qandaydir qiy­
    matlam i emas, balki bu qiymatlaming kompyuter xotirasidagi man-
    zilini saqlaydi.
    K o‘rsatkichlam i k o ‘rib chiqishdan avval oddiy o ‘zgaruvchilar
    manzilini aniqlashga urinib k o ‘raylik. Agar hom e o ‘zgaruvchi boTsa,
    &home bu o ‘zgaruvchining kompyuter xotirasidagi manzilini
    anglatadi. Quyidagi listingga e ’tibor bering:
    # include
    int main()
    {
    int a=12;
    double b=1.234;
    c o u t « a « ” a ning manzili “« & a « ”\n
    c o u t « b « ” b ning manzili “« & b « ”\n
    return 0;
    x
    /
    Ushbu kod Windows XP2 operatsion tizimi uchun quyidagi
    natijani ekranga uzatadi:
    12 a ning manzili 0x8f7dffF4
    1.234 b ning manzili 0x8f7dffec
    0 ‘zgaruvchilar manzilini ekranga uzatishda cout o ‘n oltilik
    sanoq sistemasini qoTlaydi, chunki kompilyator xotira manzillarini
    saqlash uchun aynan shu sistemadan foydaladi. Bizning misolimizda a
    o ‘zgaruvchining manzili b nikiga qaraganda 4 baytga farq qiladi.
    Buning sababi int tipidagi m a’lumotlami saqlash uchun xotiradan
    4 bayt jo y ajratilishi bilan bogTiq. Agar xotiraga b avval yozilsa, bu
    o ‘zgaruvchilaming manzillari o ‘rtasidagi farq 8 ga teng boTadi.
    Chunki double tipidagi m a’lumotni saqlashga xotiradan 8 bayt joy
    band qilinadi.
    118
    C++ dasturlash tili Pascal kabi ko‘plab tillardan shunisi bilan

    farq qiladiki, kompyuter tomonidan qandaydir qarorlar dastur kodini


    kompilatsiya qilish vaqtida emas, balki bajarish vaqtida, ya’ni dastur
    ishlayotgan vaqtda qabul qilinadi. Qiyoslash uchun misol keltiramiz:
    siz ta’til vaqtida bevosita, vaziyatdan kelib chiqqan holda ob-havo,
    kayfiyat va imkoniyat kabi holatlami hisobga olib, dam olishni tashkil
    qilishingiz mumkin. Bu bajarish vaqtida qabul qilinadigan qaror
    bo‘ladi. Kompilatsiya vaqtida qabul qilinadigan qarorga esa hech
    qanday vaziyatni e ’tiborga olmagan holda, belgilangan qat’iy grafik
    asosida dam olishni misol qilib keltirish mumkin.
    Bajarish vaqtida qabul qilinadigan qarorlar dastuming yuzaga
    Jurabek Kitob, [13.12.2022 19:31]

    keladigan vaziyatlarga moslashuvchan bo‘lishini ta ’minlaydi. Massiv-


    lar uchun xotirani taqsimlash masalasi bunga yaqqol misol bo‘lishi
    mumkin. Odatda massivni e ’lon qilishda uning hajmi qat’iy belgilab
    qo‘yiladi (kompilatsiya vaqti qabul qilinadigan qaror) va bu hajmni
    zarurat bo‘lganda o‘zgartirish mumkin emas. Odatda, talabalar guruhi
    massivi bilan ishlaganda 25 ta element yetarli hisoblanadi. Ammo
    ayrim hollarda talabalar soni 15 ta yoki 30 yoki undan ham ko‘p
    bo‘lishi mumkin. Bunday hollarda har ehtimolga qarshi 50 ta ele-
    inentli massiv e ’lon qilish lozim bo‘ladi. Qaralayotgan vaziyatda
    talablar soni 15 ta bo‘lsa, xotiraning qolgan 35 yachaykasi bo'sh
    qolmoqda. Ko‘rinib turibdiki, bunday dasturlar bilan ishlaganda
    xotiradan noto‘g‘ri foydalanish muammosi yuzaga keladi. Bunday
    inuammolami (ya’ni xotiradan qancha kerak bo‘lsa, shuncha joy
    iijratish masalasi kabi) hal qilish uchun C++ tilida qaromi dastuming
    bajarilishi jarayonida qabul qilish imkoniyati nazarda tutilgan. Shun-
    i lay qilib, dastur ishga tushganda, kompyuter xotirasidan ehtiyojga
    ko'ra zarur hajmni band qilishga ko‘rsatma berish mumkin.
    Xotiradagi ma’lumotlami qayta ishlashning yangi strategiyasiga
    ko'ra, qiymatlar joylashuvi haqidagi axborot nomlangan kattalik,
    i|ivmatning o‘zi esa hosila kattalik sifatida qayd qilinadi. Bunda
    ma’himotlaming maxsus tipi - ko'rsatkichlardan foydalaniladi. Yuqo-
    i
    k
    I.
    i
    avtib o‘tilganidek, ular qiymat saqlanayotgan xotira yacheykalari
    man/illarini o‘zida saqlaydi.
    119
    Yondosh qiymat (yoki qayta nomlash) deb ataluvchi amal

    yordamida ko‘rsatilgan manzildagi qiymatni aniqlash mumkin. Quyi­


    dagi listingga e’tibor bering.
    # include
    int mainQ
    {
    int a —12;
    int *p_a;
    p_a=&a;
    c o u t « a « ” a ning manzili “« & a « ”\n ";
    c o u t « * p _ a « ”\n”;
    *p_a= *p_a+l;
    c o u t« *p_a;
    return 0;
    }
    Ushbu kod quyidagi m a’lumotlami ekranga uzatadi:
    12 a ning manzili 0x8fccfff4
    12
    http://fayllar.org
    Download 25.26 Kb.




    Download 25.26 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    O’zbekiston respublikasi axborot texnologiyalari va kommunikatsiyalarini rivojlantirish vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali kompyuter injiniringi fakulteti

    Download 25.26 Kb.