• Nostandart funksiyalar. Foydalanuvchining funksiyalari Fayllar bilan ishlashning yangi usullari (I/O texnologiyasi)
  • Topshirdi : ki 15-21(S) guruh talabasi Sh. Toshniyozov Qabul qildi : B. Nosirov qarshi 2023 Reja




    Download 76.22 Kb.
    bet1/2
    Sana11.10.2023
    Hajmi76.22 Kb.
    #87625
      1   2
    Bog'liq
    2-mustaqil ish Toshniyozov Shuhrat
    Kiber 6-amaliy, Kiber 5.1-amaliy, MB 3 mustaqil ish.pdf-1, 1-мавзу...Кадрлар тайёрлаш миллий дастури, INFECTION DISEASES, murod fizika 8, jismoniy, TechnoWays-OTM-ilova, 13263 1 25766084B7E7A9DC1B4EE54596A0BCBBD0A96E1B, SHAXZOD DES TAQDIMOT, Taqdimot (27), 5-mustaqil ish Toshniyozov Shuhrat, 1-Topshiriq, NI 2-3-4 sinflar ona tili 1,2 чорак

    O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI

    MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI


    4-mustaqil ish

    Topshirdi :KI 15-21(S) guruh talabasi Sh.Toshniyozov
    Qabul qildi : B.Nosirov


    QARSHI 2023
    Reja:

    1. Nostandart funksiyalar. Foydalanuvchining funksiyalari

    2. Fayllar bilan ishlashning yangi usullari (I/O texnologiyasi)

    3. Voris sinflar yaratish va ular yordamida masalalarni yechish

    4. Ob’ektlar massivi bilan ish yuritish

    5. Dinamik massivlar va ko‘rsatgichlar


    Standart funksiyalarning ro`yxati har qanday funksiyani ham o`z ichiga ololmaydi. Masalan, ctgx, arcsinx, arccosx, logax va h.k. Shuning uchun ham dastur tuzuvchi o`zining funksiyalarini aniqlashi yoki tavsiflashi mumkin. Bunday funksiyalar odatda nostandart funksiyalar yoki foydalanuvchining funksiyalari dеb ataladi.

    Foydalanuvchining funksiyasini dasturda aniqlash uchun quyidagi namunadan foydalaniladi:


    DEF FN ()


    Bunda,

    - funksiya aniqlangan satrning nomеri;

    DEF (DEF ine) - aniqlash;

    FN (FUNCTION) - funksiya dеgan ma`noni anglatadi;

    -Bеysik tilidagi o`zgaruvchining nomiga mos kеlib, funksiyaning turini aniqlaydi;

    - bir-biridan vеrgul bilan ajratilgan o`zgaruvchilarning nomlari (ular kichik qavslar ichida bo`lishi shart) bo`lib, ularni formal paramеtrlar dеb ataladi;

    -ifoda.

    Misol,


    1. funksiyani Bеysik tilida aniqlanishi:

    10 DEF FNF (X)X^21


    2.

    30 DEF FNL (X,A)LOG(X)LOG(A)


    3.20 DEF FNS (X)ATN(XSQR(1-X^2))


    Ma`lumki, lotin harflari 26 ta bo`lgani uchun bitta dasturda bir paytda 26 ta nostandart funksiyadan foydalanish mumkin.

    Quyidagi ifoda orqali foydalanuvchining funksiyasini ishlatilishini ko`raylik:

    Agar biz ixtiyoriy a asosga ko`ra logarifmni ko`rinishida bеlgilasak, u holda (3.1) ni soddaroq qilib (3.2) yordamida quyidagicha yozish mumkin:
    Biz (3.2) ni foydalanuvchining funksiyasi ko`rinishida quyidagicha aniqlab olamiz:


    DEF FN L (Y,A)LOG(Y)LOG(A)


    Bu yerda LOG - Bеysik tilida natural logarifmni bildiradi, Y va A formal paramеtrlar.

    (3.1) ifodani foydalanuvchining funksiyasidan foydalanib hisoblash dasturi quyidagicha bo`ladi:


    10 REM IFODA

    20 INPUT”X”;X

    30 DEF FNL (Y,A)LOG(Y)LOG(A)

    40 S(FNL(X,2)FNL(X^21,5))(FNL(X^2,10)FNL (10*X,7))

    50 ? “S”;S

    60 END


    Nostandart funksiyalardan foydalanish dasturning hajmini kamaytirishga olib kеladi. Bu esa dasturning ishlash tеzligini ortishiga olib kеladi.
    Qism dastur
    Agar yuqorida ko`rsatilgan nostandart funksiyaga e`tibor bеrsak, unda faqatgina bitta ifoda turishi mumkin bo`lib, bu ifoda funksiyaning ko`rinishini aniqlaydi. Agar ifodalar soni bir qancha bo`lsa-chi yoki funksiyaning qiymati biror shartga bog`liq bo`lib, bir guruh buyruqlarning bajarilishiga bog`liq bo`lsa-chi?
    Bеysik tilida qism dastur tushunchasi kiritilgan bo`lib, bu yuqoridagi savollarga javob bеrish imkonini bеradi.
    Qism dastur dеb dasturning shunday bir qismiga aytiladiki, unga dasturning hohlagan joyidan turib murojaat qilish mumkin.
    Qism dasturga murojaat qilish uchun GOSUB buyrug`idan foydalaniladi. Uning ko`rinishi quyidagicha:
    GOSUB
    Bu yerda:
    - satrning nomеri;
    GOSUB - buyruqning nomi, u GO (o`t) va SUB routine (qism dastur) so`zlaridan tashkil topgan bo`lib, qism dasturga o`tishni bildiradi;
    - qism dastur boshlangan satrning nomеri.


    Ma`lumotlarni saqlab qo`yish uchun, tashqi xotiraning nomlangan qismiga fayl deyiladi. Bunday fayllar fizik fayllar deyiladi.
    Mantiqiy fayllar. Fizik fayllar bilan ishlash uchun, programmalashtirish tillarida maxsus strukturalashgan, toifalangan fayllar kiritilgan. Bunday fayllar mantiqiy (logicheskiy) fayllar deyiladi. Mantiqiy fayllar, hech qanday fizik xotirani band qilmasdan ma`lumotlarning mantiqiy modelini o`zida saqlaydi. Fizik va mantiqiy fayllar bir - biri bilan fopen funksiyasi orqali bog'lanadi.
    Fayl bir nechta elementdan tashkil topgan bo`lganligi uchun, faqat fayl ko`rsatkichi ko`rsatayotgan elementga murojaat qilish mumkin. Fayldan o'qish yoki yozish mumkin bo'lgan o'rinni ko'rsatuvhi elementga fayl ko'rsatkichi deyiladi. Fayldan ma'lumot o'qiganda yoki yozganda fayl ko'rsatkichi avtomat ravishda o'qilgan yoki yozilgan bayt miqdoricha siljiydi. Fayl ko'rsatkichini magnitafon galovkasiga o'xshatish mumkin.
    Binar fayl - har xil ob'ektlarni ifodalovchi baytlar ketma - ketligidir. Ob'ektlar faylda qanday ketma - ketlikda joylashganini programmaning o'zi aniqlashi lozim. Fayllar bilan ishlovchi funksiyalardan foydalanish uchun sarlavha faylini programmaga qo'shish kerak bo'ladi.
    Fayldan ma'lumotlarni o'qish yoki yozish uchun ochish fopen funksiyasi orqali amalga oshiriladi.
    FILE * fopen ( const char * filename, const char * mode );
    filename - o'zgaruvchisi char toifasidagi satr bo'lib, faylning to'liq nomini ko'rsatishi lozim(filename = "D:\c++\misol.txt"). Agar faylning faqat nomi ko'rsatilgan bo'lsa, fayl joriy katalogdan qidiriladi (filename = "misol.txt"). mode - o'zgaruvchisi ham char toifasidagi satr bo'lib, faylni qaysi xolatda ochish lozimligini bildiradi. mode qiymati faylning ochilish xolati faylni yozish uchun ochish. falename o'zgaruvchisida ko'rsatilgan fayl hosil qilinadi va unga ma'lumot yozish mumkin"w" bo'ladi. Agar fayl oldindan bor bo'lsa (ya'ni oldin hosil qilingan bo'lsa), faylning ma'lumotlari o'chiriladi va yangi bo'sh fayl faqat yozish uchun ochiq holda bo'ladi. Fayl o'qish uchun ochiladi. Agar fayl oldindan mavjud bo'lmasa,"r" xatolik sodir bo'ladi. Ya'ni ochilishi lozim bo'lgan fayl oldindan hosil qilingan bo'lishi shart.
    Faylga yangi ma'lumotlar qo'shish - kiritish uchun ochiladi."a"Yangi kiritilgan ma'lumotlar fayl oxiriga qo'shiladi. Agar fayl oldindan mavjud bo'lmasa, yangi fayl hosil qilinadi. Yozish va o'qish uchun faylni ochish. Agar fayl oldindan bor bo'lsa (ya'ni oldin hosil qilingan bo'lsa), faylning ma'lumotlari "w+"o'chiriladi va yangi bo'sh fayl yozish va o'qish uchun ochiqholda bo'ladi. "r+"Oldindan mavjud bo'lgan faylni o'qish va yozish uchun ochish. Fayl ma'lumotlarni o'qish va yangi ma'lumot qo'shish uchun "a+" ochiladi. fseek, rewind faylni ochishda xatolik sodir bo'lsa, fopen funksiyasi NULL qiymat qaytaradi.
    Ochilgan faylni yopish uchun fclose funksiyasi ishlatiladi.
    int fclose ( FILE * stream );
    Faylni yopishda xato sodir bo'lmasa, fclose funksiyasi nol qiymat qaytaradi. Xato sodir bo'lsa, EOF - fayl oxiri qaytariladi.
    Faylga ma'lumot yozish va o'qish size_t fread ( void * ptr, size_t size, size_t n, FILE * stream ); fread funksiyasi, fayldan ptr ko'rsatkichi adresiga size xajmdagi ma'lumotdan n tani o'qishni amalga oshiradi. Agar o'qish muvoffaqiyatli amalga oshsa fread funksiyasi o'qilgan bloklar soni n ni qaytaradi. Aksholda nol qaytariladi size_t fwrite ( const void * ptr, size_t size, size_t n, FILE * stream ); fwrite funksiyasi, faylga ptr ko'rsatkichi adresidan boshlab size xajmdagi ma'lumotdan n tani yozishni amalga oshiradi.
    Har hil sinflar ob'ektlar va sinflarning uzlari vorislik munosabatlarida bo’lishi mumkin. Bu munosabat obe'ktlar va sinflar ierarhiyasi hosil bo’lishiga olib keladi. Sinflar ierarhiyasi mavjud sinflar yordamida, ya'ngi sinf yaratishga imkon beradi. Mavjud sinflar asosiy (yoki yaratuvchi) bu sinflar asosida shakillangan sinflar hosilaviy (yoki yaratilgan), ba'zida sinf vorislari yoki meroshurlari deb ataladi.
    Hosilaviy sinflar asosiy sinflarning ma'lumotlari va metodlarini merosga oladilar. Bundan tashqari ularning o’z ma'lumotlari va metodlari bo’lishi mumkin.
    Me'roslik o’tuvchi pommosontalar hosilaviy sinflarga ko’chmaydi, balki asosiy sinflarda qoladi. Agar ahborotlarni qayta ishlash uchun hosilaviy sinfda yuq bo’lgan ma'lumotlar kerak bo’lsa ular avtomatik ravishda asosiy sinfda qidiriladi.

    Sodda vorislik
    Vorislik hosilaviy sinfning mavjud asosiy sinfning harakteristikalarini merosga olish hususiyatidir. Misol uchun asosiy sinf employee mavjud bo’lsin:
    class employee
    {
    public:
    employee(char *, char *, float);
    void show_employee(void);
    private:
    char name[64];
    char position[64];
    float salary;
    };
    Dasturda yangi manager sinfi yaratib employee sinfining qo’yidagi elementlarini merosga olishi lozim bo’lsin:
    float annual_bonus;
    char company_car[64];
    int stock_options;
    U holda manager sinfi qo’yidagicha ta'riflanadi:
    class manager : public employee
    {
    public:
    manager(char *, char *, char *, float, float, int);
    void show_manager(void);
    private:
    float annual_bonus;
    char company_car[64];
    int stock_options;
    };
    Hosilaviy sinf asosiy sinfning elementlariga to’g’ridan – to’g’ri nuqta operatori orqali murojaat qila olmaydi. Qo’yidagi MGR_EMP.CPP dasturda vorislikdan foydalanish ko’rsatiladi:
    #include
    #include
    class employee
    {
    public:
    employee(char *, char *, float);
    void show_employee(void);
    private:
    char name [ 64 ];
    char position[64];
    float salary;
    };
    employee::employee(char *name, char *position,float salary)
    {
    strcpy(employee::name, name);
    strcpy(employee::position, position);
    employee::salary = salary;
    }
    void employee::show_employee(void)
    {
    cout << "Imya: " << name << endl;
    cout << "Doljnost': " << position << endl;
    cout << "Oklad: $" << salary << endl;
    }
    class manager : public employee
    {
    public:
    manager(char *, char *, char *, float, float, int);
    void show_manager(void);
    private:
    float annual_bonus;
    char company_car[64];
    int stock_options;
    };
    manager::manager(char *name, char *position, char *company_car, float salary, float bonus, int stock_options) : employee(name, position, salary)
    {
    strcpy(manager::company_car, company_car) ;
    manager::annual_bonus = bonus ;
    manager::stock_options = stock_options;
    }
    void manager::show_manager(void)
    {
    show_employee();
    cout << "Mashina firmih: " << company_car << endl;
    cout << "Ejegodnaya premiya: $" << annual_bonus << endl;
    cout << "Fondovihy optsion: " << stock_options << endl;
    }
    void main(void)
    {
    employee worker("Djon Doy", "Programmist", 35000);
    manager boss("Djeyn Doy", "Vitse-prezident ", "Lexus", 50000.0, 5000, 1000);
    worker.show_employee() ;
    boss.show_manager();
    }
    Bu misolda manager sinfi konstruktoriga e'tibor berish lozimdir. Asosiy sinfning konstruktorini qo’yidagicha chaqirish lozimdir:
    manager::manager(char *name, char *position, char *company_car, float salary, float bonus, int stock_options) :
    employee(name, position, salary) //————————————— Konstruktor bazovogo klassa
    {
    strcpy(manager::company_car, company_car);
    manager::annual_bonus = bonus;
    manager::stock_options = stock_options;
    }
    Yana shunga e'tibor berinki show_manager funktsiyasi show_employee funktsiyasini chaqirishi mumkin, chunki manager sinfi employee sinfining vorisi bo’lgani uchun, umumiy elemenlariga murojaat qilishi mumkindir. Ikkinchi misol
    Misol uchsun book asosiy sinfi mavjud:
    class book
    {
    public:
    book (char *, char *, int);
    void show_book(void);
    private:
    char title[64];
    char author[b 4];
    int pages;
    };
    Yangi library_card sinfi book sinfiga qo’yidagi elemenlarni qo’shishi lozim:
    char catalog[64];
    int checked_out; // 1, agar tekshirilgan bulsa, aks holda O
    Dasturda bu sinf vorislik yordamida qo’yidagicha ta'riflanishmi lozim
    class library_card : public book
    {
    public:
    library_card(char *, char *, int, char *, int);
    void show_card(void);
    private:
    char catalog[64] ;
    int checked_out;
    };
    Qo’yidagi BOOKCARD.CPP dasturida bu sinflardan foydalanish ko’rsatilgan:
    #include
    #include
    class book
    {
    public:
    book(char *, char *, int);
    void show_book(void);
    private:
    char title [64];
    char author[64];
    int pages;
    };
    book::book(char •title, char *author, int pages)
    {
    strcpy(book::title, title);
    strcpy(book::author, author);
    book::pages = pages;
    }
    void book::show_book(void)
    {
    cout << "Nazvanie: " << title << endl;
    cout << "Avtor: " << author << endl;
    cout << "Stranits: " << pages << endl;
    }
    class library_card : public book
    {
    public:
    library_card(char *, char *, int, char *, int);
    void show_card(void) ;
    private:
    char catalog[64];
    int checked_out;
    };
    library_card::library_card(char *title, char *author, int pages, char *catalog, int checked_out) : book(title, author, pages)
    {
    strcpy(library_card::catalog, catalog) ;
    library_card::checked_out = checked_out;
    }
    void 1ibrary_card::show_card(void)
    {
    show_book() ;
    cout << "Katalog: " << catalog << endl;
    if (checked_out) cout << "Status: proverena" << endl;
    else cout << "Status: svobodna" << endl;
    }
    void main(void)
    {
    library_card card( "Uchimsya programmirovat' na yazihke C++", "Jamsa", 272, "101SRR", 1);
    card.show_card();
    }

    Yana shunga e'tibor berinki library_card konstruktori book sinfi konstruktorini chaqiradi.

    Nomlar konfliktini hal kilish

    Agar bir sinfdan ikkinchisini hosil qilinsa asosiy va hosilaviy sinflarda elementlar nomlari bir hil bo’lishi mumkin. Bu holda 'hosilaviy sinf ichidagi funktsiyalarda hosilaviy sinf elementaridan foydalaniladi. Misol uchun book i library_card sinflari price elementlaridan foydalansin. Agar aniq ko’rsatilmagan bo’lsa library_card chsinfi funktsiyalari shu sinfning price elementidan foydalanadi. Agar library_card sinfi funktsiyalaori book sinfi price elementiga murojaat qilishi lozim bo’lsa ruhsat operatoridan foydalanishi lozim, masalan book::price. Agar show_card funktsiyasi ikkala narhni ekranga chiqarishi lozim bo’lsa qo’yidagi operatorlardan foydalanishi lozim:
    cout << "Bibliotechnaya tsena: $" << price << endl;
    cout << "Prodajnaya tsena: $" << book::price << endl;


    • Boshqa foydalanuvchi tomonidan belgilangan ma'lumotlar turlari massivi kabi, turdagi sinf massivi ham yaratilishi mumkin

    • Sinf tipidagi massiv o'zining alohida elementlari sifatida sinf ob'ektlarini o'z ichiga oladi.

    • Shunday qilib, sinf tipidagi massiv ob'ektlar massivi sifatida ham tanilgan.

    • Ob'ektlar massivi har qanday o'rnatilgan ma'lumotlar tipidagi massiv bilan bir xil tarzda e'lon qilinadi.

    Download 76.22 Kb.
      1   2




    Download 76.22 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Topshirdi : ki 15-21(S) guruh talabasi Sh. Toshniyozov Qabul qildi : B. Nosirov qarshi 2023 Reja

    Download 76.22 Kb.