• POČETNA
  • G Drive
  • Progr 2
  • more...
    • Spacer
      • Spacer
      • ​Pro2 , Vežba 5

      • 27.10.2025
      • Picture
      • zadaci_27.10.2025.pdf
        Download File

      • Zadatak 1

        expected output
      • Picture
      • #include <iostream>   // Biblioteka za ulaz/izlaz (cout, cin)
        #include <vector>     // Biblioteka za rad sa std::vector
        #include <memory>     // Pametni pokazivači (std::unique_ptr)
        #include <ctime>      // Rad sa vremenom (time_t, localtime)
        using namespace std;  // Da ne koristimo std:: ispred svake funkcije
        // Bazna klasa "Vozilo"
        struct Vozilo {
            string marka, model;     // Marka i model vozila
            int godinaProizvodnje{}; // Godina proizvodnje
            // Konstruktor – prima marku, model i godinu
            Vozilo(string ma, string mo, int g)
                : marka(move(ma)), model(move(mo)), godinaProizvodnje(g) {}
            // Virtuelni destruktor — potreban za pravilno uništavanje izvedenih klasa
            virtual ~Vozilo() = default;
            // Metod koji računa koliko je vozilo staro
            int starost() const {
                time_t t = time(nullptr); // Trenutno vreme (sekunde od 1.1.1970.)
                tm now{};                 // Struktura za lokalno vreme

                // Različita implementacija za Windows i Linux/Mac
                #ifdef _MSC_VER
                    localtime_s(&now, &t);  // MSVC (Windows)
                #else
                    localtime_r(&t, &now);  // POSIX (Linux/Mac)
                #endif
                // Računanje starosti: trenutna godina - godina proizvodnje
                return (now.tm_year + 1900) - godinaProizvodnje;
            }
            // Virtuelna funkcija za ispis informacija o vozilu
            virtual void ispis() const {
                cout << marka << " " << model
                     << " (" << godinaProizvodnje << "), starost: "
                     << starost() << " god.";
            }
        };
        // Izvedena klasa "Automobil"
        struct Automobil : public Vozilo {
            int brojVrata{};  // Broj vrata automobila
            // Konstruktor koji poziva bazni konstruktor + dodaje broj vrata
            Automobil(string ma, string mo, int g, int vrata)
                : Vozilo(move(ma), move(mo), g), brojVrata(vrata) {}
            // Redefinisana funkcija ispis() — dodaje broj vrata
            void ispis() const override {
                Vozilo::ispis();  // Poziva bazni ispis
                cout << ", vrata: " << brojVrata << "\n";
            }
        };
        // Izvedena klasa "Kamion"
        struct Kamion : public Vozilo {
            double nosivostT{}; // Nosivost u tonama
            // Konstruktor koji poziva bazni konstruktor + dodaje nosivost
            Kamion(string ma, string mo, int g, double n)
                : Vozilo(move(ma), move(mo), g), nosivostT(n) {}
            // Redefinisana funkcija ispis() — dodaje nosivost
            void ispis() const override {
                Vozilo::ispis();  // Poziva bazni ispis
                cout << ", nosivost: " << nosivostT << " t\n";
            }
        };
        // Glavna funkcija main()
        int main() {
            // Vektor pametnih pokazivača na baznu klasu Vozilo
            vector<unique_ptr<Vozilo>> flota;
            // Dodavanje jednog automobila u flotu
            flota.emplace_back(make_unique<Automobil>("Toyota", "Corolla", 2018, 5));
            // Dodavanje jednog kamiona u flotu
            flota.emplace_back(make_unique<Kamion>("Volvo", "FH", 2015, 18.0));
            // Polimorfni ispis — poziva se odgovarajući ispis() za svaku izvedenu klasu
            for (const auto& v : flota)
                v->ispis();
            return 0; // Kraj programa
        }


        Zadatak 2






      • #include <iostream>
        #include <vector>
        #include <string>
        #include <limits>   // za numeric_limits
        using namespace std;

        // Klasa Student - osnovna klasa
        class Student {
        protected:
            string ime;              // ime studenta
            string indeks;           // broj indeksa
            float ocene[10];         // niz ocena
            int brojOcena;           // broj unetih ocena

        public:
            // Konstruktor
            Student(string i = "", string ind = "") {
                ime = i;
                indeks = ind;
                brojOcena = 0;
            }

            // Unos ocena
            void unesiOcene() {
                cout << "Unesite broj ocena za studenta " << ime << ": ";
                cin >> brojOcena;
                if (brojOcena < 0) brojOcena = 0;
                if (brojOcena > 10) brojOcena = 10;

                cout << "Unesite " << brojOcena << " ocena: ";
                for (int i = 0; i < brojOcena; i++) {
                    cin >> ocene[i];
                }
            }

            // Računanje proseka
            float prosek() {
                if (brojOcena == 0) return 0;
                float suma = 0;
                for (int i = 0; i < brojOcena; i++)
                    suma += ocene[i];
                return suma / brojOcena;
            }

            // Ispis podataka
            virtual void ispisi() {
                cout << "Ime: " << ime << endl;
                cout << "Indeks: " << indeks << endl;
                cout << "Prosek: " << prosek() << endl;
            }
        };

        // Klasa StudentMaster - nasleđuje Student
        class StudentMaster : public Student {
        private:
            string temaMastera;
            string mentor;

        public:
            // Konstruktor
            StudentMaster(string i = "", string ind = "", string tema = "", string ment = "")
                : Student(i, ind), temaMastera(tema), mentor(ment) {}

            // Unos dodatnih informacija
            void unesiDodatno() {
                // posle unosa ocena ostaje '\n' u bufferu, pa ga uklanjamo
                cin.ignore(numeric_limits<streamsize>::max(), '\n');

                cout << "Unesite temu master rada: ";
                getline(cin, temaMastera);
                cout << "Unesite ime mentora: ";
                getline(cin, mentor);
            }

            // Ispis (preklapa metodu iz osnovne klase)
            void ispisi() override {
                Student::ispisi();
                cout << "Tema master rada: " << temaMastera << endl;
                cout << "Mentor: " << mentor << endl;
            }
        };

        int main() {
            vector<StudentMaster> studenti; // vektor studenata mastera
            int n;

            cout << "Unesite broj studenata mastera: ";
            cin >> n;

            // JEDNOM očisti buffer nakon citanja n
            cin.ignore(numeric_limits<streamsize>::max(), '\n');

            for (int i = 0; i < n; i++) {
                string ime, indeks;
                cout << "\n--- Student " << i + 1 << " ---" << endl;

                cout << "Unesite ime: ";
                // NEMA cin.ignore() ovde!
                getline(cin, ime);

                cout << "Unesite indeks: ";
                getline(cin, indeks);

                StudentMaster s(ime, indeks);
                s.unesiOcene();
                s.unesiDodatno();
                studenti.push_back(s);
            }

            cout << "\n=== Spisak studenata mastera ===" << endl;
            for (auto& s : studenti) {
                s.ispisi();
                cout << "-----------------------------" << endl;
            }

            return 0;
        }









    • Spacer
  • www.d96rsd.com
    ©  Dušan Ružić • Built with Weebly.
    AVMSS Kruševac | Odsek tehničko-tehnoloških studija Kruševac