APPOO 2.doc

14
Ministerul Ed uca iei al Republicii Moldova ț Universitatea Tehnică a Moldovei Facultatea Calculatoare, Informatică i Mic roelectronică ș Catedra Automatică i Tehnologii Informa ionale ș ț RAPORT Disciplina: Analiza, proiectarea i pr ogramarea orientată pe obiecte ș Lucrare de laborator Nr. 2 Tema: Biblioteca standardă de abloane (STL) ș Varianta 8 A efectuat : A verificat: lector superior Duca Ludmila

Transcript of APPOO 2.doc

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 1/14

Ministerul Educa iei al Republicii Moldovaț

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică i Microelectronicăș

Catedra Automatică i Tehnologii Informa ionaleș ț

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 2/14

Chi inău 2013ș

1 Scopurile lucrării

Însu irea tehnologiei programării generice cu utilizarea bibliotecii standarde de abloaneș ș  

(Standard Template Library – STL) din C++.

2 Sarcina lucrării

Programul 1

1. Să se creeze un obiect-container corespunzător variantei i să fie completat cu date al căror ș  

tip este indicat în variantă.

2. Să fie afi at containerul.ș

3. Să fie modificat containerul, tergându-se unele elemente i înlocuind altele.ș ș

4. Să fie afi at containerul, utilizând pentru accesul la elementele sale iteratori.ș

5. Să se creeze un al doilea container de acee i clasă i să fie completat cu date de acela i tip caș ș ș  

i primul container.ș

6. Să fie modificat primul container, tergându-se din elș n elemente după un element dat i apoiș  

adăugându-se în el toate elementele containerului al doilea.

7. Să fie afi at primul i al doilea container.ș ș

Programul 2

Să se îndeplinească acelea i sarcini ca la primul program, dar pentru date de un tip definit deș  

utilizator.

Programul 3

1. Să se creeze un container ce con ine obiecte de un tip definit de utilizator. Tipul containeruluiț  

se alege în conformitate cu varianta.

2. Să se sorteze containerul descrescator.3. Să se afi eze containerul.ș

4. Utilizând un algoritm corespunzător, să se găsească în container un element care satisface o

anumită condi ie.ț

5. Să se mute elementele care satisfac o anumită condi ie în alt container (care înainte de astaț  

este vid). Tipul containerului al doilea se determină din variantă.

6. Să fie afi at al doilea container.ș

7. Să se sorteze crescător primul i al doilea container.ș

8. Să fie afi ate containerele.ș

9. Să se ob ină un al treilea container prin interclasarea primelor 2.ț

2

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 3/14

10. Să fie afi at al treilea container.ș

11. Să se numere câte elemente care satisfac o anumită condi ie sunt în al treilea container.ț

12. Să se determine dacă în al treilea container există un element care satisface o anumită

condi ie.ț

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 4/14

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 5/14

}

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 6/14

// 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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 7/14

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 8/14

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 9/14

// 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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 10/14

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

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 11/14

Screenshot-uri cu rezultatele execu ieiț 

 Programul 1

11

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 12/14

 Programul 2

12

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 13/14

 Programul 3

13

7/27/2019 APPOO 2.doc

http://slidepdf.com/reader/full/appoo-2doc 14/14

Concluzii

La această lucrare de laborator am studiat biblioteca standardă de abloane STL din C++.ș  

Această bibliotecă con ine 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 ni te 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 prelucrări asupra containerelor, cum sunt sortările,

căutările .a.ș

14