• 77 - DARS. SHABLON YARATISH.
  • 1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot




    Download 313,45 Kb.
    bet80/89
    Sana16.11.2023
    Hajmi313,45 Kb.
    #100010
    1   ...   76   77   78   79   80   81   82   83   ...   89
    Bog'liq
    @AKT Official C haqida o\'zbekcha darslar majmui

    76 - DARS. SINFLAR VA SHABLONLAR.

    Shablonli funktsiyalar va sinflar oilasini yaratishga imkon beradi.Shablalar sinfiy yoki parametrlangan tillar deb ham ataladi. Yuqorida ko’rsatilganidek funktsiyalar oilasi shabloni cheksiz ko’p o’zaro yaqin funktsiyalarni aniqlashga imkon beradi va qo’yidagiga ega bo’ladi:


    templatef-ya tarifi.
    Sinf ta'rifiga tushuvchi kam,butun bir sinflar oilasi nomi bulib hizmat qiladi.Shablon tarifi faqat global bo’lishi mumkin. Shablon kiritilgandan so’ng sinflar obe’ktlari qo’yidagicha ta'riflananadi; parametrlangan sinf nomi obe’kt-nomi(konstruktor parametrlari);
    STT tili avtorlariga muvofiq vektorli sinfli ko’rib chiqamiz. Ventar elementlari qanday tipga tegishli bo’lmasin ular ustida bir hil amallar aniqlanishi mumkin. Kutbidagi shablon kerakli hossalarga ega bo’lgan ventorlar sinflarini avtomatik yaratishga imkon beradi.
    ||Template.vec
    template
    clarr vector
    {T data;
    int size;
    public;
    vector(int);
    ~Vector(){delete[]data;};
    T&aperator[](int i){return data[i];}
    };
    templote
    vector::Vector(int n)
    {data=new t[n];
    size=n;
    };
    Qo’yidagi dasturda shu shablan asosida konkret butun sonli va simvolli vektorlarni tushuntirib ko’rib chiqamiz:
    # include “template.vec”
    #include
    main()
    {Vectox(5);
    Vectorx(5);
    For(int I=0;i<5;I++)
    {x[i]=I;c[i]=’A’+I;}
    for(I=0;I<5;I++)
    {x[i]=I;c[I]=’A’+I;}
    for(I=0;I<5;I++)
    cont<<” “<}
    77 - DARS. SHABLON YARATISH.

    Misol uchun massiv sinfi yaratilib bu sinfda massivning summasini va o’rta qiymatini hisoblash usullari mavjud bo’lsin. Agar siz int tipida gi massiv bilan ishlayotgan bo’lsangiz sinf ta'rifi qo’yidagicha bo’lishi mumkin:


    class array
    {
    public:
    array(int size);
    long sum(void);
    int average_value(void);
    void show_array(void);
    int add_value(int);
    private:
    int *data;
    int size;
    int index;
    };
    Qo’yidagi I_ARRAY.CPP dasturda array sinfidan int tipidagi massivlar bilan ishlash uchun foydalanilgan.
    #include
    #include
    class array
    {
    public:
    array(int size);
    long sum(void);
    int average_value(void);
    void show_array(void);
    int add_value(int) ;
    private:
    int *data;
    int size;
    int index;
    };
    array::array(int size)
    {
    data = new int [size];
    if (data == NULL)
    {
    cerr << "Nedostatochno pamyati - programma zavershaetsya " << endl;
    exit(l);
    }
    array:: size = size;
    array::index = 0;
    }
    long array::sum(void)
    {
    long sum = 0;
    for (int i = 0; i < index; i++) sum += data[i];
    return(sum);
    }
    int array::average_value(void)
    {
    long sum = 0;
    for (int i = 0; i < index; i++) sum += data[i];
    return (sum / index);
    }
    void array::show_array(void)
    {
    for (int i = 0; i < index; i++) cout << data[i] << ' ';
    cout << endl;
    }
    int array::add_value(int value)
    {
    if (index == size) return(-1); // massiv polon
    else
    {
    data[index] = value;
    index++;
    return(0); // uspeshno
    }
    }
    void main(void)
    {
    array numbers (100); // massiv iz 100 el-tov
    int i;
    for (i = 0; i < 50; i++) numbers.add_value(i);
    numbers.show_array();
    cout << "Summa chisel ravna " << numbers.sum () << endl;
    cout << "Srednee znachenie ravno " << numbers.average_value() << endl;
    }
    Dasturda avval massiv 100 elementi taqsimlanadi. So’ngra massivga 50 qiymat add_value. Usuli yordamida yoziladi. Qo’yidagi array sinfida index o’zgaruvchisida massivda saqlanuvchi elementlar soni yoziladi. Agar massiv sig’dirishi mumkin bo’lgan elementlar sonidan ortiq elemetlar yozishga urinilsa add_value funktsiyasi hato haqida ma'lumot qaytaradi. Ko’rinib turibdiki average_value funktsiyasi index o’zgaruvchisidan massiv elementlari soni o’rta qiymatini aniqlashda foydalaniladi. Dastur new operatoridan foydalanilgan.
    Agar dasturda haqiqiy qiymatli massivlar binoan ishlash zarur bulsa Yangi sinf yaratishga to’g’ri keladi. Sinflarni kupaytirmaslik uchun sinflar shablonlaridan foydalanish mumkin. Qo’yida umumiy array sinfi shabloni keltirilgagn:
    template class array
    {
    public:
    array(int size);
    T1 sum (void);
    T average_value(void);
    void show_array(void);
    int add_value(T);
    private:
    T *data;
    int size;
    int index;
    };

    Download 313,45 Kb.
    1   ...   76   77   78   79   80   81   82   83   ...   89




    Download 313,45 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot

    Download 313,45 Kb.