Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Programmalıq támiynat sapasın támiyinlew / 7-ameliy_ST
.pdf
7-ámeliy. Programmalıq támiynat talapların islep shıǵıw. Programmalıq
támiynat effektivligin bahalaw.
Jumıstıń maqseti: Programmalıq támiynatqa qoyılatuǵın talaplardı
(Requirements) durıs formallastırıw hám olardıń effektivligin (Performance
Efficiency) bahalaw. Funkcional (FR) hám Funkcional emes (NFR) talaplardı
ajıratıw, "SMART" kriteriyaların qollanıw. Kodtıń islew waqtın (Time
Complexity) hám yad sarpın (Space Complexity) ólshew usılların úyreniw.
Teoriyalıq bólim:
1. Talaplar:
Funkcional: Ne isleytuǵını (Login, Tólem).
Funkcional emes: Qalay isleytuǵını (Tezlik, Isenimlilik).
2. Effektivlikti bahalaw:
Big O Notation: Algoritm quramalılıǵı (O(n), O(log n)).
Profiling: Kodtıń qaysı bólegi kóp waqıt alatuǵının tabıw.
Benchmark: Testlew arqalı waqıttı ólshew.
ÁMELIY BÓLIM:
Talaplardı analizleymiz hám kodtıń effektivligin ólsheymiz.
1-mısal: Talaplardı formallastırıw
Klient: "Programma tez islesin". (Jaman).
Analiz: "Tez" subyektiv túsinik.
SMART Talap: "Izlew nátiyjesi 100 000 jazıw arasınan 0.5 sekund ishinde
shıǵıwı kerek."
2-mısal: Waqıttı ólshew (Benchmarking)
Másele: 1 den N ge shekemgi sanlar qosındısın esaplaw (Cikl vs Formula).
Kod:
#include <iostream>

#include <chrono> // Waqıt kitapxanası
using namespace std;
using namespace std::chrono;
int main() {
long long N = 100000000;
// 1-usıl: Cikl (O(N))
auto start = high_resolution_clock::now();
long long sum = 0;
for (int i = 1; i <= N; i++) sum += i;
auto stop = high_resolution_clock::now();
auto duration = duration_cast<milliseconds>(stop - start);
cout << "Cikl waqtı: " << duration.count() << " ms" << endl;
// 2-usıl: Formula (O(1))
start = high_resolution_clock::now();
sum = N * (N + 1) / 2;
stop = high_resolution_clock::now();
duration = duration_cast<milliseconds>(stop - start);
cout << "Formula waqtı: " << duration.count() << " ms" << endl;
return 0;
}
Nátiyje: Formula millisekundqa jetpey esaplaydı, cikl bolsa waqıt aladı.

3-mısal: Yad sarpı (Space Complexity)
Másele: Fibonachchi sanları.
1. Rekursiya (Yad kóp - Stack).
2. Iteraciya (Yad az - 3 ózgeriwshi).
Kod (Iteraciya - O(1) Space):
int fib(int n) {
int a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
4-mısal: Profiling (Simulyaciya)
Kodtaǵı "tar jerdi" (bottleneck) tabıw.
Kod:
void process() {
loadData(); // 10 ms
sortData(); // 2000 ms (Tar jer)
saveData(); // 50 ms
}
Sheshim: `sortData` nı optimallastırıw kerek (Bubble Sort ornına Quick Sort).

5-mısal: NFR (Júkleme)
Talap: "Server 1000 paydalanıwshını kóteriwi kerek".
Test: JMeter arqalı 1000 virtual paydalanıwshı jiberip, serverdiń qulap-
qulamawın tekseriw.
ÁMELIY TAPSÍRMALAR
1-tapsırma: Talaplardı ajıratıw.
Tómendegi talaplardı FR (Funkcional) hám NFR (Funkcional emes) ge bóliń:
1. "Paydalanıwshı parolin ózgerte alıwı kerek."
2. "Parol keminde 8 belgi bolıwı kerek."
3. "Juwap waqtı 2 sekundtan aspasın."
4. "Sistema 24/7 islewi kerek."
2-tapsırma: SMART Talap.
"Sayt qolaylı bolıwı kerek" degen talaptı SMART formatına (Ólshenetuǵın)
ótkeriń. (Mısalı: "Klient 3 ret basqanda tovar satıp ala alıwı kerek").
3-tapsırma: Algoritm quramalılıǵı.
Eki kodtı salıstırıń (O(N) hám O(N^2)):
A) `for (int i=0; i<N; i++)`
B) `for (int i=0; i<N; i++) for (int j=0; j<N; j++)`
N=1000 bolǵanda, operaciyalar sanın esaplań.
4-tapsırma: Benchmark jazıw.
`std::vector` hám `std::list` tiń ortasına element qosıw (insert) tezligin ólshewshi
programma jazıń. Qaysı biri tez?

5-tapsırma: Yad optimizaciyası.
1 million `int` sandı saqlaw ushın qansha yad kerek? (`10^6 * 4 byte`).
Eger `short` (2 byte) qollansaq, qansha únemleymiz? Esaplań.
Соседние файлы в папке Programmalıq támiynat sapasın támiyinlew
