Foydalanuvchi tomonidan aniqlanadigan toifalar esa:
a) sanaladigan;
b) diapazonli (oraliqli).
Ma’lumotlarning ixtiyoriy toifasi qiymatlar sohasi va ular ustida bajarilishi mumkin bo‘lgan amallar orqali tavsiflanadi.
Butun toifa – INT
Mazkur toifa butun sonlar to‘plamini qandaydir qism to‘plami bo‘lib, uning o‘lchami mashina, ya’ni EHM konfiguratsiyasiga bog‘liq ravishda o‘zgarib turadi. Agar butun sonni mashinada tasvirlash uchun p ta razryaddan foydalanilsa (bunda qo‘shimcha koddan foydalanilganda), u holda x butun sonning qiymat qabul qilish oralig‘i quyidagicha bo‘lishi zarur, ya’ni quyidagi shartni qanoatlantirishi lozim: -2 n-1<= x< 2 n-1.
Butun toifadagi ma’lumotlar ustida bajariladigan barcha amallar to‘g‘ri amalga oshiriladi deb hisoblanib, ushbu amallar arifmetikada qabul qilgan qoidalariga bo‘ysunadi. Agar ushbu toifada amallar bajarilganda natija ruxsat etilgan oraliqdan chiqib ketsa, u holda hisoblash to‘xtatiladi. Bunday hol to‘lib ketish deb ataladi.
Mazkur toifaga kiruvchi sonlar ikkitaga bo‘linadi: ishorali va ishorasiz. Ularning har bir uchun mos ravishda qiymat qabul qilish oralig‘i mavjud:
a) ishorasiz sonlar uchun (0..2n-1);
b) ishoralilar uchun (-2N-1.. 2N-1-1).
Sonlar mashinada qayta ishlanayotganda ularning ishorali ko‘rinishidan foydalaniladi. Agar mashina so‘zi yozuv, komandarani qayta ishlash va ko‘rsatkichlar uchun foydalanilayotgan bo‘lsa, u holda sonning ishorasiz ko‘rinishidan foydalaniladi.
Butun sonlar ustida – qo‘shish, ayrish, ko‘paytirish, butunsonli bo‘lish (qoldiqni tashlab yuborish orqali), berilgan modul bo‘yicha hisoblash (bo‘lishda qolgan qoldiqni hisoblash), berilgan sonlar to‘plamining eng katta va eng kichik elementini aniqlash, butun darajaga oshirish, sonning qiymatiga qarab o‘zidan oldingi yoki keyingi sonni aniqlash. Bu operatsiyalarning natijalari ham butun sonlar bo‘ladi.
Butun sonlar ustida ==,!=, <, <=, >, >= operatorlar bilan taqqoslash amallarni ham bajarish mumkin. Ammo bu operatsiyalarning natijalari INT toifasiga kirmaydi, ular BOOL toifasiga kiradi.
Haqiqiy toifa
Haqiqiy toifaga kasr qismlari bor chekli sonlar to‘plami kiradi. To‘plamni chekli bo‘lish sharti EXMda sonlarni ifodalash chegaralanganligi bilan bog‘liq. Haqiqiy sonlar ustida quyidagi amallarni bajarish mumkin: qo‘shish, ayrish, bo‘lish, ko‘paytirish, trigonometrik funksiyalarini xisoblash, darajaga oshirish, kvadrat ildiz chiqarish, logarifmlash, minimum va maksimum elementlarni topish va boshqalar. Bularning natijalari ham haqiqiy toifaga kiradi. Bu yerda ham binar amallarga nisbatan masalaning yechimlari mantiqiy toifaga tegishli bo‘ladi.
EHM xotirasida haqiqiy sonlar asosan qo‘zg‘aluvchan nuqta formatida saqlanadi. Bu formatda x haqiqiy son quyidagi ko‘rinishda ifodalanadi:
x = +/- M * q(+/-P) – soning yarimlogarifmik shakldagi ifodalanishi quyidagi chizmada keltirilgan.
937,56 = 93756 * 10-2 = 0,93756 * 103
Mantiqiy toifa
Mazkur toifa mantiqiy mulohazalarni to‘g‘riligini aniqlash uchun, turli hil dasturlash tillarida turlicha ifodalaniladigan ifodalarni 2 ta true(1), false(0)ko‘rinishdaaniqlaydi. Mantiqiy ma’lumotlar ustida quyidagi mantiqiy operatsiyalarni bajarish mumkin: kon’yunksiya (va), diz’yunksiya (yoki) i inkor (yo‘q), hamda qiyinroq bo‘lgan ekvivalentlik, implikatsiya, chiqarib tashlash, yoki va boshqa operatsiyalar. Yuqorida keltirilgan ixtiyoriy operatsiyaning natijasi – mantiqiy qiymatga ega bo‘ladi. Mantiqiy qiymatni xotirada saqlash uchun bitta bit yetarli.
Asosiy mantiqiy funksiyalarning chinlik jadvali
Belgili toifa
Belgili toifaga belgilarning chekli to‘plami yoki liter, ularga lotin alifbosidagi xarflar va unda yo‘q kirill xarflar, o‘nlik raqamlar, matematik va maxsus belgilar kiradi. Belgili ma’lumotlar hisoblash texnikasi bilan inson o‘rtasidagi aloqani o‘rnatishda katta ahamiyatga ega.Ko‘pincha, dasturlashning har bir tizimida belgilar to‘plami fiksirlangan bo‘lib, ular turli tizimlarda turli hil bo‘lishi mumkin. Bundan tashqari ular tartiblangan bo‘lib, har bir uning elementiga aniq bir sonli kod mos qo‘yilib, u to‘plamdagi tartib raqamini aniqlaydi. Belgini sonli kodiga o‘tib, relyatsion operatorlardan foydalanib, simvollarni taqqoslash mumkin.Bunday taqqoslashlarning natijalari BOOL toifasiga kiradi.
C++ tilida belgili toifadan tashqari belgilar massividan tashkil topgan satrli toifalar bilan ham ishlash mumkin, ya’ni char []. Shu o‘rinda aytib o‘tish kerakki, satrlar bilan ishlashda belgilar massividan tashqari satrlar bilan ishlashga mo‘ljallangan maxsus kutubxona mavjud bo‘lib, u “ String “ deb nomlanadi. Satr (qator, String) – bu qandaydir belgilar ketma-ketligi. Satr bitta, bo‘sh yoki bir nechta belgilar birlashmasidan iborat bo‘lishi mumkin. C++ tilida satr 0 dan to 255 tagacha uzunlikka ega bo‘lishi mumkin. Agar o‘zgaruvchi satr toifasiga tegishli bo‘lsa, u holda o‘zgaruvchi toifasi yozilayotganda 2 xil ko‘rinishda char [] yoki String deb aniqlanadi.
Belgili toifadagi amallar:
a) O‘zlashtirish;
b) Taqqoslash;
Ko‘rsatkichli toifa(Pointer)
Ko‘rsatkichlitoifama’lumotlarni ko‘rsatkichlari yoki manzillari (adres) to‘plamini namoyon qiladi, ya’ni ko‘rsatkichlar ma’lumotlarni emas balki bu ma’lumotlar joylashgan xotiradagi manzilni o‘z ichiga oladi. Ko‘rsatkichlar xotirada bori yo‘g‘i 4 bayt joyni egallab, u ko‘rsatayotgan ma’lumotlar ancha katta joyni egallagan bo‘lishi mumkin. Pointer toifasi ma’lumoti ixtiyoriy boshqa biror ma’lumot yoki ma’lumotlar guruhiga yo‘naltirilgan bo‘ladi. Ko‘rsatkichga mumkin bo‘lgan u yoki bu qiymatni o‘zlashtirib, ushbu ko‘rsatkich orqali kerakli ma’lumotga murojatni amalga oshirish mumkin. Pointer toifasidagi ma’lumotlarni qiymatlar to‘plamida bitta maxsus qiymat bo‘lib, uni o‘zlashtirish hech qayerga yo‘naltirilmaganligini ko‘rsatadi, ya’ni nol yoki bo‘sh ko‘rsatkich xisoblanadi. Masalan, C++ tilida bunday qiymat sifatida NULLdan foydalaniladi.Ko‘rsatkichlar ustida amallar quyidagicha bo‘lishi mumkin: biror bir ko‘rsatkichga boshqa ko‘rsatkich qiymatini o‘zlashtirish mumkin yoki boshqa ma’lumot egallab turgan xotira sohasi adresini o‘zlashtirish mumkin. Ko‘rsatkichlar o‘zaro bog‘langan ma’lumotlar tuzilmasini yaratishda va qayta ishlashda katta ahamiyatga ega. Xotirada ko‘rsatkichlarni ifodalash uchun asosan dasturlash tizimiga mos ravishda manzilni maksimal uzunligicha joy ajratiladi. Ko‘rsatkichlarni qiymati nomanfiy butun sonlar sifatida sohada bitlarni ketma-ketligi ko‘rinishida saqlanadi.C++ tilida ko‘rsatkichli o‘zgaruvchilarni e’lon qilish uchun ularning toifasini aniqlash kerak. Buning uchun ko‘rsatkich xotirada qanaqa toifadagi ma’lumotlarni ko‘rsatayotgan bo‘lsa, ko‘rsatkichli o‘zgaruvchiga ham xuddi shunday toifa beriladi.
int a=9;
int *p=&a;
float f=4.6;
float *d=&f;
FILE*f=fopen(“talaba.txt”,’r’);
Foydalanuvchi tomonidan aniqlanadigan toifalar
Sanaladigan toifalar
Qiymatlarning o‘zgaruvchan toifalari standartlardan farqliroq yangi toifalarni yaratishga imkon beradi. Bu guruhga sanaladigan va chegaralangan toifalar kiradi.
Qiymatlarning sanaladigan toifalarning bunday atalishiga sabab, ular qat’iy aniqlangan tartibda sanaladigan ko‘rinishda beriladi va xamma qiymatlarning soni qat’iy chegaralangan xamda ko‘rilayotgan toifadagi qiymatlarni qabul qilishi mumkin. Sanaladigan toifa yechilayotgan masalaga qarab foydalanuvchi tomonidan berilishi mumkin.
Sanaladigan toifa konstantalar ro‘yxatidan tashkil topadi.Bu toifadagi o‘zgaruvchilar ro‘yxatidagi ixtiyoriy qiymatni qabul qilishi mumkin. Sanaladigan toifaning umumiy yozilish shakli quyidagicha:
enum toifaning nomi {konstantalar ro‘yxati};
toifaning nomi o‘zgaruvchi nomi;
Buyerda konstanta tushunchasifoydalanuvchitomonidanberilaganmaxsus konstanta ko‘rinishitushuniladi. Konstantalarro‘yxatibir-biridanvergulbilanajratiladiva ular oddiyqavslar ichiga olinadi.
Masalan:
enum Ranglar{oq, qora, qizil, yashil};
Ranglar rang;
Buyerda Ranglar – sanaladigan toifaning nomi;oq, qora, qizil, yashil-konstantalar.Rang - o‘zgaruvchi nomi bo‘lib u yuqoridagi konstantalardan ixtiyoriysini qabul qilishi mumkin.
Har bir konstanta tartib raqamiga ega bo‘lib, xisobdan boshlanadi, ya’nioq=0, qora=1, qizil=2, yashil=3raqamlarigaega. Konstantalar tartiblangani uchun ularga solishtirish amallari <, <=,==,!=, >=, > shuningdek standart funksiyalarni qo‘llash mumkin.
Strukturalar
Strukturalar turli toifadagi maydonlardan tashkil topgan yozuv xisoblanadi.Strukturalarni e’lon qilish uchun struct kalit so‘zi ishlatiladi. Undan keyin toifaga nom beriladi va {} qavs ichida maydonlar toifalari va nomlari e’lon qilinadi.
struct G{
charch;
} talaba, talabalar[10];
Ushbu toifadagi o‘zgaruvchiyoki massiv elementi maydonlariga murojaat:
• Jadval_elementi[indeks].maydon_nomi=qiymat;
• Ya’ni, talabalar[i].ch=’a’;
Nazorat savollari
1. Ma’lumotlar tuzilmasi deganda nimani tushunasiz?
2. Ma’lumotlarni tasvirlash bosqichlarini keltirib o‘ting.
3. Ma’lumotlar tuzilmasiklassifikatsiyasi vafoydalanuvchi dasturidagi klassifikatsiyasi qanday?
4. Ma’lumotlar tuzilmasini operativ va tashqi xotiradagi klassifikatsiyasi.
5. Qanday ma’lumotlar dinamik yoki statik turdagi ma’lumotlar tuzilmasi deyiladi?
6. Ma’lumotlarning qanday toifalarini bilasiz?
7. Butun toifadagi ma’lumotlar ustida qanday amallarni bajarish mumkin?
8. Ma’lumotlarning bul toifasida qanday amallar mavjud?
9. CHAR toifasining tuzilmasi qanday?Belgili toifadan qanday amallarni bajarish mumkin?
10. Ko‘rsatkichli toifa ma’lumoti yordamida nimani hisoblash mumkin?
11. Ma’lumotlarning sanaladigan toifasi degani nima?
12. Struktura toifasi qanday beriladi?
Asosiy adabiyotlar.
Data structure and algorithms. Made easy guide. Fast track student edition. 2014. Chapter 1,2,3.
https://play.google.com/books/reader?id=jnnCAwAAQBAJ&printsec=frontcover&output=reader&hl=ru&pg=GBS.PA8
AdamDrozdek. Data structure and algorithms in C++. Fourthedition. 2013. Chapter1
SedjvikRobert. Fundamentalnыye algoritmы na S++. 2001. Glava 3,4.
StefanR.Devis. C++ dlya chaynikov. 2003, Dialektika. Glava 8, 9.
DinmanM.I. C++ osvoynaprimerax. SPb. BXV-Peterburg. 2006. Glava 2.2
O.J.Dahl, E.W.Dijkstra. Structured programming. Academik press. NewYork and London. 1972. Chapter2.
.
Statik ma’lumotlar tuzilmasi haqida tushuncha
Kalit so’zlar: statik ma’lumotlar tuzilmasi, tuzilma uzunligi, xotira, massivlar, matrisalar, strukturalar, funksiyalar
Ma’lumotlar tuzilamasi (MT) ni dasturda ifodalashning 2 ta usuli mavjud:
Statik MT. Bunday tuzilmalar uzunligi (elementlar soni) oldindan aniqlangan bo’ladi va dastur bajarilish mobaynida o’zgarmas hisoblanadi. Elementlar orasidagi munosabatlar ham o‘zgarmas bo’ladi. Bunday tuzilmalar elementlar soni ma’lum va o’zgarmas bo’lgan masalalarda yaxshi qo’l keladi. Statik tuzilma elementlariga qanday qiymat berilsa berilaveradi, ammo tuzilma uchun ajratilgan xotira xajmi o’zgartirilmaydi.
Dinamik MT. Bu tuzilmalar elementlar soni oldindan ma’lum bo’lmagan xollarda qo’llaniladi. Bunda elementlar soni dastur bajarilishi mobaydina o’zgaruvchan hisoblanadi. Ammo imkoni bo’lsa, dasturchi xotirada ziddiyatlarga duch kelmaslik uchun tuzilma o’lchamini oldindan aniqlasa ham bo’ladi.
Quyida statik va dinamik tuzilmalar qiyosi keltirilgan.
Dinamik tuzilmalar
|
Statik tuzilmalar
|
Elementlar xotirada tarqoq xolda joylashishi mumkin.
|
Elementlar xotiraja ketma-ket yachseykalarda joylashadi.
|
Elementlar soni cheklanmagan. Ajar xotirada fizik joy mavjud bo’lsa, element kiritilishi mumkin.
|
Elementlar soni cheklangan. Dastur bajarilishi mobaynida tuzilma uzunligini o’zgartirib bo’lmaydi.
|
Tuzilma elementlarida indeks degan tushuncha yo’q. Tuzilmaning istalgan joyiga element kiritish va o’chirish amallari oson bajariladi. Lekin ba’zi amallar qiyin bajariladi. Chunki elementlar orasida qat’iy ketma-ketlik mavjud.
|
Tuzilmada indeks degan tushuncha mavjud. Shu sababli saralash amalini bajarish oson. Lekin eng og’ir holatni olib qaraydigan bo’lsak, tuzilma boshiga yangi element kiritish va o’chirish amalini bajarish noqulay.
|
Statik MT ga quyidagilarni kiritish mumkin:
Massivlar
Yozuvlar
Jadvallar
Massivlar
Massiv bir toifadagi elementlarning tartibli ketma – ketligi hisoblanadi. Massiv bironta nom va undagi elementlar toifasi orqali ifodalanadi.
Massivlar:
bir o’lchamli
ikki o’lchamli
ko’p o’lchamli
bo’lishi mumkin. 1 o’lchamli massivlar sodda bo’lib, undagi xar bir element xotirada ketma-ket joylashadi. Uning uchun xotiradan joy ajratilganda xar bir elementiga massivning toifasidan kelib chiqib sarflanadigan xotira xajmi elementlar soniga ko’paytiurilib topiladi.
Masalan, int a[n] massiv qaraladigan bo’lsa, uning bitta elementiga 4 bayt joy ketadigan bo’lsa, massiv uchun ajratiladigan xotira sarfi 4*n bayt shaklida hisoblanadi.
H=
H – bu massivga sarflanadigan xotira xajmi;
h – bu 1ta elementga ajratiladigan xotira xajmi
Ikki o’lchamli massivlarda bir nechta qator va bir nechta ustunlar mavjud bo’ladi. Ustun va qatorlar kesishgan joyda massivning elementi joylashgan bo’ladi u elementni massivning qator va ustun raqami bilan aniqlanadi. Masalan, beshinchi qator va uchinchi ustunda turgan B matritsaning elementi B[5][3] kabi belgilanadi. Massivlar ustida matematik amallarni bajarish mumkin.
Ikki o’lchovli massivlarni matrisalar deb ham atashadi. Matrisalar ham statik tuzilma hisoblanadi.
A00
|
A01
|
A02
|
…
|
A0m
|
|
|
|
|
|
A10
|
A11
|
A12
|
…
|
A1m
|
|
|
|
|
|
A20
|
A21
|
A22
|
…
|
A2m
|
|
|
|
|
|
…
|
…
|
…
|
…
|
…
|
|
|
|
|
|
An0
|
An1
|
An2
|
…
|
Anm
|
Chunki uni dasturda ifodalaganda, o’lchamini ko’rsatish kerak. Dastur ishga tushishidan oldin matrisaning satr va ustunlar soni va toifasini aniqlanishidan kelib chiqib kompyuter uning uchun xotiradan joy ajratadi. Matrisa elementlari xotirada ketma-ket yacheykalarda joylashtiriladi, garchi uning alohida satr elementlari mantiqan quyidagicha keltirilsada, bitta satr elementlari xotirada ketma-ket joylashtirilgandan keyin uning davomidan ikkinchi qator elementlari joylashtiriladi va uchunchi va x.k.
A00
|
A01
|
A02
|
…
|
A0m
|
A10
|
A11
|
A12
|
…
|
A1m
|
A20
|
A21
|
A22
|
…
|
A2m
|
Undan tashqari ma’lumotlar tuzilmasi sifatida massivlar ustida boshqa maxsus amallarni ham bajarish mumkin. Dasturda massiv ustida ishlash uchun avval uning toifasi va o’lchami e’lon qilinadi. Massivni e’lon qilish ikki xil usulda amalga oshirilishi mumkin.
Initsializatsiya qilmasdan e’lon qilish – bu holda massiv toifasi va nomi ko’rsatilib kvadrat qavs ichida uning elementlari soni ko’rsatiladi: int A[50].
Initsializatsiya qilish orqali e’lon qilish – bu holda massiv toifasi ko’rsatilib elementlariga qiymat o’zlashtiriladi. Masalan, A[5]={1,2,3,5,4}
Massiv elementlari bir toifaga tegishli bo’lgani uchun ular hotiradan bir xil hajmli joyni egallaydi va ular operativ hotirada joylashadi. Massiv dasturda foydalanilayotgan o’rniga qarab global yoki lokal bo’lishi mumkin.
Global turda bo’lganda dasturni boshida, ya’ni asosiy dastur tanasidan oldin, int main() dan oldin e’lon qilinadi, lokal turda esa dasturni kerakli qismida e’lon qilinadi. Lokal massivdan foydalanilganda uni chegaralari dastur davomida aniqlanadi va qism dasturdan tashqarida bu massivdan foydalanib bo’lmaydi.
Quyida matritsa quyi uchburchak elementlarini aniqlab ularni no’lga aylantiruvchi dastur kodi keltirilgan(C++ tilida ):
int main()
{ int n,m,i,j;
cin>>n>>m;
int a[n][m];
cout<<"kiriting: "<
for(i=0;i
for(j=0;j
cin>>a[i][j];}
for(i=0;i
for(j=0;j
if(i>j) a[i][j]=0;}
for(i=0;i
for(j=0;j
cout<
cout<
return 0;
getch();
}
Dastur natijasi:
Yozuvlar
Yozuvlar – bu turli toifadagi maydonlar yig’indisidir. Maydon – bu bironta nom va toifaga ega bo’lgan tuzilmadir (o’zgaruvchi). Yozuv bu statik tuzilma hisoblanadi. Chunki yozuvning maydonlari xotirada ketma-ket yacheykalarga joylashtiriladi. Yozuv uchun xotiradan joy uning maydonlari toifalaridan kelib chiqib ajratiladi, ya’ni xar bir maydonga sarflanadigan joylar yig’indisi olinadi.
tartir nomeri
|
talaba ‘fio’si
|
adres
|
balli
|
|
|
|
|
int i
(4 bayt)
|
char FIO[30]
(30 bayt)
|
char adres[20]
(20 bayt)
|
float ball
(4 bayt)
|
|
|
|
|
|
|
|
|
Bu yerda ushbu tuzilmaga 4+30+20+4=58 bayt xotiradan joy ajratiladi. Yozuvlarni dasturda ifodalash:
struct Talaba{
int i;
char fio[30];
char adres[20];
float ball;
}
Yuqorida biz yozuv toifasini e’lon qildik. Bu foydalanuvchi tomonida aniqlanadigan toifa hisoblanadi. Endi shu toifadagi o’zgaruvchini e’lon qilishimiz mumkin.
Talaba t1;
Bu yerda endi t1 nomli talabaning yuqorida keltirilganidek maydonlardan iborat yozuv paydo bo’ldi. Uning maydonlariga murojaat qilish va qiymat berish quyidagicha amalga oshiriladi.
t1.fio=”Abdullayev Abdulla”;
Yozuvlar ustida turli amallarni bajarish mumkin.
Maydonlariga qiymat o’zlashtirish
Solishtirish
Maydonlarining toifasidan kelib chiqqan xolda maydonlar ustida amal bajarish mumkin.
Quyida ba’zi bir misollarni keltiramiz, unda myCar nomli yozuivning maydonlariga qiymatlar o’zlashtiriladi:
struct Car
{
int x_coor;
int y_coor;
string name;
};
Car myCar;
myCar.x_coor = 40;
myCar.y_coor = 40;
myCar.name = "Porche";
Yozuvlar bilan ishlashga doir to’liq dastur matnini keltiramiz:
#include
using namespace std;
struct PlayerInfo {
int skill_level;
string name;
};
using namespace std;
int main() {
PlayerInfo players[5];
for (int i = 0; i < 5; i++) {
cout << "Please enter the name for player : " << i << '\n';
cin >> players[ i ].name;
cout << "Please enter the skill level for " << players[ i ].name << '\n';
cin >> players[ i ].skill_level;
}
for (int i = 0; i < 5; ++i) {
cout << players[ i ].name << " is at skill level " << players[i].skill_level << '\n';
}
}
Ko’pincha funksiyalar bilan ishlaganda strukturalarni funksiyalarning argument sifatida uzatishga to’g’ri keladi yoki strukturalarni funksiyada qaytarishga extiyoj tug’iladi. Bunday hollarda quyidagicha yondashish mumkin.
struct EnemySpaceShip
{
int x_coordinate;
int y_coordinate;
int weapon_power;
};
EnemySpaceShip getNewEnemy()
|
|
|
{
EnemySpaceShip ship;
ship.x_coordinate = 0;
ship.y_coordinate = 0;
ship.weapon_power = 20;
return ship;
}
Bu yerda funksiya ship nomli local yozuv nusxasini yaratadi va maydonlarga qiymatlar beriladi. Endi yangi o’zgaruvchini xosil qilish uchun quyidagini keltirish mumkin:
EnemySpaceShip ship = getNewEnemy();
Bu o’zgaruvchini funksiyaga uzatish mumkin:
EnemySpaceShip upgradeWeapons (EnemySpaceShip ship)
{
ship.weapon_power += 10;
return ship;
}
O’zgaruvchi maydonlariga o’zgartirish kiritilgach, uni albatta funksiyada qaytarish kerak, aks holda u qilingan o’zgarish yo’qolishi mumkin.
Quyida shu misolni to’liq dastur matnini keltiramiz;
struct EnemySpaceShip {
int x_coordinate;
int y_coordinate;
int weapon_power;
};
EnemySpaceShip getNewEnemy() {
EnemySpaceShip ship;
ship.x_coordinate = 0;
ship.y_coordinate = 0;
ship.weapon_power = 20;
return ship;
}
EnemySpaceShip upgradeWeapons(EnemySpaceShip ship) {
ship.weapon_power += 10;
return ship;
}
int main() {
EnemySpaceShip enemy = getNewEnemy();
enemy = upgradeWeapons(enemy);
}
Bundan tashqari strukturalarga ko’rsatkichlar xam yaratish mumkin:
#include
using namespace std;
struct xampl {
int x;
};
int main()
{
xampl structure;
xampl *ptr;
structure.x = 12;
ptr = &structure;
cout<< ptr->x;
cin.get();
}
Jadvallar
Jadval - bu yozuvlarning chekli to’plamidir. Jadval ham statik tuzilma bo’lib, uning elementlari bir xil toifaga ega. Jadval yozuvlar massividan tashkil topadigan tuzilma hisoblanadi.
Uni yuqoridagi misoldan foydalanib dasturda quyidagicha idodalaymiz:
EnemySpaceShip name[20];
Bu yerda name nomli 20 ta elementdan iborat massiv yaratildi va uning elementlari EnemySpaceShip struktura ko’rinishida bo’ladi. Xar bir elementning
int x_coordinate;
int y_coordinate;
int weapon_power;
kabi maydonlari mavjud. Jadvalni bironta qatoriga murojaat massiv elementiga mos indeksi orqali va undan keyin aynan kerakli maydoniga (.) nuqta bilan murojaat amalga oshiriladi.
|
int x_coordinate
|
int y_coordinate
|
int weapon_power
|
Name[0]
|
Name[o]. x_coordinate=35
|
Name[o]. y_coordinate=15
|
Name[o].weapon_power =12
|
Name[1]
|
Name[1]. x_coordinate=45
|
Name[1]. y_coordinate=42
|
Name[1].weapon_power =3
|
…
|
|
|
|
Misol. Funksiyalar bilan ishlashda jadvallarni kirish argument sifatida ishlatishga to’g’ri keladi. Quyida ana shunday holatga misol keltiramiz.
#include
using namespace std;
struct Size
{
int breast;
int waist;
int hips;
};
struct WonderfulWoman
{
char name[64];
int age;
int height;
int weight;
Size volume;
bool engKnowledge;
};
void showData(const WonderfulWoman Obj[], int amount);
int main(){
const int amountOfGirl = 7;
WonderfulWoman Woman[amountOfGirl] = {};
for (int i = 0; i < amountOfGirl; i++){
cin.getline(Woman[i].name, 32);
cin >> Woman[i].age;
cin >> Woman[i].height;
cin >> Woman[i].weight;
cout << "english(1 - yes, 0 - no): ";
cin >> Woman[i].engKnowledge;
cin >> Woman[i].volume.breast;
cin >> Woman[i].volume.waist;
cin >> Woman[i].volume.hips;
cin.get();
cout << endl;
}
showData(Woman, amountOfGirl);
return 0;
}
void showData(const WonderfulWoman Obj[], int amount){
for (int i = 0; i < amount; i++){
cout << i + 1 << '\t' << Obj[i].name << '\t' << Obj[i].age<< '\t' << Obj[i].height << '\t' << Obj[i].weight << '\t'<< Obj[i].volume.breast << '/' << Obj[i].volume.waist << '/' << Obj[i].volume.hips<< '\t' << Obj[i].engKnowledge << endl;
}
}
Bu yerda bitta strukturaning ichidagi maydon o’z navbatida boshqa strukturaga tegishli o’zgaruvchi olingan. Bunday yozuvlarga murakkab yozuvlar deyiladi, ya’ni yozuvning elementlarini o’zi ham yozuv hisoblanadi. Bu holatda murakkab ierarxik MT vujudga keladi.
Jadval ustida massiv ustida bajariladigan amallar o’rinli, lekin jadval elementiga emas, elementi maydoniga qiymat beriladi.
Element kiritish, o’chirish
Element maydoni qiymatlarini o’zgartirish
Jadval elementlarini solishtirish, bunda 2 ta yozuvning mos maydonlari qiymatlari solishtiriladi.
Reja:
1.Ma’lumotlar tuzilmasi va algoritmlar faniga kirish ma’lumotlari
2.Ma’lumot va uning xotirada tasvirlanishi
3.Ma’lumotlarni saqlash
Ma’lumot va uning xotirada tasvirlanishi
Hisoblash mashinalari yordamida har qanday masalani yechish ma’lumotlarni xotiraga yozish, xotiradan o’qish va uni qayta ishlashni hisobga olgan holda bajariladi.Nazariy jihatdan ma’lumot noaniqliklarni aniqlovchi vosita sifatida qaraladi. Faraz qilaylik, biror bir tizimning N ta mumkin bo’lgan holati mavjud bo’lsin, har bir holat paydo bo’lishi mustaqil P ehtimolga ega bo’lsin. U holda bu tizimning noaniqligi quyidagi ko’rinishda aniqlanadi:
∑=(P(i)*log2 P(i))
Tizimning noaniqligini o’lchash uchun bit deb ataluvchi maxsus birlik qabul qilingan. Bit hech bo’lmaganda ikkita mumkin bo’lgan holatga bog’liq noaniqlik (yoki ma’lumot)ning o’lchovi hisoblanadi, masalan rost-yolg’on yoki bor-yo’q holatlar. Bit noaniqlik va axborotning o’lchovi sifatida qo’llaniladi, ya’ni olingan axborotlar soni axborotlarni olish natijasida yo’qotilgan noaniqliklar soniga teng.Ma’lumotlarni saqlash
Kompyuterda eslab qoluvchi qurilmalarni asosiy uchta ko’rinishi mavjud: o’ta tezkor, tezkor va tashqi xotira. Odatda o’ta tezkor xotira registrlardan tashkil topgan bo’ladi. Registrlar ma’lumotlarni vaqtincha saqlab turish va akslantirish uchun qo’llaniladi.
Juda muhim registrlardan ba’zilari komp’yuterning markaziy protsessorida joylashgan. Markaziy protsessor arifmetik amallarning argumentlari (ya’ni operandlar) joylashadigan (vaqtincha saqlanadigan) registrlardan tashkil topgan. Registrga yuborilagan ma’lumotlarni qo’shish, ayirish, ko’paytirish va bo’lish amallar juda murakkab mantiqiy sxema orqali bajariladi. Bundan tashqari, registrlarda boshqaruv ketma-ketligini to’g’ri bajarilishini tekshirish zaruriyatidan kelib chiqqan holda alohida bitlarda tahlil qilinadi. Arifmetik amallardagi operandlar va natijalarni vaqtincha saqlashdan tashqari, registrlar dastur komandalarini va keyingi bajariladigan komandaning tartib raqami haqidagi boshqaruv ma’lumotlarini ham vaqtincha saqlash vazifasini bajaradi.
Tezkor xotira ma’lumotlarni o’z muhitida nisbatan doimiy saqlash uchun mo’ljallangan. Tezkor xotiraning muhim xususiyatlaridan biri bu adreslanganligi hisoblanadi. Bu xotira yacheykalari massividagi har bir xotira yacheykasi birqiymatli o’z nomi (identifikatori)ga egaligini anglatadi. Ushbu nom yacheyka adresi deb ataladi. Yacheyka adresi tezkor xotiraga murojaat qilgan mashina kommandasining operandi hisoblanadi. Zamonaviy hisoblash tizimlarida adreslash uchun ikkilik 8 razryaddan tashkil topgan bayt-yacheyka birligi qo’llaniladi. Tezkor xotiraning aniq yacheykalari yoki yacheykalar majmuasi dasturdagi aniq o’zgaruvchi bilan bog’liq bo’lishi mumkin. Lekin o’zgaruvchilar ishtirok etgan arifmetik hisoblashlarni bajarish uchun hisoblash boshlanmasdan oldin o’zgaruvchilar xotira yacheykasidan registrlarga o’tkazilishi zarur bo’ladi. Agar hisoblash natijasi ham ushbu o’zgaruvchiga o’zlashtirilgan bo’lsa, u holda natija qiymat ham yana mos registrdan ushbu o’zgaruvchiga bog’liq bo’lgan tezkor xotira yacheykasiga o’tkazilishi kerak. Dastur bajarilishi vaqtida uning komandalari va ma’lumotlari asosan tezkor xotira yacheykalarida joylashadi. Tezkor xotira elementlarining to’liq to’plami ba’zan asosiy xotira deb ham yuritiladi.
Ma’lumotlar turi, ma’lumotlarning abstrakt (mavhum) turlari va ma’lumotlar tuzilmasi
Ushbu tushunchalar, o’xshash bo’lishi mumkin, lekin ularning ma’nosi har xil hisoblanadi.
Dasturlash tillarida o’zgaruvchining ma’lumot turi, ushbu o’zgaruvchi qabul qilishi mumkin bo’lgan qiymatlar to’plamini anglatadi. Ma’lumotlar turi natural va butun sonlar, haqiqiy (o’nlik kasr ko’rinishidagi) sonlar, satrlar, belgilar va boshqalarni o’z ichiga oladi.
Ba’zi dasturlash tillarida har bir konstanta yoki o’zgaruvchilarning turini unga ta’minlangan qiymatning yozilishiga qarab kompilyator aniqlaydi. Masalan, o’nlik sonda qo’llaniladigan nuqta, haqiqiy son belgisi sifatida qabul qilinadi. Boshqa dasturlash tillarida esa, dasturchi tomonidan kirtilayotgan har bir o’zgaruvchining turi aniq ko’rsatilishi talab etiladi, va bu muhim vazifalardan biri hisoblanadi. Dastur bajarilishi davomida o’zgaruvchining qiymati bir necha marta almashishi mumkin, lekin uning turi o’zgarmasligi kerak. Bu kompilyator o’zgaruvchi ustida bajariladigan amallarni uning tavsiflanishiga mos ravishda tekshirib chiqadi. Bu tekshirish to’liq dastur matni bo’yicha amalga oshiriladi va natijada dastur bajaradigan barcha amallar aniqlab olinadi.
Dasturlash tilining maqsadiga qarab, kompilyatsiya jarayonida ma’lumotlarning turi himoyalanganlik darajasi mavjud. Masalan, Pascal dasturlash tilida ma’lumotlarning turi qat’iy himoyalangan bo’lib, dasturning sarlavha qismidayoq dasturda qo’llaniladigan barcha o’zgaruvchilar va konstantalarning turlari aniqlab berilishi talab qilinadi. C dasturlash tilida esa buning teskarisi bo’lib, ma’lumotlarning turini aniqlash dastur bajarilishi vaqtida dasturchi tomonidan aniqlanishi ham mumkin. Bu esa C dasturlash tilida ma’lumotlarning turi kuchsiz himoyalanganligini bildiradi. Shu bilan birgalikda ma’lumotlarning turi qat’iy himoyalanmagan dasturlash tillarida dasturning to’g’ri ishlashiga javobgarlik dasturchining o’ziga yuklatilgan.
Ma’lumotlarning abstrakt (mavhum) turlari – bu matematik model va shu model doirasida aniqlangan turli xil operatorlardir. Abstrakt ma’lumotlar turi bilan algoritmlarni ishlab chiqish mumkin, lekin ma’lum bir dasturlash tilida algoritmlarni qo’llash uchun ma’lumotlarning abstrakt turlarini ushbu dasturlash tiliga mos ma’lumotlar turi va operatorlar yordamida ishlab chiqiladi.Ma’lumotlarning abstrakt turlarini tavsiflash uchun o’zida o’zgaruvchilarning aniq to’plamini, mumkin bo’lgan ma’lumotlar turini mujassamlashtirgan ma’lumotlar tuzilmasidan foydalaniladi.Algoritmlarda qo’llaniladigan ma’lumotlar tuzilmasi juda murakkab bo’lishi mumkin. Ma’lumotlarni to’g’ri taqdim etish natijasi muvaffaqiyatli dasturlash kaliti sifatida xizmat qiladi. Ma’lumotlar tuzilmasining qurilish materiali tayanch yoki tarkibli ma’lumotlar turini saqlashga mo’ljallangan yacheykalar hisoblanadi. Ma’lumotlar tuzilmasi yacheykalar majmuasiga boshqa yacheykalar vakili (ya’ni ko’rsatkichlar) sifatida nom berish orqali ishlab chiqiladi.
Ma’lumotlar tuzilmalarini bilish, ularni saqlash va qayta ishlash xotirani tejash va protsessor vaqti sarfini kamaytirish nuqtai nazaridan eng samarali usullarni qo’llash imkonni beradi. Yana bir afzalligi, ma’lumotlarga tuzilmaviy yondoshuv murakkab dasturiy mahsulotlarni yaratish imkoniyati hisoblanadi. Zamonaviy dasturiy paketlar juda murakkab mahsulotlar hisoblanib, bunda minglab, millionlab satrli kodlarni hisoblashga to’g’ri keladi. Tabiiyki, bunday dasturiy mahsulotlarni “birdaniga (bir vaqtning o’zida)” ishlab chiqish imkoniyati yo’q, bular ba’zi bir tuzilmalar, ya’ni ularning tashkil etuvchi qismlari va ular orasidagi bog’liqliklar ko’rinishida ishlab chiqilishi mumkin. To’g’ri tuzilmaga keltirilgan mahsulotni ishlab chiqishning har bir bosqichida ishlab chiquvchining diqqatini mahsulotning alohida qismlariga qaratilishini talab etadi.
Katta dasturiy mahsulotlarni tuzilmalashtirishda mumkin bo’lgan yondoshuvlar mavjud. Bulardan biri algoritmlarni tuzilmalashtirishda “yuqoridan quyiga” loyihalash yoki “yuqoridan quyiga dasturlash” yondoshuvi bo’lsa, ikkinchisi, ma’lumotlarni tuzilmalashtirishda esa, “quyidan yuqoriga” loyihalash yoki “quyidan yuoriga dasturlash” yondoshuvlari hisoblanadi.
Birinchi holatda (yondoshuvda) dastur bajarishi kerak bo’lgan harakatlar tuzilmalashtiriladi. Ishlab chiqilishi ko’zda tutilgan katta va murakkab dasturni loyihalash kichik hajmdagi bir nechta qism masalalarning yechimlari ko’rinishida hal qilinadi. Shunday qilib, qo’yilgan masalaning to’liq yechimini taqdim etuvchi eng yuqorida turuvchi dasturiy modul, qismmasalalarni yechimini beruvchi modullarga murojaatni amalga oshiradigan yetarli darajada juda oddiy bo’lib chiqadi. Loyihalashning birinchi bosqichida qismmasalalarning dasturiy modullari “qopqoq” ko’rinishda amalga oshiriladi. Shundan so’ng har bir qismmasala o’z navbatida yuqoridagi qoida bo’yicha dekompozitsiya (qismlarga ajratish) qilinadi. Qism masalalarga ajratish jarayoni dekompoziyaning keyingi bosqichida aniq bir masalaning yechimini beradigan holatga kelgunga qadar davom ettiriladi. Dekompozitsiyaning eng quyi holati eng kichik instrumental vosita darajasigacha keltirilishi (masalan, tanlab olingan dasturlash tilidagi bitta operatorgacha dekompozitsiyalash) mumkin.
Ikkinchi yondoshuvda tuzilmalashtirish ma’lumotlarga asoslanadi. Har bir dasturiy mahsulot uchun hamma vaqt Buyurtmachi mavjud. Buyurtmachida esa kiruvchi ma’lumotlar bo’lib, ishlab chiqiladigan dasturiy mahsulot ushbu kiruvchi ma’lumotlarni chiquvchi ma’lumotlarga akslantirish xususiyatlarini o’z ichiga olgan bo’lishi kerak. Dasturlashning instrumental vositalari esa faqat tayanch (oddiy, sodda) ma’lumotlar turi va ular ustida bajariladigan amallarni taqdim etadi. Tayanch ma’lumotlar turini qayta ishlash uchun yoki buyurtmachining kiruvchi ma’lumotlariga moslashtirish uchun dasturchilar juda murakkab ma’lumotlar turlari va ular ustida bajariladigan yangi amallarni yaratishi kerak bo’ladi. Ma’lumotlar turini kompozitsiya (birlashtirish) qilishning oxirgi bosqichida masalaning to’liq yechimini beruvchi mos ravishda kiruvchi va chiquvchi ma’lumotlar va ular ustida bajariladigan amallarni tadbiq etishladi.Ixtiyoriy loyihani amalga oshirishda qarama-qarshi amallar, ya’ni ma’lumotlar tuzilmalarini ishlab chiqish natijalari bo’yicha algoritmning tuzilishini doimiy ravishda tuzatib borish va aksincha, algoritmlarga mos ravishda ma’lumotlar tuzilmasida tuzatishlar kiritish ishlari bajarib boriladi.
|