Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

8-ameliy_paradigma_qq

.pdf
Скачиваний:
0
Добавлен:
18.01.2026
Размер:
204.6 Кб
Скачать

8-ámeliy jumıs. Funkcional programmalastırıwda máselelerdi sheshiw

Jumıstıń maqseti: Funkcional programmalastırıw (Functional Programming - FP) paradigmasınıń tiykarǵı principlerin ózlestiriw. Taza funkciyalar (Pure Functions), Joqarı tártipli funkciyalar (Higher-Order Functions), Lambda ańlatpaları hám Rekursiyanı ámeliyatta qollanıwdı úyreniw. C++ tilindegi funkcional imkaniyatlardan (std::function, lambda, algorithm kitapxanası) paydalanıp, kodtıń ıqshamlıǵı hám deklarativligin arttırıw.

Teoriyalıq bólim:

Funkcional programmalastırıw – bul esaplawlardı matematikalıq funkciyalardıń mánislerin esaplaw retinde qaraytuǵın paradigma.

Tiykarǵı túsinikler:

1.Taza funkciyalar (Pure Functions): Nátiyjesi tek argumentlerine ǵárezli bolǵan hám sırtqı tásirge (side effect) iye bolmaǵan funkciyalar.

2.Immutability (Ózgermeytuǵınlıq): Maǵlıwmatlar jaratılǵannan keyin ózgertilmeydi. Jańa mánis kerek bolsa, jańa obyekt jaratıladı.

3.Birinshi dárejeli funkciyalar: Funkciyalardı ózgeriwshige saqlawǵa, argument retinde beriwge hám nátiyje retinde qaytarıwǵa boladı.

4.Joqarı tártipli funkciyalar (HOF): Basqa funkciyanı parametr retinde alatuǵın yamasa funkciya qaytaratuǵın funkciyalar (mısalı: map, filter, reduce).

5.Lambda ańlatpaları: Atamasız (anonim) funkciyalar, kodtıń ishinde qısqa operaciyalar ushın qollanıladı.

ÁMELIY BÓLIM:

C++ (Modern C++11/14/17) tilinde funkcional stildegi kodlardı kórip shıǵamız.

1-mısal: Lambda ańlatpaları (Anonim funkciyalar)

Másele: Ápiwayı arifmetikalıq ámellerdi lambda arqalı orınlaw.

Kod:

#include <iostream> #include <vector>

#include <algorithm> // for_each using namespace std;

int main() {

//Lambda funkciya: [] (int a, int b) { return a + b; }

//[] - capture clause (sırtqı ózgeriwshilerdi uslaw) auto qosiw = [](int a, int b) {

return a + b;

};

cout << "5 + 3 = " << qosiw(5, 3) << endl;

// Lambda nı tikkeley parametr retinde beriw vector<int> sanlar = {1, 2, 3, 4, 5};

cout << "Massiv elementleri: ";

// for_each - HOF (Joqarı tártipli funkciya) for_each(sanlar.begin(), sanlar.end(), [](int n) {

cout << n << " ";

});

cout << endl;

return 0;

}

2-mısal: Joqarı tártipli funkciyalar (Map / Transform) Másele: Massivtiń barlıq elementlerin kvadratqa kóteriw.

Imperativ stilde biz for ciklin jazamız. Funkcional stilde std::transform qollanamız.

Kod:

#include <iostream> #include <vector>

#include <algorithm> // transform using namespace std;

int main() {

vector<int> A = {1, 2, 3, 4, 5};

vector<int> B(A.size()); // Nátiyje ushın orın

// transform(baslanıw, tamamlanıw, nátiyje_bası, funkciya) transform(A.begin(), A.end(), B.begin(), [](int n) {

return n * n; // Taza funkciya

});

cout << "Kvadratlar: ";

for (int n : B) cout << n << " "; cout << endl;

return 0;

}

3-mısal: Filter (std::copy_if)

Másele: Massivten tek jup sanlardı tańlap alıw.

Kod:

#include <iostream> #include <vector>

#include <algorithm> // copy_if #include <iterator> // back_inserter using namespace std;

int main() {

vector<int> sanlar = {1, 5, 8, 9, 12, 4, 7}; vector<int> jup_sanlar;

// copy_if - shárt orınlansa ǵana kóshiredi

copy_if(sanlar.begin(), sanlar.end(), back_inserter(jup_sanlar), [](int n) {

return n % 2 == 0; // Predikat (shárt)

});

cout << "Jup sanlar: ";

for (int n : jup_sanlar) cout << n << " "; cout << endl;

return 0;

}

4-mısal: Reduce / Fold (std::accumulate)

Másele: Massiv elementleriniń qosındısın hám kóbeymesin esaplaw.

Kod:

#include <iostream> #include <vector>

#include <numeric> // accumulate using namespace std;

int main() {

vector<int> v = {1, 2, 3, 4, 5};

// Qosındı (Baslanǵısh mánis 0)

int summa = accumulate(v.begin(), v.end(), 0);

// Kóbeyme (Baslanǵısh mánis 1, operaciya - kóbeytiw)

int kobeyme = accumulate(v.begin(), v.end(), 1, [](int a, int b) { return a * b;

});

cout << "Summa: " << summa << endl; cout << "Kóbeyme: " << kobeyme << endl;

return 0;

}

5-mısal: Funkciyanı qaytarıw (Closure)

Másele: "Kóbeytiwshi" funkciyasın generaciya etiw.

Kod:

#include <iostream>

#include <functional> // std::function using namespace std;

// Nátiyje retinde funkciya qaytaradı function<int(int)> makeMultiplier(int factor) {

// factor ózgeriwshisi lambda ishindegi "capture" arqalı saqlanıp qaladı return [factor](int n) {

return n * factor;

};

}

int main() {

auto ikige_kobeyt = makeMultiplier(2); auto ushke_kobeyt = makeMultiplier(3);

cout << "10 * 2 = " << ikige_kobeyt(10) << endl; cout << "10 * 3 = " << ushke_kobeyt(10) << endl;

return 0;

}

ÁMELIY TAPSÍRMALAR

1-tapsırma: Lambda sortlaw.

Student structurasın jaratıń (atı, bahası).

Studentler massivin jaratıp, olardı std::sort funkciyası hám lambda ańlatpası járdeminde bahası boyınsha kemeyiw tártibinde sortlań.

2-tapsırma: Filtrlew hám Transformaciya konveyeri.

Sanlar massivin alıń.

1.copy_if járdeminde tek oń sanlardı (>0) tańlap alıń.

2.transform járdeminde sol oń sanlardıń yarımın (n / 2.0) esaplań. Nátiyjeni ekranda shıǵarıń.

3-tapsırma: Qatarlardı qayta islew.

Tekstler (string) massivin jaratıń (mısalı: "alma", "Qawın", "anar").

transform hám lambda járdeminde barlıq tekstlerdi Bas háriplerge aylandırıń (toupper funkciyasın qollanıp).

4-tapsırma: Palindrom tekseriw (std::all_of).

Sannıń yamasa sózdiń palindrom ekenin (eki jaǵınan oqıǵanda birdey) tekseriwshi funkciya jazıń.

C++ algoritmlerinen std::equal yamasa std::mismatch qollanıp kóriń.

5-tapsırma: Rekursiv faktorial (Taza funkciya).

int factorial(int n) atlı taza funkciya jazıń.

Ol heshqanday global ózgeriwshini ózgertpewi hám ekranda jazıw shıǵarmay tek nátiyje qaytarıwı kerek. (Side effect bolmasın).

Main funkciyasında 5 sanınıń faktorialın esaplań.

Соседние файлы в предмете Programmalastiriw paradigmalari