O‘ZBEKISTON RESPUBLIKASI
OLIY TA’LIM, FAN VA INNOVATSIYALAR VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI
UNIVERSITETI
“ DASTURLASH” fanidan
AMALIYOT
TOPSHIRIQ
Bajardi: Joniqulov D M312-24 DIo‘
Toshkent 2025
“ DASTURLASH” fanidan
№ T O P SH I R I Q (AMALIYOT)
Mavzu:
Asosiy tushuncha va ta’riflarni o‘rganish.
Ishdan maqsad:
Adabiyotlar:
1. . Sapaev M.S., Qodirov F.M. O‘quv qo‘llanma, Toshkent-“Aloqachi”-2019, 276 b.
2. . O.D.Raximov, I.X.Siddiqov, M.O.Murodov. Oliy ta’lim bakalavriyat yo‘nalishlari
uchun darslik. T.: “Aloqachi”, 2017-332 b.
3.Uchebnoe posobie dlya studentov VUZov/ red. L. A. Muraviy, 2002.-447 s.
4. Introduction to Health and Safety at Work. Phil Hughes, Ed Ferrett. The Boulevard,
Langford Lane, Kidlington, Oxford OX5 1GB, UK. ISBN: 978-0-08-097070-7. 2011
I.
II.
Nazariy savollarga javob berish.
Hisobot tayyorlash.
Toshshiriqni bajarish
ketma ketligi
Ishning maqsadi: C++ dasturlash tilida standart algoritmlar, iteratorlar va
xotirani taqsimlovchilar bilan ishlash ko’nikmalarini shakllantirish.
Masalaning qo’yilishi:
1) Variantda berilgan topshiriq bo’yicha konteyner hosil qilish va berilgan
standart funksiya yordamida konteyner ustida amallar bajarish;
2) Variantda berilgan konteyner ustida iteratorlardan foydalanib amallar
bajarish;
3) Variantda berilgan funksiya bo’yicha xotirani taqsimlashni amalga oshiring.
Masala: multiset konteyneri yordamida mst nomli konteyner e’lon qilib
uni rand() funksiyasi yordamida tasodifiy sonlardan tarkib topgan elementlar bilan
to’latib ularni chop qilish. Konteyner asosida it nomli iterator hosil
qilib begin() funksiyasi yordamida iteratorga boshlang’ich qiymat berish, itertaordan
foydalanga holda konteyner elementlarini chop qilish. Avvaldan hosil
qilingan isEven() funksiyasidan foydalanib find_if() standart funksiyasini ishlatish.
7-variant
a) Yangi konteynerlar hosil qiling, uni standart funksiyalar yordamida elementlar bilan
to’lating move funksiyasi yordamida amallar bajaring;
b) Iteratorlardan foydalanib vector konteyneri ustida amallar bajaring;
Ishning maqsadi:
multiset konteyneri, iteratorlar, standart algoritmlar (find_if, move) va xotirani
taqsimlash asosida C++ da ko‘nikmalar hosil qilish.
Masala bo‘yicha C++ kodi
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib>
// rand
#include <ctime>
// time
#include <memory>
// allocator
#include <utility>
// move
using namespace std;
// Tasodifiy sonlar juftligini tekshiruvchi funksiya
bool isEven(int n) {
return n % 2 == 0;
}
int main() {
srand(time(0)); // Tasodifiylikni ta'minlash
// 1) multiset konteyneri va uni rand() yordamida to‘ldirish
multiset<int> mst;
for (int i = 0; i < 10; ++i) {
mst.insert(rand() % 100); // 0 dan 99 gacha sonlar
}
// Konteynerni chop qilish (to‘g‘ridan-to‘g‘ri)
cout << "multiset elementlari (to‘g‘ridan-to‘g‘ri): ";
for (auto x : mst) {
cout << x << " ";
}
cout << endl;
// 2) Iterator hosil qilish va iterator yordamida chop qilish
multiset<int>::iterator it = mst.begin();
cout << "multiset elementlari (iterator orqali): ";
while (it != mst.end()) {
cout << *it << " ";
++it;
}
cout << endl;
// 3) find_if + isEven funksiyasidan foydalanish
auto found = find_if(mst.begin(), mst.end(), isEven);
if (found != mst.end()) {
cout << "Birinchi juft son: " << *found << endl;
} else {
cout << "Juft son topilmadi." << endl;
}
// 7-a) Yangi konteynerlar, standart funksiya va move funksiyasi bilan
vector<int> vec1 = {1, 2, 3, 4, 5};
vector<int> vec2;
cout << "\nvec1: ";
for (int x : vec1) cout << x << " ";
// move() yordamida vec1 ni vec2 ga ko‘chirish
move(vec1.begin(), vec1.end(), back_inserter(vec2));
cout << "\nvec2 (move orqali): ";
for (int x : vec2) cout << x << " ";
cout << "\nvec1 (move dan keyin, bo‘sh yoki 0): ";
for (int x : vec1) cout << x << " ";
cout << endl;
// 7-b) Iterator orqali vector ustida amallar
cout << "\nvec2 elementlari (iterator orqali): ";
vector<int>::iterator vit = vec2.begin();
while (vit != vec2.end()) {
cout << *vit << " ";
++vit;
}
cout << endl;
// Qo‘shimcha: xotira taqsimlovchi ishlatish
allocator<int> alloc;
int* p = alloc.allocate(5); // 5 ta int uchun xotira ajratish
for (int i = 0; i < 5; ++i) {
alloc.construct(p + i, i * 10); // qiymatlar berish
}
cout << "\nAjratilgan xotira elementlari: ";
for (int i = 0; i < 5; ++i) {
cout << p[i] << " ";
}
cout << endl;
// Xotirani tozalash
for (int i = 0; i < 5; ++i) {
alloc.destroy(p + i);
}
alloc.deallocate(p, 5);
return 0;
}
Tushuntirishlar:
multiset
multiset elementlarni tartiblangan holatda saqlaydi va takrorlanuvchi qiymatlarga
ruxsat beradi.
iterator
begin() orqali boshlanadi, ++it bilan navbatdagi elementga o‘tiladi.
find_if() va isEven()
find_if() — shartga birinchi mos keluvchi elementni topadi.
move()
move() — bir konteynerdan boshqasiga ma'lumotni ko‘chiradi, lekin manba
konteynerni "bo‘sh" holatga keltiradi.
allocator
Past darajadagi xotirani ajratish va boshqarish imkonini beradi.