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

2-ámeliy jumıs. Programmalıq támiynattı konstrukciyalawdıń quramalılıǵın minimallastırıw.

Jumıstıń maqseti: Programmalıq támiynattaǵı "Quramalılıq" (Complexity) túsinigin hám onıń kod sapasına tásirin úyreniw. Kodtıń oqılıwın jaqsılaw, logikalıq quramalılıqtı (Cyclomatic Complexity) azaytıw hám kodtı kishi, basqarılıwshı bóleklerge (modullerge) bóliw usılların ámeliyatta qollanıw. "KISS" (Keep It Simple, Stupid) hám "DRY" (Don't Repeat Yourself) principlerin C++ kodlarında islep shıǵıw.

Teoriyalıq bólim: Quramalılıq – programmisttiń kodtı túsiniwin qıyınlastıratuǵın barlıq faktorlar.

1.Ciklomatikalıq quramalılıq: Kodtaǵı ǵárezsiz jollar sanı (if, for, while, case sanı). Qansha kóp bolsa, qáte itimalı sonsha joqarı.

2.Modullilik: Úlken funkciyalardı kishi funkciyalarǵa bóliw.

3.Abstrakciya: Detallardı jasırıw.

4.Ataw (Naming): Ózgeriwshilerge mánisli at qoyıw.

Minimallastırıw usılları:

Arrow Code (Kórsetiwshi kod) – ishi-ishine kirgen kóp if-lerdi "Erte qaytıw" (Early Return) arqalı dúzetiw.

Extract Method – kod bólegin jańa funkciyaǵa shıǵarıw.

Mánisli konstantalar – "Sıyqırlı sanlar" (Magic Numbers) ornına atalǵan turaqlılardı qollanıw.

ÁMELIY BÓLIM:

Quramalı hám "jaman" jazılǵan kodtı analizlep, onı ápiwayılastıramız

(Refactoring).

1-mısal: "Sıyqırlı sanlar" hám Ataw

Másele: Tómendegi kod ne isleytuǵını túsiniksiz.

Kod (Jaman):

int main() { double x; cin >> x;

double y = x * 3.14159 * 10 * 10;

if (y > 500) cout << "OK"; return 0;

}

Analiz: 3.14159, 10, 500 – bular ne?

Kod (Jaqsı):

const double PI = 3.14159; const double RADIUS = 10.0; const double SHEGARA = 500.0;

int main() { double uzinliq;

cout << "Uzınlıqtı kirgiziń: "; cin >> uzinliq;

// Formula túsinikli boldı: Cilindr kólemi me? (Mısal ushın) double kolemi = uzinliq * PI * RADIUS * RADIUS;

if (kolemi > SHEGARA) {

cout << "Kólem shegaradan astı (OK)." << endl;

}

return 0;

}

2-mısal: "Arrow Code" (Dumalaq if-else)

Másele: Ishi-ishine kirgen shártler kodtı oqıwdı qıyınlastıradı.

Kod (Jaman):

void login(string user, string pass, bool active) { if (user != "") {

if (pass != "") { if (active) {

if (user == "admin" && pass == "123") { cout << "Kirisiw tabıslı!" << endl;

} else {

cout << "Qáte parol." << endl;

}

} else {

cout << "Akkaunt aktiv emes." << endl;

}

} else {

cout << "Parol bos." << endl;

}

} else {

cout << "Login bos." << endl;

}

}

Kod (Jaqsı - Early Return):

void login(string user, string pass, bool active) {

//Negativ jaǵdaylardı tekserip, tezirek shıǵıp ketemiz if (user == "") {

cout << "Login bos." << endl; return;

}

if (pass == "") {

cout << "Parol bos." << endl; return;

}

if (!active) {

cout << "Akkaunt aktiv emes." << endl; return;

}

//Tiykarǵı logika (Tazalanǵan)

if (user == "admin" && pass == "123") { cout << "Kirisiw tabıslı!" << endl;

} else {

cout << "Qáte parol." << endl;

}

}

Analiz: Kod bir tegislikte jaylasqan, oqıw ańsat.

3-mısal: Extract Method (Funkciyanı bóliw)

Másele: main funkciyası júdá uzın hám hár qıylı islerdi qıladı.

Kod (Jaman):

int main() {

// 1. Maǵlıwmat kirgiziw int a, b;

cin >> a >> b;

// 2. EUB (EKUB) esaplaw

while (a != b) {

if (a > b) a -= b; else b -= a;

}

cout << "EKUB: " << a << endl;

// 3. EKE (EKUK) esaplaw

int x, y; // ... (kod dawam etedi) // ...

return 0;

}

Kod (Jaqsı):

int ekub(int a, int b) { while (a != b) {

if (a > b) a -= b; else b -= a;

}

return a;

}

int main() { int a, b;

cout << "Eki san kirgiziń: "; cin >> a >> b;

cout << "EKUB: " << ekub(a, b) << endl;

// EKUK esaplaw ushın da bólek funkciya jazıw kerek return 0;

}

Analiz: main funkciyası tek basqarıwshı bolıp qaldı. Esaplaw logikası bóleklendi.

ÁMELIY TAPSÍRMALAR

1-tapsırma: Kórsetiwshi kodtı (Arrow Code) dúzetiw.

Tómendegi kodtı "Early Return" (Erte qaytıw) usılı menen qayta jazıń:

void tekseriw(int jas, int ball) { if (jas >= 18) {

if (ball >= 60) {

if (ball >= 90) { cout << "Grant";

} else {

cout << "Kontrakt";

}

} else {

cout << "Ótpedi";

}

} else {

cout << "Jası kishi";

}

}

2-tapsırma: Qaytalanıwshı kodtı (DRY) joq etiw.

Tómendegi kodta úsh ret birdey esaplaw bar. Onı bir funkciyaǵa (calculateArea) shıǵarıń:

double r1 =

5;

 

double s1 =

3.14

* r1 * r1;

cout << s1

<< endl;

double r2

= 10;

 

double s2

=

3.14

* r2 * r2;

cout << s2

<< endl;

double r3

= 2.5;

 

double s3

=

3.14

* r3 * r3;

cout << s3

<< endl;

3-tapsırma: Sıyqırlı sanlardı (Magic Numbers) almastırıw.

Kodtıń ishindegi túsiniksiz sanlardı (0.2, 100, 12) atalǵan konstantalarǵa (const double) almastırıń:

double salary = 5000;

double tax = salary * 0.12; // 12% salıq

double bonus = 0;

if (salary > 1000) bonus = salary * 0.2; // 20% bonus

4-tapsırma: Funkciyanı bóliw (Single Responsibility).

processOrder() degen úlken funkciya bar. Ol: 1) Tovar bar ekenin tekseredi, 2) Balanstı tekseredi, 3) Tólem qıladı, 4) Chek shıǵaradı.

Bul funkciyanı 4 kishi funkciyaǵa bólip, processOrder ishinen tek solardı shaqırıń. (Kodtı tolıq jazıw shárt emes, strukturasın kórsetiń).

5-tapsırma: Bulin (Boolean) logikasın ápiwayılastırıw.

Tómendegi quramalı shártti qısqartıń (De Morgan nızamı yamasa logikalıq qısqartıw):

bool isValid = false; if (age > 18) {

if (hasLicense == true) { if (isDrunk == false) {

isValid = true;

}

}

}

// Bir qatarlıq if (age > 18 && ...) kórinisine keltiriń.

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