|
Mustaqil ishi Mavzu: 1 Дастурлашда маълумотлар тузилмасининг ўрни ва аҳамияти
|
Sana | 07.01.2024 | Hajmi | 0,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
|
| |