-
-
Spacer
-
-
Spacer
-
Pro2 , Vežba 5
-
27.10.2025
-
-
Download Filezadaci_27.10.2025.pdf -
Zadatak 1
expected output
-
-
#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