Beruflich Dokumente
Kultur Dokumente
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);
};
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>";
}
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.
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
Exemplu
#include <iostream>
#include <string>
#include <list>
using namespace std;
int main(){
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;
}