+ Reply to Thread
Results 1 to 1 of 1

Thread: 13.12.12 ООП Алгоритми

  1. #1
    All knowing Bloo_uni's Avatar
    Join Date
    Oct 2010
    Posts
    182

    13.12.12 ООП Алгоритми

    ООП Алгоритми

    1. Най-често използвани алгоритми
    #include <algorithm>
    #include <numeric>
    #include <functional>

    а) алгоритми за търсене
    find, find_end, find_first_of, find_if
    Функция find връща позиция за итератора.

    search, search_n (numeric?)

    count, count_if - връща цели числа, номера на повторението

    б) преобразуващи алгоритми
    (3 взаимозаменяеми алгоритми)
    transform
    generate
    for_each
    swap
    remove_copy - копира всички без даден елемент
    sort
    reverse (Обратен на sort)
    random_shuffle
    unique, unique_copy
    replace_if, remove_if
    rotate


    Работят с позиции на итератора (от и до къде). Нуждаят се от (име на потребителска) функция, която се прилага върху всеки елемент в контейнера (т.е. върху от първия до последния елемент на контейнера).

    в) Статистически функции
    accumulate - натрупва суми и произведения
    inner_product - натрупва сума от поелементните произведения на два контейнера.
    max, min, min_element - работят с изреждане на елементи


    2. Приложение на accumulate
    accumulate(v1.begin(), r1.end(), 0.0);
    0.0 - начална стойност на сумата
    accumulate(v1.begin(), v1.end(), 1.0), multiplies<float>());
    accumulate(v2.begin(), v2.end(), string("") );


    1 Задача:
    Създайте на С++ вектор тип float от 5 елемента и вектор тип string също от 5 елемента.
    Използвайки алгоритъма accumulate намерете сумата от елементите от първия вектор, произведението от елементите от първия вектор и слепете всички низове на втория вектор.

    2. Приложение на inner_product
    вектор v3
    inner_product(v1.begin(), v1.end(), v3.begin(), 0.0);

    3. Приложения на find и for_each
    Използвайте алгоритъма find за да намерите на коя позиция стой числото 4.5 и извадете стойностите на всички елементи от позицията на числото до края.

    vector<float>:: iterate pos1;
    pos1=find(v1.begin(), v1.end(), 4.5);
    for_each(pos1, v.end(), print;

    Колко пъти се среща 5.5?
    count(v1.begin, v1.end(), 5.5);

    Приложение на remove_copy

    Всички елементи на v1 заместете с техните удвоени елементи

    random_shuffle(v6.begin(), v6.end() );

    e.erase(remove(e.begin(), e.end(), pred), e.end() );
    изтрива всички стойности от вектора за която Pred връща стойност true.

    Code:
    #include <iostream>
    #include <algorithm>
    #include <numeric>
    #include <functional>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    vector<float>::iterator pos;
    
    void print(float elem)
    	{	cout<<elem<<" ";	}
    
    void multiplied()
    	{	}
    
    void main(){
    
    	vector<float> v1, v6;
    	vector<string> v2;
    	vector<float> v3;
    	vector<float> v4(5);
    
    	v1.push_back(1);
    	v1.push_back(2.0);
    	v1.push_back(3.0);
    	v1.push_back(4.0);
    	v1.push_back(5.5);
    
    	v2.push_back("a ");
    	v2.push_back("b ");
    	v2.push_back("c ");
    	v2.push_back("d ");
    	v2.push_back("e ");
    
    	v3.push_back(4.5);
    	v3.push_back(5.5);
    	v3.push_back(7.0);
    	v3.push_back(8.0);
    	v3.push_back(9.5);
    
    
    	cout<<"\n Accumulate vector 1: "<<accumulate(v1.begin(), v1.end(), 1.0, multiplies<float>())<<endl;
    	cout<<"\n Accumulate vector 2: "<<accumulate(v2.begin(), v2.end(), string(" ") )<<endl;
    	cout<<"\n Inner_product of v1&v3: "<<inner_product(v1.begin(), v1.end(), v3.begin(), 0.0)<<endl;
    
    	pos=find(v3.begin(), v3.end(), 5.5);
    	cout<<"\n Found '5.5' in v3: "; if(*pos)cout<<"yes\n";
    	
    	cout<<"\n V3 after 5.5 : ";
    	for_each(pos, v3.end(), print );
    	cout<<endl;
    
    	cout<<"\n Broj namereni puti 5.5: "<<count(v1.begin(), v1.end(), 5.5)<<endl;
    
    	//vrushta celiq vektor bez dadenata stojnost
    	cout<<"\n Remove_copy: "<<*remove_copy(v1.begin(), v1.end(),  v4.begin(), 5.5)<<endl;
    
    //	cout<<"\n Transform: "<<transform(v1.begin(), v1.end(), v1.begin(), print );
    
    
    	
    cout<<endl;
    }
    Code:
     Accumulate vector 1: 132
    
     Accumulate vector 2:  a b c d e
    
     Inner_product of v1&v3: 120.75
    
     Found '5.5' in v3: yes
    
     V3 after 5.5 : 5.5 7 8 9.5
    
     Broj namereni puti 5.5: 1
    
     Remove_copy: 0
    
    Press any key to continue
    Страница 242, 4, 5, 6
    Last edited by Bloo_uni; 13-12-2011 at 06:49 PM.

+ Reply to Thread

Similar Threads

  1. Replies: 2
    Last Post: 09-02-2015, 07:27 PM
  2. Програмни системи 21.03.2012
    By Bloo_uni in forum Програмни Сист.
    Replies: 0
    Last Post: 21-03-2012, 12:04 PM
  3. Програмни Системи 14.03.2012
    By Bloo_uni in forum Програмни Сист.
    Replies: 1
    Last Post: 14-03-2012, 12:42 PM
  4. Програмни системи - пълна информация
    By Bloo_uni in forum Програмни Сист.
    Replies: 0
    Last Post: 15-02-2012, 11:16 AM
  5. Лекции по ООП на В. Николов (2004)
    By Bloo in forum ООП - 1част (C++)
    Replies: 0
    Last Post: 29-09-2011, 03:58 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts