C++

Why C++

Inregistrarea si prezentarea sunt disponibile pe http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C

Reprogramare test seria Informatica Engleza

Pentru grupele 1062, 1063, 1064 si 1065 testul se amana pentru luni, 25 noiembrie 2019, incepand cu ora 13:30.

Program test practic laborator

Studentii din anul 3 sau anul suplimentar, care recupereaza seminarul de POO, vor sustine testul pe 25 noiembrie 2019 dupa programul urmator

*Studentii care nu pot ajunge la ora programata si vor sa sustina testul la ora 7:30 sau nu se regasesc in lista urmatoare sunt rugati sa completeze urmatorul formular: solicitare sustinere test

Repartizarea grupelor de anul 2 pe sali si intervale orare pentru luni, 18 noiembrie 2019

Sala 2001A Sala 2017 Sala 2001D Sala 2016
Grupa 1 Grupa 2 Grupa 3 Grupa 4 Grupa 5 Grupa 6 Grupa 7
7:30 - 9:00 1050 1059 1045 1057 1060
9:00 - 10:30 1048 1054 1037 1038 1040 1044 1047
10:30 - 12:00 1056 1058 1046 1053
12:00 - 13:30 1052 1055 1042 1043 1036 1039
13:30 - 15:00 1062 1063 1064 1065 1061

Urmatoarele grupe de anul 2 vor sustine testul in cadrul seminarului (studentii din anul 3 sau anul suplimentar vor sustine luni, pe 25 noiembrie 2019):

  • 1041, Mar?i, 13:30, coordoantor, Prof. Paul Pocatilu
  • 1049, Miercuri, coordonator Asist. Madalina Zurini-Doinea
  • 1051, Miercuri, coordonator Asist. Madalina Zurini-Doinea

Recuperare seminar grupa 1052

Seminarul este programat pentru 11 noiembrie 2019, ora 10:30, sala 2017

Curs suplimentar seria Informatica Engleza

Cursul este programat pentru 11 noiembrie 2019, ora 16:30, sala 2017

Refacere seminar pentru studentii din anul 3 si anul suplimentar

Studentii care nu au promovat disciplina in anii anteriori trebuie :

  • sa refaca toate activitatile de la seminar si curs in anul universitar 2019-2020
  • sa se implice in activitatile din timpul anului deoarece punctele acumulate in anii anteriori NU se pastreaza
  • sa verifice conditiile valabile in anul universitar 2019-2020 (descrise in fisa discipline)
  • sa participe la activitati de seminar si curs alaturi de studentii din anul 2

Repartizarea studentilor din anul 3 sau anul suplimentar pe grupe de anul 2

  • tebuie completat formularul https://forms.gle/1rueFzGxX41ki5wn9 in primele 3 saptamani din semestrul I, 2019-2020 (Formularul a fost dezactivat pe 22.10.2019, ora 21:00)
  • repartizarea stundentilor s-a facut in functie de optiunile transmise prin formularul electronic (grupa indicata in formular), fara a accepta mai mult de 15 solicitari per grupa (limita este impusa pentru a permite buna desfasurare a activitatilor de la seminar)
  • in situatia in care a fost depasit numarul maxim de solicitari, studentii sunt repartizati la alte grupe in functie de momentul completarii formularului si in functie gradul de incarcare a celorlate grupe;
  • studentii sunt rugati sa treaca, in primele 3 saptamani, pe la seminarul grupei unde au fost repartizati (sau unde au ales sa refaca seminarul) pentru a fi inscris pe platforma http://online.ase.ro de catre coordonatorul de seminar
  • fiecare student va incarca eventualele faze ale proiectului si eventualele teme pe platforma http://online.ase.ro in cadrul grupei in care a fost insris(a) de catre coordonatorul de seminar

Program consultatii 

  • Boja Catalin
  • Alin Zamfiroiu
  • Paul Pocatilu
  • Iancu Bogda
  • Doinea-Zurini Madalina

Pregatire practica pentru examen

Pregatire parte teoretica

Model subiect examen

Fisa disciplinei pentru anul universitar 2019-2020

Fisa disciplinei in limba romana - PDF

Fisa disciplinei in limba engleza - PDF

Barem general de evaluare curs si seminar

  • 20% din nota finala - lucrare laborator
  • 15% din nota finala - activitati seminar (teme, participare activa)
  • 15% din nota finala - test grila in ultimele 3 saptamani din semestru
  • 50% din nota finala - examen oral la calculator

Pentru evaluarea generala sunt considerate urmatoarele:

  • Conform fisei de disciplina, evaluarea in examinare are ponderea de 50%, iar nota de seminar are ponderea de 50%. Nota finala = (50/100 * Nota_Examen) + (50/100 * Nota_seminar_laborator).
  • Pentru promovare nota din examinarea din sesiune trebuie sa fie minim 5, iar nota finala dupa ponderare (examen + seminar) sa fie minim 5 (cu rotunjire normala).
  • Temele sau Proiectul (individual sau in echipa) este obligatoriu de sustinut ca si conditie necesara pentru promovabilitate.
  • Intrarea in examen este conditionata de obtinerea a minimum 2 puncte la seminar (din maxim 5)
  • Fiecare cadru didactic de la activitatea de seminar/laborator isi stabileste propria metoda de evaluare si ponderi interne, dar exista minim o lucrare pe parcursul semestrului, un test grila si un proiect/teme, iar la final, cadrul didactic coordonator de curs primeste o nota de evaluare de la seminar cuprinsa intre 0 (Absent) si 10.

  • Conditii obligatorii pentru promovarea examenului:
    • pentru toate punctele de evaluare (inclusiv nota 5) ca sa existe implementarea atat a elementelor cerute, cat si exemplificarea pentru apelul lor in functia "main()" / metode apelatoare. Tot obligatoriu, pentru fiecare punct din barem, este INEXISTENTA ERORILOR de compilare si link-editare a solutiei. De asemenea, pentru fiecare punct este obligatorie si necesara abilitatea de a lucra in mediu Visual Studio .NET si de a depana programe - intelegerea stivei de proces si segmentelor de date, precum si vizualizarea variabilelor in mediu la momentul depanarii. In evaluarea la examen cadrele didactice pot cere studentului evaluat sa reimplementeze oricare punct din biletul de examinare, avand ecranul gol in proiectul dezvoltat (inclusiv pentru nota 5).
    • definire completa de clasa si instantiere de obiecte in functie apelatoare "main()". Clasele complete au membrii - câmpuri private cu extensie în memoria dinamica - trebuie implementare de constructor default si cu parametri, constructor de copiere, destructor si supra-încarcarea „operatorului =”.
    • supraîncarcarea operatorilor unari (++,--, etc.), binari (+, -, etc.) cât si a celor care implica implementarea operatorilor „friend”.
    • lucru cu fluxuri de octeti (stream) pentru procesarea fisierelor/consolei + serializarea/deserializarea obiectelor / instantelor din clase.
    • Implementarea de mecanisme de mostenire / derivare si clase abstracte plus „interfete” (clase cu metode/functii virtuale pure) inclusiv cu implementare de polimorfism „pur”.
    • Implementare de clase si functii template / „sablon”.
    • Utilizarea de clase pentru structuri de date standard (STL – Standard Template Library).
    • *optional: se evalueaza inclusiv elemente de tipul Static si dinamic „cast”, mecanisme de tip try-catch, optmizarea utilizarii de memorie (evitarea „memory leak”-urilor si a „dangling-pointer”-ilor) si a vitezei de executie.

Bibliografie

Sursele principale pentru pregatirea examenului sunt resursele bibliografice [SMEU02] si [SMEU01]. Se recomanda studierea si implementarea in programe scrise, compilate si rulate pe calculator a urmatoarelor:

Resurse seminar

Structura materiei pe seminarii
  1. Recapitulare pointeri, concept, pointeri la functii;
  2. Referinte, Macrodefinitii, Transferul parametrilor pentru subprograme, clase, concept, incapsulare, atribute, metode;
  3. Constructori, Destructor;
  4. Constructor copiere, supraincarcare operator =;
  5. Supraincarcare operatori (<<, >>, +, -, *, /, ++, --);
  6. Supraincarcare operatori (+=, [], ( ), !, ->, new, delete, cast);
  7. Derivare/Mosternire
  8. Functii virtuale, supradefinire, mostenire multipla
  9. Clase abstracte, interfete, mecanismul try-catch, domenii de nume;
  10. Operatii I/O orientate pe stream
  11. Clase template, concept, implementare, specializare
  12. STL (Standard Template Library), containere, ieratori si algoritmi
  13. STL (Standard Template Library), RTTI (Run Time Type Identification

Exemplu de clasa implementata in C++

Evaluare seminar

Lucrarea este data la calculator. Un barem orientativ al evaluarii este
  • Nota 1 - Sa se creeze un proiect in mediul Microsoft Visual Studio .NET care sa nu genereze erori la compilare
  • Nota 3 - Sa se defineasca clasa X ce contine diferite atribute (inclusiv constante sau statice) dintre care unul este in mod obligatoriu un pointer (char* sau int *). Pentru acestea sa se defineasca o interfata publica de acces.
  • 1 punct - Sa se defineasca pentru clasa X constructori (implicit si diferite forme cu parametri) si functia destructor
  • 1 punct - Sa se defineasca pentru clasa X constructorul de copiere
  • 1 punct - Sa se supraincarce pentru clasa X operatorul = fara a avea memory leaks
  • 1 punct - Sa se supraincarce operatorul << / >> pentru clasa X
  • 1 punct - Sa se supraincarce operatorul Y2 pentru clasa X
  • 1 punct - Sa se supraincarce operatorul Y3 pentru clasa X
  • 1 punct - Sa se exemplifice elementele implementate in programul principal. Sa fie utilizat Debugger-ul pentru a vizualiza memoria rezervata datelor si pentru a urmari apelurile diferitelor metode

ATENTIE !!! Dupa fiecare etapa, programul trebuie sa compileze si sa ruleze. In caz contrar, se considera neindeplinit primul punct din evaluare.

Operatori luati in considerare: =, ++ si -- in cele 2 forme (post si prefixata), [] (indexare), +,-,*,/, +=, -+, *=,>> si << (stream-uri pentru lucrul cu consola), !, cast la orice tip (implicit si explicit), () (functie), >, <. >=, <=, ==

Data exacta a lucrarii va fi stabilita in saptamana 7 - 8.

Proiecte

Depunerea proiectului (indiferent de punctajul obtinut) reprezinta conditie de intrare in examen. Copierea proiectului in proportie mai mare de 30% conduce la anularea intregului punctaj (lucrare + proiect) de la seminar  si la notificarea Decanatului.

Conditii generale privind realizarea proiectului:

  • proiectul reprezinta o aplicatie executabila (meniul este optional) care testeaza conceptele C++ implementate;
  • proiectul trebuie sa ruleze si sa nu genereze exceptii de executie (atentie la memory-leaks si la valori gestionate prin mai multi pointeri);
  • codul sursa al proiectul trebuie sa fie scris fara erori de compilare;
  • proiectul este dezvoltat in Visual Studio, NetBeans sau Eclipse (NU se accepta Borland C);
  • proiectul se realizeaza individual;
  • proiectul implementeaza clase diferite intre care exista relatii de tip is-a sau has-a
  • NU se folosesc variabile globale sau functii globale;
  • toate entitatile folosite au asociata o clasa; NU exista clase generice ce definesc functii/metode fara o legatura logica cu entitatea definita de clasa;
  • forma finala a proiectele se preda in ultima saptamana;
  • proiectul se realizeaza pe durata semestrului fiind stabilite la seminar conditii si termene intermediare ce trebuie respectate; fiecare faza intermdiara este evaluata si reprezinta pondere din nota finala a proiectului; predarea proiectului doar la final se evalueaza cu 20%;
  • la seminar coordonatorul poate stabili o alta tema insa conditiile generale raman valabile.

Proiectul este predat in format arhivat (.zip) sau intr-un singur fisier sursa (.cpp) pana la data stabilita. Arhiva contine fisierele sursa al programului. Denumirea fiecarui fisier urmareste sablonul [Proiect][grupa][Nume_prenume]_Denumire_particulara_fisier (de. ex. [Proiect][1038][Popescu_Alex]_Clasa_Student.cpp)

Denumirea arhivei/fisierului sursa are forma[Proiect][grupa][Nume_prenume] - [Faza proiect] (Exemplu: [Proiect][1066][Popescu Alexandru] - [Faza 1]). 
Depunerea proiectelor se face prin intermediul unei platforme virtuale ce va face si o verificare anti-plagiarism a codului sursa. Conturile de utilizator vor fi comunicate la seminar.

Specificatii Proiect

Aplicatie pentru gestiunea bugetului. Se inregistreaza cheltuielile pe categorii (alimentare, utilitati etc.). Se pot adauga cheltuieli noi pentru fiecare zi, se pot modifica cheltuielile deja introduse sau se pot sterge. Aplicatia pastreaza istoricul datelor introduse, folosind fisiere text sau binare. Se pun la dispozitia utilizatorului rapoarte de cheltuieli, dupa criterii multiple (total cheltuieli pentru o anumita data, grupate pe categorii sau prezentate individual,  total cheltuieli lunare, anuale, suma medie a cumparaturilor pentru o anumita categorie, etc).

Cerinte proiect - faza 1

* aceste cerinte sunt orientative; la seminar, in functie de situatie, pot fi stabilite impreuna cu profesorul coordonator alte cerinte 

  • Termenul de predare se stabile?te la seminar. 
  • Definirea a minim 5 clase care au legatura cu cerinta proiectului
  • Fiecare clasa trebuie sa contina minim un camp definit dinamic gestionat printr-un pointer si minim un vector definit static; trebuie abordate atat siruri de caractere (char*) cat si vectori de valori numerice
  • In solutie trebuie sa existe minin o clasa ce defineste un camp static si minim o clasa ce defineste un camp constant
  • Toate atributele se definesc pe zona privata a clasei
  • Pentru fiecare atribut se defineste o interfata publica (functii accesor) ce permite citirea si scrierea valorii; functiile de modificare trebuie sa contina minim o regula de validare a valorii
  • Fiecare clasa contine minim 2 metode generice de prelucrare/afisare a atributelor
  • Fiecare clasa contine minim 2 constructori cu parametri, constructor de copiere, destructor si forma supraincarcata a operatorului =
  • Pentru fiecare clasa se supraincarca obligatoriu >> si <<
  • Pentru fiecare clasa se supraincarca obligatoriu:
    • operatorul pentru idexare []
    • minim un operator matematic (+,-,* sau /)
    • ++ sau -- (cu cele 2 forme)
    • operatorul cast (catre orice tip) explicit sau implicit
    • operatorul pentru negatie !
    • un operator conditional (<.>,=<,>=)
    • operatorul pentru testarea egalitatii dintre 2 obiecte ==
  • Toate clasele sunt definite intr-un singur fisier sursa
  • Testarea claselor (metoda main) se gaseste intr-un alt fisier sursa
  • Faza 1 se considera realizata daca sunt implementate cel pu?in 75% din cerinte

Cerinte proiect - faza 2

* aceste cerinte sunt orientative; la seminar, in functie de situatie, pot fi stabilite impreuna cu profesorul coordonator alte cerinte 

  • Se implementeaza un modul prin care aplicatia primeste fisiere de intrare (de tip text) prin argumentele functiei main (exemplu: daca aplicatia se numeste proiectPOO.exe atunci ea este lansata in executie cu comanda proiectPOO.exe facturi.txt cheltuieli.txt; pot fi folosite doar fisiere text)
  • Se implementeaza un modul prin care utilizatorul poate salva datele aplicatiei in fisiere binare. Datele aplicatiei se considera a fi acele date obtinute din fisierele text primite ca argumente pentru main sau date incarcate de utilizatori in timpul sesiunii de lucru. Daca aplicatia nu primeste argumente prin functia main (se lanseaza in executie cu proiectPOO.exe) atunci va accesa fisiere binare aflate la locatii cunoscute de progamator. Fisirele binare permit salvarea tuturor datelor care au fost incarcate in aplicatie prin diferite metode.
  • Entitatile care gestioneaza fisierele si operatiile pe fisiere se implementeaza prin clase (codul sursa prin care sunt accesate fisierele trebuie sa fie inclus in metode care sa apartina unor clase noi adaugate in proiect)
  • Se implementeaza modulul prin care utilizatorul are posibilitatea sa genereze diferite rapoarte pentru toate datele (de ex. lista utilizatori, lista intrebari dintr-o anumita categorie, ierarhii utilizatori, raspunsuri pentru o intrebare, etc ) care sa fie afisate la consola dar si in fisiere text (minim 3 rapoarte)
  • Se implementeaza un modul care sa gestioneze o forma simpla de meniu prin care utilizatorul are posibilitatea sa navigheze prin functiile aplicatiei (dupa ce porneste aplicatia, utilizatorul are posibilitatea de a folosi taste numerice sau de a introduce text prin care sa decida ce functii sa activeze - de ex. sa vada facturile din sistem, sa genereze diferite tipuri de rapoarte, etc)
  • Aplicatia permite incarcarea de date din fisiere CSV (comma separated values);  simbolul ales pentru a separa valorile este ales de programator si este folosit pentru toate fisierele CSV
  • Faza 2 se considera realizata daca sunt implementate cel pu?in 75% din cerinte

Cerinte proiect - faza 3

  • Toate cerintele de la fazele anterioare
  • Implementarea unei clase care sa exemplifice conceptul compunerii claselor (daca nu a fost deja implementata in fazele anterioare)
  • Extinderea claselor definite in fazele anterioare prin adaugarea de atribute noi (necesare in aceasta faza) se face doar prin derivare si NU prin modificarea claselor existente - minim 2 extinderi
  • Se implementeaza minim o clasa abstracta (cu sau fara atribute) ce trebuie sa continta minim 2 metode virtuale pure
  • Se implementeaza minim 2 metode virtuale (altele decat cele virtuale pure)
  • Prin intermediul clasei abstracte sau a unei clase de baza (nou definita sau existenta) se defineste minim o ierarhie care sa descrie o familie de clase (ex. pentru tipuri de cheltuieli, etc); un exemplu de familie de clase definite pentru a descrie forme geometrice 
  • Se implementeaza minim un vector de pointeri la clasa de baza (a ierarhiei) prin care se gestioneaza elemente concrete dintr-o familie de clase (o familie de clase este data de un set de clase aflate in relatii de derivare/mostenire ce au la baza un parinte comun - un exemplu de familie de clase definite pentru a descrie forme geometrice)
  • Se implementeaza un modul prin care utilizatorul poate indica calea completa catre alte fisiere cu date. Aplicatia citeste datele din fisierul indicat si le adauga la cele existente (daca acest lucru nu a fost implementat in faza 2)
  • Aplicatia trebuie sa permita generarea de diferite rapoarte care sa analizeze activitatea utilizatorilor (data mining in seturile de date pentru a extrage informatii cu privire la activitatea utilizatorilor): minim 2 rapoarte.
  • Sa se implementeze din libraria STL cel putin un vector, un set, o lista si un map pentru a gestiona datele aplicatiei
  • Aplicatia trebuie sa ruleze "la cheie" fara a genera erori la executie

* Realizarea proiectul este o activitate care face parte din pregatirea lucrarii si a examenului de la aceasta disciplina. Din acest punct de vedere, este recomandat ca acesta sa includa toate elementele prezentate la curs sau la seminar.