Скачиваний:
0
Добавлен:
26.01.2026
Размер:
262.76 Кб
Скачать

1-ámeliy jumıs. Programmalıq támiynattı konstrukciyalawdıń tiykarǵı baǵdarlarınıń analizi.

Jumıstıń maqseti: Programmalıq támiynattı konstrukciyalaw (Software Construction) procesiniń tiykarǵı baǵdarların (paradigmaların) tereń úyreniw hám analizlew. Imperativ, Obyektke Baǵdarlanǵan (OBP) hám Funkcionallıq programmalastırıw usıllarınıń konstrukciyalaw procesine tásirin salıstırıw. Birdey máseleni hár qıylı baǵdarda sheshiw arqalı olardıń kod sapasına, oqılıwına hám strukturasına tásirin ámeliyatta bahalaw.

Teoriyalıq bólim: Konstrukciyalawdıń tiykarǵı baǵdarları degende biz programmalastırıw paradigmaların hám kodtı shólkemlestiriw usılların túsinemiz.

1.Imperativ/Proceduralıq baǵdar: Programma – bul kompyuterge beriletuǵın buyrıqlar izbe-izligi. Maǵlıwmatlar (Global/Lokal ózgeriwshiler) hám Funkciyalar bir-birinen bólek. Tiykarǵı itibar "Qalay islew kerek?" (How) degen sorawǵa qaratılǵan. (Mısalı: C, Pascal).

2.Obyektke Baǵdarlanǵan baǵdar (OBP): Programma – bul obyektler jıynaǵı. Maǵlıwmatlar hám kod bir kapsulaǵa (Klass) biriktiriledi. Tiykarǵı principler: Inkapsulyaciya, Násillik, Polimorfizm. (Mısalı: C++, Java, C#).

3.Funkcionallıq baǵdar: Programma – bul matematikalıq funkciyalardıń kompoziciyası. Ózgeriwsheń jaǵday (Mutable state) hám sırtqı tásirler (Side effects) minimallastırıladı. Tiykarǵı itibar "Ne islew kerek?" (What) degen sorawǵa qaratılǵan. (Mısalı: Haskell, Modern C++).

ÁMELIY BÓLIM:

Biz bir máseleni – "Studentlerdiń bahaların analizlew" (Ortasha baha, Eń jaqsı student) máselesin úsh túrli baǵdarda (Proceduralıq, OBP, Funkcionallıq)

C++ tilinde sheship, analizleymiz.

1-mısal: Proceduralıq baǵdar (C stili)

Bul usılda maǵlıwmatlar strukturası (struct) hám funkciyalar bólek-bólek jazıladı.

Kod:

#include <iostream> #include <vector> #include <string> using namespace std;

//Maǵlıwmat strukturası struct Student {

string ati; vector<int> bahalari;

};

//Funkciya: Ortasha bahanı esaplaw

double ortasha_baha(const vector<int>& bahalar) { if (bahalar.empty()) return 0.0;

double summa = 0;

for (int b : bahalar) { summa += b;

}

return summa / bahalar.size();

}

// Funkciya: Eń jaqsı studentti tabıw

void en_jaqsi_student(const vector<Student>& studentler) { if (studentler.empty()) return;

int index = 0;

double max_ortasha = -1.0;

for (size_t i = 0; i < studentler.size(); ++i) { double ort = ortasha_baha(studentler[i].bahalari); if (ort > max_ortasha) {

max_ortasha = ort; index = i;

}

}

cout << "Proceduralıq: Eń jaqsı student - " << studentler[index].ati

<< " (Ortasha: " << max_ortasha << ")" << endl;

}

int main() {

vector<Student> topar = { {"Azamat", {85, 90, 88}},

{"Gúlparshın", {95, 92, 98}},

{"Timur", {70, 75, 80}}

}; en_jaqsi_student(topar); return 0;

}

Analiz: Kod ápiwayı, biraq maǵlıwmatlar (bahalar) hám logika (ortasha esaplaw) bólek. Eger proekt úlkeyse, funkciyalar hám strukturalar aralasıp ketedi.

2-mısal: Obyektke Baǵdarlanǵan baǵdar (OBP)

Maǵlıwmatlar hám minez-qulıq "Student" klasına biriktiriledi.

Kod:

#include <iostream> #include <vector> #include <string> using namespace std;

class StudentObj { private: // Inkapsulyaciya

string ati; vector<int> bahalari;

public:

StudentObj(string a, vector<int> b) : ati(a), bahalari(b) {}

// Metod: Óziniń ortasha bahasın esaplaw double getOrtasha() const {

if (bahalari.empty()) return 0.0; double summa = 0;

for (int b : bahalari) summa += b; return summa / bahalari.size();

}

string getAti() const { return ati; }

};

class Topar { private:

vector<StudentObj> studentler; public:

void qosiw(const StudentObj& s) { studentler.push_back(s);

}

void korsetiwEnJaqsi() const {

if (studentler.empty()) return;

const StudentObj* best = &studentler[0];

for (const auto& s : studentler) {

if (s.getOrtasha() > best->getOrtasha()) { best = &s;

}

}

cout << "OOP: Eń jaqsı student - " << best->getAti()

<< " (Ortasha: " << best->getOrtasha() << ")" << endl;

}

};

int main() {

Topar t;

t.qosiw(StudentObj("Azamat", {85, 90, 88})); t.qosiw(StudentObj("Gúlparshın", {95, 92, 98})); t.qosiw(StudentObj("Timur", {70, 75, 80}));

t.korsetiwEnJaqsi(); return 0;

}

Analiz: Kod strukturalasqan. Student óz bahasın ózi esaplaydı. Topar studentlerdi basqaradı. Qáwipsizlik (private) hám modullilik joqarı.

3-mısal: Funkcionallıq baǵdar (Modern C++)

Lambda, algorithm hám numeric kitapxanaların qollanamız.

Kod:

#include <iostream> #include <vector> #include <string>

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

struct StudentFunc { string ati; vector<int> bahalari;

};

int main() {

vector<StudentFunc> topar = { {"Azamat", {85, 90, 88}},

{"Gúlparshın", {95, 92, 98}},

{"Timur", {70, 75, 80}}

};

// Lambda: Ortasha bahanı esaplaw

auto ortasha = [](const StudentFunc& s) { if (s.bahalari.empty()) return 0.0;

double sum = accumulate(s.bahalari.begin(), s.bahalari.end(),

0.0);

return sum / s.bahalari.size();

};

// max_element: Eń úlkenin tabıw (Salıstırıwshı lambda menen) auto it = max_element(topar.begin(), topar.end(),

[&](const StudentFunc& a, const StudentFunc& b) { return ortasha(a) < ortasha(b);

}

);

if (it != topar.end()) {

cout << "Funkcionallıq: Eń jaqsı student - " << it->ati << " (Ortasha: " << ortasha(*it) << ")" << endl;

}

return 0;

}

Analiz: Cikller (for) joq, deklarativ stil. Kod júdá ıqsham. "Ne islew kerek" (max_element, accumulate) dep jazılǵan.

ÁMELIY TAPSÍRMALAR

1-tapsırma: Bank esabı (Proceduralıq vs OBP).

"Bank Esabı" máselesin (Balanstı saqlaw, Aqsha qosıw, Aqsha sheshiw) eki usılda jazıń:

A)Proceduralıq: struct Account hám funkciyalar (deposit(&acc, amount)).

B)OBP: class Account (private balans) hám metodlar.

Eki kodtıń qáwipsizligin (balanstı tikkeley ózgertiw múmkinshiligin) salıstırıń.

2-tapsırma: Figuralar maydanı (Polimorfizm).

OBP baǵdarınıń kúshin kórsetiw ushın:

Shape (abstrakt) klasın hám onnan tuwılǵan Circle, Rectangle klassların jaratıń.

Polimorfizm arqalı (Shape* massivi) hár túrli figuralardıń maydanın bir cikl ishinde esaplań. Bul proceduralıq usılda (switch-case) qanshelli qıyın bolatuǵının analizleń.

3-tapsırma: Filtrlew (Funkcionallıq).

Sanlar massivin (vector<int>) jaratıń.

std::copy_if hám lambda ańlatpasın qollanıp, massivten tek jup sanlardı hám 10 nan úlken sanlardı bólek massivke shıǵarıń. Imperativ (for, if) usıl menen kod kólemin salıstırıń.

4-tapsırma: Kitapxana (Arxitekturalıq analiz).

Kishi kitapxana sistemasın (Kitap, Oqıwshı, Kitap beriw) proektlestiriń. Tek klasslar hám metodlardıń atların (kodın emes) jazıń.

Bul máseleni sheshiwde OOP baǵdarı ne ushın eń qolaylı ekenin (obyektlerdiń real dúnyaǵa uqsaslıǵı sebepli) túsindirip beriń.

5-tapsırma: Rekursiya vs Cikl (Imperativ vs Funkcionallıq).

Fibonachchi sanın esaplawdıń eki variantın jazıń:

A)Imperativ: while yamasa for cikli arqalı.

B)Funkcionallıq: Rekursiya arqalı (Taza funkciya).

Eki usıldıń oqılıwın hám potenciallıq (stack overflow) qáwiplerin analizleń.

Соседние файлы в папке Programmalıq támiynat qurılması hám evolyuciyası