Sunteți pe pagina 1din 16

Adonis Butufei

PROIECT FINAL C++


CUPRINS
1 Descriere.....................................................................................................................................................2 1.1 Recomandari........................................................................................................................................2 1.2 Criterii de evaluare:.............................................................................................................................2 2 Specificatiile programului...........................................................................................................................3 2.1 Modulele programului.........................................................................................................................3 2.2 Modulul Calcule..................................................................................................................................3 2.2.1 Operatiile aritmetice....................................................................................................................3 2.2.2 Calculele com inatoriale.............................................................................................................! 2.2.3 "alori de test................................................................................................................................! 2.2.! Sirurile numerice.........................................................................................................................! 2.2.!.1 Clasa de a#a Sir..................................................................................................................$ 2.2.!.2 Clasa %i onacci....................................................................................................................& 2.2.!.3 Clasa 'ucas..........................................................................................................................& 2.2.!.! Clasa (ell.............................................................................................................................& 2.2.!.$ Clasa )riangular...................................................................................................................& 2.2.!.& Clasa (entagonal..................................................................................................................* 2.2.!.* Clasa (rime..........................................................................................................................* 2.2.!.+ Clasa )est(rim.....................................................................................................................+ 2.2.!., "alori de test........................................................................................................................+ 2.2.$ Structuri pentru e-ceptii..............................................................................................................+ 2.3 Modulul ./.........................................................................................................................................., 2.3.1 Clasa Comanda..........................................................................................................................10 2.3.2 Clasa ComandaCalcule..............................................................................................................10 2.3.3 Clasa CmdAritmetice................................................................................................................10 2.3.! Clasa CmdCom inatorial1.........................................................................................................11 2.3.$ Clasa CmdCom inatorial2.........................................................................................................11 2.3.& Clasa CmdSiruri.........................................................................................................................11 2.3.* Clasa Cmd1-it...........................................................................................................................12 2.3.+ Clasa Meniu...............................................................................................................................12 2.3., Clasa Afisea#aComanda............................................................................................................13 2.3.10 Clasa MeniuOperatiiAritmetice...............................................................................................1! 2.3.11 Clasa MeniuCom inatorial......................................................................................................1! 2.3.12 Clasa MeniuSiruri....................................................................................................................1! 2.3.13 Clasa Meniu(rincipal..............................................................................................................1! 2.! Modulul Calculator...........................................................................................................................1$ 2.!.1 Clasa Aplicatie...........................................................................................................................1$ 2.$ %unctia main......................................................................................................................................1$ 3 Directoarele si fisierele proiectului...........................................................................................................1&

Adonis Butufei

1 DESCRIERE
(roiectul final consta in implementarea unui calculator folosind toate modelele de programare suportate de C22 si toate conceptele predate la curs folosind specificatiile acestui document. /n ela orarea acestor specificatii am urmarit aplicarea tuturor conceptelor cu o cantitate minima de cod scris si efort de implementare.

1.1 Recomandari
(entru a putea implementa cu succes aces proiect este necesara parcurgerea practica a tuturor la oratoarelor3 aplicarea etapelor dezvoltarii programelor: design 4intelegerea designului in ca#ul de fata53 implementare3 testare3 depanare pentru fiecare functionalitate adaugata la proiect. De asemenea recomand folosirea spiralei ca metodologie de implementare a proiectului1. /n mod practic aceasta inseamna adaugarea unei noi functionalitati 4metoda3 clasa functie5 la proiect numai dupa ce versiunea curenta se compileaza cu succes si rezultatele obtinute sunt corecte . "eti avea astfel intregul proces su cotrol. %unctionalitatile vor fi implementate in ordinea pre#entarii lor in acest document. Stergeti fisierele si directoarele temporare inainte de trimiterea ar6ivei cu proiectul3 fie in stadiul final3 fie in stadii intermediare. Directoarele temporare sunt: Debug3 Release3 ipch.%isere temorare sunt: *.sdf3 *.suo. Scopul principal al acestui proiect este sa va asiste in asimilarea conceptelor si sa depasiti nivelul de de#voltator incepator C22. Daca aveti dificultati sau neclaritati in oricare dintre etape 23 incercati sa revi#uiti conceptele si sinta-a din suportul de curs3 revedeti la oratorul pentru acea lectie. Daca nu puteti gasi o solutie in ma-im o ora va rog sa ma contactati prin e7mail pentru a clarifica pro lema cat mai eficient. Daca aveti erori de compilare: cititi mesa8ul de eroare3 locali#ati #ona de cod unde apare acest mesa8 cu du lu clic9 pe mesa83 revi#uiti sinta-a codului3 cautati pe internet documentatia pentru codul de eroare afisat in fereastra Output din "isual C22. Daca nu ati putut re#olva eroarea trimiteti ar6iva prin e7mail inainte de a adauga alt cod. Daca descoperiti erori in documentatie Am implementat personal acest proiect folosind specificatiile3 este posi il ca anumite erori sa e-iste in document cu toate ca am verificat te-tul. Daca descoperiti astfel de erori3 va rog sa7mi trimiteti detaliile pentru a le putea corecta cat mai rapid.

1.2 Criterii de eval are!


1. /mplementarea corecta a functionalitatii. Aceasta presupune compilarea cu succes a proiectului si o tinerea mesa8elor de functionare normala si de eroare specificate si o tinerea re#ultatelor corecte. 2. Minimi#area directivelor de include in fisierele 6eader si sursa si folosirea corecta a spatiilor de nume. Acesta este un aspect important in activitatea practica de programare. Atunci cand este posi il se folosesc declaratiile anticipate. 3. Stilul de scriere a codului: folosirea constantelor sim olice si enumerate3 denumirea varia ilelor si constantelor3 spatiile3 identarea3 alinierea acoladelor. !. Organi#area corecta a directoarelor conform specificatiilor. $. Stergerea fisierelor si directoarelor temporare inainte de trimiterea ar6ivei.
1 Concepte discutate in prima lectie a cursului. 2 Si in special in intelegerea designului.

Adonis Butufei

2 SPECIFICATIILE PRO"RA#ULUI
Sa se scrie un program care efectuea#a urmatoarele calcule: operatii aritmetice intregi 4 adunare3 scadere3 inmultire3 impartire3 modulo53 calcule com inatoriale 4factorial3 permutari3 aranjamente3 combinari5 si siruri numerice 4fibonacci3 lucas3 pell3 triangular3 pentagonal si prime5. (rogramul va avea o interfata utili#ator cu mesa8e te-t care pre#inta utili#atorului o lista de comen#i si cere selectarea inde-ului comen#ii in mod asemanator cu meniurile telefonice. Cele trei categorii de calcule sunt grupate in trei liste de comen#i numite meniuri. Aceste meniuri sunt afisate in lista initiala numita meniu principal. Dupa introducerea inde-ului comen#ii3 programul validea#a aceasta valoare si reafisea#a lista de comen#i in ca#ul in care inde-ul este invalid. Daca inde-ul este valid3 programul e-ecuta acea comanda solicitand valorile de calcul in intervalul specificat de utili#ator. Re#ultatele sunt afisate pe ecran si programul asteapta apasarea tastei enter pentru a continua. /n acest mod3 utili#atorul are posi ilitatea citirii re#ultatelor. Dupa e-ecutie programul afisea#a meniul principal. Daca apar erori de calcul 4impartire la #ero3 depasirea intervalului de valori etc5 programul afisea#a informatia de eroare in locul re#ultatului si3 dupa ce utili#atorul apasa tasta enter3 se afisea#a din nou meniul principal. (roiectul se transmite intr7o ar6iva #ip stergand in preala il directoarele si fisierele temporare.

2.1 #od lele $ro%ram l i


(rogramul are 3 module: Calculator3 Calcule si UI repre#entate in %ig 2.1. Modulul Calcule contine codul pentru functionalitatea de calcule. Modulul UI contine functionalitatea pentru interfata utili#ator. Modulul Calculator contine codul apelat din functia main. %iecare modul are asociat un namespace. Spatiul de nume Calculator este containerul pentru cele doua su spatii Calcule si UI. De asemenea3 fisierele fiecarui modul se afla in directoarele cu numele spatiilor de nume.

Calculator Calcule %ig 2.1: ./

2.2 #od l l Calc le


2.2.1 O$eratiile aritmetice
Operatiile aritmetice sunt definite ca functii template cu un singur parametru tip generic in fisierul: operatii.h. (entru impartire si modulo se ridica o e-ceptie de tipul ImpartireLaZero daca al doilea parametru este 0. 3

Adonis Butufei

2.2.2 Calc lele com&inatoriale


(entru calculele com inatoriale se folosesc functii declarate in fisierul combinatorial.h si definite in fisierulul combinatorial.cpp.
int Factorial(int n : care calculea#a n; cu formula:

n =0 n != 1 n n 1 n 2 21 n [1 12 ]

folosind o implementare nerecursiva. Daca n nu este in intervalul specificat se ridica o e-ceptie de tipul In!alid". "alori de test: 0; < 1; < 13 3; < &
int #ranjamente(int n$ int % : calculea#a aran8amente de n luate cate 9 cu urmatoarea formula:

Ak n=

n! , n [ 012 ] , 0 k n n k !

Daca n nu este in intervalul specificat se ridica o e-ceptie de tipul In!alid"$ iar daca valoarea lui 9 nu este in interval se ridica o e-ceptie de tipul In!alid&.
int Combinari(int n$ int % : calculea#a com inari de n luate cate 9 cu urmatoarea formula:

Ak C = n k!
k n

n [ 0 12 ] , 0 k n

Daca n nu este in intervalul specificat se ridica o e-ceptie de tipul In!alid"$ iar daca valoarea lui 9 nu este in interval se ridica o e-ceptie de tipul In!alid&.

2.2.' (alori de te)t


n ! ! ! ! 9 1 2 3 ! ! 12 2! 2!
k An

Ck n ! & ! 1

2.2.* Sir rile n merice


(entru implementarea sirurilor numerice se va folosi programarea o iectuala. )oate clasele vor fi declarate in fisierul siruri.h3 metodele acestor clase vor fi definite in fisierul siruri.cpp. (entru simplificarea implementarii3 functionalitatea comuna tuturor sirurilor numerice va fi implementata in clasa de a#a 'ir. Algoritmii de calcul pentru elementele sirurilor numerice se implementea#a in clasele derivate: Fibonacci3 Lucas3 (ell3 )riangular3 (entagonal si (rime. (entru sirul numerelor prime se va folosi o clasa au-iliara )est(rim.

Adonis Butufei 2.2.*.1 Cla)a de &a+a Sir Definitii de tip: Aceasta clasa foloseste un container de tip vector pentru elementele sirurilor de tip unsigned int. (entru simplificarea implementarii se adauga urmatoarele definitii de tip in fisierul siruri.h inainte de declaratia clasei:
typedef unsigned int Uint; typedef vector<Uint> TVint; typedef vector<Uint>::const_iterator TIterator;

Atribute Clasa are doua atri ute cu nivel de acces protected 4pentru a putea fi accesate din clasele derivate5:
Uint _count; // numarul de elemente TVint _elemente; // vectorul de elemente

Metode: )oate metodele3 cu e-ceptia ca#ulului cand se specifica e-plicit alt nivel de acces3 au nivelul de acces public.
'ir( initiali#ea#a valoarea lui *count cu +. !irtual ,'ir( necesar deoarece este clasa de a#a. !oid Calculea-a.alori(int inde/ : metoda virtual pura cu nivel de acces protected

suprascrisa de clasele derivate pentru calcularea valorilor elementelor.


Uint operator 01 (int inde/ : operatorul de inde-are:
daca index < ridica o exceptie de tipul !arametruIn"faraIntervalului

_count # index $ % &alculea'aValori(index)


returnea'a valoarea elementului de la po'itia index

'ir2 operator (

(int inde/ : operatorul functie3

apelea'a operator *+ (index) returnea'a referinta la instanta curenta

friend ostream2 operator 44 (ostream 2out$ const 'ir 2sir : operatorul de scriere
afisea'a elementele sirului pentru index in intervalul 0+ 5 count in urmatorul format: scrie urmatoarele mesa,e (index si valoare sunt separate printr-un ta.): Index Valoare -------------------"poi scrie elementele vectorului pe cate o linie in formatul index valoare separate printr-un ta./

Important 1lementele tre uie adaugate in vector folosind metoda push*bac% pentru a permite redimensionarea vectorului.

3 este folosit in e-presii de forma: cout 44 sir(inde/

44 endl6 unde sir este o instanta a unei clase derivate

Adonis Butufei 2.2.*.2 Cla)a Fi&onacci 1ste derivata pu lic din clasa 'ir. Are urmatorul atri ut pu lic pentru valoarea ultimului inde- valid:
enum 7 8#9*FI: ; <= >

Suprascrie metoda !oid Calculea-a.alori(int inde/ ? daca inde/ @ 8#9*FI: ridica o e-ceptie de tipul (arametruIn#faraInter!alului elementele sirului se calculea#a cu formula: n =031 F n = n F n 1 F n 2 n !*

se adauga primele doua elemente in vector apoi pornind de la dimensiunea curenta cat timp dimensiunea 4 count se adauga elementele folosind ultima expresie din formula

2.2.*.' Cla)a L ca) 1ste derivata pu lic din clasa 'ir. Are urmatorul atri ut pu lic pentru valoarea ultimului inde- valid:
enum 7 8#9*LUC#' ; <A >

Suprascrie metoda !oid Calculea-a.alori(int inde/ ? daca inde/ @ 8#9* LUC#' ridica o e-ceptie de tipul (arametruIn#faraInter!alului elementele sirului se calculea#a cu formula: 2 n= 0 L n = 1 n =1 L n1 L n 2 n !&

se adauga primele doua elemente in vector apoi pornind de la dimensiunea curenta cat timp dimensiunea 4 count se adauga elementele folosind ultima expresie din formula

2.2.*.* Cla)a Pell 1ste derivata pu lic din clasa 'ir. Are urmatorul atri ut pu lic pentru valoarea ultimului inde- valid:
enum 7 8#9*(BLL ; CA >

Suprascrie metoda !oid Calculea-a.alori(int inde/ ? daca inde/ @ 8#9* (BLL ridica o e-ceptie de tipul (arametruIn#faraInter!alului elementele sirului se calculea#a cu formula: 0 n =0 Pell n = 1 n=1 2 P n1 P n 2 n 2&

se adauga primele doua elemente in vector apoi pornind de la dimensiunea curenta cat timp dimensiunea 4 count se adauga elementele folosind ultima expresie din formula

2.2.*., Cla)a Trian% lar 1ste derivata pu lic din clasa 'ir. Are urmatorul atri ut pu lic pentru valoarea ultimului inde- valid: &

Adonis Butufei
enum 7 8#9*)RI#"DUL#R ; E+C< >

Suprascrie metoda !oid Calculea-a.alori(int inde/ ? daca inde/ @ 8#9* )RI#"DUL#R ridica o e-ceptie de tipul (arametruIn#faraInter!alului elementele sirului se calculea#a cu formula: T n = n n 1 n [ 0 102! ] 2

se adauga primele doua elemente in vector apoi pornind de la dimensiunea curenta cat timp dimensiunea 4 count se adauga elementele folosind ultima expresie din formula

2.2.*.- Cla)a Penta%onal 1ste derivata pu lic din clasa 'ir. Are urmatorul atri ut pu lic pentru valoarea ultimului inde- valid:
enum 7 8#9*(B")#DF"#L ; E+C< >

Suprascrie metoda !oid Calculea-a.alori(int inde/ ? daca inde/ @ 8#9* (B")#DF"#L ridica o e-ceptie de tipul (arametruIn#faraInter!alului elementele sirului se calculea#a cu formula: P n = n 3n1 n [ 0102! ] 2

se adauga primele doua elemente in vector apoi pornind de la dimensiunea curenta cat timp dimensiunea 4 count se adauga elementele folosind ultima expresie din formula

2.2.*.. Cla)a Prime 1ste derivata pu lic din clasa 'ir. Are urmatorul atri ut pu lic pentru valoarea ultimului inde- valid:
enum 7 8#9*(RI8B ; E+C< >

Suprascrie metoda !oid Calculea-a.alori(int inde/ ? daca inde/ @ 8#9* (RI8B ridica o e-ceptie de tipul (arametruIn#faraInter!alului 1lementele sirului se calculea#a cu urmatorul algoritm: se adauga primele doua numere prime in vector: 2 si 3 Se cauta urmatorul numar prim:
valoare = valoarea ulimului element4 + 25 apoi pornind de la dimensiunea curenta cat timp dimensiunea < count se verifica daca valoare este numar prim si se adauga la sir se incrementeaza valoare cu 2 Valoare este numar prim daca nu are divi'ori elemente ale sirului in intervalul pentru aceasta se folosesc: algoritmul for*each si clasa )est(rim/ 0aca valoarea iteratorului returnat de algoritm > valoare atunci valoare este prim/

[ 3 valoare ]

! valoarea ultimului element se accesea#a apeland: *elemente.bac%( $ se incrementea#a cu 2 deoarece cu e-ceptia lui 2 toate numerele prime sunt impare

Adonis Butufei 2.2.*./ Cla)a Te)tPrim Aceasta clasa este folosita ca si predicat unar pentru algoritmul for*each si implementea#a suplimentar operatorii de conversie3 comparare si incrementare pentru a simplifica deplasarea la urmatoarea valoare. 1ste declarata in fisierul siruri.h si metodele sunt definite in siruri.cpp. Atribute
Uint *!al6 double *stop.al6 // valoarea care este testata // valoarea de oprire a testarii s1rt(_val)

Metode
)est(rim(Uint sGrt(!al &. !al

constructor

initiali#ea#a *!al si *stop.al cu valoarea val respectiv

)est(rim2 operator HH( *stop.al. bool operator (

operatorul de incrementare3 incrementea#a *!al cu 2 si actualizeaza

(Uint di!i-or : operatorul functie3 returnea#a true daca:

di!i-or @ *stop.al sau + ;; *!al I di!i-or. operator Uint ( : operatorul de conversie3 returnea#a =val3 este folosit la adaugarea elementelor in

sir.
friend bool operator @ (Uint !al$ const )est(rim 2src returnea#a true daca: !al @ src.*!al.

: operatorul de comparare3

2.2.*.0 (alori de te)t inde0 1 2 3 ! $ %i onacci 0 1 1 2 3 $ 'ucas 2 1 3 ! * 11 (ell 0 1 2 $ 12 2, )riangular 0 1 3 & 10 1$ (entagonal 0 1 $ 12 22 3$ (rime 2 3 $ * 11 13

2.2., Str ct ri $entr e1ce$tii


(entru simplitate3 e-ceptiile sunt doar declarate ca structuri in fisierul e-ceptii.6:
struct ImpartireLaZero 7>6 struct (arametruIn#faraInter!alului 7>6 struct In!alid& 7>6 struct In!alid" 7>6

& este necesara folosirea unui cast: *stop.al ; sGrt(double(*!al

Adonis Butufei

2.' #od l l UI
Rolul acestui modul este de a reali#a interactiunea cu utili#atorul: afisea#a mesa8e informative3 citeste datele introduse de utili#ator apelea#a functionalitatea de calcul si afisea#a re#ultatele sau mesa8ele de eroare. (entru implementarea acestui modul se foloseste ierar6ia de clase pre#entata in %ig 2.2:

%ig 2.2 'a prima vedere poate parea o ar6itectura comple-a3 insa3 prin separarea functionalitatilor si folosirea unei clase pentru fiecare responsa ilitate3 efortul de implementare este redus. Clasa a stracta de a#a Comanda grupea#a elementele comune tuturor comen#ilor: fiecare comanda are un nume si o actiune care tre uie e-ecutata. Clasa ComandaCalcule permite utili#atorului citirea re#ultatelor dupa efectuarea calculelor prin afisarea unui mesa8 pe ecran si asteptarea tastei enter. )oate clasele care e-ecuta comen#i de calcule sunt derivate din aceasta clasa. Rolul acestor clase este acela de a afisa mesa8e de informare3 citi valori de la tastatura si afisare re#ultate. Clasele derivate din clasa ComandaCalcule sunt clase template pentru a putea transfera functiile sau clasele de calcul cu tipuri diferite de date. Cmd#ritmetice conectea#a functiile de calcul aritmetic cu interfata utili#ator. Se foloseste cate o instanta pentru fiecare functie. CmdCombinatorialE conectea#a functia %actorial cu interfata utili#ator. CmdCombinatorialC conectea#a functiile Aranjamente si Com inari cu interfata utili#ator. Se foloseste cate o instanta pentru fiecare functie. Cmd'iruri conectea#a sirurile numerice cu interfata utili#ator. Se foloseste cate o instanta pentru fiecare tip de sir numeric. CmdB/it permite navigarea catre meniul anterior sau terminarea programului in ca#ul meniului principal. 8eniu permite gruparea mai multor comen#i. 8eniuFperatii#ritmetice grupea#a comen#ile pentru operatiile aritmetice. 8eniuCombinatorial grupea#a comen#ile pentru calculele com inatoriale. 8eniu'iruri grupea#a comen#ile pentru sirurile numerice. 8eniu(rincipal grupea#a su 7meniurile pentru operatii aritmetice3 calcule com inatoriale si siruri numerice.

Adonis Butufei

2.'.1 Cla)a Comanda


(entru aceasta clasa se folosesc fisierele: comanda.hJcpp Atribute private:
const string *nume

Metode publice:
Comanda(const string 2nume : constructor 7 initiali#ea#a atri utul =nume !irtual ,Comanda( : destructor const string2 "ume( const : returnea#a numele comen#ii.

!oid #steaptaBnter( : metoda virtuala suprascrisa de clasele derivate pentru asteptarea tastei enter

care permite citirea valorilor re#ultatelor.


!oid B/ecute( 7 metoda virtual pura implementata de clasele derivate.

2.'.2 Cla)a ComandaCalc le


(entru aceasta clasa se folosesc fisierele: comanda.hJcpp Atribute private:
const string *nume

Metode publice:
ComandaCalcule(const string 2nume : constructor initiali#ea#a atri utul =nume !oid #steaptaBnter( : suprascrie metoda cu urmatorul cod:
cout << 2"pasati 3nter pentru a continua: 2; cin/ignore(%4 56n5); c7ar c7; cin/get(c7);

2.'.' Cla)a CmdAritmetice


(entru aceasta clasa se foloseste fisierul: cmdaritmetice.h Aceasta clasa este o clasa template cu urmatoarea lista de parametri generici:
template4int Fperatie(int$ int @

Metode publice:
Cmd#ritmetice(const string 2nume !oid B/ecute( ?
afisea'a mesa,ul: Introduceti doua numere intregi (x4 y)/ declara doua varia.ile intregi citeste valorile varia.ilelor (se afisea'a un promt inainte x: respectiv y: ) apelea'a functia 8peratie(x4y): cout << x << 2 2 << 9ume() << 2 2 << y << 2 # 2 << 8peratie (x4y) <<endl;

10

Adonis Butufei

2.'.* Cla)a CmdCom&inatorial1


(entru aceasta clasa se foloseste fisierul: cmdcombinatorial.h Aceasta clasa este o clasa template cu urmatoarea lista de parametri generici:
template 4int Fperatie(int $ int 8#9$ int 8I" ; +@

Metode publice:
CmdCombinatorialE(const string 2nume !oid B/ecute( ?
afisea'a mesa,ul: Introduceti un numar intreg in intervalul * :I94 :";+ inlocuind :I9 si :"; cu valorile primite in lista de parametri generici declara declara o varia.ila intreaga citeste valoarea varia.ilei apelea'a functia 8peratie(n): cout << 9ume() << 2(2 << n << 2) # 2 << 8peratie(n) << endl;

2.'., Cla)a CmdCom&inatorial2


(entru aceasta clasa se foloseste fisierul: cmdcombinatorial.h Aceasta clasa este o clasa template cu urmatoarea lista de parametri generici:
template 4int Fperatie(int$ int $ int 8#9$ int 8I" ; +@

Metode publice:
CmdCombinatorialC(const string 2nume !oid B/ecute( ?
afisea'a mesa,ul: Introduceti doua numere intregi (n4 <4 n > <) in intervalul *:I9 4 :";+ inlocuind :I9 si :"; cu valorile primite in lista de parametri generici declara doua varia.ile intregi citeste valorile varia.ilelor (se afisea'a un promt inainte x: respectiv y: ) apelea'a functia 8peratie(n4<): cout << 9ume() << 2(2 << n << 24 2 << < << 2) # 2 << 8peratie(n4<) << endl;

2.'.- Cla)a CmdSir ri


(entru aceasta clasa se foloseste fisierul: cmdsiruri.h Aceasta clasa este o clasa template cu urmatoarea lista de parametri generici:
template4tKpename 'ir"umere$ int 8#9$ int 8I";+@

Atribute private:
'ir"umere *sir6

Metode publice:
Cmd'iruri(const string 2nume !oid B/ecute( ?
afisea'a mesa,ul: Introduceti un numar intreg in intervalul * :I94 :";+ inlocuind :I9 si :"; cu valorile primite in lista de parametri generici

11

Adonis Butufei
declara declara o varia.ila intreaga citeste valoarea varia.ilei apelea'a operatorul functie pentru atri.utul _sir: cout << 2=irul 2 << 9ume() << 2 * - 2 << n << 2+:6n2 << _sir(n) << endl;

2.'.. Cla)a CmdE1it


(entru aceasta clasa se folosesc fisierele: cmde/it.hJcpp Atribute private:
bool *e/it

Metode publice:
CmdB/it(const string2 te/t ; LInapoiL !oid B/ecute( bool B/it( initiali#ea#a atri utul *e/it cu false.

: setea#a *e/it cu true.

returnea#a valoarea atri utului *e/it.

2.'./ Cla)a #eni


(entru aceasta clasa se folosesc fisierele: meniu.hJcpp Meniul este o comanda speciala care contine un vector de alte comen#i si permite adaugarea comen#ilor3 afisarea inde-ului si numelui comen#ilor3 citirea inde-ului comen#ii de la tastatura3 e-ecutia comen#ii selectate si afisearea re#ultatelor sau mesa8elor de eroare. De asemenea3 meniul este responsa il pentru eli erarea memoriei ocupate de comen#i. Definitii de tip:
tKpedef !ector4Comanda*@ )Commands6 tKpedef )Commands??si-e*tKpe Inde/6

Atribute private:
)Commands *comen-i : vectorul de comen#i al meniului.

Metode publice:
8eniu(const string 2nume !irtual ,8eniu( : dealoca toti pointerii din vector folosind algoritmul for*each impreuna cu functia !oid DeleteComanda(Comanda *2pcmd definita in fisierul meniu.cpp inainte de destructor. !oid B/ecute( ?
executa: sterge ecranul afisea'a numele meniului afisea'a comen'ile cat timp &itesteIndex returnea'a false apelea'a comanda cu indexul specificat intr-un .loc try

12

Adonis Butufei
tratea'a exceptiile: Impartire>a?ero4 Invalid@4 Invalid9 si !arametruIn"faraIntervalului apelea'a "steapta3nter pentru comanda selectata

(entru afisarea comen#ilor se foloseste algoritmul for=eac6 impreuna cu o iectul functie unar Afisea#aComanda. Mesa8ele de eroare afisate in ca#ul e-ceptiilor sunt: 1-ceptie
ImpartireLaZero (arametruIn#faraInter!alului In!alid& In!alid"

Mesa8 /mpartire la #ero. (arametru in afara intervalului. /nvalid 9. /nvalid n.

Metode protected:
!oid #daugaComanda(Comanda *comanda adauga o comanda in vector folosind push*bac%.

Metode private:
!oid 'tergeBcran( sterge ecranul cu urmatoarea secventa:
Aif defined(_BI9CD) EE defined(_BI9FG) Adefine 3H"=3 2cls2 Aelse Adefine 3H"=3 2clear2 Aendif system(3H"=3)I;

bool Inde/.alid(Inde/ inde/ : returnea#a true daca 0 >< inde- > =comen#i.si#e45 bool CitesteInde/(Inde/ 2inde/ :
resetea'a erorile din cinJ citeste valoarea indexului returnea'a false daca cin/fail() ## true returnea'a IndexValid(index)

2.'.0 Cla)a A2i)ea+aComanda


(entru aceasta clasa se folosesc fisierele: meniu.hJcpp Atribute private:
int *inde/ inde-ul comen#ii.

Metode publice:
#fisea-a8eniu( : initiali#ea#a *inde/ cu 0. !oid operator( (Comanda *comanda ?

* tre uie inclus 6eaderul cstdlib + se foloseste secventa din lectia 11.

13

Adonis Butufei
cout << 2 2 << _index$$ << 2 2 << comanda->9ume() << endl;

2.'.13 Cla)a #eni O$eratiiAritmetice


(entru aceasta clasa se folosesc fisierele: meniuoperatiiaritmetice.hJcpp Metode publice:
8eniuFperatii#ritmetice(
apelea'a constructorul clasei de .a'a cu: 8peratii "ritmetice Intregi adauga commanda exit: "dauga&omanda(neK &md3xit); adauga comen'ile aritmetice cu apeluri de forma: "dauga&omanda(neK &md"ritmetice<operatieL>(2sim.ol2));

2.'.11 Cla)a #eni Com&inatorial


(entru aceasta clasa se folosesc fisierele: meniucombinatorial.hJcpp Metode publice:
8eniuCombinatorial(
apelea'a constructorul clasei de .a'a cu: &om.inatorial adauga commanda exit: "dauga&omanda(neK &md3xit); adauga comen'ile com.inatoriale cu apeluri de forma: "dauga&omanda(neK &md&om.inatorialA<nume4:";>(2nume2))% ;

2.'.12 Cla)a #eni Sir ri


(entru aceasta clasa se folosesc fisierele: meniusiruri.hJcpp Metode publice:
8eniu'iruri(
apelea'a constructorul clasei de .a'a cu: =iruri 9umerice adauga commanda exit: "dauga&omanda(neK &md3xit); adauga comen'ile pentru siruri numerice cu apeluri de forma: "dauga&omanda(neK &md=iruri<9ume49ume:::";_I903;_9U:3>(29ume2)%%

2.'.1' Cla)a #eni Princi$al


(entru aceasta clasa se folosesc fisierele: meniuprincipal.hJcpp Atribute private:
CmdB/it **pB/it pointer la comanda de iesire din program12.

Metode publice:
, se inlocuieste operatie cu numele functiilor aritmetice 10 se inlocuieste M cu 1 sau 23 nume cu numele functiei com inatoriale3 constanta 8#9 este declarata in combinatorial.h cu valoarea EC 11 "ume se inlocuieste cu numele claselor sirurilor numerice %i onacci3 'ucas etc3 8#9*I"DB9*"U8B se inlocuieste cu numele constantei enumerate in clasa respectiva. 12 Se foloseste declaratie anticipata in 6eader.

1!

Adonis Butufei
8eniu(rincipal(
apelea'a constructorul clasei de .a'a cu: !roiect Minal &$$ _p3xit # neK &md3xit(23xit2); "dauga&omanda(_p3xit) adauga comen'ile pentru su.meniuri: "dauga&omanda(neK =um.eniu);

bool B/it( returnea#a *pB/itN@B/it(

2.* #od l l Calc lator


2.*.1 Cla)a A$licatie
/nstantia#a meniul principal si e-ecuta acest meniu cat timp nu s7a e-ecutat comanda e-it a meniului principal. (entru aceasta clasa se folosesc fisierele: aplicatie.hJcpp Declaratii anticipate: Deoare Meniu(rincipal se afla in su 7spatiul de nume ./ declaratia anticipata tre uie sa contina si spatiul de nume:
namespace UI N class :eniu!rincipal; O

Atribute private:
UI??8eniu(rincipal **p8eniu pointer la meniul principal.

Metode publice:
#plicatie( aloca meniul principal ,#plicatie( dealoca meniul principal

void Run():
cat timp _p:eniu->3xit() este false _p:eniu->3xecute()

2., F nctia main


se instantia'a app de tipul "plicatie se apelea'a app/Hun() se retunea'a

1$

Adonis Butufei

' DIRECTOARELE SI FISIERELE PROIECTULUI


Director Calculator Fisierere main.cpp aplicatie.6?cpp fisierele solutiei si proiectului create de "isual C22 Calculator@Calcule com inatorial.6?cpp e-ceptii.6 operatii.6 siruri.6?cpp Calculator@./ cmdaritmetice.6 cmdcom inatorial.6 cmde-it.6?cpp cmdsiruri.6 comanda.6?cpp meniucom inatorial.6?cpp meniu.6?cpp meniuoperatiiaritmetice.6?cpp meniuprincipal.6?cpp meniusiruri.6?cpp

1&