• Mustaqil ishi Topshirdi: Aminjonov M. Qabul qildi: Jo’rayev M. Mustaqil ish Mavzu
  • Muhammad al xorazmiy nomidagi toshkent axborot texnologiyalari universiteti




    Download 22.73 Kb.
    Sana09.06.2023
    Hajmi22.73 Kb.
    #71512
    Bog'liq
    Aminjonov Muzaffar
    Daryolar, akang kuchaydi, 22, 1649221771, Windows operatsion tizimining oddiy va serverli sistemalarini kompyuterga o\'rnatish, A-4, Гущина-О.-А.-Сравнения-в-кольце-целых-чисел, Xosmas integrallar, Toshkent davlat iqtisodiyot universiteti, AHMAD YASSAVIYNING PEDAGOGIK QARASHLARI, 6-маър (1), sasa, 5-6-7-8-9-10-11-sinf-tarix-testlar-22, 1303334

    RAQAMLI TEXNOLOGIYALAR VAZIRLIGI
    MUHAMMAD AL – XORAZMIY NOMIDAGI
    TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI

    FARG‘ONA FILIALI

    Telekommunikatsiya Texnologiyalari Yo’nalishi
    731-21 – guruh talabasi
    Aminjonov Muzaffarning
    Dasturlash 2”

    fanidan tayyorlagan
    Mustaqil ishi

    Topshirdi: Aminjonov M.
    Qabul qildi: Jo’rayev M.


    Mustaqil ish
    Mavzu: Fayllar bilan ishlashning yangi usullari (I/O texnologiyasi).
    C++ da fayllar bilan ishlash
    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.
    Misol 1. fread va fwrite funksiyalarining qo'llanilishi
    #include
    #include
    int main()
    {
    int n = 5;
    double d = 10.77;
    char s[20] = "tamird.uz";
    FILE *f;
    // binar faylni yozish uchun ochamiz
    f = fopen("misol.txt", "wb");
    fwrite(&n, sizeof(int), 1, f); // n sonini faylga yozish
    fwrite(&d, sizeof(double), 1, f); // d sonini faylga yozish
    // satrni faylga yozish
    fwrite(s, sizeof(char), strlen(s) + 1, f);
    fclose(f); // faylni yopish
    n = 0; d = 0;
    // binar faylni o'qish uchun ochamiz
    f = fopen("misol.txt", "rb");
    fread(&n, sizeof(int), 1, f); // n sonini fayldan o'qish
    fread(&d, sizeof(double), 1, f); // d sonini fayldan o'qish
    // satrni fayldan o'qish
    fread(s, sizeof(char), strlen(s) + 1, f);
    fclose(f); // faylni yopish
    cout << n << endl;
    cout << d << endl;
    cout << s << endl;
    system (“pause”);
    return 0;
    }

    yuqoridagi misolda satrni yozish va o'qish uchun quyidagicha kod ishlatildi:
    fwrite(s, sizeof(char), strlen(s) + 1, f);
    fread (s, sizeof(char), strlen(s) + 1, f);
    Buning kamchiligi s satridagi har bir belgi alohida - alohida faylga yozildi va o'qildi.
    Bu masalani quyidagicha hal qilish mumkin edi:
    fwrite(s, sizeof(s), 1, f);
    fread (s, sizeof(s), 1, f);
    Lekin bu usulning ham kamchiligi bor. Ya'ni s satri belgilar i soni massiv o'lchamidan
    kam bo'lgan holda, keraksiz ma'lumotlarni saqlash va o'qish sodir bo'ladi.
    Fayl ko'rsatkichi bilan ishlovchi funksiyalar
    Fayldan ma'lumot o'qiganda yoki yozganda fayl ko'rsatkichi avtomat ravishda o'qilgan yoki yozilgan bayt miqdoricha siljiydi. Fayl ko'rsatkichining kelgan joyini aniqlash uchun ftell funksiyasi ishlariladi.
    long int ftell ( FILE * stream );
    Fayl ko'rsatkichini siljit ish uchun fseek funksiyasi ishlatiladi.
    int fseek ( FILE * stream, long int offset, int whence);
    Bu funksiya offset da ko'ratilgan bayt miqdoricha siljishni amalga oshiradi. whence o'zgaruvchisi quyidagi qiymatlarni qabul qilishi mumkin:
    O'zgarmas whence Izoh
    SEEK_SET 0 Fayl boshiga nisbatan siljitish fayl ko'rsatkichining joriy SEEK_CUR 1 xolatiga nisbatan siljitish SEEK_END 2 Fayl oxiriga nisbatan siljit ish Agar whence = 1 bo'lsa (SEEK_CUR), offset musbat (o'ngga siljish) yoki manfiy (chapga siljish) bo'lishi mumkin. Fayl ko'rsatkichini faylning boshiga o'rnatish uchun rewind funksiyasi ishlatiladi.
    void rewind ( FILE * stream );
    Bu amalni fayl ko'rsatkichini siljit ish orqali ham amalga oshirish mumkin.
    fseek (f, 0, SEEK_SET);
    Agar faylda faqat butun sonlar yozilgan bo'lsa, uning k - elementiga murojaat quyidagicha bo'ladi.
    fseek (f, sizeof(int) * (k - 1), SEEK_SET);
    fread (&n, sizeof(int), 1, f);
    Fayl oxirini aniqlash uchun feof funksiyasi ishlatiladi.
    int feof ( FILE * stream );
    feof funksiyasi fayl ko'rsatkichi fayl oxirida bo'lsa, noldan farqli qiymat qaytaradi.
    Boshqa hollarda nol qaytaradi.
    Misol 2. n natural soni berilgan. Elementlari n ta butun sondan iborat bo`lgan faylni hosil qiluvchi va ekranga chiqaruvchi programma tuzilsin.
    #include
    #include
    int main()
    {
    int n, k;
    FILE *f;
    f = fopen("binar", "wb+");
    // binar faylni yozish va o'qish uchun ochish
    if (f == NULL)
    {
    cout << "Faylni hosil qilishda xato bo'ldi";
    return 1;
    }
    cout << "n="; cin >> n;
    for (int i = 0; i < n; i++)
    {
    cin >> k;
    fwrite(&k, sizeof(k), 1, f);
    }
    // fayl ko'rsatkichini fayl boshiga qo'yish
    rewind(f);
    while (fread(&k, sizeof(k), 1, f))
    {
    //fayl boshidan fayl ko'rsatkichi turgan o'ringacha bo'lgan baytlar
    int bayt = ftell(f);
    cout << k <<" ftell(f)=" << bayt << endl;
    }
    fclose(f);
    system (“pause”);
    return 0;
    }

    Misol 3. n natural soni berilgan. Elementlari n ta butun sondan iborat bo`lgan faylni hosil qiluvchi va juft elementlar ini 2 marta orttiruvchi programma tuzilsin.
    #include
    #include
    int main()
    {
    int n, k;
    FILE *f;
    // binar faylni yozish va o'qish uchun ochish
    f = fopen("binar", "wb+");
    if (f == NULL)
    {
    cout << "Faylni hosil qilishda xato bo'ldi";
    return 1;
    }
    cout << "n="; cin >> n;
    for (int i = 0; i < n; i++)
    {
    cin >> k;
    fwrite(&k, sizeof(k), 1, f);
    }
    // fayl ko'rsatkichini fayl boshiga qo'yish
    rewind(f);
    while (!feof(f)) // fayl oxiri uchramasa bajar
    {
    fread(&k, sizeof(k), 1, f);
    if (k % 2 == 0 )
    {
    k *= 2;
    // fayl ko'rsatkichini sizeof(int) bayt chapga surish
    fseek(f, -sizeof(int), SEEK_CUR);
    fwrite(&k, sizeof(int), 1, f);
    // fayl ko'rsatkichini o'rnatish
    fseek(f, ftell(f), SEEK_SET);
    }
    }
    cout << "fayl elementlari\n";
    rewind(f);
    while (fread(&k, sizeof(k), 1, f))
    cout << k << endl;
    fclose(f);
    return 0;
    }

    3 - misolni quyidagicha yechish ham mumkin.
    #include
    #include
    using namespace std;
    int main()
    {
    int n, k;
    FILE *f;
    f = fopen("binar", "wb+");
    cout << "n="; cin >> n;
    for (int i = 0; i < n; i++)
    {
    cin >> k;
    fwrite(&k, sizeof(k), 1, f);
    }
    // fayl ko'rsatkichini fayl boshiga qo'yish
    rewind(f);
    while (!feof(f))
    {
    // fayl ko'rsatkichi o'rnini eslab qolish
    int pos = ftell(f);
    fread(&k, sizeof(k), 1, f);
    if (k % 2 == 0 )
    {
    k *= 2;
    // fayl ko'rsatkichini oldingi xolatiga o'rnatish
    fseek(f, pos, SEEK_SET);
    fwrite(&k, sizeof(int), 1, f);
    // fayl ko'rsatkichi o'rnini sizeof(int) ga surish
    pos += sizeof(int);
    fseek(f, pos, SEEK_SET);
    }
    }
    cout << "fayl elementlari\n";
    rewind(f);
    // fayl elementlarini chiqarish
    while (fread(&k, sizeof(k), 1, f))
    cout << k << endl;
    fclose(f);
    system (“pause”);
    return 0;
    }

    Download 22.73 Kb.




    Download 22.73 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Muhammad al xorazmiy nomidagi toshkent axborot texnologiyalari universiteti

    Download 22.73 Kb.