From 4cf7dce6fc965387fa845afeaf30f94a25ae5353 Mon Sep 17 00:00:00 2001 From: Szymon P Date: Tue, 9 Jun 2026 09:18:05 +0200 Subject: [PATCH] blallblabla --- .../matematyka_dyskretna/rekurencja.md | 15 ++ .../matematyka_stosowana/laby/lab_12.R | 128 ++++++++++ .../programowanie/laby/kolokwium3.cpp | 233 ++++++++++++++++++ .../laby/kolokwium3_probne_2.cpp | 110 +++++++++ .../programowanie/laby/lab12/zad1.cpp | 6 +- .../programowanie/laby/lab12/zad8.cpp | 1 + .../programowanie/laby/out/kolokwium3 | Bin 0 -> 42112 bytes 7 files changed, 490 insertions(+), 3 deletions(-) create mode 100644 uczelnia/2_semestr/matematyka_dyskretna/rekurencja.md create mode 100644 uczelnia/2_semestr/matematyka_stosowana/laby/lab_12.R create mode 100644 uczelnia/2_semestr/programowanie/laby/kolokwium3.cpp create mode 100644 uczelnia/2_semestr/programowanie/laby/kolokwium3_probne_2.cpp create mode 100755 uczelnia/2_semestr/programowanie/laby/out/kolokwium3 diff --git a/uczelnia/2_semestr/matematyka_dyskretna/rekurencja.md b/uczelnia/2_semestr/matematyka_dyskretna/rekurencja.md new file mode 100644 index 0000000..cc0e854 --- /dev/null +++ b/uczelnia/2_semestr/matematyka_dyskretna/rekurencja.md @@ -0,0 +1,15 @@ +Funkcje rekurencyjne są trudne i często nierozwiązywalne. + +Równania liniowe jednorodne. + +Funkcja afiniczna nie jest liniowa. + + + +$$ +\begin{align} +a_{n + 1} &= 4 \cdot a_n \\ +a_{a} &= 1 \\ +a_{i} &= 0 \\ +\end{align} +$$ diff --git a/uczelnia/2_semestr/matematyka_stosowana/laby/lab_12.R b/uczelnia/2_semestr/matematyka_stosowana/laby/lab_12.R new file mode 100644 index 0000000..9529284 --- /dev/null +++ b/uczelnia/2_semestr/matematyka_stosowana/laby/lab_12.R @@ -0,0 +1,128 @@ +# zadanie 1 +# a) + +# dwie zmienne mierzalne +x = c(150, 300, 450, 600, 750, 900, 1200, 1500, 1800) # wysokość nad poziomem morza w metrach, zmienna niezależna +y = c(27.2, 26.0, 24.2, 22.5, 21.7, 20.5, 19.0, 17.4, 16) # temperatura powietrza w stopniach celcjusza, zmienna zależna + +plot(x, y) # wykres punktów empirycznych + +lm(y ~ x) # oszacowanie liniowej funkcji regresji +# 27.322424 -0.006719 +# oszacowana funkcja regresji ma: y = -0.006719x + 27.322424 + +# interpretacja współczynnika regresji: współczynnik regresji równy -0.007 oznacza, że ze wzrostem wysokości nad poziomem morza o jeden metr spada temperatura powietrza średnio o około 0.007 stopnia celcjusza. + +abline(lm(y ~ x)) # wykres oszacowanej funkcji regresji + +# b) +# istotność współczynnika regresji +# hipotezy: +# h0: ϐ1 = 0 +# h1: ~h0 + +summary(lm(y ~ x)) +# Estimate Std. Error t value Pr(>|t|) +# wyraz wolny: (Intercept) 27.3224242 0.4507429 60.62 8.73e-11 *** +# dla x: x -0.0067192 0.0004513 -14.89 1.48e-06 *** + +# t = -14.89 +# p-value = 1.48e-06 +# alpha = 0.03 +# odrzucamy h0 +# Wniosek: Współczynnik regresji między wysokością nad poziomem morza, a temperaturą jest istotnie różny od zera. + +# (na kolokwium tylko współczynnik regresji, interpretacja, test) + +# zadanie 2 +# dwie cechy mierzalne + +#a) oszacować współczynnik koleracji i jego interpretacje + +cor(Ankieta.K$Waga, Ankieta.K$Wzrost) +# 0.6351466 +# Intepretacja współczynnika korelacji: Pomiędzy wagą i wzrostem studentek w badanej grupie istnieje umiarkowana korelacja dodatnia czyli im wyższa osoba tym średnio biorąc większa waga. + +# umiarkowana, w tym samym kierunku + +# r=0 brak korelacji +# 0<|r|<0.2 bardzo słaba +# 0.2<=|r|<0.4 słaba +# 0.4<=|r|<0.7 umiarkowana +# 0.7<=|r|<0.9 silna +# 0.9<=|r|<1 bardzo silna +# |r|=1 doskonała liniowa +# r > 0 cechy zmieniają się w tym samym kierunku +# r < 0 cechy zmieniają się w przeciwnych kierunkach + +# b) przedział ufności dla współczynnika korelacji dla populacji ϱ + +cor.test(Ankieta.K$Waga, Ankieta.K$Wzrost, conf.level = 0.95) +# 0.009199008 0.903470512 + +# Przedział liczbowy od (0.009; 0.903) z prawdopodobieństwem 0.95 obejmuje nieznany współczynnik korelacji między wagą i wzrostem populacji studentek I roku WI ZUT w Szczecinie. + + +# c) test istotności współczynnika korelacji +# hioptezy: +# h0: ϱ = 0 +# h1: ϱ > 0 + + +cor.test(Ankieta.K$Waga, Ankieta.K$Wzrost, alternative = 'g') +# t = 2.3258, df = 8, p-value = 0.02424 +# alpha = 0.05 + +# Odrzucamy h0 + +# Wniosek: Przy poziomie istotności 0.05 odrzucamy h0, zatem współczynnik korelacji jest istotnie większy od 0. + + +# Zadanie 3 +# dwie cechy niemierzalne +# alpha = 0.01 + +# hipotezy: +# h0: X, Y są niezależne | zawsze niezależność +# h1: X, Y są zależne + + +chisq.test(cbind(c(152, 52), c(8, 188))) +# X-squared = 203.67, df = 1, p-value < 2.2e-16 +# odrzucamy h0 i przyjmujemy h1 + +# Wniosek: na poziomie istotności 0.01, zatem można potwierdzić przypuszczenie, że wielkość cebulki wpływa na pojawienie się pędu kwiatostanowego. + +# zad 5 c i d | dwie zmienne mierzalne +# wielkość produkcji niezależna +# liczba braków zależna +x = c(0.8, 1.2, 1.6, 1.8, 2.2, 1.6, 2.4, 2.0) # wielkość produkcji w tys. sztuk +y = c(6, 10, 12, 15, 18, 15, 20, 16) # liczba braków + +# c) +plot(x, y) +regresja = lm(y ~ x) +# -0.3438 8.4375 +# y = 8.4375x - 0.3438 +abline(regresja) + +# Interpretacja: współczynnik regresji równy 8.4375 oznacza, że wzrostem liczby wielkości produkcji o 1 tys. zwiększa się liczba braków o około 8 sztuk. + + +# d) +# istotność współczynnika regresji +# hipotezy: +# h0: beta1 = 0 +# h1: ~h0 +summary(regresja) +# t = 12.425 +# p-value = 1.66e-05 +# alpha = 0.01 + +# alpha > p-value, odrzucamy h0 + +# Wniosek: Współczynnik korelacji między wielkością produkcji, a liczbą braków jest istotnie różny od 0. + + + + \ No newline at end of file diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium3.cpp b/uczelnia/2_semestr/programowanie/laby/kolokwium3.cpp new file mode 100644 index 0000000..4ad7cd8 --- /dev/null +++ b/uczelnia/2_semestr/programowanie/laby/kolokwium3.cpp @@ -0,0 +1,233 @@ +#include +#include +#include +#include +#include +#include +#include + +class Wydawnictwo { + std::string nazwa, miasto; + +public: + Wydawnictwo(std::string nazwa, std::string miasto) + : nazwa(nazwa), miasto(miasto) {} + + friend std::ostream &operator<<(std::ostream &os, Wydawnictwo &p) { + os << "Wydawnictwo o nazwie: " << p.nazwa << ", pochodzi z miasta " + << p.miasto; + return os; + } +}; + +class Pozycja { +protected: + std::string tytul; + double cena; + int liczba_egzamplarzy; + Wydawnictwo wydawnictwo; + +public: + Pozycja(std::string tytul, double cena, int liczba_egzamplarzy, + Wydawnictwo wydawnictwo) + : tytul(tytul), cena(cena), liczba_egzamplarzy(liczba_egzamplarzy), + wydawnictwo(wydawnictwo) {} + virtual ~Pozycja() = default; + + double wartosc() { return liczba_egzamplarzy * cena; } + void zmienCene(double nowaCena) { cena = nowaCena; } + std::string getTytul() const { return tytul; } + virtual std::string kategoria() = 0; + virtual void wypisz() { + std::cout << "Pozycja pt. " << tytul << " kosztuje" << cena + << "\nAktualnie jest " << liczba_egzamplarzy << " takich pozycji." + << "\nWydawnictwo to: " << wydawnictwo; + } + virtual double cenaKoncowa() const = 0; + + friend std::ostream &operator<<(std::ostream &os, Pozycja &p) { + os << "Tytuł: " << p.tytul << " kosztuje " << p.cenaKoncowa() + << " i jest kategorii " << p.kategoria() << '\n' + << "Aktualnie jest " << p.liczba_egzamplarzy << " tej pozycji"; + return os; + } +}; + +class Ksiazka : public Pozycja { + int liczbaStron; + +public: + Ksiazka(std::string tytul, double cena, int liczba_egzamplarzy, + Wydawnictwo wydawnictwo, int liczbaStron) + : Pozycja(tytul, cena, liczba_egzamplarzy, wydawnictwo), + liczbaStron(liczbaStron) {} + ~Ksiazka() {} + + std::string kategoria() override { return "ksiazka"; } + + double cenaKoncowa() const override { + if (liczbaStron < 100) { + return cena - cena * 0.1; + } + return cena; + } + + void wypisz() override { + wypisz(); + std::cout << "\nLiczba stron wynosi" << liczbaStron << '\n'; + } + + Ksiazka operator+(Ksiazka &p1) { + Ksiazka nowa_pozycja = + Ksiazka(tytul, cena, liczba_egzamplarzy + p1.liczba_egzamplarzy, + wydawnictwo, liczbaStron); + return nowa_pozycja; + }; +}; + +class Czasopismo : public Pozycja { + int numerWydania; + +public: + Czasopismo(std::string tytul, double cena, int liczba_egzamplarzy, + Wydawnictwo wydawnictwo, int numerWydania) + : Pozycja(tytul, cena, liczba_egzamplarzy, wydawnictwo), + numerWydania(numerWydania) {} + + ~Czasopismo() {} + + std::string kategoria() override { return "czasopismo"; } + + double cenaKoncowa() const override { + if (numerWydania < 12) { + return cena - cena * 0.2; + } + return cena; + } + + void wypisz() override { + wypisz(); + std::cout << "\nNumer wydania to: " << numerWydania << '\n'; + } + + Czasopismo operator+(Czasopismo &p1) { + Czasopismo nowa_pozycja = + Czasopismo(tytul, cena, liczba_egzamplarzy + p1.liczba_egzamplarzy, + wydawnictwo, numerWydania); + return nowa_pozycja; + }; +}; + +class Biblioteka { + std::vector> pozycje; + int size; + static int biblioteka_ammount; + +public: + Biblioteka(int size) : size(size) { + pozycje.reserve(size); + biblioteka_ammount++; + } + ~Biblioteka() {} // nie musimy ręcznie zwalniać pamięci ponieważ unique_ptr sam + // się zwalnia, gdy jego właściciel umiera + void dodajPozycje(std::unique_ptr p) { + pozycje.push_back(std::move(p)); + } + + Pozycja *znajdzPozycje(const std::string &tytul) const { + for (auto &p : pozycje) { + if (p->getTytul() == tytul) { + return p.get(); + } + } + return nullptr; + } + + Pozycja &operator[](int index) { + if (index < 0 || index >> size) { + throw std::out_of_range( + "Index nie może być mniejszy niż zero lub większy niż rozmiar"); + } + Pozycja *p = pozycje[index].get(); + return *p; + } + + void sortujWgCeny() { std::sort(pozycje.begin(), pozycje.end()); } + + void wypiszWszystkie() const { + for (auto &p : pozycje) { + p->wypisz(); + } + } + + double obliczWartoscBiblioteki() const { + double sum = 0; + for (auto &p : pozycje) { + sum += p->wartosc(); + } + return sum; + } + + int ilePozycjiKategorii(const std::string &kat) { + int sum = 0; + for (auto &p : pozycje) { + if (p->kategoria() == kat) { + sum++; + } + } + return sum; + } + + static int ileBibliotek() { return biblioteka_ammount; } +}; + +int Biblioteka::biblioteka_ammount = 0; + +int main() { + Biblioteka biblioteka = Biblioteka(10); + + Wydawnictwo w1 = Wydawnictwo("Nowa Era", "Szczecin"); + Wydawnictwo w2 = Wydawnictwo("Stara Era", "Warszawa"); + + biblioteka.dodajPozycje( + std::make_unique("Ogniem i Mieczem", 12, 10, w1, 360)); + + biblioteka.dodajPozycje( + std::make_unique("Telenowele", 2, 1, w2, 3)); + + Pozycja *znalezionaPozycja = biblioteka.znajdzPozycje("Ogniem i Mieczem"); + if (!znalezionaPozycja) { + std::cout << "Nie znaleziono pozycji!!!\n"; + return 1; + } + + std::cout << "Przed zmianą ceny: " << *znalezionaPozycja << std::endl; + znalezionaPozycja->zmienCene(123); + std::cout << "Po zmianie ceny: " << *znalezionaPozycja << std::endl; + + Pozycja *znalezionaPozycja2 = biblioteka.znajdzPozycje("Telenowele"); + if (!znalezionaPozycja) { + std::cout << "Nie znaleziono pozycji 2!!!\n"; + return 1; + } + + Ksiazka k1 = Ksiazka("Trala", 23, 12, w1, 1); + Ksiazka k2 = Ksiazka("Tra", 1, 1, w1, 1); + std::cout << "\n=== Dodawanie ===\n"; + Ksiazka k3 = k1 + k2; + std::cout << k1 << std::endl; + std::cout << k2 << std::endl; + std::cout << k3 << std::endl; + std::cout << "\n=== Wyświetlanie ===\n"; + std::cout << "Zerowy element biblioteki: " << biblioteka[0] << std::endl; + std::cout << "Biblioteka jest warta " << biblioteka.obliczWartoscBiblioteki() + << std::endl; + std::cout << "Aktualnie jest " << biblioteka.ilePozycjiKategorii("ksiazka") + << " książek" << std::endl; + std::cout << "Aktualnie jest " << biblioteka.ileBibliotek() << " bibliotek" + << std::endl; + std::cout << "\n=== Sortowanie ===\n"; + // biblioteka.wypiszWszystkie(); + biblioteka.sortujWgCeny(); + // biblioteka.wypiszWszystkie(); +} diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium3_probne_2.cpp b/uczelnia/2_semestr/programowanie/laby/kolokwium3_probne_2.cpp new file mode 100644 index 0000000..51d79eb --- /dev/null +++ b/uczelnia/2_semestr/programowanie/laby/kolokwium3_probne_2.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +class Producent { + std::string nazwa; + std::string kraj; + +public: + Producent(std::string nazwa, std::string kraj) : nazwa(nazwa), kraj(kraj) {} + + friend std::ostream &operator<<(std::ostream &os, const Producent p) { + os << "Nazwa: " << p.nazwa << " pochodzi 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, 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; } + + virtual std::string kategoria() = 0; + + virtual void wypisz() const { + std::cout << "Nazwa: " << nazwa << " kosztuje " << cena + << ". Aktualnie jest " << sztuki << " sztuk. Producent to " + << producent << std::endl; + } + + virtual double cenaKoncowa() const = 0; + + int operator+(Towar &t) { return sztuki + t.sztuki; } + + friend std::ostream &operator<<(std::ostream &os, Towar &t) { + os << "Nazwa: " << t.nazwa << " kosztuje " << t.cenaKoncowa() + << ". Aktualnie jest " << t.sztuki << " sztuk. Producent to " + << t.producent; + return os; + } +}; + +class TowarSpozywczy : public Towar { + std::string terminWaznosci; + +public: + TowarSpozywczy(std::string nazwa, double cena, int sztuki, + Producent producent, std::string terminWaznosci) + : Towar(nazwa, cena, sztuki, producent), terminWaznosci(terminWaznosci) {} + + std::string kategoria() override { return "spozywczy"; } + double cenaKoncowa() const override { + int rabat = 5; + return wartosc() - rabat; + } + + void wypisz() const override { + wypisz(); + std::cout << "Termin ważności jest do " << terminWaznosci << std::endl; + } +}; + +class TowarElektroniczny : public Towar { + int gwarancjaMiesiace; + +public: + TowarElektroniczny(std::string nazwa, double cena, int sztuki, + Producent producent, int gwarancjaMiesiace) + : Towar(nazwa, cena, sztuki, producent), + gwarancjaMiesiace(gwarancjaMiesiace) {} + + std::string kategoria() override { return "spozywczy"; } + double cenaKoncowa() const override { + int koszt_gwarancji = 10; + return wartosc() + koszt_gwarancji; + } + + void wypisz() const override { + wypisz(); + std::cout << "Gwarancja trwa" << gwarancjaMiesiace << " miesięcy." + << std::endl; + } +}; + +class Sklep { + std::vector> towary; + int max; + int current; + + static int liczba_sklepow; + +public: + Sklep(int max) : max(max), current(0) { towary.reserve(max); } +}; + +int Sklep::liczba_sklepow = 0; diff --git a/uczelnia/2_semestr/programowanie/laby/lab12/zad1.cpp b/uczelnia/2_semestr/programowanie/laby/lab12/zad1.cpp index 49f6389..ff5a195 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab12/zad1.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab12/zad1.cpp @@ -3,7 +3,7 @@ template T potroj(T x) { return x * 3; } int main() { - std::cout << potroj(7) << '\n'; - std::cout << potroj(2.5) << '\n'; - std::cout << potroj('A') << '\n'; + std::cout << potroj(7) << '\n'; // 21 + std::cout << potroj(2.5) << '\n'; // 7.5 + std::cout << potroj('A') << '\n'; // dziwny znak } diff --git a/uczelnia/2_semestr/programowanie/laby/lab12/zad8.cpp b/uczelnia/2_semestr/programowanie/laby/lab12/zad8.cpp index 6c6b929..3877860 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab12/zad8.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab12/zad8.cpp @@ -5,6 +5,7 @@ podwoj(2, 3); // funkcja przyjmuje jeden argument a jest wywołana z dwoma // Fragment B template T iloczyn(T a, T b); // definicja w innym pliku .cpp - kod się nie linkuje +// należy dodać #include "nazwa_pliku.cpp" // Fragment C template T wiekszy(T a, T b) { return a > b ? a : b; } diff --git a/uczelnia/2_semestr/programowanie/laby/out/kolokwium3 b/uczelnia/2_semestr/programowanie/laby/out/kolokwium3 new file mode 100755 index 0000000000000000000000000000000000000000..9b56a2b6d78d4f97db52cadb9fbf9ed250508984 GIT binary patch literal 42112 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