QReferate - referate pentru educatia ta.
Referatele noastre - sursa ta de inspiratie! Referate oferite gratuit, lucrari si proiecte cu imagini si grafice. Fiecare referat, proiect sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Referate informatica

Extensii ale limbajului C in C++



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).


Nu se poate descarca referatul
Acest referat nu se poate descarca

E posibil sa te intereseze alte referate despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi referatele, proiectele sau lucrarile afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul referat pe baza referatelor de pe site.
{ Home } { Contact } { Termeni si conditii }