rolisz's site

Subiecte OOP

Profesor: Czibula Istvan

[gallery ids="3476,3477,3478"]

[gview file="/static/images/2013/06/scrisOOP18.pdf"]

Thanks again to Gogoașă

Mi lene să le mai transcriu. Aveți și voi built-in OCR.

2012, profesor Ioan Lazăr.

Restanță:

Feast yer eyes.

Thanks Andrei!

Scris: 1. int a =1; int b[] = {a}; int *c=&b[0]; int&d = *c; Opțiunile erau erori la linii sau că valoarea lui d este 1.

2. class B{ void print(){ cout<<"B";} }; class D: public B{ void print(){cout<<"D";} };

B b[] = { B(), D()} ; b[0].print(); b[1].print();

Opțiunile erau erori sau afișarea BB sau BD.

3. class B { B() {cout<<"B()";} virtual void print(){ cout<<"B";} ~B() { cout<<"~B()"; } }; class D: public B { D() {cout<<"D()";} virtual void print(){ cout<<"D";} ~D() { cout<<"~D()"; } };

D d; B* [] = { new B(); &d}; b[1].print(); delete b[0];

Erori sau ce afișează

4. class Error{ Error() { cout<<"Error()";} Error(const Error&) { cout<<"const Error&" } ~Error(){cout<<"~Error()";} }; bool foo(int*a, int n){ if (n<=0) throw Error(); else return true; } int main() { v[] = {}; try{ foo(v, sizeof(v)/sizeof(int)); } catch(Error e){ } } Ghici care erau opțiunile. 5. Se dau clasele Integer { ... } şi Vector { ... }. Vector să conțină maxim 16 Integer-uri și următoarea secvență de cod să fie validă:

Vector v; v.push_back(Integer(1)); v.push_back(Integer(2)); for(int i=0;i<v.size();i++) cout << v[i];

6. Un Quack­ol­o­gist trebuie să studieze nişte raţe şi gâşte dinaştea. Red­head­duck printează "quack" şi gâsca face "honk". Scrieți cod care să bage în simulator: o raţă redhead, un flock de două raţe redhead, un flock de o gâscă şi un alt flock de 2 raţe roşii, „şi se specifica să se aibă grijă cum se dezalocă memoria, adică trebuia făcut de­struc­toru virtual”. Trebuia im­ple­men­tat și codul pentru clase.

ROFLMAO

La practic: Ca la 211, doar că erau ap­pointem­n­turi in loc de taskuri. În loc de total de ore, se im­ple­mentează operația de ștergere.

Thanks Cristi and Cami!

La scris nu mi-a ieșit bine poza, așa că voi scrie din amintiri doar :)))

1. int a = 1; int& b=a; int* c=&b; int x = *c; Erau patru opțiuni, câte una pentru eroare la fiecare linie, sau că x ia valoarea 1.

  1. Se dădeau două clase, din care una moștenea din cealaltă și aveau ambele aceași metodă. Se crea apoi o instanță a clasei fiu, se trecea la o referință de tip clasa părinte, și se apela funcția comună. Ce se afișează?

3. Ca mai sus, doar că în clasa părinte funcția era virtual.

4. Ceva cu excepții, ordinea de apel a con­struc­to­rilor și de­struc­to­rilor.

5. Să se im­ple­menteze pe foaie un vector generic de maxim 16 elemente, cu două funcții, adăugare și operatorul de indexare.

6. Se dădea o diagramă UML, spor la scris cod. Cel mai tare: era un câmp int ore, și pe foaie cerea să se adauge 1 1/2 ore =))))

La practic: Scrieți un program pentru gestiunea sarcinilor (Task) pe care le aveți de făcut, astfel:

  1. La lansarea în execuție, se citesc sarcinile dintr-un fișier text (via TaskRepos­i­to­ry).
  2. Task-urile sunt prezentate într-o listă sau tabel în interfața utilizator grafică MyTasks.
  3. Taskurile prezentate vor fi sortate după nume.
  4. Interfața utilizator va arăta și un text cu suma orelor (Task.hours) tuturor taskurilor.
  5. Lista sau tabelul folosit de MyTasks va fi bazat pe modele
  6. Pentru în­reg­is­trarea unor taskuri noi, uti­liza­torul folosește aceași fereastră, introduce numele taskului (Task.name), numărul de ore (Task.hours) și de­clanșează o acțiune „add task”. Task-ul va fi adăugat imediat în fișierul din care s-au citit inițial taskurile.
  7. Taskurile vor avea id-uri unice, generate automat de către aplicație, mai precis de TaskRepos­i­to­ry
  8. Numărul orelor unui task trebuie să fie un întreg strict pozitiv, validare im­ple­men­tată în Task
  9. După adăugarea unui task - a se vedea (6), lista sau tabelul din interfață se va actualiza - a se vedea (2)
  10. De asemenea, și suma orelor va fi ac­tu­al­iza­tă după adăugare - a se vedea (4)
  11. Tentatica de adăugare a unui Task invalid în Task Repository va eșua și va fi raportată de către TaskRepos­i­to­ry folosind excepții.

Barem: Oficiu 1p; Ver­i­fi­carea im­ple­men­tării: 11*0.5p = 5.5p, Inspectare cod: 3.5p.

Rezolvare practic: Aici.

Am făcut un simple POS app în Qt, cu toate operațiile CRUD. Eu am lucrat în Visual Studio 2010 și ex­e­cutabilul nu îmi rulează decât de acolo. Dacă cineva ar fi drăguț să facă un fork pe GitHub și să adauge un executabil standalone, i-aș fi re­cunoscă­tor. Codul nu este prea comentat :-", dar sper să înțelegeți. Dacă nu, ask away.

Codul este pe GitHub.