Problem e Poo

32
No. 1 2 3 4 5 6 7

description

popopoo

Transcript of Problem e Poo

Page 1: Problem e Poo

No.

1

2

3

4

5

6

7

Page 2: Problem e Poo

8

9

10

11

Page 3: Problem e Poo

12

13

Page 4: Problem e Poo

14

15

Page 5: Problem e Poo

16

17

Page 6: Problem e Poo

18

19

Page 7: Problem e Poo

20

21

22

Page 8: Problem e Poo

23

Page 9: Problem e Poo

Problema

Scrieti o aplicatie in C++ pentru un calculator plugin-abil.Calculatorul are o lista de functii pe care le poate efectua pentru operatii binare si unare.O functie este o clasa derivata din urmatoarea clasa de baza:class FunctieCalculator{ char *name; bool Unara;public: virtual double OperatieBinara(double x,double y) { return 0; } virtual double OperatieUnara(double x) { return 0; }}Definiti acest calculator ca un sistem pluginabil care sa suporte urmatoarele pluginuri:a) binare: adunare, scadere, inmultire, impartire, rest, ridicare la putereb) unare: sin, cos, tan, radical,Scrieti o aplicatie C++ care sa imite comportamentul unui termometru digital. In functie de variatiile de temperatura citite dintru fisier sau de la consola sa fie capabil sa afiseze atat la consola cat si intr-un fisier "Warnings.txt" mesaje sugestive cu privire la schimbarile climatice. De exemplu daca temperatura citita este < 0 grade Celsiul sa afiseze "Pericol de polei". Similar modelati alte 4 cazuri. Se va avea in vedere sablonul de proiectare Observer.

Scrieti o aplicatie C++ capabila sa modeleze un sistem bancar. Mai exact aplicatia sa poata permite urmatoarele: - adaugarea/stergerea unui client;- crearea/stergerea unui cont bancar pentru un client;- depunerea unei sume de bani intr-un cont al unui client;- retragerea unei sume de bani din contul unui client;- simularea dobanzii (presupunem o valoare fixa de 10%/luna a dobanzii si vom simula trecerea timpului prin introducerea unei date calendaristice de forma zz/ll/aa; dobanda va fi calculata prin raportarea la numarul de luni care au trecut de la data curenta);- la final sa fie scris intr-un fisier "bilant.txt" numarul total al tranzactiilor, operatiile corespunzatoare de depunere/retragere (de tipul: "depunere 50"/"extragere "30"), cat si soldul curent pentru clientul respectiv.- evidentiati sabloanele de proiectare utilizate.- utilizatorul poate decide ce produse finite sa produca din resursele primare existente- sistemul va intra in exceptie cand se cere produs finit pentru care nu mai sunt resurse- de asemenea cand se cere produs finit pentru care nu ajung resursele, sistemul va sugera ce resurse sunt necesare

Scrieti o aplicatie C++ care sa modeleze jocul Hangman (Spanzuratoarea). Computerul va alege un cuvant la intamplare dintr-o lista predefinita de cuvinte (words.txt) care va reprezenta solutia curenta a jocului. In acelasi fisier va fi trecut si numarul maxim de incercari disponibile. Jucatorul incearca sa ghiceasca cuvantul litera cu litera. Daca litera ghicita are mai multe aparitii, atunci toate aparitiile vor fi afisate. Jocul va fi castigat daca jucatorul ghiceste toate literele cuvantului inainte sa depaseasca numarul maxim de incercari. Pe parcurs va fi afisata starea curenta a cuvantului care trebuie ghicit, iar la final va fi afisat un mesaj sugestiv si scris intr-un fisier numarul de incercari consumate.

Scrieti o aplicatie C++ care sa modeleze un MediaPlayer. Acesta va putea fi capabil sa suporte doua formate: AVI si MP4. Oferiti o implementare pentru acest concept folosind sablonul de proiectare "Adapter" si urmatoarea diagrama de clase (vezi coloana Observatii). In "AdapterPatternDemo" in main() vor fi citite dintr-un "playlist.txt" diferite fisiere cu extensia .avi/.mp4, iar la consola va fi afisat un mesaj sugestiv cu numele fisierului citit si tipul acestuia.

Scrie i un program de tip consolă cu arhitectura MVC pentru determinarea costurilor unei firme de transport.țSe vor putea calcula costurile de transport între două ora e, identificate prin nume, latitudine i longitudine.ș șAplica ia permite două roluri cu func ii diferite: ț ț - utilizator: afisare cost ruta, listarea tuturor ora elorș - administrator: afisare cost, adaugare ora , tergere ora , modificare pre /kmș ș ș țOra ele vor fi salvate i încărcate dintr-un fi ier la fiecare rulare iar în memorie se vor stoca folosind vector sau ș ș șlist din STL

Page 10: Problem e Poo

Simulati o bursa de actiuni. La o bursa pot fi tranzactionate diverse actiuni. Actiunile corespund unor companii si au un pret curent. Pretul poate fluctua de-a lungul unei zile. Utilizatorii pot vinde si cumpara actiuni. Ei pot observa modul in care actiunile cresc sau scad pe o anumita perioada de timp. Utilizatorii pot vizualiza un raport (grafic, tabel) despre o anumita actiune pe o perioada de timp. Raportul este in mod automat actualizat cand noi informatii sunt disponibile. Cand o actiune a ajuns la un anumit pret, utilizatorii interesati sunt anuntati automat.Utilizatorii pot lansa ordine pe actiuni. Ordinele contin pretul actiunii, sensul (vanzare sau cumparare) si numarul de actiuni. Utilizatorul poate vizualiza lista de ordine, poate cauta un ordin dupa diverse criterii, poate modifica si anula un ordin. Pentru fiecare utilizator se va retine actiunile detinute si se va calcula profitul sau pierderea. Utilizati sabloane de proiectare in rezolvarea problemei.

Realizati o aplicatie care creaza facturi pentru clientii unei companii. Facturile sunt trimise clientului la o adresa specificata. Clientul trebuie sa plateasca valoarea facturii pana la o anumita data, altfel sunt posibile penalizari. Clientul trebuie sa poata vedea informatii detaliate despre articolele pentru care este facturat (spre exemplu: costul unui obiect, impozitul, cantitatea, etc). Exista diverse tipuri de articole. Produsul este cel mai simplu tip de articol. Compania poate vinde pachete de articole conexe (spre exemplu, un calculator cu unitate, monitor, boxe). Un alt exemplu sunt serviciile. Serviciile nu sunt taxabile. Taxele pe produs pot varia. Clientul poate beneficia de reduceri. Factura poate avea diverse tipuri de formatari.Utilizati sabloane de proiectare in rezolvarea problemei.

Implementati un sistem de control pentru lifturi. Sistemul de control poate lucra cu unul sau mai multe lifturi.Acesta detine informatii despre starea curenta a fiecarui lift (spre exemplu, stie etajul curent la care este localizat fiecare lift). Fiecare etaj are unul sau mai multe butoane pentru a chema liftul. Un lift se poate deplasa in sus si in jos, la nivelul dorit de catre client.Utilizati sabloane de proiectare in rezolvarea problemei.

Realizati o aplicatie pentru un sistem de rezervari a biletelor pentru diverse evenimente. Aplicatia poate gestiona diferite tipuri de evenimente; spre exemplu, un spectacol de opera, de teatru, filarmonica, concert, etc. Fiecare eveniment este identificat printr-o descriere, o perioada de timp in care va avea loc evenimentul, pretul biletelor pentru diferite asezari, etc. Un utilizator poate realiza o rezervare la un anumit eveniment pentru una sau mai multe persoane. Utilizatorul poate alege locul dorit in sala, tipul de bilet (adult/student/copil), perioada desfasurarii, etc. In situatia in care nu exista bilete pentru perioada respectiva, un alt eveniment poate fi sugerat. O rezervare poate fi platita online sau la agentie. O rezervare poate fi modificata sau anulata. Utilizati sabloane de proiectare in rezolvarea problemei.

Page 11: Problem e Poo

Realizati o aplicatie pentru evidenta agajatilor intr-o firma.

Functiile angajatilor sunt organizate intr-un sistem ierarhic, acestea putand fi muncitor sau manager.Un manager poate fi CEO, Sef departament sau Team leader iar un muncitor nu are nici un subordonat.

Toti angajatii pot avea subordonati un numar oarecare de angajati de pe nivelul urmator din ierarhie.(ex: un Sef departament poate avea subordonati mai multi team leaderi)

Fiecare angajat va avea un Nume, Salariu, Functie, Departament si lista cu angajatii subordonati.

Aplicatia trebuie sa permita urmatoarele actiuni:

- afisarea informatiilor despre toti angajatii - afisarea sumei salariilor pe - angajarea unei persoane in firma (manager sau muncitor) (va fi atribuit unui manager) - concedierea unei persoane - modificarea salariului unui angajat - actualizarea salariilor (media salariilor subordonatilor unui manager trebuie sa fie maxim 70% din salariul acestuia)

Utilizati sabloane de proiectare in rezolvarea problemei.

Realizati un sistem responsabil cu managementul drepturilor asupra unui director cunoscut. Aplicatia va gestiona drepturile de acces a mai multor utilizatori, in functie de tipul acestora ( administrator, utilizator obisnuit, vizitator). Ea va permite operatii diferite, in functie de tipul utilizatorului: - administratorul va putea crea/sterge/edita conturi pentru utilizatorii normali si vizitatori si va putea vedea lista de utilizatori care doresc acces si tipul pe care il doresc ( utilizator normal/vizitator)- un utilizator normal poate vizualiza continutul directorului, crea fisiere, edita si sterge fisiere existente in director- un vizitator poate vizualiza continutul directorului si poate face cautari in director( dupa nume, extensie, marime)Precizari:La pornirea aplicatiei, aplicatia incarca automat din fisier( sau baza de date) o lista de utilizatori existenti, printre care obligatoriu si un administrator.Utilizatorul va trebui sa se autentifice ( proces prin care fie este gasit in vectorul de utilizatori, fie trebuie sa isi inregistreze o cerere in care sa specifice username-ul si tipul de drepturi pe care il doreste). Inregistrarea cererii reprezinta adaugarea unei noi linii intr-un fisier text al administratorului, cu informatiile cerute. Dupa autentificarea corecta, utilizatorul vizualizeaza un meniu corespunzator cu drepturile lui.Toate evenimentele pe care le fac utilizatorii trebuie inregistrate intr-un fisier. Acest fisier trebuie sa contina 1 eveniment/rand, fiecare rand fiind compus din id-ul utilizatorului, tipul utilizatorului, actiunea realizata, timpul la care s-a realizat actiuneaAplicatia poate avea un singur administratorLa inchiderea aplicatiei, lista de conturi curenta trebuie sa fie salvata intr-un fisier sau o baza de date.Implementarea va include sabloane de proiectare

Page 12: Problem e Poo

Realizati o aplicatie care sa permita managementul calatoriilor unei persoane. O calatorie poate fi realizata cu masina, cu trenul sau pe jos.Aplicatia trebuie sa permita:- cautarea dupa punctul de pornire, destinatie, tipul calatoriei, numarul de kilometri parcursi- realizarea de rapoarte referitoare la : cati kilometri s-au parcurs pe luna sau pe tipul de calatorie- afisarea destinatiilor in ordinea descrescatoare popularitatii- adaugarea unei noi calatorii. Daca o calatorie pe acelasi traseu exista, utilizatorul va fi informat de diferenta dintre timpul necesar pentru prima calatorie si cel necesar pentru calatoria noua ( de exemplu, daca deja avem o calatorie cu masina pe ruta Iasi-Vaslui ce a durat 1h si noua calatorie de acelasi tip, pe aceeasi ruta dureaza 50 minute, utilizatorul va vedea un mesaj care sa il anunte ca a 2a calatorie a fost mai scurta cu 10 minute)- stergerea unei calatorii.La deschidere, lista de calatorii va fi populata dintr-un fisier dat de utilizator. La inchidere, lista de calatorii va fi salvata intr-un fisier dat de utilizator.Nu putem avea mai multe liste de calatorii.In implementare, trebuie sa se regaseasca minim 2 sabloane de proiectare

Sa se scrie o clasa Canvas care permite utilizarea diverselor primitive grafice in felul urmator:Avem urmatoarele clase:class Shader {public: virtual void Convert(double &x,double &y,unsigned int &color) = 0;};enum ParmTypes { CHAR,SHORT,INT,DOUBLE };struct Parametru{ ParamType type; union u { char charValue; short shortValue; int intValue; double doubleValue; };}class Primitiva {public: virtual const char* GetName() = 0; virtual unsigned int GetParametersCount() = 0; virtual void Draw(Parametru *p,unsigned int count) = 0;}class Canvas { // variabile privatepublic: void Create(int width,int height); void Clear(unsigned int color); void RegisterPrimitiva(Primitiva *p); void Draw(char *numePrimitiva,...); void Save(const char *fileName); void AddShader(Shader *s);};Culoarea unui punct e definita ca un unsigned int (ARGB cu canalele Alpha, Red, Green si Blue) pe 8 biti.Un Shader este un obiect care permite transformarea unui punct in alte coordonate sau a unei culori in alta culoare.Shaderii functioneaza ca o lista - un punct trece prin toti shaderii inainte sa fie randat pe canvas.Realizati clasa Canvas si clase derivate din clasa Primitiva pentru Linie, cerc, dreptunghi, punct.Realizati Shaderi pentru rotatie, translatie, flip, colorare grayscale, sepia.Salvarea se va face in format BMP - windows 24 biti (fara canalul alpha).

Exemplu:Canvas c;c.Create(400,400);c.RegisterPrimitiva(new Cerc());c.RegisterPrimitiva(new Linie());c.RegisterPrimitiva(new Dreptunghi());c.AddShader(new Rotate45GradeShader());c.AddSgader(new GrayScaleShader());c.Draw("cerc",10,10,100); // x,y, razac.Draw("linie",0,0,40,40); // linie de la 0,0, la 40,40c.Save("rezult.bmp");

Page 13: Problem e Poo

Realizati o clasa list folosind template-uri care este similara cu clasa vector din stl.Clasa trebuie sa suporte adaugari de date,inserari, push/pop, stergere, index, sortare, merge cu alta clasa, intersectie,reuniuni, cautare, iterator.initializarea se face folosind template-uri pentru tipul obiectului si o clasa care sa permita operatiile de comparatie intre obiecte.Exemplu:template<class tip> class IComparable{public: virtual int Compare(tip t1,tip t2) = 0;};template<class tip,class TypeComparator> class List{ TypeComparator compar;public: // functii};class IntComparator: IComparable<int>{public: int Compare(int t1,int t2) { return t1-t2; }};int main(){ List<int,IntComparator> i; i.Push(...);}

Scrieti un program care sa implementeze un sistem de gestiune a bazelor de date simplu.

Programul va permite urmatoarele actiuni, prin intermediul unor comenzi asemanatoare cu cele din limbajul SQL: - crearea/stergerea unei noi tabele (CREATE TABLE ...) *datele dintr-o tabela pot avea urmatoarele tipuri: INT, DOUBLE, STRING, BOOL, DATE - modificarea unei tabele prin adaugare/eliminare de coloane (ALTER TABLE ...) - selectarea randurilor dintr-o tabela care indeplinesc anumite conditii (SELECT coloane FROM tabel WHERE conditie_indeplinita) - stergerea randurilor dintr-o tabela care indeplinesc anumite conditii (DELETE ...) - inserarea de noi randuri intr-o tabela (INSERT INTO tabel (camp1, camp2 ...) VALUES (val1, val2...)) - afisarea datelor din baza de date se va putea face si sortat dupa un anumit camp (SORT BY camp ASC/DESC)

- se vor folosi fisiere pentru salvarea si restaurarea continutului bazei de date - in rezolvarea problemei se vor folosi containere din STL si sabloane de proiectare

Page 14: Problem e Poo

Realizati un model de clasa definita dinamic.Definim initial urmatorul tip de functie:typedef void (*Function)(Instance *,...);typedef void (*Constructor) (Instance*);enum SimpleTypes { Integer, Float, String };enum AccessRight { Public, Private };Definiti urmatoarele clase:* Class (obiect) care sa suporte urmataorele functii: - SetName(char *name); - AddMember(char *nume,SimpleTypes type,AccessRight ar); - AddFunction(char *nume,Function functionPtr); - AddDefaultConstructor(Constructor constructorPtr); - DeriveFrom(Class &); - CreateInstance() - creaza un obiect de tipul Instace pentru clasa* Instance (reprezinta o instana a unui obiect de tipul Class) Trebuie sa suporte urmatoarele functii - SetString(char *memberName,char *value); - SetInt(char *memberName,int value); - SetFloat(char *memberName,float value); - GetString(char *memberName); - GetInt(char *memberName); - GetFloat(char *memberName); - Invoke(char *functionName,...); - CastTo(char *baseClass); - GetType() -> returneaza tipul (numele dat in obiectul class) Functiile Getxxx functioneaza indiferent de modificatorul de access. Functiile Setxxx functioneaza doar pe variabile publice;Exemplu:void Constructor(Instance *i){ // cod de initializare} void SeteazaX(Instance *i,int newValue){ // seteaza pe X din i}void main(){ Class c; c.SetName("Punct"); c.AddMember("x",Integer,Privat); c.AddMember("y",Integer,Public); c.AddDefaultConstructor(Constructor); c.AddFunction("SeteazaX",SeteazaX); Instance pct1; pct1 = c.CreateInstance(); pct1.SetInt("y",100); pct1.SetInt("x",20); // eroare pentru ca X e private pct.Invoke("SeteazaX",20); printf("X = %d, y=%d",pct1.GetInt("x"),pct1.GetInt("y"));}

Creati o aplicatie care sa defineasca notiunea de smart-pointer in felul urmator.Fie clasa Object care contine un pointer, un counter si alte variabile aditionale.Pointerul puncteaza catre zona efectiv de date (spre o clasa instantiata).Counterul spune de cate ori acel obiect este referentiat de catre alte obiecte.Orice clasa pe care o creati se va deriva din clasa Object (sau creati un wrapper a.i.clasa nou obtinuta sa fie derivata din clasa Object si sa aiba ca si membru un obiect din clasa pe care vroiati sa o faceti).Creati si un obiect de tip Factory care sa permita urmatoarele:* sa inregistrati o clasa* sa creati o clasa (echivalentul functiei new)* sa apelati garbage colectorul Toate clasele create se mentin intr-o lista in cadrul clasei Factory.Garbage colectorul cand este apelat sterge din lista acele clase care au conterul = 0.O clasa cand este creata primeste counterul egal cu 1.Suprascrieti si operatorul = din clasa Object a.i. ori de cate ori se face o asignare sa nuse transfere continutul ci doar un pointer catre continut si sa se incrementeze counterul.Apelul destructorului precum si utilizarea operatorului de egaliate cu valoare NULL decrementeaza conterul.

Page 15: Problem e Poo

Create un obiect de tipul HashTable folosind template-uri.Definitia va fi de tipul urmator:* HashTable<tip>* cheia in dictionar se considera implicit a fi de tipul (char*)Obiectul trebuie sa suporte urmatoarele functii:* indexare HashTable[cheie] = valoare* citire HashTable[cheie]* Contains(cheie)* Contains(valoare)* Clear - va sterge elementele din HashTable* Union(HashTable) - permite unificarea / merge-ul cu un alt HashTable. Functia returneaza eroare daca exista aceeasi cheie la cele doua obiecte.

Realizati un program care sa simuleze un campionat de fotbal.Campionatul presupune 3 ligi (A,B si C) cu n echipe de fotbal in fiecare liga.Numarul de echipe de fotbal este configurabil per liga. La fel, si numarul de echipe care promoveaza/retrogradeaza este configurabil.Fiecare echipa este definita printr-un nume, o suma de bani pe care o are la dispozitie,punctajul acumulat (golaveraj, puncte, etc) si o lista de persoane ale echipei.Definim clasa Person ca o clasa de baza. O echipa contine o lista de obiecte de tip Person.Din clasa Person derivam:* clasa Jucator* clasa Antrenor* clasa Medic* clasa Manager* clasa PersonalAjutatorSimulati o astfel de infrastructuri cu tot cu programarea jocurilor si evaluarea unor rezultate in functie de Jucatorii din fiecare echipa.Utilizati MVC.

Scrieti un program care sa realizeze teste de tip grila.

Intrebarile si variantele de raspuns vor fi preluate dintr-un fisier text. In fisier vor fi mai multe variante de raspuns pentru o intrebare dar programul va afisa, aleator, doar 4 dintre acestea.Printre variantele afisate de program pot fi 0, 1 sau mai multe raspunsuri corecte.

Programul va afisa 10 intrebari alese aleator din fisier cu variantele de raspuns corespunzatoare si la final va afisa nota obtinuta de utilizator.

Programul va face distinctia intre un utilizator obisnuit care poate doar sa raspunda la intrebarile afisate, si administrator, care poate prin intermediul unui meniu sa: - adauge si sa stearga intrebari - modifice raspunsurile pentru o intrebare existenta - salveze modificarile in fisier

Folositi principii POO in rezolvarea problemei.

Page 16: Problem e Poo

Realizati o clasa care sa modeleze un snack automat.Un automat este definit de un ID unic, Nume, si un numar fix de rafturi.Automatul va avea mai multe rafturi, fiecare raft continand doar produse de acelasi tip.Pot exista mai multe rafturi cu acelasi tip de produs.

- un raft are o capacitate limitata de stocare. - un produs este definit de Nume si Pret

Se vor defini 2 tipuri de utilizatori: administrator si client.

Administratorul - creeaza o serie de automate (cu un id, nume si un anumit numar de rafturi) - alimenteaza rafturile automatelor cu un anumit numar de produse - modifica pretul unui produs - poate vizualiza alertele aparute si incasarile pentru fiecare automat

Clientul - vede lista automatelor disponibile - poate vedea lista produselor existente pe rafturile unui automat - poate cumpara produse de pe rafturi

Va exista un fisier incasari.txt in care vor fi trecute pe linii id-ul unui automat si cat s-a incasat pana acum de la acesta; de fiecare data cand se cumpara un produs de la un automat, acest fisier va fi actualizat corespunzator.

De asemenea, daca dupa ce se cumpara un produs, stocul de pe un raft devine 0, fisierul alerte.txt va fi actualizat, adaugandu-se o linie in care va fi specificat id-ul automatului si numarul raftului pentru care stocul este 0.

Administratorul va putea vizualiza alertele grupate pe id-uri de bancomate.

Utilizati sabloane de proiectare in rezolvarea problemei!

Page 17: Problem e Poo

Punctaj

A

A

BA

B

A

A

Page 18: Problem e Poo

B

B

A-B

A-B

Page 19: Problem e Poo

A-B*

B-C*

Page 20: Problem e Poo

A-B*

B

Page 21: Problem e Poo

B

C

Page 22: Problem e Poo

C

B

Page 23: Problem e Poo

A

B - (C)

A

Page 24: Problem e Poo

A-B*

Page 25: Problem e Poo

Observatii

link la schematics:http://students.info.uaic.ro/~vcraciun/probl1.png

double Distance(City c1, City c2) { double a1 = c1.Latitude * PI / 180.0; double b1 = c1.Longitude * PI / 180.0; double a2 = c2.Latitude * PI / 180.0; double b2 = c2.Longitude * PI / 180.0; const double EarthRadius = 6378; // raza Pamantului in km return (EarthRadius * acos(cos(a1) * cos(b1) * cos(a2) * cos(b2) + cos(a1) * sin(b1) * cos(a2) * sin(b2) + sin(a1) * sin(a2))); }

Page 26: Problem e Poo
Page 27: Problem e Poo

*in func ie de abloanele de proiectare folositeț ș

*daca folosesc baze de date

Page 28: Problem e Poo

In functie de sabloanele de proiectare folosite

Page 29: Problem e Poo
Page 30: Problem e Poo
Page 31: Problem e Poo

(C) doar daca este facut foarte complex (eventual si o interfata grafica, etc)

Page 32: Problem e Poo

*in functie de sabloanele de proiectare folosite