Sie sind auf Seite 1von 5

Programare orientat pe obiecte Laborator 7

Laborator 7

1) Utiliznd tratarea excepiilor s se modifice programul din laboratorul anterior (cel referitor la citirea
studenilor dintr-un fiier i adugarea acestora ntr-o stiv), astfel nct la citirea informaiilor din fiier s se
aib n vedere:
- se extrag liniile care nu au formatul corespunztor
- se extrag liniile care conin date greite (ex. cmpul nume este gol sau cnp-ul nu are 13 caractere)
- liniile cu probleme sunt afiate ntr-un fiier sau la consol n forma:
<linie>
<numar_linie>1<\numar_linie>
<text_linie>Popescu Vasile,1870814336046,l6o,3<\text_linie>
<cod_eroare>3<\cod_eroare>
<descriere_eroare>PUNCTAJ INCORECT<\descriere_eroare>
<\linie>

Soluie:
La programul din laboratorul anterior vom aduga clasa LinieCuErori
class LinieCuErori {
int cod;
int nr_linie;
char linie[MAX_LINIE];
public:
LinieCuErori(int, char[MAX_LINIE]);
static const int COD_LINIE_GOALA = 0;
static const int COD_NUMAR_CAMPURI_INCORECT = 1;
static const int COD_CNP_INCORECT = 2;
static const int COD_PUNCTAJ_INCORECT = 3;
void setNrLinie(int nr);
void scrie_tag(ostream& out);
static char* descriere_eroare(int cod_eroare);
};

LinieCuErori::LinieCuErori(int cod, char linie[MAX_LINIE]) {


this->cod = cod;
strcpy(this->linie,linie);
this->nr_linie = 0;
}
void LinieCuErori::setNrLinie(int nr_linie) {
this->nr_linie = nr_linie;
}

char* LinieCuErori::descriere_eroare(int cod_eroare) {


switch (cod_eroare) {
case 0:
return "LINIE GOALA";
case 1:
return "NUMAR CAMPURI INCORECT";
case 2:

1
Programare orientat pe obiecte Laborator 7
return "CNP INCORECT";
case 3:
return "PUNCTAJ INCORECT";
}
return 0;
}
void LinieCuErori::scrie_tag(ostream& out) {
out << "<linie>\n\t<numar_linie>" << nr_linie << "<\\numar_linie>\n\t<text_linie>" << linie <<
"<\\text_linie>\n\t<cod_eroare>" << cod << "<\\cod_eroare>\n\t<descriere_eroare>" <<
descriere_eroare(cod) << "<\\descriere_eroare>\n<\\linie>";
}

La citirea liniilor vom arunca excepii de forma:


throw LinieCuErori(LinieCuErori::COD_CNP_INCORECT, copy_linie);

Captarea acestor erori se va face printr-un block try-catch de forma:


try {
in >> el;
s.push(el);
}
catch (LinieCuErori ex) {
ex.setNrLinie(nrlinie);
ex.scrie_tag(cout);
cout << endl;
}

Codul surs: Header.h , Source.cpp.

2) Standard Template Library (STL) este o bibliotec de template-uri. Din aceast bibliotec se evideniaz
urmtoarele tipuri de template-uri: Containere, Iteratori, Algoritmi

Containerele sunt implementari ale unor structuri de date utilizate des . Aceste implementri sunt n general
eficiente, asigur gestiunea memoriei i au multe metode gata implementate. Cu toate c au un set relativ
limitat de structuri de date, sunt suficiente pentru aplicaii practice. Uneori sunt mai lente dect
implementrile specializate.

Principalele structuri de date din STL


vector - Array-uri
list - Liste dublu nlnuite
slist - Liste simplu nlnuite
deque - Double-ended queue
set - Mulimi (n sens matematic)
Adaptori pentru containere:
queue - Structura FIFO (coada)
stack - Structuri LIFO
priority queue - Coada de prioriti
Toate template-urile sunt definite n namespace-ul "std" i au fiiere-antet de forma <vector>, <list>, etc

Metode generale comune


push_front / pop_front (nu i pentru "vector")

2
Programare orientat pe obiecte Laborator 7
push_back / pop_back
empty / size / clear
front / back (referin la primul / ultimul element)
Pentru "vector" si "deque" sunt definite i metode de acces prin
subscripting:
[] - Acces fara verificarea limitelor
at - Acces cu verificarea limitelor

Parcurgerea elementelor unui container se face de obicei cu ajutorul iteratorilor, care sunt implementai s se
comporte precum nite pointeri la date.
Exist de dou tipuri:
iterator - permite modificarea datelor pe masur ce parcurg containerul
const_iterator - nu permite modificarea datelor

Pentru un container se pot folosi metodele begin() i end().

Exemplu

#include <iostream>
#include <string>
#include <list>
using namespace std;
int main(){

list <string> nume;//declarare lista de siruri de caractere


nume.push_back("AA");//adaugarea element in lista
nume.push_front("BBB");//adaugare element la inceputul listei
nume.push_front("CCCC");
cout << "Afisare lista: ";//se va parcurge cu iteratori
for (list<string>::iterator it = nume.begin(); it != nume.end(); it++){
cout << *it << ", ";
}
cout << endl;
cout << "Ultimul elemet este: " << (string)nume.back() << endl;//afisare ultimul element
cout << "Primul elemet este: " << (string)nume.front() << endl;//afisare ultimul element
cout << "Dimensiunea listei: " << nume.size() << endl;//aflarea dimensiunii
list<string>::iterator it = nume.begin();
it++;
nume.erase(it);
nume.sort();//sortare lista
//afisarea informatiilor stocate in lista
cout << "Afisare lista: ";
for (list<string>::iterator it = nume.begin(); it != nume.end(); it++){
cout << *it << ", ";
}
cout << endl;

3
Programare orientat pe obiecte Laborator 7
Exemplu

# include <iostream>
# include <set>
using namespace std;

int main(){
set<int> m;
for (int i = 1; i <= 100; i++)
m.insert(i % 10);
set<int>::const_reverse_iterator it;
for (it = m.rbegin(); it != m.rend(); ++it){
if (*it % 3 == 0)cout << *it << " ";
}
cout << endl;
return 0;

Exemplu

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){//maparile sunt pentru perechi de forma:(nume, valoare)
map <string, int> zile;//declararea
zile["Luni"] = 1; //adaugarea de informatii in map
zile["Marti"] = 2;
zile["Miercuri"] = 3;
zile["Joi"] = 4;
zile["Vineri"] = 5;
zile["Sambata"] = 6;
zile["Duminica"] = 7;
//afisare informatiilor din map
cout << "Zi-Denumire\n";
map <string, int>::const_iterator it;
for (it = zile.begin(); it != zile.end(); it++){
cout << it->second << " " << it->first << "\n";
}
}

Exemplu

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s1 = "ABCDEFGHIJK", s2 = "123456789";
string s3 = s1 + s2;
s1[3] = tolower(s1[3]);

4
Programare orientat pe obiecte Laborator 7
std::transform(s1.begin(), s1.end(), s1.begin(), tolower);
cout << s1.replace(s1.begin(),s1.begin()+3,"OOO")<< endl;
}

Penbtru mai multe detalii se pot accesa link-urile:


http://www.cplusplus.com/reference/list/list/
http://www.cplusplus.com/reference/vector/vector/
http://www.cplusplus.com/reference/set/set/
http://www.cplusplus.com/reference/map/map
http://www.cplusplus.com/reference/string/string/
http://www.cplusplus.com/reference/iterator/iterator/
http://www.cplusplus.com/reference/algorithm/

S se scrie programe pentru testarea elementelor prezentate anterior.

Das könnte Ihnen auch gefallen