O’ZBEKISTON RESPUBLIKASI
OLIY VA O’RTA MAXSUS TA’LIM VAZIRLIGI
ZAHIRIDDIN MUHAMMAD BOBUR NOMIDAGI ANDIJON DAVLAT UNIVERSITETI
AXBOROT TEXNOLOGIYALARI VA KOMPYUTER INJINERING AXBOROT TEXNOLOGIYALARI KAFEDRASI
5110700-INFORMATIKA O’QITISH METODIKASI YO’NALISHI
IV KURS 414-GURUH TALABASI
___________________________
DASTURLASH FANIDAN
KURS ISHI
Kirish
Prezidentimiz tashabbusi bilan mamlakatimizda yetakchi soha va tarmoqlarni innovatsion rivojlantirish, innovatsion g‘oyalar va texnologiyalarni ishlab chiqarishga keng joriy etish yuzasidan izchil ishlar amalga oshirilmoqda. Davlatimiz rahbarining 2017-yil 29-noyabrdagi “O‘zbekiston Respublikasi Innovatsion rivojlanish vazirligini tashkil etish to‘g‘risida”gi farmoni bu boradagi ishlarni yangi bosqichga ko‘tarishga xizmat qiladi. Mamlakatimizda ilmiy-tadqiqot va innovatsiya faoliyatining istiqbolli yutuqlarini targ‘ib qilish, bu borada samarali mexanizmlarni ishlab chiqish, ilmiy-eksperimental ixtisoslashgan laboratoriyalar, yuqori texnologik markazlar, texnoparklar va boshqa innovatsion tuzilmalarni mustahkamlash yangi vazirlikning faoliyat yo‘nalishlaridandir. Innovatsiyalarni tatbiq etish ilmiy-amaliy markazida buning uchun barcha sharoit yaratiladi. Vazirlik ham shu markazda joylashadi. Ushbu muassasada ilmiy-konsultativ, iqtisodiyot tarmoqlari innovatsion ehtiyojlarini o‘rganish, yoshlar innovatsion g‘oyalarini qo‘llab-quvvatlash xizmatlari, masofaviy ta’lim kurslari yo‘lga qo‘yiladi. Iqtidorli yoshlar bu yerda yangi ishlanma va texnologiyalar bilan tanishish barobarida start-ap loyihalarida ishtirok etish imkoniyatiga ega bo‘ladi. Xalqimiz dunyoqarashida innovatsiya muhitini yaratish eng muhim vazifamizdir. Innovatsiya bo‘lmas ekan, hech bir sohada raqobat, rivojlanish bo‘lmaydi. Bu sohadagi o‘zgarishlarni xalqimizga keng targ‘ib qilmasak, odamlarda ko‘nikma paydo qilmasak, bugungi davr shiddati, fan-texnikaning mislsiz yutuqlari bilan hamqadam bo‘lolmaymiz. Shuning uchun ushbu faoliyatni zamon talablari darajasida rivojlantirish yangi vazirlik, qolaversa, ushbu markazning asosiy vazifasi bo‘lishi kerak, dedi Shavkat Mirziyoyev. Davlatimiz rahbari markazni yoshlar va butun ziyolilar qatlami uchun yanada qulay qilib loyihalashtirish, hududda innovatsion yutuqlardan foydalangan holda sharoitlar yaratish bo‘yicha muhim topshiriqlar berdi.
Mavzu:Shablonlar bilan ishlash. Sinf shablon(template)larini yaratish usullari va ularga doir masalalarni yechish;
REJA
Kirish
1.Shablonlar.
2.Shablonlar bilan ishlash.
3.Sinf shablon(templatelarini yaratish usullari va ulargaa doir masalalarni yechish.
Xulosa.
Foydalanilgan adabiyotlar.
Dasturlash mobaynida bir xil ifodalarni, hisoblash jarayonlarini qayta – qayta hisoblashga to`g`ri keladi. Dasturlash tillarida, kompyuter hotirasini va dasturchining vaqtini tejash maqsadida, bunday takkorlanuvchi jarayonlarni dasturda ajratib yozib, unga asosiy daturdan, boshqa funksiyalardan murojaat qilish imkoniyatlari keltirilgan.
Dasturning istalgan qismidan murojaat qilib, bir necha bor ishlatish mumkin bo`lgan operatorlar guruhiga funksiya deyiladi. C++ funksiyalar tili deyiladi. Chunki dasturda kamida bitta main funksiyasi bo'ladi. Asosiy dastur, asosiy funksiya deganda aynan manashu main funksiyasini tushunamiz. Asosiy dasturdan (yoki chaqiruvchi funksiyadan) xech qanday parameter qabul qilib olmaydigan funksiyalarga, parametrsiz funksiyalar deyiladi. Parametrsiz funksiyaning o'zi ham 2 xil bo'lishi mumkin:
1) Asosiy dasturga (yoki chaqiruvchi funksiyaga) natijani qaytaruvchi.
2) void turidagi funksiya bo'lib, asosiy dasturdan (yoki chaqiruvchi funksiyadan) xech qanday parametr qabul qilib olmaydi xam, asosiy dasturga xech qanday natija qaytarmaydi ham. Parametrsiz funksiyaga murojaat qilishda dastur tanasida funksiya nomi yoziladi. Dasturda funksiya nomi operatorlar kabi ishlatiladi.
Parametrsiz funksiyada asosiy dasturning barcha global o`zgaruvchilaridan foydalanish mumkin.Global o`zgaruvchilar Ham asosiy dasturda, ham funksiyada ishlatish mumkin bo'lgan o`zgaruvchilar global o'zgaruvchilar deyiladi. Global o'zgaruvchilar asosiy dasturda e`lon qilishi kerak. Lokal o`zgaruvchilar
Faqat funksiyada ishlatish mumkin bo'lgan o'zgaruvchilarga local o'zgaruvchilar deyiladi. Ular funksiyada e`lon qilinadi. Funksiyada yana bir nechta ichki funksiyalardan foydalanish mumkin. Blok ichida e'lon qilingan o'zgaruvchilar, shu blok uchun lokal o'zgaruvchilar hisoblanadi. Bu o'zgaruvchilardan faqat blok ichida foydalanish mumkin. Parametrli funksiyalar Asosiy dasturdan (funksiyadan) chaqiriluvchi funksiyaga uzatilgan parametrlarni qabul qilib qayta ishlovchi funksiyalar parametrli funksiyalar deyiladi. Qiymat parametrlar – asosiy dasturdan funksiyaga uzatiladigan o'zgaruvchilar qiymatlarni qabul qilib oluvchi parametrlar. Funksiyaga murojaat qilinganida qiymat parametrlari uchun xotiradan joy ajratiladi. Funksiya tugaganida qiymat parametrlari uchun ajratilgan xotira bo'shatiladi. Ko'rsatkich parametrlar - asosiy dasturdan funksiyaga uzatiladigan o'zgaruvchilarning xotiradagi adresini qabul qilib oluvchi parametrlar.
Ko'rsatkich parametrlari ustida bajarilgan har qanday o'zgarish, asosiy dasturdagi o'zgaruchilarning xotira adresida sodir bo'ladi. (Ya'ni asosiy dasturdagi o'zgaruvchi qiymati o'zgaradi) Eslatma: Qiymat parametrlari va ko'rsatkich parametrlar toifasi, asosiy dasturdagi qiymati uzatilayotgan o`zgaruvchilar toifasi bilan bir xil bo`lishi lozim.
Funksiyadan chiqish Ixtiyoriy funksiyadan chiqish uchun return xizmatchi so'zi ishlatiladi.
Shablonlar haqida Ushbu darsda C++ dasturlash tilining asosiy hususiyatlaridan bo‟lgan shablonlar bilan tanishamiz. Shablonlar yordamida umumiy funksiyalar va umumiy classlar yaratish imkoniyati mavjud. Umumiy funksiya va umumiy classlar har xil ma‟lumot toifalaridan ularni overload qilmasdan (ko‟p kod yozmasdan) foydalanish imkoniyatini beradi. Ya‟ni bunda biz har bir toifa uchun aloxida funksiya yozishimiz shart bo’lmaydi. Shablonlar ikki xil bo‟ladi:
• Funksiya shabloni (function template)
• Sinf shabloni (class template) Funksiya shablonini (function template) yaratish Funksiya shabloni template kalit so‟zidan foydalangan holda amalga oshiriladi.
Quyida funksiya shablonini yaratish formasi keltirilgan: template qaytarish-tipi funk-nomi (arg-lar) { // funksiya tanasi } Bu yerda TOIFA funksiya tomonidan joriy holda ishlatiladigan ma‟lumot tipi. Ushbu toifani kompilyator avtomatik ravishda funksiyaga kelayotgan ma‟lumot tipi bilan almashtirib qo‟yadi. Bu yerda class va template lar funksiya shablonini yaratish uchun ishlatiladigan kalit so‟zlardir. Lekin ba‟zi hollarda class kalit so‟zi o‟rniga typename kalit so‟zini ishlatishimiz mumkin. Quyidagi misol hohlagan tipda berilgan ikkita o‟zgaruvchi o‟rnini almashtirib berish uchun xizmat qiladi va bunda har bir toifa uchun alohida funksiya yozishimizga zaruriyat qolmaydi.
Funksiya shabloniga misol #include using namespace std; // Funksiya shabloni e’lon qilinishi...
template void swapargs(X &a, X &b)
{ X temp; temp = a; 104 a = b; b = temp; }
int main()
{ int i=10, j=20; double x=10.1, y=23.3; char a='x', b='z'; cout << "Original i, j: " << i << ' ' << j << '\n'; cout << "Original x, y: " << x << ' ' << y << '\n'; cout << "Original a, b: " << a << ' ' << b << '\n'; swapargs(i, j);
// swap funksiyasi butun toifa uchun (int) swapargs(x, y); // swap funksiyasi haqiqiy toifa uchun (float) swapargs(a, b); // swap funksiyasi simvol toifa uchun (char) cout << "Swapped i, j: " << i << ' ' << j << '\n'; cout << "Swapped x, y: " << x << ' ' << y << '\n'; cout << "Swapped a, b: " << a << ' ' << b << '\n'; return 0; } Dastur izohi: Umumiy funksiyaning boshqacha ko’rinishi Quyidagi misolda swapargs( ) funksiyasi boshqacharoq ko‟rinishda e‟lon qilingan. Ya‟ni shablon birinchi satrda funksiya esa alohida satrda joylashgan.
template void swapargs(X &a, X &b)
{ X temp; temp = a; a = b; b = temp; }
Lekin bu ko‟rinishda birinchi va ikkinchi satr o‟rniga bironta kod yozilsa xatolik beradi
template int c // ERROR void swapargs(X &a, X &b) 105
{ X temp; temp = a; a = b; b = temp; }
Funksiya shablonini override (qayta yozish) qilish. template void swapargs(X &a, X &b) { X temp; temp = a; a = b; b = temp; cout << "swapargs funksiya shabloni chaqirildi.\n"; } // Bunda swapargs() funksiyasi faqatgina int tipi uchun ishlaydi. void swapargs(int &a, int &b) { int temp; temp = a; a = b; b = temp; cout << " int tipi uchun maxsus swapargs funksiyasi.\n"; } int main() { int i=10, j=20; double x=10.1, y=23.3; char a='x', b='z'; cout << "Original i, j: " << i << ' ' << j << '\n'; cout << "Original x, y: " << x << ' ' << y << '\n'; cout << "Original a, b: " << a << ' ' << b << '\n'; swapargs(i, j); // calls explicitly overloaded swapargs() swapargs(x, y); // calls generic swapargs() swapargs(a, b); // calls generic swapargs() cout << "Swapped i, j: " << i << ' ' << j << '\n'; cout << "Swapped x, y: " << x << ' ' << y << '\n'; cout << "Swapped a, b: " << a << ' ' << b << '\n'; return 0; 106 } Dastur natijasi: Funksiya shablonini Override qilish yangi usuli template<> void swapargs(int &a, int &b) { int temp; temp = a; a = b; b = temp; cout << " int tipi uchun maxsus swapargs funksiyasi.\n"; } Funksiya shablonini overload qilish. // Oddiy funksiyalardek, funksiya shablonini ham overload qilish mumkin. #include using namespace std; // f() funksiya shablonining birinchi turi. template void f(X a) { cout << "Inside f(X a)\n"; } // f() funksiya shablonining ikkinchi turi. template void f(X a, Y b) { cout << "Inside f(X a, Y b)\n"; } int main() Original i, j: 10 20 Original x, y: 10.1 23.3 Original a, b: x z int tipi uchun maxsus swapargs funksiyasi. swapargs funksiya shabloni chaqirildi.
swapargs funksiya shabloni chaqirildi.
Swapped i, j: 20 10 Swapped x, y: 23.3 10.1
Swapped a, b: z x 107 { f(10); // calls f(X) f(10, 20); // calls f(X, Y) return 0; } Funksiya shablonining kamchiligi
• Umumiy funksiyalar funksiya overloadining o‟rnini bosishi mumkin.
• Lekin bu yerda bitta kamchilik mavjud.
• Biz oddiy funksiyani overload qilganimizda, har xil ma‟lumotlar tipi uchun funksiya tanasini har xil qilib yozishimiz mumkin.
• Lekin umumiy funksiyada har xil tip qabul qila olgani bilan funksiya tanasi har doim bir xil bo‟ladi, chunki bitta funksiyaga murojaat bo‟ladi.
• Faqatgina ma’lumotlar tipi har xil bo‟la oladi. Umumiy sinflar (sinf shabloni) Sinf shablonini e‟lon qilishning umumiy formasi: template class sinf_nomi{ ... } Yoki quyidagi ko‟rinishda e‟lon qilish mumkin template class sinf_nomi { ... } Sinf shablonini ishlatish sinf_nomi obyekt; 108 Sinf shabloni uchun oddiy misol. #include using namespace std; template class mypair { T a, b; public: mypair (T first, T second) {a=first; b=second;} T getmax (); }; template T mypair::getmax () { T retval; retval = a>b? a : b; return retval; } int main () { mypair myobject (100, 75); cout << myobject.getmax(); return 0; } Sinf shablonida ikki xil toifadan foydalanish #include using namespace std; template class myclass { Type1 i; Type2 j; public: myclass(Type1 a, Type2 b) { i = a; j = b; } void show() { cout << i << ' ' << j << '\n'; } 109 }; int main() { myclass ob1(10, 0.23); myclass ob2('X', "Templates add power."); ob1.show(); // show int, double ob2.show(); // show char, char * return 0; } Dastur natijasi: Maxsuslashtirilgan sinf shabloni template<> konstruktori maxsusashtirilgan sinf shabloni uchun ishlatiladi template class myclass { T x; public: myclass(T a) { cout << "Inside generic myclass\n"; x = a; } T getx() { return x; } }; // int toifasi uchun maxsuslashtirilgan sinf shabloni. template <> class myclass { int x; public: myclass(int a) { cout << "Inside myclass specialization\n"; x = a * a; } int getx() { return x; } }; Shablonning asosiy xususiyatlari • reusable kod yozish imkonini beradi. • Shablonlar yordamida framework lar yaratish mumkin 10 0.23 X Templates add power. 110 • Dastur kodi egiluvchanlik xususiyatiga ega bo‟ladi. • Turli xil tipdagi ma‟lumotlar ustida ishlash uchun kod yozishda vaqtni tejash • C++ dagi STL lar (Standard Shablon Kutubxonalar), nomidan ko‟rinib turibdiki, shablonlar yordamida yaratilgan.
Shablonlar bilan ishlash.
Dostları ilə paylaş: |