|
Bajardi: Musurmonov Umid Tekshirdi
|
bet | 13/13 | Sana | 01.12.2023 | Hajmi | 122,48 Kb. | | #109162 |
Bog'liq Ma\'lumotlar tuzilmasi 1-mustaqil ishMassivlar
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<="" i="">
for(j=0;j<="" i="">
cout<
cout<<="" i="">
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.
Nazorat savollar.
1. Qanday tuzilmalar statik tuzilma hisoblanadi?
2. Massiv nima?
3. Yozuv nima va uning xususiyatlari?
4. Murakkab yozuv nima?
5. Jadval nima va uning dasturda ifodalanishi qanday?
Asosiy internet manbalar
SKYLINE UNIVERSITY COLLEGE.
http://www.teach-ict.com/as_as_computing/ocr/H447/F453/3_3_5/data_structures/miniweb/pg3.htm
Osnovы programmirovaniye na S++ dlya nachinayuщix http://purecodecpp.com/archives/category/strukturi_c. 2015 yil.
Tavsiya etiladigan internet manbalar:
http://cppstudio.com/post/5377/
http://easy-code.ru/lesson/structures-in-cpp
http://www.cprogramming.com/tutorial/lesson7.html
|
| |