• 2) С++ дастурлаш тилида маълумотлар турлари, уларни эълон қилиш ва тасвирлаш тушунчалари. 3) Векторлар ва уларни хоссалари.
  • “Yomon dasturchilar o’zlarining kodlari haqida qayg’urishadi, yaxshi dasturchilar esa ma’lumotlar tuzilmalari va ularning bog’lanishlari haqida bosh qotirishadi.” — Linus Torvalds
  • Mustaqil ishi Mavzu: 1 Дастурлашда маълумотлар тузилмасининг ўрни ва аҳамияти




    Download 0,93 Mb.
    Sana07.01.2024
    Hajmi0,93 Mb.
    #131767
    Bog'liq
    С дастурлаш тилида маълумотлар турлари, уларни эълон қилиш ва тасвирлаш тушунчалари.


    Muhammad al-Xorazmiy nomidagi Toshkent axborot texnologiyalari universiteti
    Ma’lumotlar
    tuzilmasi fanidan bajargan
    Mustaqil ishi
    Mavzu:
    1) Дастурлашда маълумотлар тузилмасининг ўрни ва аҳамияти.
    2) С++ дастурлаш тилида маълумотлар турлари, уларни эълон қилиш ва тасвирлаш тушунчалари.
    3) Векторлар ва уларни хоссалари.
    4) Векторлар устида 4 та амал бажаришга ва хосил бўлган 4та векторни экранга чиқаришга доир дастур тузинг.

    “Yomon dasturchilar o’zlarining kodlari haqida qayg’urishadi, yaxshi dasturchilar esa ma’lumotlar tuzilmalari va ularning bog’lanishlari haqida bosh qotirishadi.” — Linus Torvalds

    Barcha dastur yoki dasturiy mahsulotning asosida ikkita birlik yotadi: ma’lumotlar va ular ustida qandaydir amallar bajaradigan algoritmlar. Algoritmlar ma’lumotlarni biz yoki dastur uchun foydali bo’lgan axborot ko’rinishiga keltirib beradi. Algoritmlar shu ma’lumotlar ustida amallarni (o’qish, yozish, yangilash, o’chirish) samarali va tez bajara olishi uchun biz shu ma’lumotlarni ma’lum bir strukturaga solgan holda saqlashimiz kerak bo’ladi. Demak shunday qilib,


    Ma’lumotlar tuzilmasi — bu ma’lumotlarni samarali o’qish va o’zgartirish imkonini beruvchi, ma’lumotlarni saqlash va boshqarishning bir formatga solingan shaklidir. (Manba: Wikipidia)
    Soddaroq qilib aytganda, ma’lumotlar tuzilmasi — bu ma’lumotlarning ma’lum bir strukturaga solingan, ular o’rtasida ma’lum bir bog’lanishlar yaratilgan va ular ustida ma’lum amallar bajaruvchi funksiyalardan tashkil topgan guruh. Eng sodda ma’lumotlar tuzilmasiga misol qilib massiv (array)ni ko’rsatishimiz mumkin.
    Add your words here,According to your need to draw the text box size.Please read the instructions and more. Add your words here
    Ma’lumotlar tuzilmalari ustida asosiy bajarilishi mumkin bo’lgan amallar. Bularga ma’lumotlarni
    Ko’rib chiqish (Traversing)
    O’qib olish (Retrieving)
    Kiritish (Insertion)
    O’chirish (Deletion)
    Qidirish (Search)
    Saralash (Sorting)
    Birlashtirish (Merging)lar kiradi.
    Quyida keltirilgan ma’lumotlar tuzilmalari dasturlashda eng ko’p qo’llaniladigan tuzilmalardir. Ularga:
    1. Massiv (Array)
    2. Bog’langan ro’yhat (Linked List)
    3. Navbat (Queue)
    4. Stek (Stack)
    5. Hash jadvallar (Hash tables)
    6. Daraxtlar (Trees)
    7. Graflar (Graph)
    C++ Ma’lumot turlari :
    #include
    using namespace std;

    int main() {
    int myNum = 5; // Butun (whole number)
    float myFloatNum = 5.99; // O'nli kasr
    double myDoubleNum = 9.98; // O'nli kasr Float bilan chegarasi bilan farq qiladi.
    char myLetter = 'D'; // Char
    bool myBoolean = true; // Boolean (Rost yoki Yolg'on)
    string myText = "Hello"; // Satr
    }
    Source code
    wchar_t Harf = L‘A’;
    wchar_t DT[] = L“C++”;
    int. Butun sonlarning asosiy (базовый) turi hisoblanadi. Uning hajmi kamida 2 baytga teng. Lekin 32/64 bit arxitekturali tizimlarda uning hajmi kamida 4 bayt. Bu tur o’zgartirgich (модификатор) lar bilan birga ishlatilishi mumkin. Quyidagi o’zgartirgichlar mavjud: signed, unsigned (ishorasini belgilaydi) va short, long, long long (hajmini belgilaydi). Demak,
    short, short int, signed short, signed short int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 2 bayt va -32768 dan 32767 gacha bo’lgan sonlarni qabul qiladi.
    unsigned short, unsigned short int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 2 bayt va 0 dan 65535 gacha bo’lgan sonlarni qabul qiladi.
    signed, signed int, int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va -2147483648 dan 2147483647 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 16 bitli tizimlarda uning hajmi 2 bayt (short variantidek).
    unsigned, unsigned int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va 0 dan 4294967295 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 16 bitli tizimlarda uning hajmi 2 bayt (short variantidek).
    long, long int, signed long , signed long int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va -2147483648 dan 2147483647 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 64 bitli tizimlarda uning hajmi kamida 8 bayt va -9223372036854775808 dan 9223372036854775807 gacha bo’lgan sonlarni qabul qiladi.
    unsigned long, unsigned long int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va 0 dan 4294967295 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 64 bitli tizimlarda buning hajmi kamida 8 bayt va 0 dan 18446744073709551615 gacha bo’lgan sonlarni qabul qiladi.
    long long, long long int, signed long long, signed long long int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 8 bayt va -9223372036854775808 dan 9223372036854775807 gacha bo’lgan sonlarni qabul qiladi.
    unsigned long long, unsigned long long int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 8 bayt va 0 dan 18446744073709551615 gacha bo’lgan sonlarni qabul qiladi.
    float. Yagona aniqlikga ega bo’lgan haqiqiy sonlar turi hisoblanadi. Bunday aniqlikga ega sonlar odatda 4 bayt hajmga ega va 1.17E-38 dan 3.4E38 gacha bo’lgan sonlarni qabul qiladi.
    double. float ga nisbatan ikki karra yuqori aniqlikga ega bo’lgan haqiqiy sonlar turi va odatda 8 bayt hajmga ega. 2.23E-308 dan 1.79E308 gacha bo’lgan sonlarni qabul qiladi.
    long double. Kengaytirilgan aniqlikga ega bo’lgan haqiqiy sonlar turi va odatda 10 yoki 16 bayt (kompillyatorga bog’liq) hajmga ega. 3.36E-4932 dan 1.18E4932 gacha bo’lgan sonlarni qabul qiladi.
    Raqam turlari
    #include #include
    using namespace std; using namespace std;
    int main() { int main() {
    int butun = 13; // Butun (whole number) } int mn = 13.15; // Haqiqiy (whole number) }
    Boolean turlari
    Boolean ma'lumotlar turi bilan e'lon qilinadi boolkalit so'z va faqat qiymatlarni qabul qilishi mumkin true, yoki false. Qiymat qaytarilganda true = 1va false = 0.
    #include
    using namespace std;

    int main() {
    bool togri = true;
    bool yolgon = false;
    cout << togri; // Chiqadi 1 (true)
    cout << yolgon; // Chiqadi 0 (false)
    }
    Belgilar turlari
    charMa'lumotlar turi saqlash uchun foydalaniladigan yagona belgi. Belgilar 'A' yoki 'c' kabi bir tirnoq bilan o'ralgan bo'lishi kerak:
    char myGrade = 'F';
    cout << myGrade;
    Shu bilan bir qatorda, siz ma'lum bir belgilarni ko'rsatish uchun ASCII qiymatlaridan foydalanishingiz mumkin:
    #include
    using namespace std;

    int main() {
    char a = 65, b = 66, c = 67;
    cout << a;
    cout << b;
    cout << c;
    }
    ABS
    String (Satr) turlari
    stringTuri belgi (matn) bir ketma-ketlikni saqlash uchun ishlatiladi. satrda yozilganidek qo'sh tirnoqda yozilishni unutmang. Misol uchun string ism = "MasterSherkulov";
    Satrlardan foydalanish uchun siz qo'shimcha kutubxonadan foydalanishingizga to'g'ri keladi kutubxonaga kiritishingiz kerak:
    #include
    #include
    using namespace std;

    int main() {
    // string o'zgaruvchi e'lon qilinishi
    string satr = "Hello";

    // string(satr) o'zgaruvchi qiymatini ekranga chiqarish.
    cout << satr;
    }
    Vektorlar. Vektor bu bir xil toifadagi elementlarning tartibli ketma ketligi bo’lib, massivdan farqi uning o’lchami dastur bajarilishi davomida o’zgarishi mumkin,yani vektor bu dinamik massiv hisoblanadi.
    Vektorlarni turlicha initsializatsiyalash usullari mavjud:
    vector vec0; // bo’sh vektor
    const int size = 8;
    const int value = 1024;
    vector vec1(size);//8 ta elementga ega, elementlar qiymatlari 0 ga teng
    vectorvec2(size,value);//8 ta elementga ega, elementlar qiymatlari 1024 ga teng
    inta[4] = { 0, 1, 1, 2 };
    vector vec3(a,a+4);//4 ta elementga ega, elementlar qiymatlari a massivinikiga teng
    vector vec4(vec2);//vec2 ning nusxasi
    Vektorlar bilan ishlash uchun standart kutubxona funksiyalari mavjud bo’lib, ular yordamida turli amallarni siklsiz, bir qator kod yordamida bajarish mumkin. Ulardan ayrimlarini keltirib o’tamiz:
    test.at(i) - test[i] kabi yozuv bilan bir xil, faqat bunda agar i-element mavjud bo’lmasa, dastur hatolik ko’rsatmaydi;
    test.asign(n,m)–vektorga n ta elementni m qiymat bilan yozadi;
    test.asign(start,end)–boshqa vektorning boshi va oxirini ko’rsatuvchi iteratorlar startdan end gacha bo’lgan elementlarni ushbu vektorga kiritadi;
    test.front()–1-elementga murojaat;
    test.back() –oxirgi elementga murojaat;
    test.begin()–vektor 1-elementi iteratori;
    test.end()–vektor oxiri iteratori(oxirgi elementidan keying adresni ko’rsatadi);
    test.clear()–vektorni tozalash;
    test.erase(i)yokitest.erase(start,end)–i-iterator elementini yoki start va end oralig’idagi elementlarni o’chiradi;
    test.size()–vektordagi elementlar sonini aniqlaydi;
    test.swap(test2) - test va test2 vektorlar elementlarini almashtiradi;
    test.insert(a,b) - test vektoriga iterator ko’rsatayotgan a elementdan oldin b elementni kiritadi, bunda iterator kiritilgan elementni ko’rsatadi;
    test.insert(a,n,b)– b elementdan n ta kiritadi;
    test.insert(a,start,end) - start va end iteratorlari oralig’idagi elementlarni a dan oldin kiritadi.
    begin() va end() iteratorlari mos ravishdaxotirada vektorning birinchi elementini va oxirgi elementidan keyingi adresni ko‘rsatadi.Shu o‘rinda iterator nimaligiga aniqlik kiritsak. Iterator bi birorta o‘zgaruvchiga ko‘rsatkich hisoblanadi. Iterator bizga kerak qiymatlarni qayerdaligini biladi va uning qiymatini bizga chiqarib beradi. Itaratorlar asosan konteynerlar bilan ishlashda qo‘llaniladi.
    iterator_nomi::iterator nomi;
    Masalan:vector ::iterator begin=vec.begin();
    string::iterator end,cur;
    Satrlar ham konteyner hisoblanadi. Endi iterator ko‘rsatayotgan element quyidagicha olinadi.
    cout<<*cur<
    Bu erda tushunarliki, * belgisi cur iteratorni emas, u ko‘rsatayotgan qiymatni ko‘rsatadi.
    cur++; // keying elementga o‘tish
    cur+=10; // <=>cur=cur+10 10 ta elementdan keyinga o‘tish
    Vektor elementlarinni iterator bilan ekranga chiqarishni ko‘ramiz:
    vector test;
    string buffer = "";
    //elementlarni kiritilsh
    do {
    getline(cin, buffer);
    if (buffer.size() > 0) test.push_back(buffer);
    } while (buffer != "");
    vector::iterator cur;
    for (cur=test.begin();cur
    cout<<*cur<
    #include
    #include
    using namespace std;
    int main()
    {
    vector array1(3);
    array1[0] = 4;
    array1[1] = 2;
    array1[2] = 1;
    vector array2(3);
    array2[0] = 4;
    array2[1] = 2;
    array2[2] = 1;
    // vektorlarni solishtirish
    if (array1 == array2) {
    cout << "array1 == array2" << endl;
    }
    return 0;
    }
    #include
    #include
    using namespace std;
    int main()
    {
    vector q;
    q.push_back(10); q.push_back(11); q.push_back(12);
    vector v;
    for(int i=0; i<5; ++i){
    v.push_back(i);
    }
    / v vektori elementlari 0 1 2 3 4
    std::vector::iterator it = v.begin() + 1;
    // 2-el.dan oldin 33 ni kiritish:
    it = v.insert(it, 33);
    // v vektori elementlari 0 33 1 2 3 4
    //q vektor elementlarini v vector 2-el.dan oldin kiritish:
    v.insert(it, q.begin(), q.end());
    // v vektori elementlari 0 10 11 12 33 1 2 3 4
    it = v.begin() + 3;
    // it v vektorning 4-el.ni ko‘rsatyapti
    // 4-el.dan oldin 3 marta -1ni kiritamiz:
    v.insert(it, 3, -1);
    // v vektor el.lari 0 10 11 -1 -1 -1 12 33 1 2 3 4
    // v vektorning 5 – el-tini o‘chiramiz
    it = v.begin() + 4;
    v.erase(it);
    // v vektor el.lari 0 10 11 -1 -1 12 33 1 2 3 4
    v.clear();//v vektorni o‘chirish
    return 0;
    }
    Elementni olib tashlash
    Vektordan biror elementni olib tashlaganingizda pop_back a’zo funksiyasini
    chaqirish orqali uning hajmini to’g’irlamoqchi bo’lasiz. Bu yerda tartib ahamiyatga
    ega bo’lmaganda jadval elementini olib tashlash kodi
    [pos]:
    int last_pos = values.size() - 1;
    values[pos] = values[last_pos]; // Replace element
    at pos with last element
    values.pop_back(); // Delete last element
    Buyurilgan vektordan biror elementni olib tashlashda birinchi elementni olib
    tashlab keyin uning hajmini qisqartiring:
    for (int i = pos + 1; i < values.size(); i++)
    {
    values[i - 1] = values[i];
    }
    values.pop_back(); Elementni qo’shish
    Vektor oxiriga element qo’shish qo’shimcha kod talab etmaydi. push_back
    a’zo funksiyasidan foydalanishning o’zi kifoya.
    Elementni o’rtaga qo’yganingizda vektor hajmini kattalashtirishni xoxlaysiz.
    Quyidagi koddan foydalaning:
    int last_pos = values.size() - 1;
    values.push_back(values[last_pos]);
    for (int i = last_pos; i > pos; i--)
    {
    values[i] = values[i - 1];
    }
    values[pos] = new_element;
    O’xshashlikni topish
    Ba’zida siz barcha o’xshashlikni topishni hohlaysiz. Bu jadvallar bilan uzoq
    davom etadi, lekin o’xshashlikni yig’uvchi vektorni qo’llash mumkin. Bu yerda biz
    100 dan katta bo’lgan barcha elementlarni yig’dik:
    vector matches;
    for (int i = 0; i < values.size(); i++)
    {
    if (values[i] > 100)
    {
    matches.push_back(values[i]);
    }
    }
    Ko’chirish
    Jadvalning kopiyasini olish uchun aniq takrorlash kerak bo’ladi. Bu
    vektorning nus’hasini olishdan ko’ra osonroq. Siz oddiygina uni boshqa vektorga
    qo’yasiz. Masalan:
    vector squares;
    for (int i = 0; i < 5; i++) { squares.push_back(i *
    i); }
    vector lucky_numbers; // Initially empty
    lucky_numbers = squares; // Now lucky_numbers
    contains the same elements as squares
    vector values; // Dastlabki bo’sh
    values.push_back(32); // endi qiymatla 1 hajmga va
    element esa 32 hajmga ega
    values.push_back(54); // endi qiymatla 2 hajmga va
    element esa 32,54 hajmga
    ega values.push_back(37.5); // endi qiymatla 3
    hajmga va element esa
    32,54,37.5 hajmga ega
    push_back a’zo funksiyasi uchun boshqa bir
    foydalanish bu vektorni kiritma qiymatlari bilan to’ldirish.
    vector values; // Dastlabki bo’sh
    double input;
    while (cin >> input)
    {
    values.push_back(input);
    }
    E’tiboringiz uchun rahmat

    Download 0,93 Mb.




    Download 0,93 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Mustaqil ishi Mavzu: 1 Дастурлашда маълумотлар тузилмасининг ўрни ва аҳамияти

    Download 0,93 Mb.