• ÓZ BETINSHE JUMISI Tema:Rekursiv funksiyalar menen islesiw. Tayarlaǵan _________________ Utepbergenov Aydos Qabıllaǵan _________________ Orınbaev.A
  • Dástúriy injiniringi baǵdarı 2-kurs 3001-22 topar studenti Utepbergenov Aydos




    Download 400.69 Kb.
    bet1/2
    Sana30.01.2024
    Hajmi400.69 Kb.
    #148697
      1   2
    Bog'liq
    Rekursiv funksiyalar menen islesiw.
    BAHOLASH, ma\'lumotlar bazasi, Reference-322221103591, adjectives, MUSTAQIL ISH NAMUNA, 1-ШАХСИЙ ТОПШИРИҚ, Rangli metallar, manaviy va ma`rifiy ishlar bo`yicha, Deyl Karnegi - do\'st orttirish [uzsmart.uz], 8 м3 лик Выгреб, буйрык улги, Futbol, epson627842eu, Abdurahmonova Jasmina

    ÓZBEKSTAN RESPUBLIKASÍ
    SANLI TEXNOLOGIYALAR MINISTRLIGI MUHAMMED AL-XOREZMIY ATINDAǴÍ TASHKENT INFORMACIYALÍQ TEXNOLOGIYALARÍ UNIVERSITETI NÓKIS FILIALÍ
    Kompyuter injiniringi fakulteti
    Dástúriy injiniringi baǵdarı
    2-kurs 3001-22 topar studenti
    Utepbergenov Aydos
    D ástúrlew páninen jazǵan
    ÓZ BETINSHE JUMISI
    Tema:Rekursiv funksiyalar menen islesiw.
    Tayarlaǵan _________________ Utepbergenov Aydos
    Qabıllaǵan _________________ Orınbaev.A

    Nókis

    Tema : Rekursiv funksiyalar menen islesiw
    C++ de funksiyalardı shólkemlestiriw
    Joba :
    1. Funksiya haqqında túsinik
    2. Funksiyanı qayta júklew.
    3. Rekursiv funksiyalar
    4. Juwmaq.

    C++ de programmalastırıwdıń tiykarǵı bloklarınan biri funksiyalar bolıp tabıladı. Funksiyalar programmist jumısın júdá jeńillestiredi. Funksiyalar járdeminde programma modullasadı, bólimlerge


    bólinedi. Bul bolsa keyinirek programmanı rawajlandırıwdı ańsatlastıradi. Bunda programmist jazǵan funksiyalar C++ dıń standart kitapxanasi hám basqa kitapxanalar ishindegi funksiyalar menen birlestiriledi. Bul bolsa jumıstı ańsatlastiradi. Kóp halda programmada tákiraran atqarılatuǵın ámeldi funksiya retinde jazıw hám kerekli orında bul funksiyanı shaqırıw múmkin. Programma jazılıw dáwirinde qátelerdi tabıwdı jeńillestiredi. Bir mısalda funksiyanıń tiykarǵı bólimlerin kórip shıǵayıq :int foo (int k, int t)
    {
    int result;
    result = k * t;
    return (result);

    Joqarıdaǵı foo funksiyamizdıń atı, () qawıslar ishindegi parametrler - int tipidagi k hám t lar kirisiw argumentleri bolıp tabıladı, olar tek bul funksiya ishinde kórinedi hám qollanıladı.


    Bunday ózgeriwshiler lokal (local - jergilikli) dep ataladı. result foo () dıń ishinde daǵaza etilgenligi ushın ol da lokal bolıp tabıladı. Sonday eken biz funksiya ishinde ózgeriwshilerdi hám klasslardı
    (class) járiyalawımız múmkin eken. Lekin funksiya ishinde basqa funksiyanı járiyalay otirip bolmaydı. foo () funksiyamız baha da qaytaradı.
    Daǵazasında eń basında kelgen - int tipine iye. Biz funksiyadan qaytarmaqshi bolǵan bahanıń tipi da funksiya járiyalaǵan qaytıw ma`nisi tipine sáykes keliwi kerek - áyne sol tipda bolıwı yamasa sol tipga keltiriliwi múmkin bolǵan tipdi ıyelewi shárt. Funksiyadan bahanı return ańlatpası menen qaytaramız. Eger funksiya hesh nárse qaytarmasa daǵazada void tipinde jazamız. Yaǵnıy :
    void funk ()
    {
    int g = 10 ;
    cout << g;
    return;

    Bul funksiya void (bos, hesh zatsız ) tipidegi bahanı qaytaradı. Basqasha etip aytqanda qaytarǵan ma`nisi bos jıynaq bolıp tabıladı. Lekin funksiya hesh nárse qaytarmaydı dep almaymız. Sebebi hesh nárse qaytarmaytuǵın arnawlı funksiyalar da bar. Olardıń qaytıw ma`nisi belgilenetuǵın jerge hesh nárse jazılmaydı.


    Biz onday funksiyalardı keyin kórip shıǵamız. Bul jerde bir noqat mınada, eger funksiya arnawlı bolmasa, lekin aldında qaytıw ma`nisi tipi kórsetilmegen bolsa, qaytıw ma`nisi int tipine iye dep qabıl etiledi.
    Void qaytıw tipli funksiyalardan shıǵıw ushın return; dep jazsak jetkilikli bolıp tabıladı. Yamasa returndı qaldırıp ketsek de boladı.
    Funksiyanıń bólimleri atqaratuģın wazıypasına kóre túrlishe ataladı. Joqarıda korib shıqqanımız funksiya anıqlanıwı (function definition) dep ataladı, sebebi biz bunda funksiyanıń atqaratuǵın ámellerin funksiya atınan keyin, {} qawıslar ishinde anıqlap jazıp shiqyapmiz. Funksiya anıqlanıwında {} qawıslardan aldın noqat -útir (;) qoyıw qáte bolıp tabıladı. Bunnan tısqarı funksiya daǵazası, prototipi yamasa deklaratsiyası (function prototype) túsinigi qollanıladı. Bunda funksiyanıń atınan keyin noqat -útir qóyıladı, funksiya denesi bolsa berilmeydi. C++ de funksiya qollanılıwınan aldın onıń anıqlanıwı yamasa hesh bolmaǵanda daǵazası kompilyatorga dus kelgen bolıwı kerek. Eger funksiya daǵazası basqa funksiyalar anıqlanıwınan sırtda berilgen bolsa, onıń kúshi bul fayl aqırına deyin baradı. Qandayda bir bir funksiya ishinde berilgen bolsa kúshi tek sol funksiya ishinde tarqaladı.
    Daǵaza fayllarda naǵız sol funksiya daǵazaları berilgen boladı. Funksiya daǵazası hám funksiya
    anıqlanıwı bir-birine uyqas túsiwi kerek. Funksiya daǵazasına mısal :
    double square (tırtıq, bool);
    float average (int a, int b, int c);
    Funksiya daǵazalarda kirisiw parametrleriniń tek tipi jazıw jetkilikli, tap square () funksiyasidek. Yamasa kiretuǵın parametrlerdiń atı da beriliwi múmkin, bul atlar kompilyator tárepinen itıbarǵa alınbaydı, biraq programmanıń oqılıwın talay ańsatlastiradi. Bulardan tısqarı C++ de funksiya qolı (function signature) túsinigi
    bar. Funksiya imzasına funksiya atı, kiretuǵın parametrler tipi, sanı, izbe-izligi kiredi. Funksiyadan qaytarda baha tipi imzasına kirmeydi.
    int foo (); //No1
    int foo (tırtıq, int); //No2
    double foo (); //No3 - No1 funksiya menen qolları
    áyne. void foo (int, tırtıq); //No4 - No2 menen
    qolları ayrıqsha. tırtıq foo (tırtıq, int); //No5 - No2
    menen qolları áyne. int foo (void); //No6 - No1 hám
    No3 menen qolları áyne, Joqarıdaǵı mısalda kirisiw parametrleri bolmasa biz () qawsırmanıń ishine void dep jazıwımız múmkin (No6 ǵa qarań). Yamasa () qawıslardıń qurǵaqlay ózin
    jazabersek de boladı (No1 ge qarań). 64 Taǵı bir túsinik - funksiya shaqırig'i bolıp tabıladı.
    Programmada funksiyanı shaqırıp, qóllawımız ushın onıń shaqiriq kórinisin isletemiz. () qawısları funksiya shaqırig'ında qollanıladı. Eger funksiyanıń kirisiw argumentlari bolmasa, () qawıslar bos halda qollanıladı. Sonday ekenin aytıw kerek, funksiyalardı anıqlawda baylanıslı qaytarıwı kerek bolǵan bahalar tipi hám funksiya ushın zárúr bolǵan parametrler tipini kórsetiw kerek edi. Shama menen oylayıq, eki pútkil sandi qosıw ushın funksiya qurılǵan bolsın. Eger ush pútkil sandi qosıw talap etilgen bolsa, olar ushın basqa atamadaģi funksiyanı qurıw talap etiledi. Eki haqıyqıy sandı qosıw ushın bolsa basqa funksiya qurıw kerek boladı. Bunday jaǵdaylarda birdey funksiyanı tákirarlap jazıwdıń o'mina, C++ tili birdey atamadaģi funksiyalardı qurıw imkaniyatın beredi. Dastumi kompilatsiya qılıw processinde C++ funksiyalarınıń hár birindegi argumentlar muǵdarı itibarǵa alınadı, atap aytqanda kerek bolǵan funksiyanı shaqıradı. Kompilyatorga bir neshe funksiyalar arasından tańlaw múmkinshiligi funksiyalardı qayta júklew dep ataladı. Funksiyalardi qayta júklew ámeli bir qıylı atamadaģi parametrlerdi hár túrlı tipge tiyisli bolǵan túrli funksiyalar ushın qóllawǵa ruxsat beredi. Mısalı, tómendegi programma add_values atlı eki funksiyanı qayta júklew ushın xızmet etedi:
    #include
    using namespace std;
    int add_values (int a, int b)
    {
    return (a + b);
    }
    int add_values (int a, int b, int c)
    {
    return (a + b + c);
    }
    int main ()
    { cout « “200 + 801 = “ « add_values (200, 801) « endl;
    cout « “100 + 201 + 700 = “ « add_values (100, 201, 700) « endl;}
    Programma nátiyjesi tómendegishe sawlelenedi:

    Kórinip turıptı, olda, programmada eki birdey atamadaģi, biraq parametrleri sanı hár túrlı bolǵan add_values funksiyası anıqlanǵan. Bul halda kompilyator parametrler sanına kóre qaysı funksiyanı qóllaw haqqında ǵárezsiz túrde juwmaq etedi.
    Eger funksiya ózinden járdemshi funksiya retinde paydalanatuǵın bolsa, bunday funksiyalar rekursiv dep ataladı. Rekursiv funksiyalar eki túrge bólinedi:

    a) tuwrı rekursiya. Bunda programma ózine-ózi shaqırıq etedi.


    b) jandas rekursiya.
    Bunda A funksiya B ga, B funksiya A ga shaqırıq etedi. Rekursiv funksiya jazıw ushın áwele : 1) rekkurent munasábet; 2) sol munasábet ushın baslanǵısh jaǵdaylar anıqlanǵan bolıwı shárt. Rekkurent munasábet degende qaralayotgan processga tiyisli arnawlı bir basqıshlami aldınǵı basqıshlar menen baylaw munasábetler túsiniledi.
    Mısalı, N! =N* (N—1) formulanı N! ushın rekurent munasábet dep qaraw múmkin.
    Baslanǵısh jaǵday retinde bolsa 1! =1 alınadı.
    Kórinip turıptı, olda, N! ni esaplaw ushın (N-1)! málim bolıwı kerek. Lekin, (N-1)! = (N-1) * (N-2)! bolǵanı ushın óz gezeginde (N-2)! ni inpish talap etiledi. (N-2)!
    bolsa (N-3)! * (N-2) ga teń hám taǵı basqa. Bul jerde N! ni esaplaw algoritmı o 'zining ishine o 'zi “cho'kib” barıwı hádiysesi júz berip atır. Shógiw procesi baslanǵısh jaǵday júz bo'lģanģa shekem, yaǵnıy 1! ge shekem dawam etedi. Sonnan keyin, “cho'- kish” procesi toqtaydı, 1! =1 ekenligi haqqında kórsetpe alǵan kompyuter joqarıǵa qaray “júzip” shıǵıw basqıshın baslaydı. Yaǵnıy, 2! =1, 2! =l-2=2, 3! =2!-3=6 hám taǵı basqa. Bul jaǵday tap N! esaplanmaguncha dawam etaveradi.

    Joqarıda keltirilgen másele programması tómendegishe boladı :


    #include
    using namespace std;
    long fak (int m)
    { long f;
    if (m==1) f=1; else f=fak (m-1) *m;
    return f;
    }
    int main ()
    {
    int n;
    cout<<" Pútkil sannı kiritiń: ";
    cin>>n;
    cout<}
    Programma nátiyjesi tómendeinshe boladı

    Kórinip turıptı, olda, programmada eki birdey atamadaģi,biraq parametrleri sanı hár túrlı bolǵan
    add_values funksiyası anıqlanǵan. Bul halda kompilyator parametrler sanına kóre qaysı funksiyanı qóllaw haqqında ǵárezsiz túrde juwmaq etedi.
    Eger funksiya ózinden járdemshi funksiya retinde paydalanatuǵın bolsa, bunday funksiyalar rekursiv dep ataladı. Rekursiv funksiyalar eki túrge bólinedi:
    a) tuwrı rekursiya. Bunda programma ózine-ózi shaqıradı.
    b) yondosh rekursiya.
    Bunda A funksiya B ga, B funksiya A ga shaqırıq etedi. Rekursiv funksiya jazıw ushın
    áwele : 1) rekkurent munasábet; 2) sol munasábet ushın baslanǵısh jaǵdaylar anıqlanǵan bolıwı shárt. Rekkurent munasábet degende qaralayotgan processga tiyisli arnawlı bir basqıshlami aldınǵı basqıshlar menen baylaw munasábetler túsiniledi.
    Mısalı, N! =N* (N—1) formulanı N! ushın rekurent munasábet dep qaraw múmkin.
    Baslanǵısh jaǵday retinde bolsa 1! =1 alınadı.
    Keltirilgen maǵlıwmatlardi esapqa alsaq, faktorialdi esaplaw máselesi ushın rekkurent hám baslanǵısh munasábetler tómendegishe boladı :

    1. Rekursiv funksiya haqqında maǵlıwmat.


    Rekursiya — Funksiya ózine ózi tuwrıdan-tuwrı yamasa qanday da qural arqalı shaqırıq qılıw procesine rekursiya dep ataladı hám bunday funksiya rekursiv funksiya dep ataladı [1]. Rekursiv funksiya ózin — ózi shaqırǵanı ushın programmistler arasında tómen aldın rekursiyani túsiniw kerek“ — Stephen Hawking[2]. Rekursiya funksional programmalastırıwdıń tiykarǵı elementlerinen esaplanadı. Rekursiya derlik balshıq jerde isletiledi. Birpara máselelerdiń iterativ sheshimi oǵırı uzın bolıp ketiwi múmkin. Rekursiya bolsa kodtı bir neshe ese qısqartirib beriwi múmkin. Kópshilik strukturalar hám algoritmlardı rekursiyasiz oyda sawlelendiriw etip bolmaydı. Tree, Graph, Heap, Quick Sort, Merge Sort, … Bul kesteni ap-alıs dawam ettiriw múmkin. Ásirese, quramalı strukturalar bolǵan Tree hám Graphlarda rekursiya hár qádemde ushraydı.

    Download 400.69 Kb.
      1   2




    Download 400.69 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Dástúriy injiniringi baǵdarı 2-kurs 3001-22 topar studenti Utepbergenov Aydos

    Download 400.69 Kb.