Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2-semestr / 3-ameliy_jif
.pdf
3-ámeliy jumıs. Shablonlar menen islew. Funkciya shablonların
(template) jaratıw usılları hám olarǵa baylanıslı máseleler sheshiw.
Jumıstıń maqseti: C++ tilindegi "Ulıwmalasqan programmalastırıw"
(Generic Programming) quralı bolǵan Shablonlar (Templates) menen islesiwdi
úyreniw. Funkciya shablonların jaratıw, olardı hár qıylı tipler (`int`, `double`,
`string`) menen qollanıw hám kodtıń qaytalanıwın (Code Duplication) azaytıw
kónlikpelerin qáliplestiriw. Shablonlardıń arnawlı jaǵdayları (Specialization)
hám kóp parametrli shablonlar menen tanısıw.
Teoriyalıq bólim:
1. Shablon (Template): Tipti parametr retinde qabıllaytuǵın kod
"qálibi".
2. `template <typename T>`: Shablon járiyalaw sintaksisi. `T` -
qálegen tip.
3. Instanciya: Kompilyator shablonnan anıq bir tip ushın kod jaratıwı
(mısalı, `int` ushın).
4. Specialization: Shablonnıń anıq bir tip ushın bólek (ózgeshe)
nusqasın jazıw.
ÁMELIY BÓLIM:
Shablonlar arqalı universal funkciyalar jazamız.
1-mısal: Maksimum tabıw (Universal)
Kod:
#include <iostream>
using namespace std;
template <typename T>
T myMax(T a, T b) {
return (a > b) ? a : b;
}
int main() {
cout << myMax(10, 20) << endl; // int (20)

cout << myMax(5.5, 2.3) << endl; // double (5.5)
cout << myMax('Z', 'A') << endl; // char ('Z')
return 0;
}
Túsindirme: Biz `myMax` degen shablon funkciya jazdıq. `T` degen – bul
belgisiz tip. `main` funkciyasında `myMax(10, 20)` degenimizde, kompyuter `T`
nı `int` dep túsinedi hám `int` lerdi salıstıradı. `myMax(5.5, 2.3)` degenimizde,
`T` nı `double` dep túsinedi. Bir ǵana kod hámme tipke boladı.
2-mısal: Eki túrli tip (Pair Printer)
Kod:
template <typename T1, typename T2>
void printPair(T1 a, T2 b) {
cout << "Jup: " << a << " - " << b << endl;
}
int main() {
printPair(1, "Alma"); // int, char*
printPair("Baha", 500.5); // char*, double
return 0;
}
Túsindirme: Bul jerde eki shablon parametri bar: `T1` hám `T2`. Olar hár
qıylı bolıwı múmkin. Birinshi jaǵdayda `T1`=`int`, `T2`=`char*` (tekst). Ekinshi
jaǵdayda `T1`=`char*`, `T2`=`double`. Bul bizge hár qıylı maǵlıwmatlardı
biriktirip shıǵarıwǵa imkaniyat beredi.
3-mısal: Massivti shıǵarıw (Array Printer)
Kod:
template <typename T>
void printArray(T arr[], int size) {
for (int i = 0; i < size; i++) {

cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int iArr[] = {1, 2, 3};
double dArr[] = {1.1, 2.2, 3.3};
printArray(iArr, 3); // int massiv
printArray(dArr, 3); // double massiv
return 0;
}
Túsindirme: `printArray` funkciyası qálegen tiptegi massivti (`T arr[]`)
qabıllaydı. `int` massiv bolsa da, `double` bolsa da, olardıń elementlerin
shıǵarıw logikası birdey (`cout << arr[i]`). Shablon bizdi eki bólek funkciya
jazıwdan qutqardı.
ÁMELIY TAPSÍRMALAR
1. `myMin(a, b)` shablon funkciyasın jazıń (kishisin tabıw).
2. `mySwap(a, b)` shablonın jazıń (eki ózgeriwshiniń ornın almastırıw).
3. `sum(a, b)` shablonın jazıń (eki sandı qosıw). `int` hám `double` menen
tekseriń.
4. `isEqual(a, b)` shablonın jazıń (teńligin tekseriw, bool qaytarsın).
5. `square(x)` shablonın jazıń (kvadratın tabıw).
6. `printThree(a, b, c)` shablonın jazıń (úsh mánisti probel menen shıǵarıw).
7. `absolute(x)` shablonın jazıń (modul, oń sanǵa aylandırıw).
8. `getAverage(a, b)` shablonın jazıń (ortasha mánis).
9. `findInArray(arr, size, val)` shablonın jazıń. Massivten `val` dı izlesin,
tapsa indeksin, tappasa -1 qaytarsın.
10. `reverseArray(arr, size)` shablonın jazıń. Massivti keri aylandırsın.

11. `compareArrays(arr1, arr2, size)` shablonın jazıń. Eki massivtiń birdey
ekenin teksersin.
12. `Multiplier` klass shablonın jaratıń. `multiply(a, b)` metodı bolsın.
13. `Pair<T>` klass shablonın jaratıń. Ishinde eki `T` tipindegi ózgeriwshi
bolsın.
14. `myMax` shablonın `char*` (tekst) ushın arnawlı jaǵday (specialization)
etip jazıń (`strcmp` qollanıń).
15. `Stack<T>` klass shablonın jaratıń (ápiwayı stek: `push`, `pop`).
Соседние файлы в папке 2-semestr
