13. Strukturalar — struct

Oldingi bo‘limda massivlar yordamida bir xil turdagi bir nechta qiymatlarni saqlashni o‘rgandik.

Masalan:

int ballar[5] = {90, 85, 75, 95, 80};

Lekin ba'zan turli xil ma'lumotlarni bitta joyda saqlash kerak bo‘ladi.

Masalan, bitta o‘quvchi haqida:

Ism: Ali
Yosh: 16
Ball: 90

Bu ma'lumotlarning turlari ham har xil:

char → ism
int  → yosh
int  → ball

Bunday vaziyatda struct juda foydali.


struct nima?

struct — turli xil ma'lumotlarni bitta guruhga birlashtirish uchun ishlatiladi.

Masalan:

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

Bu yerda Talaba nomli yangi ma'lumot turi yaratdik.

U uchta ma'lumotni saqlaydi:

ism
yosh
ball

struct yaratish

Oddiy misol:

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

Lekin bu hali talaba yaratgani yo‘q.

Bu faqat Talaba qanday ma'lumotlardan iborat bo‘lishini belgilaydi.

Endi undan foydalanamiz.


struct o‘zgaruvchi yaratish

Masalan:

struct Talaba talaba1;

Endi talaba1 quyidagi ma'lumotlarni saqlashi mumkin:

ism
yosh
ball

Qiymat berish

struct ichidagi ma'lumotlarga nuqta . orqali murojaat qilamiz.

Masalan:

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

int main() {
    struct Talaba talaba1;

    talaba1.yosh = 16;
    talaba1.ball = 90;

    return 0;
}

Bu yerda:

talaba1.yosh

talabaning yoshini bildiradi.

talaba1.ball

talabaning balini bildiradi.


Ism berish

Satrni strcpy() yordamida struct ichiga yozish mumkin.

Masalan:

#include <stdio.h>
#include <string.h>

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

int main() {
    struct Talaba talaba1;

    strcpy(talaba1.ism, "Ali");
    talaba1.yosh = 16;
    talaba1.ball = 90;

    printf("Ism: %s\n", talaba1.ism);
    printf("Yosh: %d\n", talaba1.yosh);
    printf("Ball: %d\n", talaba1.ball);

    return 0;
}

Natija:

Ism: Ali
Yosh: 16
Ball: 90

struct ga qiymat berishning oson usuli

struct yaratilayotganda qiymatlarni ham berish mumkin.

Masalan:

struct Talaba talaba1 = {"Ali", 16, 90};

Endi:

talaba1.ism

Ali ga,

talaba1.yosh

16 ga,

talaba1.ball

90 ga teng.


Bir nechta struct

Bir nechta talaba yaratish mumkin:

struct Talaba talaba1 = {"Ali", 16, 90};
struct Talaba talaba2 = {"Vali", 17, 85};

Keyin ularning ma'lumotlarini chiqarish mumkin:

printf("%s\n", talaba1.ism);
printf("%s\n", talaba2.ism);

Natija:

Ali
Vali

struct va massiv

struct va massivni birga ishlatish juda foydali.

Masalan, 3 ta talabani saqlaymiz:

struct Talaba talabalar[3] = {
    {"Ali", 16, 90},
    {"Vali", 17, 85},
    {"Hasan", 16, 95}
};

Endi massivda 3 ta talaba bor.

Ularni for yordamida chiqarish mumkin:

#include <stdio.h>

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

int main() {
    struct Talaba talabalar[3] = {
        {"Ali", 16, 90},
        {"Vali", 17, 85},
        {"Hasan", 16, 95}
    };

    for (int i = 0; i < 3; i++) {
        printf("%s - %d ball\n",
               talabalar[i].ism,
               talabalar[i].ball);
    }

    return 0;
}

Natija:

Ali - 90 ball
Vali - 85 ball
Hasan - 95 ball

struct qayerda ishlatiladi?

struct haqiqiy dasturlarda juda ko‘p ishlatiladi.

Masalan, foydalanuvchi haqida:

struct User {
    char ism[30];
    int yosh;
};

Mahsulot haqida:

struct Product {
    char nom[50];
    float narx;
};

Kitob haqida:

struct Book {
    char nom[50];
    char muallif[50];
    int yil;
};

Har bir struct biror obyekt haqida ma'lumotlarni bir joyda saqlashga yordam beradi.


struct ning foydasi

Tasavvur qiling, foydalanuvchi haqida quyidagi ma'lumotlar bor:

ism
yosh
email
telefon

Har birini alohida boshqarish o‘rniga:

struct User {
    char ism[30];
    int yosh;
    char email[50];
    char telefon[20];
};

deb bitta guruhga birlashtirishimiz mumkin.

Bu dasturimizni tartibli qiladi.


Oddiy amaliy misol

Mahsulot yaratamiz:

#include <stdio.h>

struct Mahsulot {
    char nomi[30];
    float narxi;
};

int main() {
    struct Mahsulot mahsulot = {"Telefon", 2500.0};

    printf("Mahsulot: %s\n", mahsulot.nomi);
    printf("Narxi: %.2f", mahsulot.narxi);

    return 0;
}

Natija:

Mahsulot: Telefon
Narxi: 2500.00

struct va funksiya

struct ni funksiyaga ham berish mumkin.

Masalan:

#include <stdio.h>

struct Talaba {
    char ism[20];
    int ball;
};

void chiqar(struct Talaba talaba) {
    printf("Ism: %s\n", talaba.ism);
    printf("Ball: %d\n", talaba.ball);
}

int main() {
    struct Talaba talaba = {"Ali", 90};

    chiqar(talaba);

    return 0;
}

Natija:

Ism: Ali
Ball: 90

Bu usul katta dasturlarda juda foydali.


Amaliy mashqlar

1-mashq

Quyidagi ma'lumotlarni saqlaydigan struct yarating:

ism
yosh

Masalan:

Ali
17

2-mashq

Quyidagi ma'lumotlarni saqlaydigan struct yarating:

mahsulot nomi
narxi

Masalan:

Telefon
2500

3-mashq

3 ta talabani struct massivida saqlang.

Har bir talabaning:

ismi
yoshi
bali

bo‘lsin.


4-mashq

struct yordamida bitta kitob yarating.

Kitobda:

nomi
muallifi
yili

bo‘lsin.

Keyin ularning hammasini ekranga chiqaring.


5-mashq

Quyidagi kod nima chiqaradi?

struct Talaba {
    char ism[20];
    int ball;
};

int main() {
    struct Talaba talaba = {"Ali", 95};

    printf("%d", talaba.ball);

    return 0;
}

Avval javobni o‘ylab ko‘ring.


Muhim narsalarni eslab qoling

struct turli xil ma'lumotlarni bitta guruhga birlashtiradi.

Masalan:

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

struct o‘zgaruvchi:

struct Talaba talaba;

Ichidagi ma'lumotga murojaat:

talaba.yosh

talaba.ball

Boshlang‘ich qiymat berish:

struct Talaba talaba = {"Ali", 16, 90};

struct massiv bilan ham ishlatilishi mumkin:

struct Talaba talabalar[3];

Xulosa

struct yordamida biror obyektga tegishli turli xil ma'lumotlarni bir joyda saqlash mumkin.

Masalan:

struct Talaba {
    char ism[20];
    int yosh;
    int ball;
};

Bu Talaba haqida kerakli ma'lumotlarni bitta guruhga birlashtiradi.