SlideShare a Scribd company logo
1 of 14
O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR
VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT
TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI
Telekommunikatsion texnalogiyalar va kasbiy ta’lim fakulteti TT- 13-23 guruh talabasi
To'rayev Husanning Dasturlash fanidan tayyorlagan 1-Semestr uchun
5-Mustaqil ishi
Qabul qildi: Zoxidov J.B.
Bajardi: To'rayev Husan
2023
Chiziqli jarayonlarni tashkil etish (Algoritm va dastur).
Sinflarni yaratishda operatorlarni qayta yuklash mexanizmidan unumli foydalanish.
Shablon funksiyalar yaratish va ulardan foydalanish.
Shablon sinflar yaratish va ulardan foydalanish.
Shablon funksiyalarda funksiyalarni qayta yuklash mexanizmi.
Reja:
1.Chiziqli jarayonlarni tashkil etish (Algoritm va dastur).
Har qanday murakkab algoritmni ham uch asosiy struktura yordamida
tasvirlash mumkin. Bular ketma-ketlik, ayri va takrorlash strukturalaridir. Ushbu
strukturalar asosida chiziqli, tarmoqlanuvchi va takrorlanuvchi hisoblash
jarayonlarining algoritmlarini tuzish mumkin. Umuman olganda, algoritmlarni
shartli ravishda quyidagi turlarga ajratish mumkin:
- chiziqli algoritmlar;
- tarmoqlanuvchi algoritmlar;
- takrorlanuvchi algoritmlar;
- ichma-ich joylashgan takrorlanuvchi algoritmlar;
- rekurrent algoritmlar;
- takrorlanishlar soni oldindan no’malum algoritmlar;
- ketma-ket yaqinlashuvchi algoritmlar.
Faqat ketma-ket bajariladigan amallardan tashkil topgan algoritmlarga -
chiziqli algoritmlar deyiladi. Bunday algoritmni ifodalash uchun ketma-ketlik
strukturasi ishlatiladi. Strukturada bajariladigan amal mos keluvchi shakl bilan
ko‘rsatiladi. Chiziqli algoritmlar blok-sxemasining umumiy tuzilishi 1.4-rasmda
keltirilgan.
1-misol. Uchburchak tomonlarining uzunligi bilan berilgan. Uchburchakka
ichki r va tashqi R chizilgan aylanalar radiuslarini hisoblang.
Ichki chizilgan aylana radiusi r = (a+b+c)/2S, tashqi chizilgan aylana
radiusi R= 4S
abc
formulalar orqali hisoblanadi. Bu yerda S - uchburchakning yuzi, a,
b, c – uchburchak tomonlarining uzunliklari. Masala echimining blok-sxemasi
Chiziqli algoritmlar. Bu turdagi algoritmlarda hech qanday shart tekshirilmaydi. Shu sababli barcha ko‘rsatmalar
ketmaket bajarib boriladi. «G‘ishtlar sonini hisob!ash», «Doira yuzini
hisoblash» algoritmlari chiziqli algoritmlarga misol bo'ladi. Le- kin hayotimizdagi juda ko‘p jarayonlar shartlar asosida
bosh- qariladi.
Algoritm so‘zi buyuk matematik Al-Xorazmiyning nomi bilan bog‘liq bo‘lib, u birinchi bo‘lib
arab raqamlaridan foydalangan holda arifmetik amallarni bajarish qoidasini bayon etdi.
Har qanday qo‘yilgan masalani kompyuterda echish uchun oldin uning echish usulini
tanlab, keyin uning algoritmini ishlab chiqish kerak bo‘ladi. Demak, hech bir masala yo‘qki
uning echilish yo‘llarini bilmasdan va algoritmini tasavvur qilmasdan turib uni kompyuterda
echib bo‘lmaydi.
2.Algoritm va uning xossalari
Elektron hisoblash mashinalarining vujudga kelishiga qadar algoritmga har xil ta’rif berib
kelindi. Lekin ularning barchasi ma’no jihatdan bir-biriga juda yaqin bo‘lib, bu ta’rif hozirgi
kunda quyidagicha talqin qilinadi.
Ta’rif. Algoritm deb, qo‘yilgan masalani echish uchun ma’lum qoidaga binoan bajariladigan
amallarning chekli qadamlar ketma-ketligiga aytiladi.
Har qanday algoritm ma’lum ko‘rsatmalarga binoan bajariladi va bu ko‘rsatmalarga buyruq
deyiladi.
Algoritm quyidagi muhim xossalarga ega:
Aniqlik va tushunarlilik - deganda algoritmda ijrochiga berilayotgan ko‘rsatmalar aniq
mazmunda bo‘lishi tushuniladi.
Ommaviylik - deganda har bir algoritm mazmuniga ko‘ra bir turdagi masalalarning
barchasi uchun ham o‘rinli bo‘lishi tushuniladi.
Natijaviylik - deganda algoritmda chekli qadamlardan so‘ng albatta natija bo‘lishi
tushuniladi.
Diskretlik - deganda algoritmlarni chekli qadamlardan tashkil qilib bo‘laklash imkoniyati
tushuniladi.
3.Algoritm turlari
Algoritmning uchta turi bor: chiziqli, tarmoqlanuvchi va takrorlanuvchi.
CHiziqli algoritm - deb hech qanday shartsiz faqat ketma-ket bajariladigan jarayonlarga
aytiladi.
2.Sinflarni yaratishda operatorlarni qayta yuklash mexanizmidan unumli foydalanish.
C # har qanday dasturlash tili singari, o'rnatilgan turlarda asosiy operatsiyalarni bajarish uchun ishlatiladigan tayyor leksemalar to`plamiga ega.
Masalan, + operatsiyasini ikkita butun sonni qo`shishga uchun ishlatish mumkinligi ma'lum:
/ Butun sonlar bilan + operatsiyasi.
int a = 100;
int b = 240;
int c = a + b; // c endi 340 ga teng
Bu erda hech qanday yangilik yo'q, lekin siz bir xil operatsiyani C # o'rnatilgan ma'lumotlarning aksariyatiga qo'llash mumkin deb o'ylaganmisiz?
Masalan, kodni quyidagicha ko'rib chiqing:
// satrlar bilan + operatsiyasi.
satr si = "Salom";
satr s2 = "dunyo!";
satr s3 = si + s2; // s3 endi "Salom dunyo!"
Binar operatorlarni qayta yuklash
namespace ConsoleApplication1
{
class MyArr
{
// Uch o`lchovli fazoda koordinatalar
public int x, y, z;
public MyArr(int x = 0, int y = 0, int z = 0)
{
this.x = x;
this.y = y;
this.z = z;
}
Biri char - uni ko'rib chiqdik. Ikkinchisi int dir. Mashinalarning arhitekturasi qanday kattalikda bo'lsa, int tipining ham kattakigi huddi shunday bo'ladi. 16
bitlik mashinalarda int 16 bit edi. Hozirda esa int ning uzunligi 32 bitdir. int (integer - butun son) tipi charga o'hshaydi. Farqi bir baytdan kattaligidadir.
16 bitli int ning sig'imi -32768 dan +32767 gachadir. 32 bitli int esa -2 147 483 648 dan +2 147 483 647 gacha o'rin egallaydi. Bu ikki butun son tipidan
tashqari C++ da ikki tur vergulli, (nuqtali) yani haqiqiy son tipi mavjud. Bulardan biri float, hotirada 4 bayt joy egallaydi.
Ikkinchisi esa double, 8 bayt kattalikka ega. Bularning harakteristikalari quyidagi jadvalda berilgan. Ushbu tiplar bilan ishlaganda unsigned(ishorasiz, +/-
siz), signed (ishorali) long (uzun) va short (qisqa) sifatlarini qo'llasa bo'ladi. unsigned va signed ni faqat butun son tiplari bilan qo'llasa bo'ladi.
Operatorlarni qayta yuklash asoslari
•C # har qanday dasturlash tili singari, o'rnatilgan turlarda asosiy operatsiyalarni bajarish
uchun ishlatiladigan tayyor leksemalar to`plamiga ega. Masalan, + operatsiyasini ikkita
butun sonni qo`shishga uchun ishlatish mumkinligi ma'lum:
•/ Butun sonlar bilan + operatsiyasi.
•int a = 100;
•int b = 240;
•int c = a + b; // c endi 340 ga teng
Operatorlarni qayta yuklash asoslari
•Bu erda hech qanday yangilik yo'q, lekin siz bir xil operatsiyani C # o'rnatilgan
ma'lumotlarning aksariyatiga qo'llash mumkin deb o'ylaganmisiz? Masalan, kodni
quyidagicha ko'rib chiqing:
•// satrlar bilan + operatsiyasi.
•satr si = "Salom";
•satr s2 = "dunyo!";
•satr s3 = si + s2; // s3 endi "Salom dunyo!"
Funktsiya shablonlari
Funktsiyalar va sinflar samarali dasturlash uchun kuchli va moslashuvchan vositalar bo'lsa-da, ular ba'zi hollarda C++ ning
foydalaniladigan barcha parametrlarning turlarini belgilash talabi tufayli cheklangan. Masalan, ikkita sonning eng kattasini
hisoblash uchun funksiya yozishimiz kerak deylik:
Agar biz butun sonlar bilan ishlasak, hamma narsa yaxshi. Ammo agar biz ikki tomonlama qiymatlar bilan ishlashimiz kerak
bo'lsa-chi? Ehtimol, ikki turdagi bilan ishlash uchun max() funksiyasini ortiqcha yuklashga qaror qilasiz:
Endi bizda char, int, double va > operatorini haddan tashqari yuklasak, hatto sinflar bilan ishlaydigan bir xil funktsiyaning ikkita
versiyasi mavjud! Biroq, C++ bizdan o'zgaruvchilarning turlarini ko'rsatishni talab qilganligi sababli, biz bir xil funktsiyaning bir
nechta versiyasini yozishimiz kerak, bu erda faqat parametrlar turi o'zgaradi. Va bu, o'z navbatida, dasturchilar uchun bosh
og'rig'i, chunki bunday kodni saqlash kuch va vaqt jihatidan oson emas. Va eng muhimi, bu samarali dasturlash
tushunchalaridan birini buzadi - kodlarning takrorlanishini minimallashtirish. Har qanday turdagi parametrlar bilan ishlaydigan
max() funksiyasining bitta versiyasini yozish yaxshi emasmi?
Bu mumkin. Shablonlar dunyosiga xush kelibsiz!
Agar lug‘atdagi “shablon” so‘zining ta’rifiga e’tibor qaratsangiz, biz quyidagilarni ko‘ramiz: “Shablon – shunga o‘xshash
mahsulotlar tayyorlanadigan namunadir”. Misol uchun, shablon stencil - chizma / naqsh / belgi kesilgan ob'ekt (masalan,
plastinka). Agar biz boshqa ob'ektga trafaret yopishtirib, bo'yoq purkasak, biz minimal kuch bilan bir xil naqshni olamiz, tez va
eng muhimi, biz o'nlab bu naqshlarni turli rangda yasay olamiz! Bunday holda, bizga faqat bitta stencil kerak va biz rasmning
rangini oldindan aniqlashimiz shart emas (stencilni ishlatishdan oldin).
C++ tilida funksiya shablonlari boshqa shunga o'xshash funksiyalarni yaratish uchun shablon bo'lib xizmat qiladigan
funksiyalardir. Asosiy g'oya - ba'zi yoki barcha o'zgaruvchilarning aniq turini (turlarini) ko'rsatmasdan funktsiyalarni yaratish.
Buning uchun har qanday ma'lumotlar turi o'rniga qo'llaniladigan shablon parametrining turini ko'rsatuvchi funktsiyani
aniqlaymiz. Shablon parametr turiga ega funktsiyani yaratganimizdan so'ng, biz samarali tarzda "funktsiya trafaretini" yaratadi.
3.Shablon funksiyalar yaratish va ulardan foydalanish.
Funksiya shablonini chaqirganda, kompilyator funksiya uchun shablon sifatida "trafaret" dan foydalanadi, shablon
parametri turini funktsiyaga uzatilgan o'zgaruvchilarning haqiqiy turi bilan almashtiradi! Shunday qilib, biz faqat bitta
shablon yordamida funktsiyaning 50 ta "soyasini" yaratishimiz mumkin
Hozircha siz C++ da funksiya shablonlari qanday yaratilganiga qiziqayotgandirsiz. Bu unchalik qiyin emasligi ma'lum
bo'ldi. max() funksiyasining butun son versiyasini yana bir bor ko'rib chiqing:
Bu erda biz ma'lumotlar turini uch marta aniqlaymiz: a, b parametrlarida va funktsiyaning qaytish turida. Bu funksiya
uchun shablon yaratish uchun int turini funksiya shablon parametri turiga almashtirishimiz kerak. Bu holatda faqat bitta
ma'lumot turi (int) ishlatilganligi sababli, biz shablon parametrlarining faqat bitta turini ko'rsatishimiz kerak.
Biz bu turni har qanday nomlashimiz mumkin, agar u zaxiralangan/kalit so'z bo'lmasa. C++ tilida bosh T harfi bilan
shablon parametrlari turlariga murojaat qilish odatiy holdir (“Type” so‘zining qisqartmasi).
Mana bizning o'zgartirilgan max() funksiyamiz:
Lekin bu hammasi emas. Dastur ishlamaydi, chunki kompilyator T nima ekanligini bilmaydi!
Buni amalga oshirish uchun biz kompilyatorga ikkita narsani aytishimiz kerak:
Funktsiya shablonining ta'rifi.
T funksiya shablon parametrining turi ekanligini ko'rsatadi.
Biz buni bitta kod qatorida shablon deklaratsiyasini (aniqrog'i, shablon parametrlari deklaratsiyasini) bajarish orqali
amalga oshirishimiz mumkin:
Keling, shablon parametrlari deklaratsiyasini batafsil ko'rib chiqaylik:
Birinchidan, biz shablon kalit so'zini yozamiz, bu esa kompilyatorga shablon parametrlarini keyingi e'lon qilishimizni
aytadi.
Funktsiya shablonining parametrlari burchakli qavslarda ko'rsatilgan.
Typename va class kalit so'zlari shablon parametr turlarini yaratish uchun ishlatiladi. Funktsiya shablonlarini ishlatishning
asosiy holatlarida tip nomi va sinf o'rtasida farq yo'q, shuning uchun siz ikkalasidan birini tanlashingiz mumkin. Agar siz
class kalit so'zidan foydalansangiz, parametrlarning haqiqiy turi sinf bo'lishi shart emas (bu asosiy ma'lumotlar turining
o'zgaruvchisi, ko'rsatgich yoki boshqa narsa bo'lishi mumkin).
Keyin shablon parametrining turini nomlaymiz (odatda T).
Agar bir nechta shablon parametrlari kerak bo'lsa, ular vergul bilan ajratiladi:
Agar bir nechta parametrlar mavjud bo'lsa, ular odatda T1, T2 yoki boshqa harflar deb ataladi
4.Shablon sinflar yaratish va ulardan foydalanish.
Funktsiya shablonlaridan foydalanish
Funktsiya shablonlaridan foydalanish oddiy funktsiyalardan foydalanishga o'xshaydi:
E'tibor bering, max() funksiyasiga uchta qo'ng'iroq ham har xil turdagi parametrlarga ega! Biz max() funksiyasini uch xil turdagi parametrlar bilan chaqirayotganimiz sababli,
kompilyator max() funksiyasining uch xil versiyasini yaratish uchun funksiya shablonidan foydalanadi:
int tipidagi parametrlarga ega versiya (max).
Double tipidagi parametrlarga ega versiya (max).
tartipidagi parametrlarga ega versiya (max).
O'tkazilayotgan qiymatlar turini (max ning qismi) aniq ko'rsatishning hojati yo'q, kompilyator buni o'zi aniqlaydi.
Funktsiya shablonlari ko'p vaqtni tejaydi, chunki biz shablonni faqat bir marta yozamiz va biz uni har xil turdagi ma'lumotlar bilan ishlatishimiz mumkin. Funktsiya shablonlarini
yozishga odatlanganingizdan so'ng, oddiy funktsiyani yozish uchun ko'proq vaqt talab qilinmasligini bilib olasiz (muntazam funktsiyaning bitta versiyasi). Funktsiya shablonlari
kodni keyinchalik saqlashni ancha osonlashtiradi va ular xavfsizroqdir, chunki kodni nusxalash orqali funktsiyani qo'lda ortiqcha yuklashingiz shart emas va faqat yangi
ma'lumotlar turini qo'llab-quvvatlashingiz kerak bo'lganda ma'lumotlar turlarini o'zgartirishingiz shart emas.
Funktsiya shablonlarining bir nechta kamchiliklari bor va agar ular haqida gapirmasak, kechirib bo'lmaydi:
1. Birinchidan, ba'zi eski kompilyatorlar funksiya shablonlarini qo'llab-quvvatlamasligi mumkin yoki ular mumkin, lekin cheklovlar bilan. Biroq, bu endi avvalgidek muammo
emas.
2. Ikkinchidan, funktsiya shablonlari ko'pincha aqldan ozgan xato xabarlarini ishlab chiqaradi, bu oddiy funktsiya xatolaridan ko'ra shifrlash qiyinroq.
3. Uchinchidan, funksiya shablonlari kompilyatsiya vaqtini va kod hajmini oshirishi mumkin, chunki bitta shablonni bir nechta fayllarda “amalga oshirish” va qayta kompilyatsiya
qilish mumkin.
Funktsiya shablonlarining kuchi va moslashuvchanligi bilan solishtirganda, bu kamchiliklar juda kichikdir!
Shablonlar ba'zi parametrlarga (masalan, ma'lumotlar turlari, bufer o'lchamlari, standart qiymatlar) bog'lanmagan holda umumlashtirilgan algoritmlarni kodlash uchun
mo'ljallangan C++ tili vositasidir.
C++ da funksiya va sinf shablonlarini yaratish mumkin.
Shablonlar parametrlangan sinflar va funksiyalarni yaratishga imkon beradi. Parametr har qanday turdagi yoki ruxsat etilgan turlardan birining qiymati bo'lishi mumkin (integer,
enum, global kirish mumkin bo'lgan nomga ega har qanday ob'ektga ko'rsatgich, mos yozuvlar). Masalan, bizga qandaydir sinf kerak:
Bitta aniq maqsadda biz ushbu sinfdan foydalanishimiz mumkin. Ammo, to'satdan, maqsad biroz o'zgardi va boshqa sinf kerak. Endi bizga SomeArray massivining 30 ta
elementi va SomeArray elementlarining haqiqiy turi SomeValue kerak. Keyin biz aniq turlardan mavhum bo'lishimiz va parametrlarga ega shablonlardan foydalanishimiz
mumkin. Sintaksis: boshida, sinfni e'lon qilishdan oldin, biz shablonni, ya'ni shablonni e'lon qilamiz va burchakli qavslar ichida parametrlarni belgilaymiz. Bizning misolimizda:
Keyin birinchi holat uchun (20 ta elementdan iborat SomeValue va SomeArray butun soni bilan) biz yozamiz:
SomeClass < 20, int > SomeVariable;
ikkinchisi uchun:
SomeClass < 30, double > SomeVariable2;
Shablonlar kod bo'lagi uchun stenografiya taqdim etsa-da, ulardan foydalanish bajariladigan kodni qisqartirmaydi, chunki kompilyator har bir variant to'plami uchun funksiya
yoki sinfning alohida nusxasini yaratadi. Natijada, umumiy kutubxonalar ichida kompilyatsiya qilingan kodni almashish imkoniyati yo'qoladi.
Shablon tavsifi sintaksisi
Funktsiya shabloni shablon kalit so'zidan boshlanadi, undan keyin burchakli qavslar ichidagi parametrlar ro'yxati keladi. Keyin funksiya deklaratsiyasi keladi:
shablon
bekor tartiblash ( T massivi [], int o'lchami ); // prototip: tartiblash shabloni e'lon qilingan, lekin aniqlanmagan
shablon
void sort( T array[], int size ) // deklaratsiya va ta'rif
{
Tt;
uchun (int i = 0; i < hajmi - 1; i++)
uchun (int j = o'lcham - 1; j > i; j--)
agar (massiv[j]
{
t = massiv[j];
massiv[j] = massiv[j-1];
massiv[j-1] = t;
}
}
shablon< int BufferSize > // butun son parametri
char * o'qish ()
{
char *Bufer = yangi belgi[ BufferSize ];
/* maʼlumotlarni oʻqish */
qaytarish buferi;
}
Typename kalit so'zi nisbatan yangi, shuning uchun standart[1] typename o'rniga sinfdan foydalanishga imkon beradi:
shablon
T o'rniga har qanday boshqa identifikator qabul qilinadi.
Foydalanish misoli
Eng oddiy misol - minimal ikki miqdorni aniqlash.
Agar a b dan kichik bo'lsa, a, aks holda b ni qaytaring
Shablonlar bo'lmasa, dasturchi foydalanilgan har bir ma'lumot turi uchun alohida funktsiyalarni yozishi kerak. Garchi ko'pgina dasturlash tillari elementar turlar (masalan, butun
sonlar va haqiqiy sonlar) uchun o'rnatilgan minimal funktsiyani aniqlasa ham, bunday funktsiya murakkab (masalan, "vaqt" yoki "string") va juda murakkab ("" uchun" kerak bo'lishi
mumkin. o'yinchi" onlayn o'yinda) ob'ektlar .
C++ da umumiy turlardan foydalangan holda shablon funksiyalar va sinflar yaratish
mumkin. Shablon funksiyalar va sinflar ko’plab turli ma’lumot turlari bilan ishlay oladi.
C++ da umumiy tur uchun dasturlash mumkin. Misol uchun, umumiy turdagi ikki
sondan kattasini aniqlovchi funksiya yaratdingiz. Agar siz funksiyani int argumentlar
uchun chaqirishingiz kerak bo’lsa, u holda umumiy tur int turi bilan almashitriladi. Agar
siz funksiyani ikki double argumentlar uchun chaqirmoqchi bo’lsangiz, u holda umumiy
tur double turi bilan almashtiriladi.
Shablonlar asoslari
Shablonlar sinflar va funksiyalarda turlarni parametrlashtirish imkoniin beradi. Siz
funksiyalar va sinflarni umumiy tur bilan aniqlay olasiz. Keyinchalik ular kompilyator
tomonidan aniq bir tur bilan ishlatiladi.
Shablon tushunchasini yoritib beradigan misol qaraymiz. Tasavvur qiling, ikkita butun,
ikkita haqiqiy, ikkita belgi va ikki satrlardan kattasini aniqlash kerak. Buning uchun
quyidagicha qayta yuklangan 4 ta funksiya yozilishi kerak:
Shablonlar asoslari
Yuqoridagi 4 funksiya deyarli bir xil, farqi faqat turlarida. Birinchi funksiyada
int, ikkinchisida double, uchinchisida char va to’rtinchisida string turlaridan
foydalanilmoqda. Agar funksiya quyidagicha umumiy tur orqali yaratilsa, u holda turlar
soni ko’p bo’lib ketmaydi va dastur kodi ham uzun bo’lib ketmaydi:
Bu yerda GenericType int, double, char va string turlaridan biri bo’la oladi.
5.Shablon funksiyalarda funksiyalarni qayta yuklash mexanizmi.
M a’lumki, funksiyalarni aniqlashda ulam ing qaytarishi lozim
bo‘lgan qiymatlar tipi va funksiya uchun zarur bo ‘lgan parametrlar
tipini ko'rsatish lozim edi.
Faraz qilaylik, ikkita butun sonni q o ‘shish uchun funksiya
ciurilgan b o ‘lsin. Agar uchta butun sonni q o ‘shish talab qilingan
bo‘lsa, ular uchun boshqa nomdagi funksiyani qurish talab qilinadi.
Ikkita haqiqiy sonni qo‘shish uchun esa boshqa funksiya qurish lozim
bo'ladi.
Bunday hollarda bir xil funksiyani takror va takror yozishning
o'm iga, C++ tili bir xil nomdagi funksiyalarni qurish imkonini beradi.
Dastumi kompilatsiya qilish jarayonida C++ funksiyalaming har
biridagi argumentlar miqdori e ’tiborga olinadi va aynan kerak bo'lgan
funksiyani chaqiradi. Kompilyatorga bir nechta funksiyalar orasidan
kcragini tanlash imkoniyati funksiyalarni qayta yuklash deb ataladi.
105Funksiyalami qayta yuklash amali bir xil nomdagi param etrlam i
har xil tipga mansub b o ‘lgan turli funksiyalar uchun qo‘llashga ruxsat
beradi.
Masalan, quyidagi dastur addjvalues nomli ikkita funksiyani
qayta yuklash uchun xizmat qiladi:
#include
int add_values (int a, int b)
{
return(a + b);
}
int add_values (int a, int b, int c)
C++ da dasturlashning asosiy bloklaridan biri funksiyalardir. Funksiyalar dasturchi ishini juda
yengillashtiradi. Funksiyalar yordamida programma modullashadi, qismlarga bo'linadi. Bu esa
keyinchalik dasturni rivojlantirishni osonlashtiradi. Bunda dasturchi yozgan funksiyalar C++
ning standart kutubhonasi va boshqa kutubhonalar ichidagi funksiyalar bilan birlashtiriladi. Bu
esa ishni osonlashtiradi. Ko'p holda dasturda takroran bajariladigan amalni funksiya sifatida
yozish va kerakli joyda ushbu funksiyani chaqirish mumkin. Dastur yozilish davrida hatolarni
topishni yengillashtiradi. Bir misolda funksiyaning asosiy qismlarini ko'rib chiqaylik: int foo(int
k, int t) { int result; result = k * t; return (result); }
Yuqoridagi foo funksiyamizning ismi, () qavslar ichidagi parametrlar – int tipidagi k va t lar
kirish argumentlaridir, ular faqat ushbu funksiya ichida ko'rinadi va qo'llaniladi. Bunday
o'zgaruvchilar lokal (local - mahalliy) deyiladi. result foo() ning ichida e’lon qilinganligi uchun
u ham lokaldir. Demak biz funksiya ichida o'zgaruvchilarni va sinflarni (class) e’lon qilishimiz
mumkin ekan. Lekin funksiya ichida boshqa funksiyani e’lon qilib bo'lmaydi. foo() funksiyamiz
qiymat ham qaytaradi. Qaytish qiymatining tipi foo() ning e’lonida eng boshida kelgan - int
tipiga ega. Biz funksiyadan qaytarmoqchi bo'lgan qiymatning tipi ham funksiya e’lon qilgan
qaytish qiymati tipiga mos kelishi kerak - ayni o'sha tipda bo'lishi yoki o'sha tipga keltirilishi
mumkin bo'lgan tipga ega bo'lishi shart. Funksiyadan qiymatni return ifodasi bilan qaytaramiz.
Agar funksiya hech narsa qaytarmasa e’londa void tipini yozamiz. Ya’ni: void funk() { int g =
10; cout << g; return; }
Bu funksiya void (bo’sh, hech narsasiz) tipidagi qiymatni qaytaradi. Boshqacha qilib aytganda qaytargan qiymati
bo’sh to’plamdir. Lekin funksiya hech narsa qaytarmaydi deya olmaymiz. Chunki hech narsa qaytarmaydigan
mahsus funksiyalar ham bor. Ularning qaytish qiymati belgilanadigan joyga hech narsa yozilmaydi. Biz unday
funksiyalarni keyinroq ko’rib chiqamiz. Bu yerda bir nuqta shuki, agar funksiya mahsus bo’lmasa, lekin oldida
qaytish qiymati tipi ko’rsatilmagan bo'lsa, qaytish qiymati int tipiga ega deb qabul qilinadi. void qaytish tipli
funksiyalardan chiqish uchun return; deb yozsak yetarlidir. Yoki return ni qoldirib ketsak ham bo’ladi.
Funksiyaning qismlari bajaradan vazifasiga ko’ra turlicha nomlanadi. Yuqorida korib chiqqanimiz funksiya
aniqlanishi (function definition) deyiladi, chunki biz bunda funksiyaning bajaradigan amallarini funksiya
nomidan keyin, {} qavslar ichida aniqlab yozib chiqyapmiz. Funksiya aniqlanishida {} qavslardan oldin nuqta-
vergul (;) qo'yish hatodir. Bundan tashqari funksiya e’loni, prototipi yoki deklaratsiyasi (function prototype)
tushunchasi qo'llaniladi.
Bu funksiya void (bo’sh, hech narsasiz) tipidagi qiymatni qaytaradi. Boshqacha qilib aytganda
qaytargan qiymati bo’sh to’plamdir. Lekin funksiya hech narsa qaytarmaydi deya olmaymiz. Chunki
hech narsa qaytarmaydigan mahsus funksiyalar ham bor. Ularning qaytish qiymati belgilanadigan
joyga hech narsa yozilmaydi. Biz unday funksiyalarni keyinroq ko’rib chiqamiz. Bu yerda bir nuqta
shuki, agar funksiya mahsus bo’lmasa, lekin oldida qaytish qiymati tipi ko’rsatilmagan bo'lsa, qaytish
qiymati int tipiga ega deb qabul qilinadi. void qaytish tipli funksiyalardan chiqish uchun return; deb
yozsak yetarlidir. Yoki return ni qoldirib ketsak ham bo’ladi. Funksiyaning qismlari bajaradan
vazifasiga ko’ra turlicha nomlanadi. Yuqorida korib chiqqanimiz funksiya aniqlanishi (function
definition) deyiladi, chunki biz bunda funksiyaning bajaradigan amallarini funksiya nomidan keyin, {}
qavslar ichida aniqlab yozib chiqyapmiz. Funksiya aniqlanishida {} qavslardan oldin nuqta-vergul (;)
qo'yish hatodir. Bundan tashqari funksiya e’loni, prototipi yoki deklaratsiyasi (function prototype)
tushunchasi qo'llaniladi.

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

NedrLBau-ZEHw2e5xL2ax-qd6U0egpTP (2).pptx

  • 1. O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI Telekommunikatsion texnalogiyalar va kasbiy ta’lim fakulteti TT- 13-23 guruh talabasi To'rayev Husanning Dasturlash fanidan tayyorlagan 1-Semestr uchun 5-Mustaqil ishi Qabul qildi: Zoxidov J.B. Bajardi: To'rayev Husan 2023
  • 2. Chiziqli jarayonlarni tashkil etish (Algoritm va dastur). Sinflarni yaratishda operatorlarni qayta yuklash mexanizmidan unumli foydalanish. Shablon funksiyalar yaratish va ulardan foydalanish. Shablon sinflar yaratish va ulardan foydalanish. Shablon funksiyalarda funksiyalarni qayta yuklash mexanizmi. Reja:
  • 3. 1.Chiziqli jarayonlarni tashkil etish (Algoritm va dastur). Har qanday murakkab algoritmni ham uch asosiy struktura yordamida tasvirlash mumkin. Bular ketma-ketlik, ayri va takrorlash strukturalaridir. Ushbu strukturalar asosida chiziqli, tarmoqlanuvchi va takrorlanuvchi hisoblash jarayonlarining algoritmlarini tuzish mumkin. Umuman olganda, algoritmlarni shartli ravishda quyidagi turlarga ajratish mumkin: - chiziqli algoritmlar; - tarmoqlanuvchi algoritmlar; - takrorlanuvchi algoritmlar; - ichma-ich joylashgan takrorlanuvchi algoritmlar; - rekurrent algoritmlar; - takrorlanishlar soni oldindan no’malum algoritmlar; - ketma-ket yaqinlashuvchi algoritmlar. Faqat ketma-ket bajariladigan amallardan tashkil topgan algoritmlarga - chiziqli algoritmlar deyiladi. Bunday algoritmni ifodalash uchun ketma-ketlik strukturasi ishlatiladi. Strukturada bajariladigan amal mos keluvchi shakl bilan ko‘rsatiladi. Chiziqli algoritmlar blok-sxemasining umumiy tuzilishi 1.4-rasmda keltirilgan. 1-misol. Uchburchak tomonlarining uzunligi bilan berilgan. Uchburchakka ichki r va tashqi R chizilgan aylanalar radiuslarini hisoblang. Ichki chizilgan aylana radiusi r = (a+b+c)/2S, tashqi chizilgan aylana radiusi R= 4S abc formulalar orqali hisoblanadi. Bu yerda S - uchburchakning yuzi, a, b, c – uchburchak tomonlarining uzunliklari. Masala echimining blok-sxemasi Chiziqli algoritmlar. Bu turdagi algoritmlarda hech qanday shart tekshirilmaydi. Shu sababli barcha ko‘rsatmalar ketmaket bajarib boriladi. «G‘ishtlar sonini hisob!ash», «Doira yuzini hisoblash» algoritmlari chiziqli algoritmlarga misol bo'ladi. Le- kin hayotimizdagi juda ko‘p jarayonlar shartlar asosida bosh- qariladi.
  • 4. Algoritm so‘zi buyuk matematik Al-Xorazmiyning nomi bilan bog‘liq bo‘lib, u birinchi bo‘lib arab raqamlaridan foydalangan holda arifmetik amallarni bajarish qoidasini bayon etdi. Har qanday qo‘yilgan masalani kompyuterda echish uchun oldin uning echish usulini tanlab, keyin uning algoritmini ishlab chiqish kerak bo‘ladi. Demak, hech bir masala yo‘qki uning echilish yo‘llarini bilmasdan va algoritmini tasavvur qilmasdan turib uni kompyuterda echib bo‘lmaydi. 2.Algoritm va uning xossalari Elektron hisoblash mashinalarining vujudga kelishiga qadar algoritmga har xil ta’rif berib kelindi. Lekin ularning barchasi ma’no jihatdan bir-biriga juda yaqin bo‘lib, bu ta’rif hozirgi kunda quyidagicha talqin qilinadi. Ta’rif. Algoritm deb, qo‘yilgan masalani echish uchun ma’lum qoidaga binoan bajariladigan amallarning chekli qadamlar ketma-ketligiga aytiladi. Har qanday algoritm ma’lum ko‘rsatmalarga binoan bajariladi va bu ko‘rsatmalarga buyruq deyiladi. Algoritm quyidagi muhim xossalarga ega: Aniqlik va tushunarlilik - deganda algoritmda ijrochiga berilayotgan ko‘rsatmalar aniq mazmunda bo‘lishi tushuniladi. Ommaviylik - deganda har bir algoritm mazmuniga ko‘ra bir turdagi masalalarning barchasi uchun ham o‘rinli bo‘lishi tushuniladi. Natijaviylik - deganda algoritmda chekli qadamlardan so‘ng albatta natija bo‘lishi tushuniladi. Diskretlik - deganda algoritmlarni chekli qadamlardan tashkil qilib bo‘laklash imkoniyati tushuniladi. 3.Algoritm turlari Algoritmning uchta turi bor: chiziqli, tarmoqlanuvchi va takrorlanuvchi. CHiziqli algoritm - deb hech qanday shartsiz faqat ketma-ket bajariladigan jarayonlarga aytiladi.
  • 5. 2.Sinflarni yaratishda operatorlarni qayta yuklash mexanizmidan unumli foydalanish. C # har qanday dasturlash tili singari, o'rnatilgan turlarda asosiy operatsiyalarni bajarish uchun ishlatiladigan tayyor leksemalar to`plamiga ega. Masalan, + operatsiyasini ikkita butun sonni qo`shishga uchun ishlatish mumkinligi ma'lum: / Butun sonlar bilan + operatsiyasi. int a = 100; int b = 240; int c = a + b; // c endi 340 ga teng Bu erda hech qanday yangilik yo'q, lekin siz bir xil operatsiyani C # o'rnatilgan ma'lumotlarning aksariyatiga qo'llash mumkin deb o'ylaganmisiz? Masalan, kodni quyidagicha ko'rib chiqing: // satrlar bilan + operatsiyasi. satr si = "Salom"; satr s2 = "dunyo!"; satr s3 = si + s2; // s3 endi "Salom dunyo!" Binar operatorlarni qayta yuklash namespace ConsoleApplication1 { class MyArr { // Uch o`lchovli fazoda koordinatalar public int x, y, z; public MyArr(int x = 0, int y = 0, int z = 0) { this.x = x; this.y = y; this.z = z; } Biri char - uni ko'rib chiqdik. Ikkinchisi int dir. Mashinalarning arhitekturasi qanday kattalikda bo'lsa, int tipining ham kattakigi huddi shunday bo'ladi. 16 bitlik mashinalarda int 16 bit edi. Hozirda esa int ning uzunligi 32 bitdir. int (integer - butun son) tipi charga o'hshaydi. Farqi bir baytdan kattaligidadir. 16 bitli int ning sig'imi -32768 dan +32767 gachadir. 32 bitli int esa -2 147 483 648 dan +2 147 483 647 gacha o'rin egallaydi. Bu ikki butun son tipidan tashqari C++ da ikki tur vergulli, (nuqtali) yani haqiqiy son tipi mavjud. Bulardan biri float, hotirada 4 bayt joy egallaydi. Ikkinchisi esa double, 8 bayt kattalikka ega. Bularning harakteristikalari quyidagi jadvalda berilgan. Ushbu tiplar bilan ishlaganda unsigned(ishorasiz, +/- siz), signed (ishorali) long (uzun) va short (qisqa) sifatlarini qo'llasa bo'ladi. unsigned va signed ni faqat butun son tiplari bilan qo'llasa bo'ladi.
  • 6. Operatorlarni qayta yuklash asoslari •C # har qanday dasturlash tili singari, o'rnatilgan turlarda asosiy operatsiyalarni bajarish uchun ishlatiladigan tayyor leksemalar to`plamiga ega. Masalan, + operatsiyasini ikkita butun sonni qo`shishga uchun ishlatish mumkinligi ma'lum: •/ Butun sonlar bilan + operatsiyasi. •int a = 100; •int b = 240; •int c = a + b; // c endi 340 ga teng Operatorlarni qayta yuklash asoslari •Bu erda hech qanday yangilik yo'q, lekin siz bir xil operatsiyani C # o'rnatilgan ma'lumotlarning aksariyatiga qo'llash mumkin deb o'ylaganmisiz? Masalan, kodni quyidagicha ko'rib chiqing: •// satrlar bilan + operatsiyasi. •satr si = "Salom"; •satr s2 = "dunyo!"; •satr s3 = si + s2; // s3 endi "Salom dunyo!"
  • 7. Funktsiya shablonlari Funktsiyalar va sinflar samarali dasturlash uchun kuchli va moslashuvchan vositalar bo'lsa-da, ular ba'zi hollarda C++ ning foydalaniladigan barcha parametrlarning turlarini belgilash talabi tufayli cheklangan. Masalan, ikkita sonning eng kattasini hisoblash uchun funksiya yozishimiz kerak deylik: Agar biz butun sonlar bilan ishlasak, hamma narsa yaxshi. Ammo agar biz ikki tomonlama qiymatlar bilan ishlashimiz kerak bo'lsa-chi? Ehtimol, ikki turdagi bilan ishlash uchun max() funksiyasini ortiqcha yuklashga qaror qilasiz: Endi bizda char, int, double va > operatorini haddan tashqari yuklasak, hatto sinflar bilan ishlaydigan bir xil funktsiyaning ikkita versiyasi mavjud! Biroq, C++ bizdan o'zgaruvchilarning turlarini ko'rsatishni talab qilganligi sababli, biz bir xil funktsiyaning bir nechta versiyasini yozishimiz kerak, bu erda faqat parametrlar turi o'zgaradi. Va bu, o'z navbatida, dasturchilar uchun bosh og'rig'i, chunki bunday kodni saqlash kuch va vaqt jihatidan oson emas. Va eng muhimi, bu samarali dasturlash tushunchalaridan birini buzadi - kodlarning takrorlanishini minimallashtirish. Har qanday turdagi parametrlar bilan ishlaydigan max() funksiyasining bitta versiyasini yozish yaxshi emasmi? Bu mumkin. Shablonlar dunyosiga xush kelibsiz! Agar lug‘atdagi “shablon” so‘zining ta’rifiga e’tibor qaratsangiz, biz quyidagilarni ko‘ramiz: “Shablon – shunga o‘xshash mahsulotlar tayyorlanadigan namunadir”. Misol uchun, shablon stencil - chizma / naqsh / belgi kesilgan ob'ekt (masalan, plastinka). Agar biz boshqa ob'ektga trafaret yopishtirib, bo'yoq purkasak, biz minimal kuch bilan bir xil naqshni olamiz, tez va eng muhimi, biz o'nlab bu naqshlarni turli rangda yasay olamiz! Bunday holda, bizga faqat bitta stencil kerak va biz rasmning rangini oldindan aniqlashimiz shart emas (stencilni ishlatishdan oldin). C++ tilida funksiya shablonlari boshqa shunga o'xshash funksiyalarni yaratish uchun shablon bo'lib xizmat qiladigan funksiyalardir. Asosiy g'oya - ba'zi yoki barcha o'zgaruvchilarning aniq turini (turlarini) ko'rsatmasdan funktsiyalarni yaratish. Buning uchun har qanday ma'lumotlar turi o'rniga qo'llaniladigan shablon parametrining turini ko'rsatuvchi funktsiyani aniqlaymiz. Shablon parametr turiga ega funktsiyani yaratganimizdan so'ng, biz samarali tarzda "funktsiya trafaretini" yaratadi. 3.Shablon funksiyalar yaratish va ulardan foydalanish.
  • 8. Funksiya shablonini chaqirganda, kompilyator funksiya uchun shablon sifatida "trafaret" dan foydalanadi, shablon parametri turini funktsiyaga uzatilgan o'zgaruvchilarning haqiqiy turi bilan almashtiradi! Shunday qilib, biz faqat bitta shablon yordamida funktsiyaning 50 ta "soyasini" yaratishimiz mumkin Hozircha siz C++ da funksiya shablonlari qanday yaratilganiga qiziqayotgandirsiz. Bu unchalik qiyin emasligi ma'lum bo'ldi. max() funksiyasining butun son versiyasini yana bir bor ko'rib chiqing: Bu erda biz ma'lumotlar turini uch marta aniqlaymiz: a, b parametrlarida va funktsiyaning qaytish turida. Bu funksiya uchun shablon yaratish uchun int turini funksiya shablon parametri turiga almashtirishimiz kerak. Bu holatda faqat bitta ma'lumot turi (int) ishlatilganligi sababli, biz shablon parametrlarining faqat bitta turini ko'rsatishimiz kerak. Biz bu turni har qanday nomlashimiz mumkin, agar u zaxiralangan/kalit so'z bo'lmasa. C++ tilida bosh T harfi bilan shablon parametrlari turlariga murojaat qilish odatiy holdir (“Type” so‘zining qisqartmasi). Mana bizning o'zgartirilgan max() funksiyamiz: Lekin bu hammasi emas. Dastur ishlamaydi, chunki kompilyator T nima ekanligini bilmaydi! Buni amalga oshirish uchun biz kompilyatorga ikkita narsani aytishimiz kerak: Funktsiya shablonining ta'rifi. T funksiya shablon parametrining turi ekanligini ko'rsatadi. Biz buni bitta kod qatorida shablon deklaratsiyasini (aniqrog'i, shablon parametrlari deklaratsiyasini) bajarish orqali amalga oshirishimiz mumkin: Keling, shablon parametrlari deklaratsiyasini batafsil ko'rib chiqaylik: Birinchidan, biz shablon kalit so'zini yozamiz, bu esa kompilyatorga shablon parametrlarini keyingi e'lon qilishimizni aytadi. Funktsiya shablonining parametrlari burchakli qavslarda ko'rsatilgan. Typename va class kalit so'zlari shablon parametr turlarini yaratish uchun ishlatiladi. Funktsiya shablonlarini ishlatishning asosiy holatlarida tip nomi va sinf o'rtasida farq yo'q, shuning uchun siz ikkalasidan birini tanlashingiz mumkin. Agar siz class kalit so'zidan foydalansangiz, parametrlarning haqiqiy turi sinf bo'lishi shart emas (bu asosiy ma'lumotlar turining o'zgaruvchisi, ko'rsatgich yoki boshqa narsa bo'lishi mumkin). Keyin shablon parametrining turini nomlaymiz (odatda T). Agar bir nechta shablon parametrlari kerak bo'lsa, ular vergul bilan ajratiladi: Agar bir nechta parametrlar mavjud bo'lsa, ular odatda T1, T2 yoki boshqa harflar deb ataladi
  • 9. 4.Shablon sinflar yaratish va ulardan foydalanish. Funktsiya shablonlaridan foydalanish Funktsiya shablonlaridan foydalanish oddiy funktsiyalardan foydalanishga o'xshaydi: E'tibor bering, max() funksiyasiga uchta qo'ng'iroq ham har xil turdagi parametrlarga ega! Biz max() funksiyasini uch xil turdagi parametrlar bilan chaqirayotganimiz sababli, kompilyator max() funksiyasining uch xil versiyasini yaratish uchun funksiya shablonidan foydalanadi: int tipidagi parametrlarga ega versiya (max). Double tipidagi parametrlarga ega versiya (max). tartipidagi parametrlarga ega versiya (max). O'tkazilayotgan qiymatlar turini (max ning qismi) aniq ko'rsatishning hojati yo'q, kompilyator buni o'zi aniqlaydi. Funktsiya shablonlari ko'p vaqtni tejaydi, chunki biz shablonni faqat bir marta yozamiz va biz uni har xil turdagi ma'lumotlar bilan ishlatishimiz mumkin. Funktsiya shablonlarini yozishga odatlanganingizdan so'ng, oddiy funktsiyani yozish uchun ko'proq vaqt talab qilinmasligini bilib olasiz (muntazam funktsiyaning bitta versiyasi). Funktsiya shablonlari kodni keyinchalik saqlashni ancha osonlashtiradi va ular xavfsizroqdir, chunki kodni nusxalash orqali funktsiyani qo'lda ortiqcha yuklashingiz shart emas va faqat yangi ma'lumotlar turini qo'llab-quvvatlashingiz kerak bo'lganda ma'lumotlar turlarini o'zgartirishingiz shart emas. Funktsiya shablonlarining bir nechta kamchiliklari bor va agar ular haqida gapirmasak, kechirib bo'lmaydi: 1. Birinchidan, ba'zi eski kompilyatorlar funksiya shablonlarini qo'llab-quvvatlamasligi mumkin yoki ular mumkin, lekin cheklovlar bilan. Biroq, bu endi avvalgidek muammo emas. 2. Ikkinchidan, funktsiya shablonlari ko'pincha aqldan ozgan xato xabarlarini ishlab chiqaradi, bu oddiy funktsiya xatolaridan ko'ra shifrlash qiyinroq. 3. Uchinchidan, funksiya shablonlari kompilyatsiya vaqtini va kod hajmini oshirishi mumkin, chunki bitta shablonni bir nechta fayllarda “amalga oshirish” va qayta kompilyatsiya qilish mumkin. Funktsiya shablonlarining kuchi va moslashuvchanligi bilan solishtirganda, bu kamchiliklar juda kichikdir! Shablonlar ba'zi parametrlarga (masalan, ma'lumotlar turlari, bufer o'lchamlari, standart qiymatlar) bog'lanmagan holda umumlashtirilgan algoritmlarni kodlash uchun mo'ljallangan C++ tili vositasidir. C++ da funksiya va sinf shablonlarini yaratish mumkin. Shablonlar parametrlangan sinflar va funksiyalarni yaratishga imkon beradi. Parametr har qanday turdagi yoki ruxsat etilgan turlardan birining qiymati bo'lishi mumkin (integer, enum, global kirish mumkin bo'lgan nomga ega har qanday ob'ektga ko'rsatgich, mos yozuvlar). Masalan, bizga qandaydir sinf kerak: Bitta aniq maqsadda biz ushbu sinfdan foydalanishimiz mumkin. Ammo, to'satdan, maqsad biroz o'zgardi va boshqa sinf kerak. Endi bizga SomeArray massivining 30 ta elementi va SomeArray elementlarining haqiqiy turi SomeValue kerak. Keyin biz aniq turlardan mavhum bo'lishimiz va parametrlarga ega shablonlardan foydalanishimiz mumkin. Sintaksis: boshida, sinfni e'lon qilishdan oldin, biz shablonni, ya'ni shablonni e'lon qilamiz va burchakli qavslar ichida parametrlarni belgilaymiz. Bizning misolimizda: Keyin birinchi holat uchun (20 ta elementdan iborat SomeValue va SomeArray butun soni bilan) biz yozamiz: SomeClass < 20, int > SomeVariable; ikkinchisi uchun: SomeClass < 30, double > SomeVariable2; Shablonlar kod bo'lagi uchun stenografiya taqdim etsa-da, ulardan foydalanish bajariladigan kodni qisqartirmaydi, chunki kompilyator har bir variant to'plami uchun funksiya yoki sinfning alohida nusxasini yaratadi. Natijada, umumiy kutubxonalar ichida kompilyatsiya qilingan kodni almashish imkoniyati yo'qoladi.
  • 10. Shablon tavsifi sintaksisi Funktsiya shabloni shablon kalit so'zidan boshlanadi, undan keyin burchakli qavslar ichidagi parametrlar ro'yxati keladi. Keyin funksiya deklaratsiyasi keladi: shablon bekor tartiblash ( T massivi [], int o'lchami ); // prototip: tartiblash shabloni e'lon qilingan, lekin aniqlanmagan shablon void sort( T array[], int size ) // deklaratsiya va ta'rif { Tt; uchun (int i = 0; i < hajmi - 1; i++) uchun (int j = o'lcham - 1; j > i; j--) agar (massiv[j] { t = massiv[j]; massiv[j] = massiv[j-1]; massiv[j-1] = t; } } shablon< int BufferSize > // butun son parametri char * o'qish () { char *Bufer = yangi belgi[ BufferSize ]; /* maʼlumotlarni oʻqish */ qaytarish buferi; } Typename kalit so'zi nisbatan yangi, shuning uchun standart[1] typename o'rniga sinfdan foydalanishga imkon beradi: shablon T o'rniga har qanday boshqa identifikator qabul qilinadi. Foydalanish misoli Eng oddiy misol - minimal ikki miqdorni aniqlash. Agar a b dan kichik bo'lsa, a, aks holda b ni qaytaring Shablonlar bo'lmasa, dasturchi foydalanilgan har bir ma'lumot turi uchun alohida funktsiyalarni yozishi kerak. Garchi ko'pgina dasturlash tillari elementar turlar (masalan, butun sonlar va haqiqiy sonlar) uchun o'rnatilgan minimal funktsiyani aniqlasa ham, bunday funktsiya murakkab (masalan, "vaqt" yoki "string") va juda murakkab ("" uchun" kerak bo'lishi mumkin. o'yinchi" onlayn o'yinda) ob'ektlar .
  • 11. C++ da umumiy turlardan foydalangan holda shablon funksiyalar va sinflar yaratish mumkin. Shablon funksiyalar va sinflar ko’plab turli ma’lumot turlari bilan ishlay oladi. C++ da umumiy tur uchun dasturlash mumkin. Misol uchun, umumiy turdagi ikki sondan kattasini aniqlovchi funksiya yaratdingiz. Agar siz funksiyani int argumentlar uchun chaqirishingiz kerak bo’lsa, u holda umumiy tur int turi bilan almashitriladi. Agar siz funksiyani ikki double argumentlar uchun chaqirmoqchi bo’lsangiz, u holda umumiy tur double turi bilan almashtiriladi. Shablonlar asoslari Shablonlar sinflar va funksiyalarda turlarni parametrlashtirish imkoniin beradi. Siz funksiyalar va sinflarni umumiy tur bilan aniqlay olasiz. Keyinchalik ular kompilyator tomonidan aniq bir tur bilan ishlatiladi. Shablon tushunchasini yoritib beradigan misol qaraymiz. Tasavvur qiling, ikkita butun, ikkita haqiqiy, ikkita belgi va ikki satrlardan kattasini aniqlash kerak. Buning uchun quyidagicha qayta yuklangan 4 ta funksiya yozilishi kerak: Shablonlar asoslari Yuqoridagi 4 funksiya deyarli bir xil, farqi faqat turlarida. Birinchi funksiyada int, ikkinchisida double, uchinchisida char va to’rtinchisida string turlaridan foydalanilmoqda. Agar funksiya quyidagicha umumiy tur orqali yaratilsa, u holda turlar soni ko’p bo’lib ketmaydi va dastur kodi ham uzun bo’lib ketmaydi: Bu yerda GenericType int, double, char va string turlaridan biri bo’la oladi.
  • 12. 5.Shablon funksiyalarda funksiyalarni qayta yuklash mexanizmi. M a’lumki, funksiyalarni aniqlashda ulam ing qaytarishi lozim bo‘lgan qiymatlar tipi va funksiya uchun zarur bo ‘lgan parametrlar tipini ko'rsatish lozim edi. Faraz qilaylik, ikkita butun sonni q o ‘shish uchun funksiya ciurilgan b o ‘lsin. Agar uchta butun sonni q o ‘shish talab qilingan bo‘lsa, ular uchun boshqa nomdagi funksiyani qurish talab qilinadi. Ikkita haqiqiy sonni qo‘shish uchun esa boshqa funksiya qurish lozim bo'ladi. Bunday hollarda bir xil funksiyani takror va takror yozishning o'm iga, C++ tili bir xil nomdagi funksiyalarni qurish imkonini beradi. Dastumi kompilatsiya qilish jarayonida C++ funksiyalaming har biridagi argumentlar miqdori e ’tiborga olinadi va aynan kerak bo'lgan funksiyani chaqiradi. Kompilyatorga bir nechta funksiyalar orasidan kcragini tanlash imkoniyati funksiyalarni qayta yuklash deb ataladi. 105Funksiyalami qayta yuklash amali bir xil nomdagi param etrlam i har xil tipga mansub b o ‘lgan turli funksiyalar uchun qo‘llashga ruxsat beradi. Masalan, quyidagi dastur addjvalues nomli ikkita funksiyani qayta yuklash uchun xizmat qiladi: #include int add_values (int a, int b) { return(a + b); } int add_values (int a, int b, int c)
  • 13. C++ da dasturlashning asosiy bloklaridan biri funksiyalardir. Funksiyalar dasturchi ishini juda yengillashtiradi. Funksiyalar yordamida programma modullashadi, qismlarga bo'linadi. Bu esa keyinchalik dasturni rivojlantirishni osonlashtiradi. Bunda dasturchi yozgan funksiyalar C++ ning standart kutubhonasi va boshqa kutubhonalar ichidagi funksiyalar bilan birlashtiriladi. Bu esa ishni osonlashtiradi. Ko'p holda dasturda takroran bajariladigan amalni funksiya sifatida yozish va kerakli joyda ushbu funksiyani chaqirish mumkin. Dastur yozilish davrida hatolarni topishni yengillashtiradi. Bir misolda funksiyaning asosiy qismlarini ko'rib chiqaylik: int foo(int k, int t) { int result; result = k * t; return (result); } Yuqoridagi foo funksiyamizning ismi, () qavslar ichidagi parametrlar – int tipidagi k va t lar kirish argumentlaridir, ular faqat ushbu funksiya ichida ko'rinadi va qo'llaniladi. Bunday o'zgaruvchilar lokal (local - mahalliy) deyiladi. result foo() ning ichida e’lon qilinganligi uchun u ham lokaldir. Demak biz funksiya ichida o'zgaruvchilarni va sinflarni (class) e’lon qilishimiz mumkin ekan. Lekin funksiya ichida boshqa funksiyani e’lon qilib bo'lmaydi. foo() funksiyamiz qiymat ham qaytaradi. Qaytish qiymatining tipi foo() ning e’lonida eng boshida kelgan - int tipiga ega. Biz funksiyadan qaytarmoqchi bo'lgan qiymatning tipi ham funksiya e’lon qilgan qaytish qiymati tipiga mos kelishi kerak - ayni o'sha tipda bo'lishi yoki o'sha tipga keltirilishi mumkin bo'lgan tipga ega bo'lishi shart. Funksiyadan qiymatni return ifodasi bilan qaytaramiz. Agar funksiya hech narsa qaytarmasa e’londa void tipini yozamiz. Ya’ni: void funk() { int g = 10; cout << g; return; }
  • 14. Bu funksiya void (bo’sh, hech narsasiz) tipidagi qiymatni qaytaradi. Boshqacha qilib aytganda qaytargan qiymati bo’sh to’plamdir. Lekin funksiya hech narsa qaytarmaydi deya olmaymiz. Chunki hech narsa qaytarmaydigan mahsus funksiyalar ham bor. Ularning qaytish qiymati belgilanadigan joyga hech narsa yozilmaydi. Biz unday funksiyalarni keyinroq ko’rib chiqamiz. Bu yerda bir nuqta shuki, agar funksiya mahsus bo’lmasa, lekin oldida qaytish qiymati tipi ko’rsatilmagan bo'lsa, qaytish qiymati int tipiga ega deb qabul qilinadi. void qaytish tipli funksiyalardan chiqish uchun return; deb yozsak yetarlidir. Yoki return ni qoldirib ketsak ham bo’ladi. Funksiyaning qismlari bajaradan vazifasiga ko’ra turlicha nomlanadi. Yuqorida korib chiqqanimiz funksiya aniqlanishi (function definition) deyiladi, chunki biz bunda funksiyaning bajaradigan amallarini funksiya nomidan keyin, {} qavslar ichida aniqlab yozib chiqyapmiz. Funksiya aniqlanishida {} qavslardan oldin nuqta- vergul (;) qo'yish hatodir. Bundan tashqari funksiya e’loni, prototipi yoki deklaratsiyasi (function prototype) tushunchasi qo'llaniladi. Bu funksiya void (bo’sh, hech narsasiz) tipidagi qiymatni qaytaradi. Boshqacha qilib aytganda qaytargan qiymati bo’sh to’plamdir. Lekin funksiya hech narsa qaytarmaydi deya olmaymiz. Chunki hech narsa qaytarmaydigan mahsus funksiyalar ham bor. Ularning qaytish qiymati belgilanadigan joyga hech narsa yozilmaydi. Biz unday funksiyalarni keyinroq ko’rib chiqamiz. Bu yerda bir nuqta shuki, agar funksiya mahsus bo’lmasa, lekin oldida qaytish qiymati tipi ko’rsatilmagan bo'lsa, qaytish qiymati int tipiga ega deb qabul qilinadi. void qaytish tipli funksiyalardan chiqish uchun return; deb yozsak yetarlidir. Yoki return ni qoldirib ketsak ham bo’ladi. Funksiyaning qismlari bajaradan vazifasiga ko’ra turlicha nomlanadi. Yuqorida korib chiqqanimiz funksiya aniqlanishi (function definition) deyiladi, chunki biz bunda funksiyaning bajaradigan amallarini funksiya nomidan keyin, {} qavslar ichida aniqlab yozib chiqyapmiz. Funksiya aniqlanishida {} qavslardan oldin nuqta-vergul (;) qo'yish hatodir. Bundan tashqari funksiya e’loni, prototipi yoki deklaratsiyasi (function prototype) tushunchasi qo'llaniladi.