Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет520/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   516   517   518   519   520   521   522   523   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

show("isect: ", isect, p_isect); 

 

show("Union: ", Union, p_union); 

 

show("dif:   ", dif, p_dif); 

 

show("symdif:", symdif, p_symdif); 

 

if (includes(a, a + 4, b, b + 3)) 

 

   cout << "a b-ны қамтиды.\n"; 

 

else cout << "a b-ны қамтымайды.\n"; 

 

if (includes(Union, p_union, b, b + 3))

 

   cout << "Union b-ны қамтиды.\n"; 

 

else cout << "Union b-ны қамтымайды.\n"; 

   return 0;

}

Программаның жұмыс істеу нəтижесі:




399

a:    

2 5 7 9

b:     

1 5 9

isect:   5 9 

Union:   1 2 5 7 9 

dif:     2 7 

symdif:  1 2 7 

a b-ны қамтымайды. 

Union b-ны қамтиды.

make_heap

make_heap

 алгоритмі кездейс 

оқ қол жеткізу мүмкіндігі бар тізбекті 

пирамидаға түрлендіреді:



template

 

void make_heap(Ran fi rst, Ran last); 

template

 

void make_heap(Ran fi rst, Ran last, Compare comp);

pop_heap

pop_heap

 алгоритмі тізбектің  бірінші элементін өшіреді, содан кейін ба-

рып пирамидалылық шартын орындайды:

template

 

void pop_heap(Ran fi rst, Ran last); 

template

 

void pop_heap(Ran fi rst, Ran last, Compare comp); 

Пирамидадан шығарылып алынатын элементтің мəнін алуды əдеттегі 

тəсілмен орындау талап етіледі. Мысалы, жоғарыда көрсетілген 

а

 жиымы 


үшін келесідей түрде жазуға болады: 

x = *a; pop_heap(a, a + m);

push_heap

push_heap

 алгоритмі тізбекк 

е соңғы элементті қосқаннан кейін оны 

пирамидаға түрлендіруді жүзеге асырады:



template

 

void push_heap(Ran fi rst, Ran last); 

template

 

void push_heap(Ran fi rst, Ran last, Compare comp); 

push_heap

 алгоритмін шақыруға дейін элементті контейнер типіне сəйкес 

тəсілмен тізбекке қосу керектігіне көңіл аударыңыз, мысалы:

v.push_back(x); push_heap(v.begin(), v.end());



400

sort_heap

sort_heap

 алгоритмі пирамид аны өсуі бойынша сұрыпталған тізбеккке 

түрлендіреді:

template

 

void sort_heap(Ran fi rst, Ran last); 

template

 

void sort_heap(Ran fi rst, Ran last, Compare comp); 

Бұл алгоритм пирамиданың қасиеттерін қолданатын болғандықтан, ол 

қарапайым сұрыптаудан гөрі жылдам жұмыс істейді. Сұрыптау кілттері бірдей 

элементтердің салыстырмалы орналасу реттілігін сақтамайды.




401

15-ТАРАУ

Сандық есептеулерге арналған   құралдар 

Жалпыланған сандық алгоритмдер

Санды қ алгоритмдерді қолдану үшін 



 тақырыптық файлын 

қосу қажет. 

15-кесте. 

Жалпыланған сандық алгоритмдер



Алгоритм

Орындалатын функция

accumulate

Жинақтау


inner

_product

Скалярлық көбейту

partial_sum

Жинақтай отырып, қосындыны есептеу



adjacent_difference

Іргелес элементтер арасындағы айырманы есептеу



accumulate

accumulate

 алгоритмінің бірінші формасы 

 

fi rst

 жəне 


last

 

итера-


торларымен берілген тізбек элементтерінің қосындысын жинақтау үшін 

қолданылады. Қосындының бастапқы мəні (əдетте бұл 0) үшінші параметр 

арқылы беріледі. Бұл параметрдің типі нəтиженің типін анықтайды (функция 

есептелген қосындыны қайтарады):



template

 

T accumulate(In fi rst, In last, T init);

accumulate 

алгоритмінің екінші формасы үшінші параметрге жəне 

тізбектің кезекті элементіне берілген операцияны қолдануға мүмкіндік береді:

template t

 

T accumulate(In fi rst, In last, T init, BinOp binary_op);

Төменде көрсетілген мысалда жиым элементтерінің қосындысы, 

көбейтіндісі жəне элементтер квадраттарының қосындысы есептеледі:

#include  

#include  

#include  

using namespace std;

int sumkv( int s, int x){ return s + x * x;} 

int main(){

 

const int m = 5;

 

int a[m] = {3, 2, 5, 1, 6}, sum = 0, mul = 1, sum2 = 0; 



402

 

cout << accumulated, a + m, sum) << endl; 

 

cout << accumulate(a, a + m, mul, multiplies()) 

        << endl; 

 

cout << accumulate(a, a + m, sum2, sumkv) << endl;

 return 

0;

}

inner_product

inner_product

 алгоритмінің бірінші ф ормасы екі тізбектің скалярлық 

көбейтіндісін есептеу үшін қолданылады (

а

 жəне 


b

 тізбектерінің скалярлық 

көбейтіндісі  a

i

*b



i

 өрнегі болып табылады). Көбейтіндінің бастапқы мəні 

төртінші параметр арқылы беріледі. Осы параметрдің типі нəтиженің типін 

анықтайды (функция есептелген көбейтіндіні қайтарады):



template t

 

T inner_product(In1 fi rst1, In1 last1, In2 fi rst2, T init);

inner_product

 алгоритмінің екінші формасы екі функцияның немесе 

функционалдық объектінің көмегімен берілген əрекеттерді екі тізбекпен орын-

дау үшін қолданылады. Бірінші функционалдық объект қосу операциясының 

орнына, ал екіншісі көбейтудің орнына пайдаланылады:

template t

   class BinOp1, class BinOp2> 

 

   T inner_product(In1 fi rst1, In1 last1, In2 fi rst2, 

 

 

T init, BinOp1 binary_op1, BinOp2 binary_op2);

Төмендегі шақыру а жəне 



b

 тізбектерінің сəйкес элементтерінің 

қосындыларының көбейтіндісін есептейді:

cout << inner_product(a, a + m, b, mul, 

                      multiplies(), plus());



Достарыңызбен бөлісу:
1   ...   516   517   518   519   520   521   522   523   ...   642




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет