Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
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:
comentarii la nivel de linie;
tipul de date bool;
utilizarea referintelor la transmiterea parametrilor functiilor;
operatorii new si delete;
functii care au parametri cu valori implicite;
functii supraincarcate;
functii template.
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 pentru 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.
Exemple de utilizare de extensii non-obiectuale ale limbajului C++
comentarii la nivel de linie
// aceasta linie este o linie de comentariu
tipul de date bool
Domeniu de valori pentru tipul de date predefinit, numit bool, este format din valorile logice de adevar false si true. Atat operatorii logici &&, ||, !, cat si cei relationali (<, >, <=, >=, = =, !=) permit argumente, si respectiv returneaza rezultate de tip bool.
bool ok = true;
if(ok)
cout<<"Valoarea de adevar pentru ok este true"<<endl;
else
cout<<"Valoarea de adevar pentru ok este false"<<endl;
utilizarea referintelor la transmiterea parametrilor functiilor
O referinta reprezinta un nou nume (un alias) pentru o entitate(variabila) care exista deja (are alocata o zona de memorie).
char c = 'a';
char& ref_c = c; //ref_c este un alias pentru variabila i
Un exemplu clasic de utilizare a referintelor la transmiterea parametrilor unei functii se intalneste la implementarea functiei de interschimbare a valorilor a doua
variabile:
- transfer parametrilor prin valoare:
void interschimba_1(int a, int b)
transfer parametrilor prin referinta:
void interschimba_2(int &a, int &b)
- transfer parametrilor prin adresa:
void interschimba_3(int *a, int *b)
La executia codului din fisierul interschimba.cpp se poate observa ca in cazul apelului functiei interschimba_1, valorile celor doua variabile raman neschimbate,
motivul fiind transmiterea parametrilor functiei prin valoare; in cazul celorlalte doua functii, interschimbarea se realizeaza in mod corect. Totodata, se poate
observa ca implementarea functiei ce foloseste referinte este mult mai simpla.
Observatie: Referintele trebuie initializate in momentul declararii.
operatorii new si delete
Standardul C++ specifica ca operatorul new, folosit pentru alocarea unei zone de memorie in mod dinamic, genereaza o exceptie de tip std::bad_alloc in cazul unei alocari esuate de memorie. Operatorul complementar lui new, folosit pentru eliberarea unei zone de memorie alocata in mod dinamic, este delete.
int *pA = new int;
delete pA;
char *pC = new(char);
delete pC;
float* pT = new float[5];
functii care au parametri cu valori implicite
O functie poate fi apelata cu un numar de parametri actuali mai mic decat numarul parametrilor formali; parametrii a caror valori lipsesc se numesc impliciti (cu valori implicite). Parametrii cu valori implicite trebuie sa se gasesca ultimii pozitionati in cadrul listei parametrilor formali din antetul functiei.
void functie(int a = 1, bool b = false)
Exemple de posibile apeluri:
- f(); // a = 1; b = false - pentru ambii parametri se utilizeaza valorile implicite
- f(3); // a = 3; b = false - pentru parametrul b se utilizeaza valorea implicita
- f(3, true); // a = 3; b = true - pentru ambii parametri se utilizeaza valorile actuale (3,true)
Apel incorect:
- f(true); // un apel corect presupune utilizare valorilor implicite fie pentru ambii parametri, fie pentru
// parametru b, fie pentru niciunul; in acest caz se doreste utilizarea valorii implicite pentru primul parametru
functii supraancarcate
Supraincarcare unei functii se poate realiza prin definirea de mai multe implementari pentru acelasi nume de functie:
string min(string, string);
int min(int, int);
Compilatorul de C++ utilizeaza o tehnica de "decorare" a numelor pentru generarea de nume unice corespunzatoare identificatorilor dintr-un program. Astfel
numele in cod obiect pentru functiile declarate mai sus sunt distincte (si diferite de numele "sursa" al functiei - min).
functii template
Functiile template se declara astfel:
template
<typename
T>
// declaratia functiei care utilizeaza tipul generic de date
T
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 :
nume si prenume : sir de maxim 20 de caractere;
adresa, formata din:
o nume oras : sir de maxim 15 caractere;
o cod oras : numar intreg;
o strada : sir de maxim 25 caractere;
o numar : numar intreg;
numar de telefon : format din
o prefix : numar intreg;
o numar efectiv : numar intreg lung;
facultate : cod format din 3 caractere;
varsta : numar intreg;
note : tablou de 10 numere intregi;
media de promovare;
numar de absente la examene.
Sa se realizeze o aplicatie cu urmatoarele functionalitati:
citerea datelor studentilor dintr-o grupa;
memorarea datelor citite intr-un tablou asociat grupei;
afisarea datelor din tablou.
3. (Operatorii new si delete) Folosind aceleasi informatii despre studentii unei grupe din problema 2, sa se modifice aplicatia precedenta, astfel incat memorarea studentilor sa se faca intr-un tablou ce va fi alocat in mod dinamic. Se vor implementa urmatoarele operatii:
crearea tabloului;
adaugarea unui nou student in tablou; in cazul in care tabloul nu mai are elemente disponibile, se efectueaza o realocare a acestuia la o dimensiune mai mare;
modificarea informatiilor aferente unui student;
stergerea unui student din tablou.
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:
determinarea studentului (sau a studentilor) cu media cea mai mare;
determinarea studentului (sau a studentilor) cu cele mai multe restante si absente de la examene;
afisarea studentilor promovati:
o in ordine alfabetica, dupa nume si prenume;
o in ordinea descrescatoare a mediilor;
afisarea studentilor restantieri:
o in ordine alfabetica, dupa nume si prenume;
o in ordinea crescatoare a numarului de restante si absente;
5. (Functiile get si put) Sa se dezvolte un modul pentru prelucrarea fisierelor sursa .cpp introduse de la tastatura. Se vor considera urmatoarele operatii:
eliminarea comentariilor din fisier si afisarea fisierului modificat la terminalul standard de iesire;
contorizarea numarului de cuvinte din fisier;
contorizarea numarului de linii din fisier;
Fisierul de test va contine
apelul pe rand al celor trei operatii.
6. (Functii supraincarcate) Sa se dezvolte trei module pentru
operatii cu tablouri: tablouri cu numere intregi, tablouri cu numere reale
si tablouri siruri de caractere (se va utiliza clasa string, pentru
care sunt supraincarcati 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 si afisarea lui pe ecran. Functiile
corespunzatoare pentru fiecare operatie din cele trei module au
acelasi nume (sunt functii supraincarcate). Sa se scrie un
program de test, care sa utilizeze toate cele trei module (in cazul
minimal, se va folosi cate un tablou din fiecare tip, precum si utilizarea
operatiilor specificate asupra fiecarui tip de tablou).
7. (Functii template) In locul celor trei module de la problema 6,
aplicatia va avea un singur modul generic, ce utilizeaza functii
template pentru cele trei tipuri de operatii. Functia de test a
aplicatiei va fi identica cu cea implementata la problema 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 = (x , , xn), v = (y , , yn), u+v
= (x +y , , 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 functiei Add (in cazul minimal, se va utiliza
aceeasi functie pentru adunarea a 2, 3 si 4 vectori).
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre: |
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |