Mavzu: Sinflarni qo’llash. Sinflarning konstruktor va destruktorlari. Qayta yuklash va qayta aniqlash usullari. Sinflarni qo’llash. Do’stona va virtual funksiyalar


Download 0.79 Mb.
Sana24.12.2022
Hajmi0.79 Mb.
#1056431
Bog'liq
Algaritim 2


AMALIY MASHG’ULOT-6
Mavzu: Sinflarni qo’llash. Sinflarning konstruktor va destruktorlari. Qayta yuklash va qayta aniqlash usullari. Sinflarni qo’llash. Do’stona va virtual funksiyalar.


Ishdan maqsad: Ushbu laboratoriya ishining maqsadi talabalar Sinflar mavjudligini va ularning samaradorliklarini baholashni o‘rganishlari kerak. Shu asosda sinflar usullarini qiyosiy tahlil qilishlari, C++ dasturlash tilida sinflar bilan ishlashni va ularga oid dasturlar tuzishni o‘zlashtirishlari kerak.
Qo‘yilgan masala: Talabalar topshiriq variantiga mos vectorlar yordamida masalani yechish dasturini yaratish ko‘nikmasiga ega bo‘lishlari kerak.
Ish tartibi:

  1. Tajriba ishi nazariy ma’lumotlarini o‘rganish;

  2. Berilgan topshiriqning algoritmini ishlab chiqish;

  3. C++ dasturlash muhitida dasturni yaratish;

  4. Natijalarni tekshirish;

  5. Hisobotni tayyorlash va topshirish.

Sinf: C ++ dagi sinf - bu Ob'ektga yo'naltirilgan dasturlashga olib keladigan qurilish bloki. Bu foydalanuvchi tomonidan aniqlangan ma'lumotlar turi, o'z ma'lumot a'zolari va a'zo funktsiyalarini o'zida mujassam etgan, ularga kirish va shu sinfning nusxasini yaratish orqali foydalanish mumkin. C ++ klassi ob'ekt uchun rejaga o'xshaydi.


Masalan: Avtomobillar sinfini ko'rib chiqing. Turli xil nomdagi va markali avtomobillar ko'p bo'lishi mumkin, ammo ularning barchasi bir nechta umumiy xususiyatlarga ega, chunki ularning barchasi to'rtta g'ildirak, tezlik chegarasi, yurish masofasi va boshqalar. ularning xususiyatlari.

  1. Sinf - bu foydalanuvchi tomonidan aniqlangan ma'lumotlar turi, unda ma'lumotlar a'zolari va a'zo funktsiyalari mavjud.

  2. Ma'lumotlar a'zolari - bu ma'lumotlar o'zgaruvchilari, a'zo funktsiyalari - bu o'zgaruvchilarni boshqarish uchun ishlatiladigan funktsiyalar va bu ma'lumotlar a'zolari va a'zo funktsiyalari birgalikda Class sinfidagi ob'ektlarning xususiyatlarini va xatti-harakatlarini belgilaydilar.

  3. Avtomobil sinfining yuqoridagi misolida ma'lumotlar a'zosi tezlik chegarasi, yurish masofasi va boshqalar bo'ladi va funktsiyalar tormoz bosishi, tezlikni oshirishi va h.k.

Ob'ekt - bu Class namunasi. Sinf aniqlanganda, hech qanday xotira ajratilmaydi, lekin u o'rnatilganda (ya'ni ob'ekt yaratiladi) xotira ajratiladi.

Amaliy mashg’ulot topshirig’i:


“Game” Class(sinf)i yaratilsin. O’zgaruvchilar va funksiyalardan foydalanib 3 tadan kam bo’lmagan ob’ektlar xosil qilinsin. Dasturda Konstruktor va destruktorlardan foydalanilsin.
Dastur kodi
#include
#include
using namespace std;
class Game {
public:
string nomi;
int yili;
int daromadi;
int orni;
private:
string korxona;};
int main(){
Game pubg;
pubg.nomi="pubg";
pubg.yili=2017;
pubg.daromadi= 47;
pubg.orni= 1;
std::cout << " o`yin nomi "<

return 0;
}

Xulosa
Ushbu dastur kodida men Game sinfini yaratdim va unda funksiyalardan foydalanib
4ta obyekt hosil qildim.Dasturda Dasturda Konstruktor va destruktorlardan foydalandim.

AMALIY MASHG’ULOT-7


Mavzu: Konteynerlar ro’yxati. Ro’yxat operatsiyalari. Bog’langan ro’yxat. Birgalikda bog’langan ro’yxat bilan ishlash.
Ishdan maqsad: Ushbu laboratoriya ishining maqsadi talabalar ro'yxatlar mavjudligini va ularning samaradorliklarini baholashni o‘rganishlari kerak. Shu asosda sinflar usullarini qiyosiy tahlil qilishlari, C++ dasturlash tilida ro’yxatlar bilan ishlashni va ularga oid dasturlar tuzishni o‘zlashtirishlari kerak.
Qo‘yilgan masala: Talabalar topshiriq variantiga mos ro’yxatlar yordamida masalani yechish dasturini yaratish ko‘nikmasiga ega bo‘lishlari kerak.
Ish tartibi:

  1. Tajriba ishi nazariy ma’lumotlarini o‘rganish;

  2. Berilgan topshiriqning algoritmini ishlab chiqish;

  3. C++ dasturlash muhitida dasturni yaratish;

  4. Natijalarni tekshirish;

  5. Hisobotni tayyorlash va topshirish.

Array va Vector bir-biriga yaqin konteynerlardir, ya'ni ular o'zlarining ma'lumotlarini doimiy xotirada saqlaydilar, shuning uchun vektor / massivning o'rtasiga qo'shib qo'yish juda qimmatga tushadi (operaton soni va ishlov berish vaqti bo'yicha), chunki biz barcha elementlarni almashtirishimiz kerak, bog'langan ro'yxat ushbu muammoni engib chiqadi. Bog'langan ro'yxat ro'yxat konteyneridan foydalanish orqali amalga oshirilishi mumkin.
Amaliy mashg’ulot topshirig’i:
Ixtiyoriy nom va qiymatlardan iborat bo’lgan ro’yxat tuzilsin, emplace_front() va emplace_back() funksiyalaridan foydalangan xolda qiymatlar ekranga chiqarilsin.
Dastur kodi
#include
#include
using namespace std;
int main() {
list l1{20,45,89,68,32,36,20};
l1.emplace_front(22);
l1.emplace_back(25);
//l1.erase(l1.begin());
for(auto i=l1.begin(); i!=l1.end(); i++)
cout<<*i<<" ";
cout<<"\n Bo'shligini tekshirish: "<cout<<"\n Hajmi: "<l1.clear();
cout<<"\n Bo'shligini tekshirish: "<cout<<"\n Hajmi: "< return 0;}
Xulosa
L1 nomli int tipida 7 ta elemendan iborat ro`yxat tuzildi va emplace_front() va emplace_back() funksiyalaridan foydalangan xolda 22 va 25 sonlarini ro`yxatga qo`shdik so`ngra ekranga ushbu elementlardan iborat jadvalni chiqardik.Keyin L1 ro`yhatni elementlarini tozalab tashlaymiz va bo`shligini tekririb ko`ramiz.

AMALIY MASHG’ULOT- 8


Mavzu: Bog’langan ro’yxat. Ikkala bog’langan ro’yxat bilan ishlash. Konteyner steki. Stackning asosiy operatsiyalari.


Ishdan maqsad. Ushbu laboratoriya ishida talabalar ikki tomonlama bog’langan ro’yxat(double linked list)lar bilan ishlashni, STL komponentalaridan biri bo’lgan stek bilan tanishib chiqishi hamda stekda mavjud bo’lgan funksiyalar bilan ishlashni o’rganishlari kerak.
Qo’yilgan masala. Talabalar topshiriq variantiga mos ravishda ro’xatlar ustida berilgan funksiyalar bilan ishlash ko’nikmasiga ega bo’lishlari kerak.
Ish tartibi:

  1. Tajriba ishi nazariy ma’lumotlarini o‘rganish;

  2. Berilgan topshiriqning algoritmini ishlab chiqish;

  3. C++ dasturlash muhitida dasturni yaratish;

  4. Natijalarni tekshirish;

  5. Hisobotni tayyorlash va topshirish.

Massivlar singari, bog'langan ro'yxat ham ma'lumotlarning chiziqli tuzilishi. Massivlardan farqli o'laroq, bog'langan ro'yxat elementlari tutashgan joyda saqlanmaydi; elementlar ko'rsatgichlar yordamida bog'lanadi(1-rasm).


Yuqoridagi rasmda ko’rib turganimiz oddiy bog’langan ro’yxat. Bu yerda:
Head – ro’yxatning boshi ya’ni dastlabki ro’yxat hisoblanadi. Massivdan farqli o’laroq bog’langan ro’yxatlarda ikkita element mavjud. Birinchisi ma’lumot(data), ikkinchisi esa ko’rsatgich (next) hisoblanadi. Ya’ni birinchi ro’yxat ko’rsatgichi ikkinchi ro’yxatdagi ma’lumotga bog’lanadi. Shu sababli bunday turdagi ma’lumotlar tuzilmasi bog’langan ro’yxat deb nomlanadi.
Steklar - bu LIFO (Last In First Out) ishlaydigan konteyner adapterlarining bir turi hisoblanadi. Ya’ni Dastlab kiritilgan element oxirida olinadi.Stekda “top” deb nomlangan element mavjud, u eng yuqoridagi elementdir. Barcha qo’shish va o’chirish operatsiyalari to’plamdagi yuqori elementning o’zida amalga oshiriladi.




Quyida stek bilan bog’liq asosiy funksiyalarni ko’rib chiqmiz:



  1. empty() funksiyasi – ushbu funksiya stekning bo’sh yoki biror bir element borligini tekshirish uchun ishlatiladi.

  2. size() funksiyasi – ushbu funksiya stek hajmini aniqlash uchun ishlatiladi.

  3. top() funksiyasi – ushbu funksiya stekning yuqoridagi elementiga murojaat uchun ishlatiladi.

  4. push() funksiyasi – stekning yuqori qismiga element qo’shish uchun ishlatiladi.

  5. pop() funksiyasi – stekning yuqori qismidagi elementni o’chirish uchun ishlatiladi.

Amaliy mashg’ulot topshirig’i:
Doubly linked list (ikki bog’langan ro’yxat) asosida ixtiyoriy N qiymatdagi sonlar to’plami kiritilsin. Dasturning bosh qismiga yangi node kiritilsin va natijalar ekranga chiqarilsin.
Dastur kodi
#include
#include
using namespace std;
int main()
{
// Bo’sh stek
stack mystack;
mystack.push(0);
mystack.push(1);
mystack.push(2);
// Stek qiymati ekranga chiqarilmoqda
while (!mystack.empty()) {
cout << ' ' <mystack.pop();
}
}

AMALIY MASHG’ULOT- 9


Mavzu: Stekning tuzilishi. Massiv va ro’yxatlar bilan stackni tuzish. Navbat. Navbatdagi asosiy operatsiyalar.


Ishdan maqsad. Ushbu laboratoriya ishida talabalar STL komponentalaridan biri bo’lgan stek bilan tanishib chiqishi hamda stekda mavjud bo’lgan funksiyalar bilan ishlashni o’rganishlari kerak.
Qo’yilgan masala. Talabalar topshiriq variantiga mos ravishda steklar ustida berilgan funksiyalar bilan ishlash ko’nikmasiga ega bo’lishlari kerak.
Ish tartibi:

  • Tajriba ishi nazariy ma’lumotlarini o‘rganish;

  • Berilgan topshiriqning algoritmini ishlab chiqish;

  • C++ dasturlash muhitida dasturni yaratish;

  • Natijalarni tekshirish;

  • Hisobotni tayyorlash va topshirish.

Stakning barcha elementlari bir xil bo'lganligi sababli, C yoki C ++ dagi Arrays yordamida stekni amalga oshirish juda oson. Stakning birinchi elementini birinchi qator uyasiga, stackning ikkinchi elementini ikkinchi qator uyasiga va hokazolarni qo'yish mumkin. Stekning yuqori qismi bu stekka qo'shilgan so'nggi elementning indeksidir. Stekni amalga oshirishda stack elementlari massivda saqlanadi.
STACK bu ma'lumotlar strukturasi bo'lib, unda elementlarga faqat bitta uchida, ya'ni Last In First Out ma'lumotlar tuzilmasida kirish mumkin (ochilgan yoki itarilgan). Shunday qilib, stack elementiga faqat tepadan kirish mumkin, pastki yoki o'rtadan emas.Stekning bu xususiyati juda muhimdir va uni yaxshi tushunish kerak.
Massivning yuqori holatini kuzatib borish uchun biz shunchaki Top of Stack deb nomlangan boshqa o'zgaruvchini e'lon qilishimiz mumkin.

Navbatlar - bu birinchi bo'lib chiqadigan (FIFO) tartibda ishlaydigan konteyner adapterlarining turi. Elementlar orqa tomonga (uchiga) kiritiladi va old tomondan o'chiriladi.


Navbat tomonidan qo'llab-quvvatlanadigan funktsiyalar:

empty () - navbatning bo'sh yoki yo'qligini qaytaradi.


size () - navbatning hajmini qaytaradi.
queue :: swap () C ++ STL-da: Ikkala navbatning tarkibini almashtiring, lekin navbati bir xil bo'lishi kerak, ammo o'lchamlari farq qilishi mumkin.
queue :: emplace () da C ++ STL: Navbat konteyneriga yangi element kiriting, yangi element navbat oxiriga qo'shiladi.
C ++ STL-dagi front () funktsiyasidagi queue :: front () va queue :: back () navbatning birinchi elementiga havolani qaytaradi. back () funktsiyasi navbatning oxirgi elementiga havolani qaytaradi.
push (g) va pop () - push () funktsiyasi navbat oxiriga «g» elementini qo'shadi. pop () funktsiyasi navbatning birinchi elementini o'chiradi.
Amaliy mashg’ulot topshirig’i:
Massivni stack asosida qo’llagan xolda 4,2,8,10,14,7 qiymatlar kiritilsin. Eng yuqoridagi aniqlansin va qiymati o’chirilsin. Olingan natijalar ekranga chiqarilsin.
Dastur kodi:
#include
#include
using namespace std;
int main()
{ queue q1;
q1.push(4);
q1.push(2);
q1.push(8);
q1.push(10);
q1.push(14);
q1.push(7);
cout<<"Hajmi: "< for(int i=0; i<=q1.size(); i++) {cout< cout<< "\nBo'shligi:" <endl;
return 0;
}

Xulosa
Biz birinchi q1 massivni yaratib olamiz va unga 4,2,8,10,14,7 qiymatlarni kiritamiz.So`ngra ikkita qiymatini o`chiramiz va olingan natijani ekranga chiqaramiz.
AMALIY MASHG’ULOT-10
Mavzu: Navbat tuzilmasi. Ro’yxatlar yordamida navbatni amalga oshirish.
Dek tuzilmasi. Asosiy operatsiyalar.


Ishdan maqsad. Ushbu laboratoriya ishida talabalar ro’yxatlar yordamida navbatni amalga oshirishni, talabalarSTL komponentlaridan biri bo’lgan dek(deque) bilanishlashni o’rganishlari kerak.
Qo’yilgan masala. Talabalar topshiriq variantiga mos ravishda ro’xatlar ustida berilgan funksiyalar bilan ishlash ko’nikmasiga ega bo’lishlari kerak.
Ish tartibi:

  • Tajriba ishi nazariy ma’lumotlarini o‘rganish;

  • Berilgan topshiriqning algoritmini ishlab chiqish;

  • C++ dasturlash muhitida dasturni yaratish;

  • Natijalarni tekshirish;

  • Hisobotni tayyorlash va topshirish.

Dek – bu ikki tomonlama navbat hisoblanadi. Ya’ni (Double ended queues) Ikkala uchli navbat - bu ikkala uchida kengayish va qisqarish xususiyatiga ega bo'lgan ketma-ket konteynerlar.


Ular vektorlarga o'xshash, ammo elementlarni kiritish va yo'q qilishda samaraliroq. Vektorlardan farqli o'laroq, tutashgan joy ajratilishini kafolatlash mumkin emas.
Dek, asosan ma'lumotlar tuzilmasining ikki tomonlama navbatini amalga oshirishdir. Navbatdagi ma'lumotlar tuzilishi faqat oxiriga qo'shib, old tomondan o'chirishga imkon beradi. Bu haqiqiy hayotdagi navbatga o'xshaydi, unda odamlar old tomondan olib tashlanadi va orqada qo'shiladi. Ikkala tugagan navbat - bu qo'shilish va o'chirish operatsiyalari ikkala uchida ham mumkin bo'lgan navbatlarning alohida holati.
Dek uchun funktsiyalar vektor bilan bir xil, oldinga va orqaga surish va pop operatsiyalari qo'shiladi.

Amaliy mashg’ulot topshirig’i:

Ixtiyoriy nomda dek e’lon qilinsin, ASC II kod jadvali asosida shunday belgilar dekga kiritilsinki, dekni ekranga chiqarganimizda 80 dan boshlab 90 gacha sonlar ekranga chiqarilsin.
Dastur kodi
#include
#include
using namespace std;
int main()
{
deque son ={80,81,82,83,84,85,86,87,88,89,90};
int birinchi = son.front();//80
int onbirinchi= son.back();//90
int ikkinchi= son[1];//81
int uchinchi = son[2];//82
int tortinchi = son[3];//83
int beshinchi = son[4];//84
int oltinchi = son[5];//85
int yetinchi = son[6];//86
int sakizinchi = son[7];//87
int toqizinchi = son[8];//88
int oninchi = son[9];//89
cout << birinchi << " "<< ikkinchi <<" "<< uchinchi <<" "<< tortinchi << " " << beshinchi <<" "<< oltinchi <<
" "<< yetinchi<<" " << sakizinchi<<" " <

return 0;}


z
Xulosa
Biz son nomidagi dek e`lon qilamiz va belgilarni dekga kiritamiz.So`ngra ekranga 80 dan boshlab 90 gacha bo`lgan sonlarni chiqaramiz.

Download 0.79 Mb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling