You are on page 1of 14

Ministerul Educaiei al Republicii Moldova Universitatea Tehnic a Moldovei Facultatea Calculatoare, Informatic i Microelectronic Catedra Automatic i Tehnologii Informaionale

RAPORT

Disciplina: Analiza, proiectarea i programarea orientat pe obiecte Lucrare de laborator Nr. 2 Tema: Biblioteca standard de abloane (STL)
Varianta 8

A efectuat : A verificat: lector superior Duca Ludmila

Chiinu 2013
1 Scopurile lucrrii nsuirea tehnologiei programrii generice cu utilizarea bibliotecii standarde de abloane (Standard Template Library STL) din C++. 2 Sarcina lucrrii Programul 1 1. S se creeze un obiect-container corespunztor variantei i s fie completat cu date al cror tip este indicat n variant. 2. S fie afiat containerul. 3. S fie modificat containerul, tergndu-se unele elemente i nlocuind altele. 4. S fie afiat containerul, utiliznd pentru accesul la elementele sale iteratori. 5. S se creeze un al doilea container de aceei clas i s fie completat cu date de acela i tip ca i primul container. 6. S fie modificat primul container, tergndu-se din el n elemente dup un element dat i apoi adugndu-se n el toate elementele containerului al doilea. 7. S fie afiat primul i al doilea container. Programul 2 S se ndeplineasc aceleai sarcini ca la primul program, dar pentru date de un tip definit de utilizator. Programul 3 1. S se creeze un container ce conine obiecte de un tip definit de utilizator. Tipul containerului se alege n conformitate cu varianta. 2. S se sorteze containerul descrescator. 3. S se afieze containerul. 4. Utiliznd un algoritm corespunztor, s se gseasc n container un element care satisface o anumit condiie. 5. S se mute elementele care satisfac o anumit condiie n alt container (care nainte de asta este vid). Tipul containerului al doilea se determin din variant. 6. S fie afiat al doilea container. 7. S se sorteze cresctor primul i al doilea container. 8. S fie afiate containerele. 9. S se obin un al treilea container prin interclasarea primelor 2.
2

10. S fie afiat al treilea container. 11. S se numere cte elemente care satisfac o anumit condiie sunt n al treilea container. 12. S se determine dac n al treilea container exist un element care satisface o anumit condiie. 3 Realizarea sarcinii Codul surs al programului 1
#include <iostream> #include <list> using namespace std; list<long> l1, l2; list<long>::iterator it; long element; int n; int main() { // 1. Adaugarea elementelor in lista cout << "Cate elemente doriti sa introduceti in lista 1? "; cin >> n; cout << "Introduceti elementele listei 1:" << endl; for (int i=0; i<n; ++i) { cin >> element; l1.push_back(element); } cout << endl; // 2. Afisarea elementelor listei cout << "Elementele listei 1 sunt:" << endl; for (it=l1.begin(); it!=l1.end(); ++it) { cout << *it << " "; } cout << endl << endl; // 3. Stergerea unor elemente si inlocuirea altora cout << "Stergem primul element din lista 1..." << endl; l1.erase(l1.begin()); cout << "Stergem ultimul element din lista 1..." << endl; l1.pop_back(); cout << "Adaugam 10 la primul element din lista 1..." << endl; it = l1.begin(); *it += 10; 3

cout << "Adaugam 20 la al doilea element din lista 1..." << endl; advance(it, 1); *it += 20; cout << endl; // 4. Afisarea elementelor listei cout << "Elementele listei 1 sunt:" << endl; for (it=l1.begin(); it!=l1.end(); ++it) { cout << *it << " "; } cout << endl << endl; // 5. Adaugam elemente in lista 2 cout << "Cate elemente doriti sa introduceti in lista 2? "; cin >> n; cout << "Introduceti elementele listei 2:" << endl; for (int i=0; i<n; ++i) { cin >> element; l2.push_back(element); } cout << endl; // 6. Stergem elementele din lista 1 dupa un element dat si le adaugam pe cele din lista 2 cout << "Dupa al catelea element din lista 1 doriti sa stergeti? "; cin >> n; it = l1.begin(); advance(it, n); l1.insert(l1.erase(it, l1.end()), l2.begin(), l2.end()); cout << endl; // 7. Afisam lista 1 si lista 2 cout << "Elementele listei 1 sunt:" << endl; for (it=l1.begin(); it!=l1.end(); ++it) { cout << *it << " "; } cout << endl << endl; cout << "Elementele listei 2 sunt:" << endl; for (it=l2.begin(); it!=l2.end(); ++it) { cout << *it << " "; } return 0; 4

Codul surs al programului 2


#include <iostream> #include <list> using namespace std; class Cerc { public: double x, y, r; friend istream& operator >> (istream &, Cerc &); friend ostream& operator << (ostream &, Cerc &); }; istream& operator >> (istream &input, Cerc &c) { cout << "x: "; input >> c.x; cout << "y: "; input >> c.y; cout << "raza: "; return input >> c.r; } ostream& operator << (ostream &output, Cerc &c) { return output << "{ x: " << c.x << ", y: " << c.y << ", raza: " << c.r << " }"; } list<Cerc> l1, l2; list<Cerc>::iterator it; Cerc element; int n; int main() { // 1. Adaugarea elementelor in lista cout << "Cate elemente doriti sa introduceti in lista 1? "; cin >> n; cout << "Introduceti elementele listei 1:" << endl; for (int i=0; i<n; ++i) { cin >> element; l1.push_back(element); } cout << endl; 5

// 2. Afisarea elementelor listei cout << "Elementele listei 1 sunt:" << endl; for (it=l1.begin(); it!=l1.end(); ++it) { cout << *it << " "; } cout << endl << endl; // 3. Stergerea unor elemente si inlocuirea altora cout << "Stergem primul element din lista 1..." << endl; l1.erase(l1.begin()); cout << "Stergem ultimul element din lista 1..." << endl; l1.pop_back(); cout << "Adaugam 10 la raza primului element din lista 1..." << endl; it = l1.begin(); it->r += 10; cout << "Adaugam 20 la raza elementului al doilea din lista 1..." << endl; advance(it, 1); it->r += 20; cout << endl; // 4. Afisarea elementelor listei cout << "Elementele listei 1 sunt:" << endl; for (it=l1.begin(); it!=l1.end(); ++it) { cout << *it << " "; } cout << endl << endl; // 5. Adaugam elemente in lista 2 cout << "Cate elemente doriti sa introduceti in lista 2? "; cin >> n; cout << "Introduceti elementele listei 2:" << endl; for (int i=0; i<n; ++i) { cin >> element; l2.push_back(element); } cout << endl; // 6. Stergem elementele din lista 1 dupa un element dat si le adaugam pe cele din lista 2 cout << "Dupa al catelea element din lista 1 doriti sa stergeti? "; cin >> n; it = l1.begin(); advance(it, n); l1.insert(l1.erase(it, l1.end()), l2.begin(), l2.end()); 6

cout << endl; // 7. Afisam lista 1 si lista 2 cout << "Elementele listei 1 sunt:" << endl; for (it=l1.begin(); it!=l1.end(); ++it) { cout << *it << " "; } cout << endl << endl; cout << "Elementele listei 2 sunt:" << endl; for (it=l2.begin(); it!=l2.end(); ++it) { cout << *it << " "; } return 0; }

Codul surs al programului 3


#include <iostream> #include <list> #include <deque> #include <vector> #include <algorithm> using namespace std; class Cerc { public: double x, y, r; bool operator < (Cerc &); friend istream& operator >> (istream &, Cerc &); friend ostream& operator << (ostream &, Cerc &); }; bool Cerc::operator < (Cerc &c) { return this->r < c.r; } istream& operator >> (istream &input, Cerc &c) { cout << "x: "; input >> c.x; cout << "y: "; input >> c.y; cout << "raza: "; 7

return input >> c.r; } ostream& operator << (ostream &output, Cerc &c) { return output << "{ x: " << c.x << ", y: " << c.y << ", raza: " << c.r << " }"; } bool maiMare(const Cerc &c1, const Cerc &c2) { return c1.r > c2.r; } bool maiMic(const Cerc &c1, const Cerc &c2) { return c1.r < c2.r; } bool areRaza1(const Cerc &c) { return c.r == 1; } bool coincideXY(const Cerc &c) { return c.x == c.y; } list<Cerc> l; list<Cerc>::iterator lit; deque<Cerc>::iterator dit; vector<Cerc>::iterator vit; Cerc element; int n; int main() { // 1. Adaugarea elementelor in lista cout << "Cate elemente doriti sa introduceti in lista? "; cin >> n; cout << "Introduceti elementele listei 1:" << endl; for (int i=0; i<n; ++i) { cin >> element; l.push_back(element); } cout << endl; // 2. Sortarea descrescatoare a elementelor din lista cout << "Sortam descrescator elementele din lista..." << endl << endl; l.sort(maiMare); 8

// 3. Afisarea listei cout << "Elementele listei sunt:" << endl; for(lit=l.begin(); lit!=l.end(); ++lit) { cout << *lit << " "; } cout << endl << endl; // 4. Cautarea in lista a unui cerc cu raza 1 cout << "Cautam in lista un cerc cu raza 1..." << endl; lit = find_if(l.begin(), l.end(), areRaza1); if (lit != l.end()) { cout << "Cercul cu raza 1 gasit este: " << *lit; } else { cout << "N-am gasit in lista nici un cerc cu raza 1."; } cout << endl << endl; // 5. Mutarea cercurilor cu raza 1 in deque cout << "Mutam cercurile cu x=y din lista in deque..." << endl << endl; deque<Cerc> d(count_if(l.begin(), l.end(), coincideXY)); copy_if(l.begin(), l.end(), d.begin(), coincideXY); l.remove_if(coincideXY); // 6. Afisarea elementelor din deque cout << "Elementele din deque sunt:" << endl; for (dit=d.begin(); dit!=d.end(); ++dit) { cout << *dit << " "; } cout << endl << endl; // 7. Sortarea crescatoare a listei si a deque-ului cout << "Sortam crescator lista si deque-ul..." << endl << endl; l.sort(maiMic); sort(d.begin(), d.end(), maiMic); // 8. Afisam lista si deque-ul cout << "Elementele din lista sunt:" << endl; for (lit = l.begin(); lit!=l.end(); ++lit) { cout << *lit << " "; } cout << endl << endl; cout << "Elementele din deque sunt:" << endl; 9

for (dit = d.begin(); dit!=d.end(); ++dit) { cout << *dit << " "; } cout << endl << endl; // 9. Obtinerea unui al treilea container prin interclasarea primelor 2 vector<Cerc> v(l.size() + d.size()); cout << "Interclasam lista cu deque-ul intr-un al treilea container..." << endl << endl; merge(l.begin(), l.end(), d.begin(), d.end(), v.begin()); // 10. Afisarea celui de-al treilea container cout << "Elementele containerului al treilea:" << endl; for (vit=v.begin(); vit!=v.end(); ++vit) { cout << *vit << " "; } cout << endl << endl; // 11. Numara cate cercuri cu raza 1 sunt in al treilea container cout << "In al treilea container exista " << count_if(v.begin(), v.end(), areRaza1) << " cercuri cu raza 1." << endl << endl; // 12. Verificarea daca in al treilea container exista cercuri cu raza 1 vit = find_if(v.begin(), v.end(), areRaza1); if (vit!=v.end()) { cout << "In al treilea container exista cercuri cu raza 1." << endl; } else { cout << "In al treilea container nu exista cercuri cu raza 1." << endl; } return 0; }

10

Screenshot-uri cu rezultatele execuiei Programul 1

11

Programul 2

12

Programul 3

13

Concluzii La aceast lucrare de laborator am studiat biblioteca standard de abloane STL din C++. Aceast bibliotec conine un set de diferite tipuri de containere utile, iteratori pentru accesul la elementele acestora i algoritmi pentru prelucrarea lor. Datorit faptului c aceste containere sunt de fapt nite abloane de clase, ele sunt foarte comode i pot fi utilizate cu elemente de diferite tipuri, chiar i cu tipuri de date definite de utilizatori. Algoritmii, de asemenea, sunt utili, deoarece scutesc programatorul de implementarea celor mai comune prelucrri asupra containerelor, cum sunt sortrile, cutrile .a.

14

You might also like