From 0d7c0d381a360c12a5b31d6266600e37853b33c4 Mon Sep 17 00:00:00 2001 From: Szymon P Date: Sun, 31 May 2026 20:27:11 +0200 Subject: [PATCH] probne kolokwium --- .../programowanie/laby/kolokwium3_probne.cpp | 188 ++++++++++++++++++ .../laby/{ => kolosy}/kolokwium1.cpp | 0 .../laby/{ => kolosy}/kolokwium2.cpp | 0 .../laby/{ => kolosy}/kolokwium2_probne.cpp | 0 4 files changed, 188 insertions(+) create mode 100644 uczelnia/2_semestr/programowanie/laby/kolokwium3_probne.cpp rename uczelnia/2_semestr/programowanie/laby/{ => kolosy}/kolokwium1.cpp (100%) rename uczelnia/2_semestr/programowanie/laby/{ => kolosy}/kolokwium2.cpp (100%) rename uczelnia/2_semestr/programowanie/laby/{ => kolosy}/kolokwium2_probne.cpp (100%) diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium3_probne.cpp b/uczelnia/2_semestr/programowanie/laby/kolokwium3_probne.cpp new file mode 100644 index 0000000..b90dfc2 --- /dev/null +++ b/uczelnia/2_semestr/programowanie/laby/kolokwium3_probne.cpp @@ -0,0 +1,188 @@ +#include +#include +#include +#include +#include + +class Producent { + std::string nazwa, kraj; + +public: + Producent(std::string nazwa, std::string kraj) : nazwa(nazwa), kraj(kraj) {} + + friend std::ostream &operator<<(std::ostream &os, const Producent &p) { + os << "Producent o nazwie " << p.nazwa << " z kraju " << p.kraj; + return os; + } +}; + +class Towar { +protected: + std::string nazwa; + + double cena; + int sztuki; + Producent producent; + +public: + Towar(std::string nazwa, double cena, int sztuki, const Producent &producent) + : nazwa(nazwa), cena(cena), sztuki(sztuki), producent(producent) {} + + virtual ~Towar() = default; + double wartosc() const { return cena * sztuki; } + void zmienCene(double nowaCena) { cena = nowaCena; } + void dodajSztuki(int ile) { sztuki += ile; } + + std::string getNazwa() const { return nazwa; } + + virtual std::string kategoria() const = 0; + + virtual void wypisz() const { + std::cout << "Nazwa: " << nazwa << ", Cena jedn.: " << cena + << ", Sztuk: " << sztuki << ", " << producent; + } + + virtual double cenaKoncowa() const = 0; + + int operator+(const Towar &t) const { return sztuki + t.sztuki; } + + friend std::ostream &operator<<(std::ostream &os, const Towar &t) { + os << t.nazwa << " należy do kategorii " << t.kategoria() + << " i kosztuje w sumie " << t.cenaKoncowa(); + return os; + } +}; + +class TowarSpozywczy : public Towar { + std::string terminWaznosci; + +public: + TowarSpozywczy(std::string nazwa, double cena, int sztuki, + const Producent &producent, std::string terminWaznosci) + : Towar(nazwa, cena, sztuki, producent), terminWaznosci(terminWaznosci) {} + ~TowarSpozywczy() {} + + std::string kategoria() const override { return "spożywczy"; } + double cenaKoncowa() const override { + int rabat = 10; + return wartosc() - rabat; + } + void wypisz() const override { + Towar::wypisz(); + + std::cout << ", termin ważności do " << terminWaznosci; + } +}; + +class TowarElektroniczny : public Towar { + int gwarancja; + +public: + TowarElektroniczny(std::string nazwa, double cena, int sztuki, + const Producent &producent, int gwarancja) + : Towar(nazwa, cena, sztuki, producent), gwarancja(gwarancja) {} + ~TowarElektroniczny() {} + + std::string kategoria() const override { return "elektronika"; } + double cenaKoncowa() const override { + int koszt_gwarancji = 67; + return wartosc() + koszt_gwarancji; + } + + void wypisz() const override { + Towar::wypisz(); + std::cout << ", gwarancja na " << gwarancja << " miesięcy"; + } +}; + +class Sklep { + std::vector> towary; + int max_towar, current_towar; + static int SKLEP_AMMOUNT; + +public: + Sklep(int max) : max_towar(max), current_towar(0) { + towary.reserve(max); + SKLEP_AMMOUNT++; + } + ~Sklep() { towary.clear(); } + + bool dodajTowar(std::unique_ptr t) { + towary.push_back(std::move(t)); + return true; + } + + Towar *znajdzTowar(const std::string &nazwa) { + for (auto &towar : towary) { + if (towar->getNazwa() == nazwa) { + return towar.get(); + } + } + return nullptr; + } + + void wypiszWszystkie() const { + for (auto &towar : towary) { + towar->wypisz(); + std::cout << "\n"; + } + } + + double obliczWartoscSklepu() const { + double sum = 0; + for (const auto &towar : towary) { + sum += towar->cenaKoncowa(); + } + return sum; + } + + int ileTowarowKategorii(const std::string &kat) const { + int sum = 0; + for (const auto &towar : towary) { + if (towar->kategoria() == kat) { + sum++; + } + } + return sum; + } + + static int ileSklepow() { return SKLEP_AMMOUNT; } +}; + +int Sklep::SKLEP_AMMOUNT = 0; + +int main() { + Sklep sklep = Sklep(10); + Producent producent1 = Producent("Rafał Brzoska", "Polska"); + Producent producent2 = Producent("Jeff Bezos", "Afryka"); + + sklep.dodajTowar( + std::make_unique("burak", 20, 5, producent1, "67 lat")); + + sklep.dodajTowar( + std::make_unique("komputer", 20, 5, producent2, 24)); + + Towar *znalezionyTowar = sklep.znajdzTowar("burak"); + + Towar *znalezionyTowar2 = sklep.znajdzTowar("komputer"); + + if (znalezionyTowar) + znalezionyTowar->zmienCene(1); + + if (znalezionyTowar && znalezionyTowar2) { + int wynik = *znalezionyTowar + *znalezionyTowar2; + std::cout << wynik << std::endl; + } + + if (znalezionyTowar) + std::cout << *znalezionyTowar << std::endl; + + if (znalezionyTowar2) + std::cout << *znalezionyTowar2 << std::endl; + + std::cout << sklep.obliczWartoscSklepu() << std::endl; + std::cout << sklep.ileTowarowKategorii("spożywczy") << std::endl; + std::cout << sklep.ileSklepow() << std::endl; + + return 0; +} diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium1.cpp b/uczelnia/2_semestr/programowanie/laby/kolosy/kolokwium1.cpp similarity index 100% rename from uczelnia/2_semestr/programowanie/laby/kolokwium1.cpp rename to uczelnia/2_semestr/programowanie/laby/kolosy/kolokwium1.cpp diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium2.cpp b/uczelnia/2_semestr/programowanie/laby/kolosy/kolokwium2.cpp similarity index 100% rename from uczelnia/2_semestr/programowanie/laby/kolokwium2.cpp rename to uczelnia/2_semestr/programowanie/laby/kolosy/kolokwium2.cpp diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium2_probne.cpp b/uczelnia/2_semestr/programowanie/laby/kolosy/kolokwium2_probne.cpp similarity index 100% rename from uczelnia/2_semestr/programowanie/laby/kolokwium2_probne.cpp rename to uczelnia/2_semestr/programowanie/laby/kolosy/kolokwium2_probne.cpp