Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Exception {
- private:
- char msg[50];
- public:
- Exception(char * msg = "") {
- strcpy(this->msg, msg);
- }
- void showMessage() {
- cout<<msg;
- }
- };
- class Trud { //Да се имплементира класа Trud
- protected://во која се чуваат информации за: (5 поени)
- char vid; //вид на труд (еден знак и тоа C за конференциски труд, J за труд во списание)
- int godina;//година на издавање (цел број).
- public:
- Trud() {
- this->vid = 'A';
- this->godina = 0;
- }
- Trud(char vid, int godina) {
- this->vid = vid;
- this->godina = godina;
- }
- int getgodina() {
- return godina;
- }
- friend istream &operator>>(istream &i, Trud &t){
- i>>t.vid>>t.godina;
- return i;
- }
- char gettrud() {
- return vid;
- }
- };
- class Student { //Да се имплементира класа Student
- private://во која се чува: (5 поени)
- char ime[30]; //името на студентот (низа од најмногу 30 карактери)
- int indeks; //индекс (цел број)
- int upis; //година на упис (цел број)
- int * lista; //листа на оцени од положени предмети (низа од цели броеви)
- int broj; //број на положени предмети (цел број)
- public:
- Student() {
- strcpy(this->ime , "");
- this->indeks = 0;
- this->upis = 0;
- this->lista = new int[0];
- this->broj = 0;
- }
- Student(char * ime, int indeks, int upis, int * lista, int broj) {
- strcpy(this->ime, ime);
- this->indeks = indeks;
- this->upis = upis;
- this->broj = broj;
- this->lista = new int[broj];
- for(int i=0; i<broj; i++)
- this->lista[i] = lista[i];
- }
- Student(const Student ©) {
- strcpy(this->ime, copy.ime);
- this->indeks = copy.indeks;
- this->upis = copy.upis;
- this->broj = copy.broj;
- this->lista = new int[copy.broj];
- for(int i=0; i<copy.broj; i++)
- this->lista[i] = copy.lista[i];
- }
- Student &operator=(const Student ©) {
- if(this!=©) {
- strcpy(this->ime, copy.ime);
- this->indeks = copy.indeks;
- this->upis = copy.upis;
- this->broj = copy.broj;
- this->lista = new int[copy.broj];
- for(int i=0; i<copy.broj; i++)
- this->lista[i] = copy.lista[i];
- }
- return *this;
- }
- int getupis() {
- return upis;
- }
- int getindeks() {
- return indeks;
- }
- ~Student() {
- delete [] lista;
- }
- virtual double rang() { //функција rang() што пресметува просек од положените испити на студентот (5 поени)
- double total=0.0;
- for(int i=0;i<broj;i++)
- total = total + lista[i];
- return total/broj;
- }
- friend ostream &operator<<(ostream &o, Student &print) { //оператор << за печатење на студентот во формат: (5 поени)
- o<<print.indeks<<" "<<print.ime<<" "<<print.upis<<" "<<print.rang()<<endl;// Индекс Име Година на упис ранг
- return o;
- }
- };
- class PhDStudent : public Student { //Да се имплементира класа PhDStudent во која
- private://покрај основните информации за студентот дополнително се чува: (5 поени)
- Trud * niza; //листа од објавени трудови (динамички резервирана низа од објекти од класата Trud)
- int trudovi; //бројот на трудови (цел број)
- public:
- PhDStudent() {
- this->trudovi = 0;
- this->niza = new Trud[0];
- }
- PhDStudent(char * ime, int indeks, int upis, int * lista, int broj, Trud * niza, int trudovi) : Student(ime, indeks, upis, lista, broj) {
- this->trudovi = trudovi;
- this->niza = new Trud[trudovi];
- for(int i=0; i<trudovi; i++)
- this->niza[i] = niza[i];
- }
- PhDStudent(const PhDStudent ©) : Student(copy) {
- this->trudovi = copy.trudovi;
- this->niza = new Trud[copy.trudovi];
- for(int i=0; i<copy.trudovi; i++)
- this->niza[i] = copy.niza[i];
- }
- PhDStudent &operator=(const PhDStudent ©) {
- if(this!=©) {
- Student::operator=(copy);
- this->trudovi = copy.trudovi;
- this->niza = new Trud[copy.trudovi];
- for(int i=0; i<copy.trudovi; i++)
- this->niza[i] = copy.niza[i];
- }
- }
- ~PhDStudent() {
- delete [] niza;
- }
- PhDStudent &operator+=(Trud &add) { //оператор += за додавање нов објект од класата Trud во листата.
- if(add.getgodina() > getupis()) //Ако се направи обид да се внесе труд што е издаден порано од годината на упис на студентот
- throw Exception("Ne moze da se vnese dadeniot trud\n"); //да се фрли исклучок (објект од класата Exception).
- Trud * tmp = new Trud [trudovi+1]; //Ако бил генерираn исклучок треба да се отпечати
- for(int i=0;i<trudovi;i++) //соодветна порака за грешка "Ne moze da se vnese dadeniot trud",
- tmp[i] = niza[i]; // а новиот труд нема да се внесе во листата на трудови од студентот. (10 поени)
- tmp[trudovi++] = add;
- delete [] niza;
- niza = tmp;
- return *this;
- }
- double rang() { //Начинот на бодување е ист за сите PhD студенти.
- double pt=0.0; //Иницијално да се смета дека конференциски труд
- for(int i=0; i<trudovi; i++) {
- if(niza[i].gettrud() == 'c')
- pt++;//се бодува со 1 поен, а труд во списание со 3 поени.
- else if(niza[i].gettrud() == 'j')
- pt=pt+3;
- }
- return Student::rang() + pt;
- }
- };
- //Универзитетот има можност да ги менува вредностите на бодовите. (5 поени + 5 поени)
- int main() {
- int testCase;
- cin >> testCase;
- int god, indeks, n, god_tr, m, n_tr;
- int izbor; //0 za Student, 1 za PhDStudent
- char ime[30];
- int oceni[50];
- char tip;
- Trud trud[50];
- if (testCase == 1) {
- cout << "===== Testiranje na klasite ======" << endl;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- Student s(ime, indeks, god, oceni, n);
- cout << s;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- cin >> n_tr;
- for (int j = 0; j < n_tr; j++) {
- cin >> tip;
- cin >> god_tr;
- Trud t(tip, god_tr);
- trud[j] = t;
- }
- PhDStudent phd(ime, indeks, god, oceni, n, trud, n_tr);
- cout << phd;
- }
- if (testCase == 2) {
- cout << "===== Testiranje na operatorot += ======" << endl;
- Student **niza;
- cin >> m;
- niza = new Student *[m];
- for (int i = 0; i<m; i++) {
- cin >> izbor;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- if (izbor == 0) {
- niza[i] = new Student(ime, indeks, god, oceni, n);
- } else {
- cin >> n_tr;
- for (int j = 0; j < n_tr; j++) {
- cin >> tip;
- cin >> god_tr;
- Trud t(tip, god_tr);
- trud[j] = t;
- }
- niza[i] = new PhDStudent(ime, indeks, god, oceni, n, trud, n_tr);
- }
- }
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- // dodavanje nov trud za PhD student spored indeks
- Trud t;
- cin >> indeks;
- cin >> t;
- int count=0;
- for (int i = 0; i < m; i++) {
- if(niza[i]->getindeks() == indeks) {
- PhDStudent* p1=dynamic_cast<PhDStudent *>(niza[i]);
- if (p1!=0)
- *niza[i]+=t;
- }
- }
- // vmetnete go kodot za dodavanje nov trud so pomos na operatorot +=
- // Справувањето со исклучокот треба да се реализира во главната
- // функција main каде што е потребно, но и во конструктор ако е потребно.
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- }
- if (testCase == 3) {
- cout << "===== Testiranje na operatorot += ======" << endl;
- Student **niza;
- cin >> m;
- niza = new Student *[m];
- for (int i = 0; i<m; i++) {
- cin >> izbor;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- if (izbor == 0) {
- niza[i] = new Student(ime, indeks, god, oceni, n);
- } else {
- cin >> n_tr;
- for (int j = 0; j < n_tr; j++) {
- cin >> tip;
- cin >> god_tr;
- Trud t(tip, god_tr);
- trud[j] = t;
- }
- niza[i] = new PhDStudent(ime, indeks, god, oceni, n, trud, n_tr);
- }
- }
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- // dodavanje nov trud za PhD student spored indeks
- Trud t;
- cin >> indeks;
- cin >> t;
- // vmetnete go kodot za dodavanje nov trud so pomos na operatorot += od Testcase 2
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- }
- if (testCase == 4) {
- cout << "===== Testiranje na isklucoci ======" << endl;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- cin >> n_tr;
- for (int j = 0; j < n_tr; j++) {
- cin >> tip;
- cin >> god_tr;
- Trud t(tip, god_tr);
- trud[j] = t;
- }
- PhDStudent phd(ime, indeks, god, oceni, n, trud, n_tr);
- cout << phd;
- }
- if (testCase == 5) {
- cout << "===== Testiranje na isklucoci ======" << endl;
- Student **niza;
- cin >> m;
- niza = new Student *[m];
- for (int i = 0; i<m; i++) {
- cin >> izbor;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- if (izbor == 0) {
- niza[i] = new Student(ime, indeks, god, oceni, n);
- } else {
- cin >> n_tr;
- for (int j = 0; j < n_tr; j++) {
- cin >> tip;
- cin >> god_tr;
- Trud t(tip, god_tr);
- trud[j] = t;
- }
- niza[i] = new PhDStudent(ime, indeks, god, oceni, n, trud, n_tr);
- }
- }
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- // dodavanje nov trud za PhD student spored indeks
- Trud t;
- cin >> indeks;
- cin >> t;
- // vmetnete go kodot za dodavanje nov trud so pomos na operatorot += i spravete se so isklucokot
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- }
- if (testCase == 6) {
- cout << "===== Testiranje na static clenovi ======" << endl;
- Student **niza;
- cin >> m;
- niza = new Student *[m];
- for (int i = 0; i<m; i++) {
- cin >> izbor;
- cin >> ime;
- cin >> indeks;
- cin >> god;
- cin >> n;
- for (int j = 0; j < n; j++)
- cin >> oceni[j];
- if (izbor == 0) {
- niza[i] = new Student(ime, indeks, god, oceni, n);
- } else {
- cin >> n_tr;
- for (int j = 0; j < n_tr; j++) {
- cin >> tip;
- cin >> god_tr;
- Trud t(tip, god_tr);
- trud[j] = t;
- }
- niza[i] = new PhDStudent(ime, indeks, god, oceni, n, trud, n_tr);
- }
- }
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- int conf, journal;
- cin >> conf;
- cin >> journal;
- //postavete gi soodvetnite vrednosti za statickite promenlivi
- // pecatenje na site studenti
- cout << "\nLista na site studenti:\n";
- for (int i = 0; i < m; i++)
- cout << *niza[i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement