Lucrarea 2
Extensii ale limbajului C in C++


Scopul lucrarii
: Utilizarea extensiilor limbajului C in limbajul C++, care nu apartin paradigmei OOP. 

Desfasurarea lucrarii: Se vor scrie programe care utilizeaza extensii ale limbajului C, ori de cate ori este posibil:

Se vor utiliza obiectele cin si cout, functiile membre get si put, precum si operatorii de inserare/extractie in/din stream-uri, pentru citirea si scrierea datelor.

Se va utiliza programarea modulara, aplicatiile avand fisiere header de interfata si fisiere sursa de implementare pentru modulele dezvoltate, precum si un fisier sursa de utilizare. In cazul in care nu se specifica in mod explicit, se vor identifica si proiecta modulele corespunzatoare pentru rezolvarea fiecarei aplicatii.

Teme propuse:

1. (Tipul bool) Se citeste de la tastatura o secventa de siruri de caractere. Sa se dezvolte o aplicatie care determina apartenenta unui alt sir de caractere la secventa, iar in cazul in care sirul apartine secventei sa se contorizeze numarul de aparitii ale acestuia. Secventa se memoreaza intr-un tablou de siruri.

2. (Parametri de tip referinta) Se dau urmatoarele informatii despre studentii unei grupe, numarul acestora fiind cunoscut :

Sa se dezvolte o aplicatie care realizeaza urmatoarele operatii:

3. (Operatorii new si delete) Folosind aceleasi informatii despre studentii unei grupe din cadrul problemei 2, sa se modifice aplicatia precedenta, astfel incat memorarea studentilor sa se faca intr-un tablou cu alocare dinamica. Se vor implementa urmatoarele operatii:

Fisierul de utilizare va contine in functia main un meniu care afiseaza operatiile amintite, citeste operatia selectata de utilizator si apeleaza functia specifica de tratare.

4. Sa se dezvolte aplicatia de la problema 3, adaugandu-se noi operatii asupra tabloului grupei de studenti:

5. (Functiile get si put) Sa se dezvolte un modul pentru prelucrarea fisierelor sursa .cpp introduse de la tastatura. Se vor considera urmatoarele operatii:

Fisierul de test contine apelul pe rand al celor trei operatii.

6. (Functii supraaancarcate) Sa se dezvolte trei module pentru operatii cu tablouri: tablouri cu numere intregi, tablouri cu numere reale si tablouri siruri de carcatere (se va utiliza clasa string, pentru care sunt supraancarcati operatorii <<, >>, precum si cei de comparare). Tablourile nu sunt ascunse in interiorul modulelor, ci sunt transmise ca parametri functiilor de prelucrare. Principalele operatii luate in considerare sunt: citirea unui tablou de la tastatura, sortarea lui si afisarea lui pe ecren. Functiile corespunzatoare pentru fiecare operatie din cele trei module au acelasi nume (sunt functii supraancarcate). Sa se scrie un program de test, care sa utilizeze toate cele trei module (in cazul minimal, foloseste cate un tablou din fiecare tip, precum si utilizarea operatiilor specificate asupra fiecarui tablou).

7. (Functii template) In locul celor trei module din problema 6, aplicatia va contine un singur modul generic, ce utilizeaza functii template pentru cele trei operatii. Functia de test a aplicatiei trebuie sa fie la fel cu cea din aplicatia problemei 6.

8. (Argumente cu valori implicite) Un vector n-dimensional este un tablou de n componente reale. Adunarea a doi vectori se defineste astfel:
        u = (x1, ..., xn),   v = (y1, ..., yn),   u+v = (x1+y1, ..., xn+yn)
Sa se scrie o functie Add cu parametri cu valori implicite, care sa permita adunarea a doi, trei sau patru vectori. Sa se scrie o functie de test care sa puna in evidenta modul de lucru al functie Add (in cazul minimal, se va utiliza aceeasi functie pentru adunarea a 2, 3 si 4 vectori).