Compare commits

...

27 Commits

Author SHA1 Message Date
437aa678fc Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-06-20 14:19:07 +02:00
36028899bc Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-06-20 14:18:45 +02:00
f3cebb936b bla 2026-06-20 14:18:38 +02:00
fdcf4b4a3d blabla 2026-06-20 14:17:14 +02:00
4951da8fd9 Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-06-14 19:09:56 +02:00
2237683c00 hehehehe 2026-06-14 19:09:49 +02:00
4cf7dce6fc blallblabla 2026-06-09 09:18:05 +02:00
0d7c0d381a probne kolokwium 2026-05-31 20:27:11 +02:00
f9fce835d5 dsa;lkfj 2026-05-31 14:59:03 +02:00
829a08766a poprawka 2026-05-29 21:27:39 +02:00
24979a137d notatka na egamin: technika cyrkowa 2026-05-29 21:17:24 +02:00
6738650e7f remove bin 2026-05-26 15:02:07 +02:00
a645291f8b bla bla 2026-05-26 15:01:50 +02:00
6a948ffe9f Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-05-12 18:49:09 +02:00
f5edd8ed79 bla 2026-05-12 18:49:01 +02:00
4fbd30fa19 fix 2026-05-12 17:12:22 +02:00
4db9e10dd6 gotowe 2026-05-12 17:10:45 +02:00
2b9fa6f3ad prawie gotowe xdd 2026-05-12 17:09:25 +02:00
a37d75f2d5 remove bin 2026-05-12 16:52:37 +02:00
399f1218f4 prawie zrobione zadania 2026-05-12 16:51:57 +02:00
a3bd6af48a poprawki w kodzie xdddxdd 2026-05-05 19:22:09 +02:00
0d5d9dc969 remove bin blobs 2026-05-05 18:00:23 +02:00
6270be5805 bla bla 2026-05-05 15:27:55 +02:00
1a8ba1c2bf rzeczy 2026-04-28 17:01:06 +02:00
738a3dc371 blabla 2026-04-27 12:00:49 +02:00
4ca7ab71a6 Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-04-23 11:15:41 +02:00
0eee499998 python rzeczy 2026-04-23 11:15:33 +02:00
146 changed files with 5708 additions and 4 deletions

1
.gitignore vendored
View File

@@ -6,3 +6,4 @@
*/out
.Rhistory
main
.Rproj.user

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,54 @@
# Logika
- Prawo de'morgana przy negacji alternatywy lub koniunkcji zamieniamy też ze sobą działania
- suma indeksowanej rodziny zbiorów elementy które występują w co najmniej jednym
- iloczyn indeksowanej rodziny zbiorów elementy które wystęupją w każdym
# Abstrakcja
- Izomorfizm bijekcja, która zachowuje funkcje i relacje.
- Homomorfizm odwzorowanie jednej algebry liniowej(np. pierścienia) w drugą przy zachowaniu odpowiednich działań
- Automorfizm izomorfizm na samym sobie, czyli odwzorowanie struktury na samą siebie przy zachowaniu działań itp.
# Relacje
- piwo z kolegami
- zwrotność (każda ze sobą)
- symetryczność (działa w dwie strony)
- przechodniość (jeśli xRy i yRz to xRz)
- relacja równoważności, gdy spełnia wszystko powyżej
- antysymetryczność (xRy i yRx wtedy i tylko wtedy gdy x = y)
# Struktury
- Grupa struktura algebraiczna definiowana jako zbiór z określonym na nim łącznym i odwracalnym dwuargumentowym działaniem wewnętrznym[1]; szczególny przypadek monoidu, w którym każdy element ma element odwrotny (zob. Podobne struktury).
- Iniekcja każdy argument ma przypisaną tylko jedną wartość i żadne dwa argumenty nie dają tej samej wartości. Innymi słowy jest różnowartościowa.
- Suriekcja zbiór wartości pokrywa się z przeciwdziedziną (każdy element przeciwdziedziny jest użyty)
- Bijekcja iniekcja i suriekcja na raz. Liczba bijekcji to $n!$ gdzie n to ilość el. zbioru.
- działanie wewnętrzne operacjie nie wyrzucają nas z danego zbioru
- rozdzielność $a \cdot (b + c) = (a \cdot b) + (a \cdot c)$
- półgrupa nie potrzebuje el. neutralnego i odwrotnego
# Grafy
- Graf podstawowy obiekt rozważań teorii grafów, struktura matematyczna służąca do przedstawiania i badania relacji między obiektami. W uproszczeniu graf to zbiór wierzchołków, które mogą być połączone krawędziami w taki sposób, że każda krawędź kończy się i zaczyna w którymś z wierzchołków.
- Graf planarny graf który można narysować nie przecinając linii na kartce.
- Graf spójny każda para wierzchołków jest połączona
- Twierdzenie Kuratowskiego graf jest planarny, jeśli nie zawiera podgrafu, który jest grafem rozszerzonym grafu $K_5$ lub $K_{3,3}$. Innymi słowy: graf jest planarny jeśli nie jest stworzony z pentagramu/3 kropek na góra-dół.
- Macierz incydencji pokazuje gdzie wierzchołki grafu mają krawędzi. Wiersz to wierzchołek, a kolumny to krawędzi. Jeśli jest $0$ to nie styka się, jeśli liczba $< 0$ to wchodzi do wierzchołka, a jeśli $> 0$ to z niego wychodzi.
# Teoria liczb
- $ax + by = c$, przy takim zapisie szukamy $NWD(a, b)$ i sprawdzamy czy dzieli liczbę c. Uzywamy rozszerzonego algorytmu Euklidesa
- Hinolskie twierdzenie o resztach służy do rozwiązywania układów równań.
Ważne wzory:
$$
\begin{align}
N &= n_i \cdot n_{i + 1} \cdot \ ...\ \cdot n_k \\
N_i &= \frac{N}{n_i} \\
N_i \cdot y_i &\equiv 1 \pmod{n_i} \\
x &= \sum_{i = 1}^{k}({a_i \cdot N_i \cdot y_i}) \pmod{N}
\end{align}
$$
# Euklides
Mamy NWD(a,b), gdzie a > b
1. Rozpisujemy a za pomocą b $a = b \cdot x + r$, gdzie x to wielokrotność a r reszta
2. rozpisujemy b za pomocą r
3. powtórz, aż dojdziesz do momentu gdy $r = 0$
Rozszerzenie polega na robieniu tego samego ale w drugą stronę

View File

@@ -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}
$$

View File

@@ -0,0 +1,3 @@
Permutacją zbioru nazywamy dowolną iniekcję sigma an do an. Zbiór wszystkich permutacji zbioru an oznaczamy Sn z działaniem składania funkcji jest grupą.
Grupa ma dobre dzialania :D

View File

@@ -0,0 +1,27 @@
24 punkt suma, od 17 zdajesz
14 pytań zamkniętych, 10 otwartych
# Zadania zamknięte, które na pewno będą$1$!!!!!!!!
$$
\begin{align}
P(a < X < b) \\
P(a <= X <= b) \\
P(X > a) \\
P(X >= a) \\
\end{align}
$$
Statystyka $Tn$ jest estymatorem najefektywniejszym jeśli
Pytanie o współczynnik korelacji i jego interpretacje
# Otwarte
Prawdopodobieństwo geometryczne
Standaryzacja rozkładu normalnego
Zawsze do policzenia współczynnik korelacji, ale używać skróconych ułamków z pierwiastkiem
Funkcja charakterystyczna, wzory których __nie ma na kartach__. $EX to \frac{\phi(0)}{i}$ a $EX^2 = -\phi''(0)$

View File

@@ -1,6 +1,4 @@
# Spis tematów
Oto uporządkowana lista tematów, które pojawiają się w przesłanych przez Ciebie notatkach. Zostały one pogrupowane w logiczne kategorie:
**1. Podstawy rachunku prawdopodobieństwa i zdarzenia losowe**
- Przestrzeń zdarzeń elementarnych (Ω) i pojedyncze zdarzenia elementarne (ω)
@@ -246,3 +244,73 @@ Estymator $\theta$ rozkładu zmiennej X nazywamy dowolną statystyką, której w
Używając lepszego estymatora otrzymujemy większą dokładność.
Sprawdzenie efektywności umożliwia nierówność Rao-Cramera.
# Istotna uwaga
Przy interpretacji przedziału ufności nie należy stosować następującego sformułowania: „parametr z prawdopodobieństwem należy do przedziału w okolicach (...)”, ponieważ parametr nie zalezy od wyników próby losowej. Jest stałą. Zmienny jest natomiast przedział ufności, którego końce zależą od próby losowej.
# Parametryczne testy istotności
Weryfikacja hipotezy dotyczącej wariancji
- Obszar krytyczny K Lewo prawo, oba
Jakieś dziwne znaczki.
---
Przykład:
$s = 1.5$
$n = 10$
$\alpha = 0.05$
Teza: odchylenie standardowe pomiarów różni się od $1.0$ na poziomie istotności $0.05$
1) Hipotezy
$$
\begin{align}
h_0 = \chi = 1 \\
h_1 = \chi ≠ 1
\end{align}
$$
2) stat testowa
$$
\chi^2 = \frac{ns^2}{\sigma^2} = \frac{10 \times 1.5^2}{1^2} = 22.5
$$
3) Kwantyle
$$
\begin{align}
\chi^2(\frac{\alpha}{2}, n - 1) = \chi&2(0.025, 9) = 2.700 \\
\chi^2(1 -\frac{\alpha}{2}, n - 1) = \chi&2(0.0975, 9) = 19.023
\end{align}
$$
4) Obszar krytyczny
$$
k = <0;2.700> u <10.023;∞>
$$
5) Wniosek
$\chi^2-2.5 e K$, więc na poziomie istotności 0.05 odrzucamy $H_0$
# Analiza wariancji
Pobieramy próbki
$x_{ij}$ j - ty wynik w i-tej próbce
Średnia
Średnia ogólna średnia ze wszystkich wyników razem (średnia ważona w grupach)
Analiza wariancji opiera się na obserewacji Karla Pearcena jakbyśmy policzyli sumy kwadratów i odjęli średnią ogólną to rozbijemy to ona mierzy zmienność między próbkami. Suma kwadratów odchyleń według grup (resztkowa suma kwadratów) $= q_G$
Suma odchyleń kwadratów między próbami $= q_P$
Wszystkie q traktujemy jako realizacje zmiennych losowych Q z indeksem odpowiednim do q.
Rozkład fishera snedekora.
Test Barteletta jednorodności w wariancji w k populacji.
Zał:
- Jednakowe wariancje
- Rozkład normalny
Test rangowych znaków dla jednej populacji
Rangowanie polega na nadawaniu rang wartościom. Przy identycznych wartościach nadajemy średnią artmetyczną rang, które przypadałaby na te wartości.
# Regresje I i II rodzaju
## I rodzaj
Funkcja regresji liniowej I rodzaju zmiennej Y względem zmiennej X jest zbiorem punktów $(x, g_2(x)) \in R^2$
__Zadanie 27.7 prezentacja wykład 12 na egzaminie__
## Rodzaj II
Funkcję, której przewidywaną postać wyznacza się metodą mniejszych kwadraatów minimalizując wyrażenie $E(Y - g(X))^2$, nazywamy funkcją regresji II rodzaju

Binary file not shown.

View File

@@ -0,0 +1,13 @@
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8
RnwWeave: Sweave
LaTeX: pdfLaTeX

View File

@@ -0,0 +1,201 @@
# układ równań
A = matrix(c(-9, 15, -14, -1, 13, 5, 18, 6, 8, 12, 10, -4, -1, 5, 8, 12), 4, 4)
B = c(4, 298, 294, 120)
solve(A, B)
solve(A)
solve(A)[1, 4]
# wektory
## Skonstruować wektor w trzecich potęg wielokrotności liczby 7 od 21 do 29903
## następnie zliczyć, ile wśród elementów tego wektora jest liczb, których dwie ostatnie cyfry to
## 23.
w = seq(21, 29903, 7)^3
summary.factor(w %% 100 == 23)
## Skonstruować wektor w kwadratów liczb od 1 do 100 a następnie zliczyć, które
## cyfry oraz jak często występują na pozycji jedności w wyznaczonych kwadratach (użyć operatora modulo, funkcji summary oraz typu factor). Ile wśród kwadratów liczb od 1 do 100 jest
## podzielnych przez 2, przez 3 oraz przez 2 i 3?
w = (1:100)^2
summary.factor(w %% 2 == 0)
summary.factor(w %% 3 == 0)
summary.factor(w %% 3 == 0 & w %% 2 == 0)
# dwumianowy i geom | lista 2
# zad 1
# P(X = 2)
dbinom(2, 4, 1/3)
# P(X < 2)
pbinom(1, 4, 1/3)
# P(X > 2)
pbinom(2, 4, 1/3, F)
# zad 2
prob = 0.02
dgeom(3, prob)
pgeom(2, prob)
# zad 3
size = 100
prob = 0.01
# P(X = 2)
dbinom(2, size, prob)
dpois(2, size * prob)
# P(2 < X < 6)
sum(dbinom(2:6, size, prob))
pbinom(3, size, prob, F)
# zad 4
dbinom(2, 4, 1/7)
dbinom(3, 5, 1/2) > dbinom(2, 3, 1/2)
# kwantyle
qnorm(0.97)
qchisq(0.975, 9)
qt(0.95, 9)
qf(0.995, 10, 23)
# zad 2
# d)
# |x - 2| < 3
# x - 2 < 3 || x - 2 > -3
# x < 5 || x > -1
pnorm(5, 1.5, 2) - pnorm(-1, 1.5, 2)
# e)
# |x| > 0.5
# x > 0.5 || x < -0.5
pnorm(-0.5, 1.5 ,2) + pnorm(0.5, 1.5, 2, F)
# f)
# -1 < 2x - 1 < 1
# 0 < 2x < 2
# 0 < x < 1
pnorm(1, 1.5, 2) - pnorm(0, 1.5, 2)
# g)
# 3x - 1 > 2 || 3x -1 < -2
# 3x > 3 || 3x < -1
# x > 1 || 3 < -1/3
pnorm(-1/3, 1.5, 2) + pnorm(1, 1.5, 2, F)
# zad 3
# 5x - 1 > 2.5 || 5x -1 < -2.5
# 5x > 3.5 || 5x < -1.5
pnorm(-1.5/5, -4, 3.5) + pnorm(3.5/5, -4, 3.5, F)
# 4x - 2 <= 5.5 || 4x -2 >= -5.5
# -5.5 < 4x - 2 < 5.5
# -3.5 < 4x < 7.5
pnorm(7.5/4, -4, 3.5) - pnorm(-3.5/4, -4, 3.5)
# zad 4
# P(X < 900)
round(pnorm(900, 1000, 50) * 4000)
qnorm(0.13, 1000, 50, F)
# zad 5
round(pnorm(7.1, 6.8, 0.3) * 30)
qnorm(0.15, 6.8, 0.3)
# zad 6
# 22:05 < X < 22:10
# 22 * 5/60 < X < 22 * 10/60
pnorm(22 * 1/6 * 60, 15, 13) - pnorm(22 * 5/60 * 60, 15, 13)
pnorm(22, 15, 13, F)
# standaryzacja rozkładu normalnego
# zad 1
# P(X > 5) = 70/200
sigma = 1
m = 5 - sigma * qnorm(70/200, lower.tail = FALSE)
round(pnorm(6, m, sigma) - pnorm(3, m, sigma), 4)
# P(X < 6) = 0.8
sigma = sqrt(4)
m = 6 - sigma * qnorm(0.8)
round(pnorm(6, m, sigma) - pnorm(3, m, sigma) ,4)
# zad 2
m = 5.2
U = qnorm(0.121)
sigma = (3 - m)/U
qnorm(0.8, m, sigma)
# zad 3
m = -5
X = -2
U = qnorm(0.95)
sigma = (X - m)/U
pnorm(0, m, sigma, F)
# zad 4
m = 0.46
X = 0.5
U = qnorm(0.6)
sigma = (X - m)/U
pnorm(0.7, m, sigma, F)
# zad 1
A = matrix(c(1, 1, qnorm(3/10), qnorm(3/4)), 2, 2)
B = c(5281.21, 9090.9)
wynik = solve(A, B)
m = wynik[1]
sigma = wynik[2]
pnorm(7800, m, sigma, F) * 100
qnorm(0.15, m, sigma)
# zad 3
m = 165.5
# 155 < X < 176
U = qnorm((1 - 0.93)/2)
sigma = (155 - m)/U
round(pnorm(170, m, sigma, F) * 100)
# zad 4
A = matrix(c(1, 1, qnorm(1/12, lower.tail = FALSE), qnorm(2/12)), 2, 2)
B = c(0.9, 0.5)
wynik = solve(A, B)
m = wynik[1]
sigma = wynik[2]
qnorm(0.1, m, sigma, F)
A = matrix(c(1, 1, qnorm(11/12), qnorm(2/12)), 2, 2)
B = c(0.9, 0.5)
wynik = solve(A, B)
m = wynik[1]
sigma = wynik[2]
qnorm(0.1, m, sig, F)
# zadanie 2 lista 6
n = 2000
p = 0.002
q = 1 - p
sum(dbinom(6:12, n, p))
if (n >= 50 & p < 10) {
print("Rozkład poissona")
sum(dpois(6:12, n * p))
} else {
print("Nie można użyć rozkładu poissona")
}

View File

@@ -0,0 +1,167 @@
# zadanie 1
# Próby niezależne
# a)
# założenie 1: normalność rozkładów
# h0 rozkład średnich ocen w populacji studentek jest normalny
# h1 ~h0
# h0' rozkład średnich ocen w populacji studentów jest normalny
# h1' ~h0'
by(Ankieta$Średnia, Ankieta$Płeć, shapiro.test)
# dla kobiet: W = 0.97625, p-value = 0.942
# dla mężczyzn: W = 0.97148, p-value = 0.1578
# aplha = 0.01
# w obu przypadka alpha < p-value
# brak podstaw do odrzucenia h0 i h0'
# b)
# h0 jednorodność wariancji sigma.k^2 = sigma.m^2
# h1 ~h0
var.test(Ankieta$Średnia ~ Ankieta$Płeć)
# F = 0.40623, num df = 9, denom df = 61, p-value = 0.1459
# alpha = 0.01
# Wniosek: brak podstaw do odrzucenia h0
# będziemy stosować test bez poprawki welcha
# c)
# h0 m.kobiet = m.mężczyzn
# h1 m.kobiet > m.mężczyzn
t.test(Ankieta$Średnia ~ Ankieta$Płeć, alternative = 'g', var.equal = TRUE)
# t = -0.49177, df = 70, p-value = 0.6878
# alpha = 0.01
# Wniosek: Na poziomie istotności 0.01 nie ma podstaw do odrzucenia hipotezy h0, zatem wyniki próby nie potwierdzają przypuszczenia, że średnie oceny studentek są wyższe niż studentów studiujących na I roku WI na ZUT w Szczecinie w tym roku akademickim.
# Zadanie 2
# alpha = 0.05
# Test dla dwóch wskaźników struktury
# grupy:
# 1 grupa mieszkających z rodziną
# 2 grupa mieszkających poza domem rodzinnym
# wyróżniona cecha: absolewnci TI
# Hipotezy:
# h0 p1 = p2
# h1 p1 < p2
table(Ankieta$M.zamieszkania, Ankieta$Sz.średnia)
prop.test(c(15, 20), c(32, 40), alternative = 'l')
# X-squared = 0.00069498, df = 1, p-value = 0.4895
# aplha = 0.05
# Wniosek: na poziomie istotności 0.05 nie można odrzucić hipotezy h0. Zatem odsetki osób, które ukończyły TI nie różnią się istotnie dla mieszkających podczas studiowania z rodziną oraz dla mieszkających poza domem rodzinnym.
# Zadanie 3
# próby zależne
# alpha = 0.01
# założenie: normalność różnicy zmiennych
# h0 rozkład różnicy zmiennych jest normalny
# h1 ~h0
x1 = c(225, 236, 312, 238, 241, 196, 205, 259, 218)
x2 = c(216, 195, 245, 235, 221, 170, 180, 265, 179)
shapiro.test(x1 - x2)
# W = 0.96898, p-value = 0.8858
# Wniosek: brak podstaw do odrzucenia h0
# test studenta dla dwóch średnich próby zależne
# h0 m1 - m2 = 0
# h1 m1 - m2 > 0
t.test(x1, x2, paired = T, alternative = 'g')
# t = 3.3633, df = 8, p-value = 0.004942
# Wniosek: na poziomie isotności 0.01 odrzucamy h0 i przyjmujemy h1, zatem leczenie statynami istotnie wpływa na obniżenie poziomu cholesterolu.
# Zadanie 4
# normalność rozkładów -> jednorodność wariancji -> właściwy test
# aplha = 0.01
# założenie 1: normalność rozkładów
# h0 średni wzrost w populacji studentek jest normalny
# h1 ~h0
# h0' średni wzrost w populacji studentów jest normalny
# h1 ~h0'
by(Ankieta$Wzrost, Ankieta$Płeć, shapiro.test)
# dla kobiet: W = 0.95432, p-value = 0.7197
# dla mężczyzn: W = 0.9598, p-value = 0.04048
# brak podstaw do odrzucenia h0 i h0'
# założenie 2: jednorodność wariancji
# h0 jednorodność wariancji k.sigma^2 = m.sigma^2
# h1 ~h0
var.test(Ankieta$Wzrost ~ Ankieta$Płeć)
# F = 1.2842, num df = 9, denom df = 61, p-value = 0.528
# brak podstaw do odrzucenia h0
# będziemy stosować test bez poprawki welcha
# h0 m.kobiet = m.mężczyzn
# h1 m.kobiet ≠ m.mężczyzn
t.test(Ankieta$Wzrost ~ Ankieta$Płeć, alternative = 'two.sided', var.equal = T)
# t = -5.2844, df = 70, p-value = 1.36e-06
# Na poziomie istotności 0.01 odrzucamy h0 i przyjmujemy h1.
# zadanie 5
# wskaźnik struktury, grupująca jest płeć
# zadanie 7
# zadanie 8
# alpha = 0.02
# założenie 1: normalność rozkładu
# h0 rozkład średnich ocen w grupie posiadającej rodzeństwo jest normalny
# h1 ~h0
# h0' rozkład średnich ocen w grupie nieposiadającej rodzeństwa jest normalny
# h1' ~h0'
by(Ankieta$Średnia, Ankieta$Rodzeństwo, shapiro.test)
# nieposiadający rodzeństwa: W = 0.93477, p-value = 0.3929
# posiadający rodzeństwo: W = 0.97486, p-value = 0.26
# brak podstaw do odrzucenia h0 i h0'
# założenie 2: jednorodność wariancji
# h0 jednorodność wariancji n.sigma^2 = t.sigma^2
# h1 ~h0
var.test(Ankieta$Średnia ~ Ankieta$Rodzeństwo)
# F = 0.80082, num df = 12, denom df = 58, p-value = 0.704
# brak podstaw do odrzucenia h0
# test bez poprawki welcha
# h0 m.z_rodzeństwem = m.bez_rodzeństwa
# h1 m.z_rodzeństwem ≠ m.bez_rodzeństwa
t.test(Ankieta$Średnia ~ Ankieta$Rodzeństwo, alternative = 'two.sided', var.equal = T)
# t = -0.61915, df = 70, p-value = 0.5378
# wniosek: na poziomie istotności 0.02 brak podstaw do odrzucenia h0, że średnia ocen osób posiadających rodzeństwo nie różni istotnie od średniej osób nieposiadających rodzieństwa w badanej grupie.

View File

@@ -0,0 +1,178 @@
# zadanie 1
# zmienna mierzalna
plony = c(2.6, 2.4, 2, 1.8, 2.2, 1.5, 1.5, 1.4, 1.2, 1.5, 1.2, 1.5, 0.8, 1)
# zmienna grupująca
kombinacje = c(rep('1', 5), rep('2', 4), rep('3', 5))
## Normalność rozkładów
### (wariant skrócony)
by(plony, kombinacje, shapiro.test)
# kombinacja 1: W = 0.98676, p-value = 0.9672
# kombinacja 2: W = 0.82743, p-value = 0.1612
# kombinacja 3: W = 0.90345, p-value = 0.4292
# Brak podstaw do odrzucenia hipotez zerowych
## Jednorodność wariancji
# h0: sigma^2 = (sigma.2)^2 = (sigma.3)^2
# h1: ~h0
bartlett.test(plony ~ kombinacje)
# Bartlett's K-squared = 1.8396, df = 2, p-value= 0.3986
# alpha < p-value Brak podstaw do odrzucenia h0
## Test anova
# h0: m.1 = m.2 = m.3 (brak wpływu)
# h1: ~h0 (istotny wpływ)
anova(aov(plony ~ kombinacje))
# Response: plony
# Df Sum Sq Mean Sq F value Pr(>F)
# kombinacje 2 2.7571 1.37857 18.053 0.0003356 ***
# Residuals 11 0.8400 0.07636
# F: 18.053 p-value: 0.0003356
# Odrzucamy h0, przyjmujemy h1, nawóz ma istotny wpływ
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem nawożenie istotnie wpływa na plony rzepaku jarego.
# Zadanie 2
# Jedna próba
## Test normalności rozkładu
# wariant skrócony
shapiro.test(Ankieta.M$Waga)
# W = 0.94653, p-value = 0.009113
# Odrzucamy h0
# Test nieparametryczny Wilcoxona
# h0: mediana = 70
# h1: mediana > 70
wilcox.test(Ankieta.M$Waga, mu = 70, alternative = 'g')
# V = 1129.5, p-value = 0.008091
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1. Zatem mediana wagi populacji mężczyzn studiujących na I roku WI ZUT w Szczecinie jest istotnie większa od 70kg.
# Zadanie 3
# Dwie niezależne próby
utargi = c(7.6, 12.0, 7.3, 11.3, 7.0, 10.8, 6.5, 8.1, 3.2, 8.7, 8.8, 11.7, 12.7, 18.5, 3.3, 6.7, 8.6, 6.9, 3.8, 3.7) # zmienna mierzalna
miasta = c(rep('A', 13), rep('B', 7)) # zmienna grupująca
## Normalność rozkładu
# wariant skrócony
by(utargi, miasta, shapiro.test)
# Miasto A: W = 0.94565, p-value = 0.5341
# Brak podstaw do odrzucenia h0
# Miasto B: W = 0.76886, p-value = 0.01989
# Odrzucamy h0
# Wniosek: odrzucamy hipotezę, że rozkład miesięcznego utargu w mieście B jest zgodny z rozkładem normalnym.
## Test nieparametryczny wilcoxona
# h0: mediana.A = mediana.B
# h1: mediana.A > mediana.B
wilcox.test(utargi ~ miasta, alternative = 'g')
# W = 65, p-value = 0.0674
# brak podstaw do odrzucenia h0
# Wniosek: Na poziomie istotności 0.05 nie ma podstaw by odrzucić hipotezę h0. Mediany utargów w mieście A i B nie różnią się istotnie.
# Zadanie 4
# Dwie zależne próby
x1 = c(85, 122, 162, 206, 121, 250, 200, 156)
x2 = c(87, 82, 158, 96, 131, 121, 194, 130)
## Normalność rozkładu różnicy zmiennych
# wariant skrócony
shapiro.test(x1 - x2)
# W = 0.81838, p-value = 0.04487
# Wniosek: odrzucamy h0
## Test nieparametryczny Wilcoxona: próby zależne
# h0: mediana1 - mediana2 = 0
# h1: mediana1 - mediana2 > 0
wilcox.test(x1, x2, paired = T, alternative = 'g')
# V = 31, p-value = 0.03906
# Odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem trening istotnie wpływa na skrócenie czasu potrzebnego myszom na wyjście z labiryntu.
# Zadanie 5
frewkencja = c(32.5, 40.8, 41.7, 41.2, 37.9, 38.3, 42, 39.8, 43.1, 42.6, 38.9, 43.1, 40.4, 41.8, 42, 39, 43.7, 40, 39.7, 43, 43.1, 43.9, 44.2, 45.2, 44.6, 42.5, 43.4, 44.8, 42.8, 43.1, 44.8, 45)
miasta = c(rep('Wroclaw', 10), rep('Warszawa', 11), rep('Krakow', 11))
# alhpa = 0.05
# 3 próby
## Jednorodność wariancji
# h0: sigma^2 = (sigma.2)^2 = (sigma.3)^2
# h1: ~h0
bartlett.test(frewkencja ~ miasta)
# Bartlett's K-squared = 11.774, df = 2, p-value = 0.002775
# aplha > p-value
# odrzucamy h0, przyjmujemy h1
# h0: mediana.1 = mediana.2 = mediana.3
# h1: ~h0
kruskal.test(frewkencja ~ miasta)
# Kruskal-Wallis chi-squared = 16.791, df = 2, p-value = 0.0002259
# alpha > p-value
# odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem frekwencja w wyborach prezydenckich dla wszystkich tych miast nie jest taka sama.
# Zadanie 8
# 3 próby
# alpha = 0.01
## Test normalności
# wariant skrócony
by(Ankieta$L.godzin, Ankieta$M.zamieszkania, shapiro.test)
# akademik: W = 0.96227, p-value = 0.5107
# mieszkanie z rodziną: W = 0.98145, p-value = 0.8405
# stancja lub inne: W = 0.95429, p-value = 0.5278
# W każdej próbce brak podstaw do odrzucenia h0
## Test jednorodności wariancji
# h0: sigma.0^2 = (sigma.1)^2 = (sigma.2)^2
# h1: ~h0
bartlett.test(Ankieta$L.godzin ~ Ankieta$M.zamieszkania)
# Bartlett's K-squared = 0.47545, df = 2, p-value = 0.7884
# alpha < p-value
# brak podstaw do odrzucenia h0, zatem wariancje są jednorodne
# h0: m0 = m1 = m2 (brak wpływu)
# h1: ~h0 (istotny wpływ)
anova(aov(Ankieta$L.godzin ~ Ankieta$M.zamieszkania))
# F - 0.5896 p-value 0.5573
# alpha < 0.5573
# brak podstaw do odrzucenia h0
# Wniosek: Na poziomie istotności 0.01 nie ma podstaw do odrzucenia h0, zatem liczba godzin spędzonych przed komputerem w ciągu doby w popuplacji studentów pierwszego roku WI ZUT w Szczecinie w tym roku akademickim nie zależy od miejsca zamieszkania.

View File

@@ -0,0 +1,66 @@
# a)
summary(Ankieta$Płeć)
# Length Class Mode
# 72 character character
Ankieta$Płeć = factor(Ankieta$Płeć) # ustawiamy płeć na typ kategorialny
# robimy to samo dla pozostałych niemierzalnych cech
Ankieta$Sysytem = factor(Ankieta$System)
Ankieta$M.zamieszkania = factor(Ankieta$M.zamieszkania)
Ankieta$Sz.średnia = factor(Ankieta$Sz.średnia)
Ankieta$Rodzeństwo = factor(Ankieta$Rodzeństwo)
summary(Ankieta$Płeć)
# b)
Ankieta$Średnia = round(((Ankieta$Algebra * 5 + Ankieta$Fizyka * 5 + Ankieta$Programowanie1 * 5 + Ankieta$MSzS1 * 5 + Ankieta$Algorytmy1 * 6 + Ankieta$WdI * 4) / 30), 2);
# c)
Ankieta.kursy = subset(Ankieta, select = c(Algebra, Fizyka, Programowanie1, WdI, MSzS1, Algorytmy1))
# d)
Ankieta$Waga.dag = Ankieta$Waga * 100
# e)
Ankieta$Waga.dag = NULL;
# f)
ggplot(Ankieta, aes(x=Płeć, y=Wzrost))+geom_boxplot(fill='red', col='blue')
ggplot(Ankieta, aes(x=Płeć, y=Waga))+geom_boxplot(fill='red', col='blue')
# g)
zakres3sigm = function(x) {
data.frame(lewy.kres=mean(x) - 3 * sd(x), prawy.kres=mean(x) + 3 * sd(x))
}
zakres3sigm(Ankieta$Wzrost)
# h)
Ankieta.M = subset(Ankieta, Płeć == 'M')
Ankieta.K = subset(Ankieta, Płeć == 'K')
# i)
# === K ===
zakres3sigm(Ankieta.K$Wzrost)
summary(Ankieta.K$Wzrost)
zakres3sigm(Ankieta.K$Waga)
summary(Ankieta.K$Waga)
# === M ===
zakres3sigm(Ankieta.M$Wzrost)
summary(Ankieta.M$Wzrost)
zakres3sigm(Ankieta.M$Waga)
summary(Ankieta.M$Waga)
which(Ankieta.M$Waga > 126)
Ankieta.M$Waga[28] = round(mean(Ankieta.M$Waga[-28]), 1)
i = which(Ankieta$Waga > 126)
Ankieta$Waga[i] = round(mean(Ankieta.M$Waga[-28]), 1)
# j)

View File

@@ -0,0 +1,84 @@
# zadanie 1
p.opisowe = function(wektor) {
library(moments)
srednia = round(mean(wektor), 2)
mediana = round(median(wektor), 2)
kwartyl_dolny = round(quantile(wektor, 1/4), 2)
kwartyl_gorny = round(quantile(wektor, 3/4), 2)
minimum = round(min(wektor), 2)
maximum = round(max(wektor), 2)
odchylenie = round(sd(wektor), 2)
rozstep_empiryczny = round(max(wektor) - min(wektor), 2)
rozstep_kwartylowy = round(IQR(wektor), 2)
wspolczynnik_zmiennosci = round(sd(wektor)/mean(wektor) * 100, 2)
skosnosc = round(skewness(wektor), 2)
kurtoza = round(kurtosis(wektor), 2)
rbind(srednia, mediana, kwartyl_dolny, kwartyl_gorny, minimum, maximum, odchylenie, rozstep_empiryczny, rozstep_kwartylowy, wspolczynnik_zmiennosci, skosnosc, kurtoza)
}
# zadanie 2
# współczynnik zmienności
# |V| <= 10% słaba zmienność
# 10% < |V| <= 50% umiarkowana zmienność
# |V| > 50% duża zmienność
# skośność (współczynnik asymetrii)
# |G| <= 0.5 słaba
# 0.5 < |G| < 1 umiarkowana
# |G| > 1 duża silna asymetria
# G < 0 lewostronna
# G > 0 prawostronna
# G = 0 symetria (prawie się nie zdarza)
# kurtoza (współczynnik skupienia/spłaczszczenia)
# K = 3 rozkład normalny
# K < 3 niższe skupienie niż w rozkładzie normalnym
# K > 3 wyższe skupienie niż w rozkładzie normalnym
# a)
p.opisowe(Ankieta$Wzrost)
# kwartyl_dolny 174.00 wzrost 25% mężczyzn nie przekroczył 174
# odchylenie 7.16 wzrost mężczyzn odchylał się od średniej wzrostu przeciętnie o około 7.16
# wspolczynnik_zmiennosci 3.98 udział odchylenia standardowego wzrostu w wartości średniej wynosi 3.98 co świadczy o tym, że mężczyźni są słabo zróżnicowani pod względem wzrostu
# skosnosc 0.20 rozkład wzrostu mężczyzn charakteryzuje się słabą asymetrią prawostronną
# b)
p.opisowe(Ankieta$Średnia)
# mediana 3.80 średnia 50% studentów w badanej grupie nie przekroczyla 3.80
# kwartyl_gorny 4.24 średnia 75% studentów w badanej grupie nie przekroczyla 4.24
# c)
p.opisowe(Ankieta$L.godzin)
# srednia 7.07 czas spędzany przy komputerze w badanej grupie skupiał się wokół wartości 7.07
# kurtoza 2.55 rozklad czasu spędzanego przy komputerze w badanej grupie charakteryzuje się niższym skupieniem wokół średniej wagi niż w rozkładzie normalnym.
# zadanie 3
przedzial.odchylenie = function(x, uf) {
# 1 - a = uf
# a = 1 - uf
a = 1 - uf
n = length(x)
ss_z_daszkiem = var(x)
# s^2 = (n - 1)/n * ss_z_daszkiem
ss = (n - 1)/n * ss_z_daszkiem
dolna = sqrt((n * ss) / qchisq(1 - (a / 2), n - 1))
gorna = sqrt((n * ss) / qchisq(a / 2, n - 1))
round(cbind(dolna, gorna), 4)
}
przedzial.odchylenie(Ankieta.M$Wzrost, 0.95)
# zadanie 4
# a)
ggplot(data.frame(x=c(-4, 4)), aes(x))+ylab('Gęstość rozkładu studenta')+ stat_function(fun=dt, args=1, col='red', size=1) + stat_function(fun=dt, args=2, col='pink', size=1) + stat_function(fun=dt, args=10, col='green', size=1) + stat_function(fun=dt, args=50, col='blue', size=1)
# b)
ggplot(data.frame(x=c(-1, 100)), aes(x))+ylab('Gęstość rozkładu chi kwadrat') + stat_function(fun=dchisq, args=5, col='red', size=1) + stat_function(fun=dchisq, args=10, col='blue', size=1) + stat_function(fun=dchisq, args=20, col='green', size=1) + stat_function(fun=dchisq, args=50, col='pink', size=1)

View File

@@ -0,0 +1,122 @@
# zadanie 1
# a)
# założenie: normalność rozkładu test shapiro-wilka
# hipoteza podstawowa h0 rozkład wzrostu w populacji mężczyzn jest normalny
# hipoteza h1 nieprawda, że h0
shapiro.test(Ankieta.M$Wzrost)
# Statystyka testowa W = 0.9598, p-value = 0.04048
# alpha = 0.01 # poziom istotności
# wniosek alpha < p-value, więc na poziomie istotności 0.01 nie ma podstaw do odrzucenia h0, że rozkład wzrostu w populacji mężczyzn jest zgodny z rozkładem normalnym.
# b)
# przedzial ufności dla wartości średniej w populacji (mężczyzn)
t.test(Ankieta.M$Wzrost, conf.level = 0.95)
# 178.0049 181.6403
# interpretacja: przedział liczbowy od 178.0049 do 181.6403 z prawdopodobieństwem 0.95 obejmuje nieznaną wartość średnią wzrostu w populacji mężczyzn studiujących na pierwszym roku WI ZUT w Szczecinie w tym roku akademickim (2025/2026)
t.test(Ankieta.M$Wzrost, conf.level = 0.98)
# 177.6509 181.9942
# ze wzrostem współczynnika ufności poszerza się przedział ufności
# c)
# przedział ufności dla odchylenia standardowego w populacji m.
przedzial.odchylenie = function(x, uf) {
# 1 - a = uf
# a = 1 - uf
a = 1 - uf
n = length(x)
ss_z_daszkiem = var(x)
# s^2 = (n - 1)/n * ss_z_daszkiem
ss = (n - 1)/n * ss_z_daszkiem
dolna = sqrt((n * ss) / qchisq(1 - (a / 2), n - 1))
gorna = sqrt((n * ss) / qchisq(a / 2, n - 1))
round(cbind(dolna, gorna), 4)
}
przedzial.odchylenie(Ankieta.M$Wzrost, 0.97)
# 5.9801 8.8895
# interpretacja: przedzial o końcach 5.9801 i 8.8895 [cm] z ufnością 0.97 obejmuje rzeczywistą wartość odchylenia standardowego wzrostu w populacji mężczyzn studiujących na pierwszym roku WI ZUT w Szczecinie w tym roku akademickim.
# d)
# test dla wartości średniej w populacji
# hipoteza h0: m = 180
# hipoteza h1: m > 180
t.test(Ankieta.M$Wzrost, mu = 180, alternative = 'g')
# statystyka testowa t = -0.19518, df = 61, p-value = 0.577
# alpha = 0.01
# alpha < p-value, więc
# na poziomie istotności 0.01 nie ma podstaw do odrzucenia hipotezy h0. Nie można zatem potwierdzić hipotezy, że średni wzrost mężczyzn w badanej populacji jest większy niż 180 cm.
# zadanie 2
table(Ankieta$Sz.średnia)
# LO(RM) = 22
# a)
# przedział ufności dla odsetka (wskaźnika struktury, frakcji, procentu, proporcji)
prop.test(22, 72, conf.level = 0.98)
# 0.1909 0.4489
# te końce nie mają jednostek!
# interpretacja: przedział o końcach 0.1909 i 0.4489 z ufnością 0.98 obejmuje rzeczywistą wartość odsetka osób, które ukończyły LO(RM) w badanej populacji.
# b)
# test dla wskaźnika struktury
# hipoteza h0: p = 45%
# hipoteza h1: p < 45%
prop.test(22, 72, p = 0.45, alternative = 'l')
# statystyka testowa X-squared = 5.5, df = 1, p-value = 0.009508
# alpha = 0.05
# alpha > p-value, więc
# odrzucamy h0
# Alpha jest większa niż p-value, więc na poziomie istotności 0.05 odrzucamy hipotezę h0 i przyjmujemy h1, zatem odsetek osób, które ukończyły LO(RM) w badanej populacji studentów jest istotnie mniejszy, niż 45%.
# zadanie 3
# a)
# hipoteza h0: rozkład wagi w populacji kobiet jest normalny
# hipotezea h1: rozkład wagi w populacji kobiet nie jest normalny
shapiro.test(Ankieta.K$Waga)
# W = 0.94975, p-value = 0.6656
# alpha = 0.05
# alpha < p-value, więc
# na poziomie istotności 0.05 nie ma podstaw do odrzucenia h0, że rozkład wagi w populacji kobiet jest normalny
# b)
t.test(Ankieta.K$Waga, conf.level = 0.98)
# 49.34915 63.85085
# interpretacja: przedział o końcach 49.34915 i 63.85085 [kg] z ufnością 0.98 zawiera rzeczywistą wartość średniej wagi w populacji wszystkich kobiet studiujących na I roku WI
# zadanie 4
# a)
table(Ankieta$M.zamieszkania)
# akademik = 23
prop.test(23, 72, conf.level = 0.995)
# 0.1842 0.4918
# interpretacja: przedział o końcach 0.1842 i 0.4918 z ufnością 0.995 obejmuje rzeczywistą wartość odestka osób, które mieszkają w akademiku podczas studiowania na pierwszym roku kierunku informatyka na WI ZUT w Szczecinie w tym roku akademickim
# b)
# hipoteza h0: p = 0.35
# hipoteza h1: p != 0.35
prop.test(23, 72, p = 0.35, alternative = 'two.sided')
# X-squared = 0.17643, df = 1, p-value = 0.6745
# alpha = 0.05
# alpha < p-value, więc
# odrzucamy h0
# wniosek: Alpha jest mniejsze, niż p-value, więc nie ma podstaw do odrzucenia h0, że odsetek osób, które mieszkają w akademiku w populacji wszystkich studentów I roku na WI różnie się istotnie od 35%

View File

@@ -0,0 +1,13 @@
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8
RnwWeave: Sweave
LaTeX: pdfLaTeX

View File

@@ -0,0 +1,701 @@
#### === LAB 7 Zarządzanie danymi i elementami statystyki opisowej==== ####
# Ogólne manipulowanie zestawem danych
## Wyświetlenie podsumowania danych
### przed faktoryzacją
summary(Ankieta)
Ankieta$Płeć = factor(Ankieta$Płeć) # <- ustawiamy płeć jako zmienną kategorialną
### po faktoryzacji
summary(Ankieta)
Ankieta$Sysytem = factor(Ankieta$System)
Ankieta$M.zamieszkania = factor(Ankieta$M.zamieszkania)
Ankieta$Sz.średnia = factor(Ankieta$Sz.średnia)
Ankieta$Rodzeństwo = factor(Ankieta$Rodzeństwo)
## Dodanie kolumny
Ankieta$Średnia = round(((Ankieta$Algebra * 5 + Ankieta$Fizyka * 5 + Ankieta$Programowanie1 * 5 + Ankieta$MSzS1 * 5 + Ankieta$Algorytmy1 * 6 + Ankieta$WdI * 4) / 30), 2); # Po prostu wpisujemy co chcemy
## Skopiowanie kolumny z ocenami (subset)
Ankieta$Średnia = round(((Ankieta$Algebra * 5 + Ankieta$Fizyka * 5 + Ankieta$Programowanie1 * 5 + Ankieta$MSzS1 * 5 + Ankieta$Algorytmy1 * 6 + Ankieta$WdI * 4) / 30), 2); # select pozwala wybrac konkretne kolumny poprzez wektor
## Dodanie i likwidacja kolumny
Ankieta$Waga.dag = Ankieta$Waga * 100 # <- dodaje
Ankieta$Waga.dag = NULL # <- likwiduje
# Wykres ramka-wąsy
ggplot(Ankieta, aes(x=Ankieta$Płeć, y=Ankieta$Waga)) + geom_boxplot(fill='red', col='purple') # x zmienna kategorialna, y zmienna mierzalna
## funkcja
zakres3sigm = function(x) {
data.frame(lewy.kres=mean(x) - 3 * sd(x), prawy.kres=mean(x) + 3 * sd(x))
}
## Podzbiory
Ankieta.M = subset(Ankieta, Ankieta$Płeć == 'M')
Ankieta$L.g.kody = cut(Ankieta$L.godzin, breaks = c(0, 4, 8, 24), labels = c("krótko", "średnio", "długo"), include.lowest = TRUE)
table(Ankieta$L.g.kody)
#### === LAB 8 Parametry opisowe === ####
# zadanie 1
p.opisowe = function(wektor) {
library(moments)
srednia = round(mean(wektor), 2)
mediana = round(median(wektor), 2)
kwartyl_dolny = round(quantile(wektor, 1/4), 2)
kwartyl_gorny = round(quantile(wektor, 3/4), 2)
minimum = round(min(wektor), 2)
maximum = round(max(wektor), 2)
odchylenie = round(sd(wektor), 2)
rozstep_empiryczny = round(max(wektor) - min(wektor), 2)
rozstep_kwartylowy = round(IQR(wektor), 2)
wspolczynnik_zmiennosci = round(sd(wektor)/mean(wektor) * 100, 2)
skosnosc = round(skewness(wektor), 2)
kurtoza = round(kurtosis(wektor), 2)
rbind(srednia, mediana, kwartyl_dolny, kwartyl_gorny, minimum, maximum, odchylenie, rozstep_empiryczny, rozstep_kwartylowy, wspolczynnik_zmiennosci, skosnosc, kurtoza)
}
# zadanie 2
# współczynnik zmienności
# |V| <= 10% słaba zmienność
# 10% < |V| <= 50% umiarkowana zmienność
# |V| > 50% duża zmienność
# skośność (współczynnik asymetrii)
# |G| <= 0.5 słaba
# 0.5 < |G| < 1 umiarkowana
# |G| > 1 duża silna asymetria
# G < 0 lewostronna
# G > 0 prawostronna
# G = 0 symetria (prawie się nie zdarza)
# kurtoza (współczynnik skupienia/spłaczszczenia)
# K = 3 rozkład normalny
# K < 3 niższe skupienie niż w rozkładzie normalnym
# K > 3 wyższe skupienie niż w rozkładzie normalnym
# a)
p.opisowe(Ankieta$Wzrost)
# kwartyl_dolny 174.00 wzrost 25% mężczyzn nie przekroczył 174
# odchylenie 7.16 wzrost mężczyzn odchylał się od średniej wzrostu przeciętnie o około 7.16
# wspolczynnik_zmiennosci 3.98 udział odchylenia standardowego wzrostu w wartości średniej wynosi 3.98 co świadczy o tym, że mężczyźni są słabo zróżnicowani pod względem wzrostu
# skosnosc 0.20 rozkład wzrostu mężczyzn charakteryzuje się słabą asymetrią prawostronną
# b)
p.opisowe(Ankieta$Średnia)
# mediana 3.80 średnia 50% studentów w badanej grupie nie przekroczyla 3.80
# kwartyl_gorny 4.24 średnia 75% studentów w badanej grupie nie przekroczyla 4.24
# c)
p.opisowe(Ankieta$L.godzin)
# srednia 7.07 czas spędzany przy komputerze w badanej grupie skupiał się wokół wartości 7.07
# kurtoza 2.55 rozklad czasu spędzanego przy komputerze w badanej grupie charakteryzuje się niższym skupieniem wokół średniej wagi niż w rozkładzie normalnym.
# zadanie 3
przedzial.odchylenie = function(x, uf) {
# 1 - a = uf
# a = 1 - uf
a = 1 - uf
n = length(x)
ss_z_daszkiem = var(x)
# s^2 = (n - 1)/n * ss_z_daszkiem
ss = (n - 1)/n * ss_z_daszkiem
dolna = sqrt((n * ss) / qchisq(1 - (a / 2), n - 1))
gorna = sqrt((n * ss) / qchisq(a / 2, n - 1))
round(cbind(dolna, gorna), 4)
}
przedzial.odchylenie(Ankieta.M$Wzrost, 0.95)
# zadanie 4
# a)
ggplot(data.frame(x=c(-4, 4)), aes(x))+ylab('Gęstość rozkładu studenta')+ stat_function(fun=dt, args=1, col='red', size=1) + stat_function(fun=dt, args=2, col='pink', size=1) + stat_function(fun=dt, args=10, col='green', size=1) + stat_function(fun=dt, args=50, col='blue', size=1)
# b)
ggplot(data.frame(x=c(-1, 100)), aes(x))+ylab('Gęstość rozkładu chi kwadrat') + stat_function(fun=dchisq, args=5, col='red', size=1) + stat_function(fun=dchisq, args=10, col='blue', size=1) + stat_function(fun=dchisq, args=20, col='green', size=1) + stat_function(fun=dchisq, args=50, col='pink', size=1)
#### === LAB 9 Estymacja i testowanie hipotez dla jednej populacji === ####
# zadanie 1
# a)
# założenie: normalność rozkładu test shapiro-wilka
# hipoteza podstawowa h0 rozkład wzrostu w populacji mężczyzn jest normalny
# hipoteza h1 nieprawda, że h0
shapiro.test(Ankieta.M$Wzrost)
# Statystyka testowa W = 0.9598, p-value = 0.04048
# alpha = 0.01 # poziom istotności
# wniosek alpha < p-value, więc na poziomie istotności 0.01 nie ma podstaw do odrzucenia h0, że rozkład wzrostu w populacji mężczyzn jest zgodny z rozkładem normalnym.
# b)
# przedzial ufności dla wartości średniej w populacji (mężczyzn)
t.test(Ankieta.M$Wzrost, conf.level = 0.95)
# 178.0049 181.6403
# interpretacja: przedział liczbowy od 178.0049 do 181.6403 z prawdopodobieństwem 0.95 obejmuje nieznaną wartość średnią wzrostu w populacji mężczyzn studiujących na pierwszym roku WI ZUT w Szczecinie w tym roku akademickim (2025/2026)
t.test(Ankieta.M$Wzrost, conf.level = 0.98)
# 177.6509 181.9942
przedzial.odchylenie(Ankieta.M$Wzrost, 0.97)
# 5.9801 8.8895
# interpretacja: przedzial o końcach 5.9801 i 8.8895 [cm] z ufnością 0.97 obejmuje rzeczywistą wartość odchylenia standardowego wzrostu w populacji mężczyzn studiujących na pierwszym roku WI ZUT w Szczecinie w tym roku akademickim.
# d)
# test dla wartości średniej w populacji
# hipoteza h0: m = 180
# hipoteza h1: m > 180
t.test(Ankieta.M$Wzrost, mu = 180, alternative = 'g')
# statystyka testowa t = -0.19518, df = 61, p-value = 0.577
# alpha = 0.01
# alpha < p-value, więc
# na poziomie istotności 0.01 nie ma podstaw do odrzucenia hipotezy h0. Nie można zatem potwierdzić hipotezy, że średni wzrost mężczyzn w badanej populacji jest większy niż 180 cm.
table(Ankieta$Sz.średnia)
# LO(RM) = 22
# a)
# przedział ufności dla odsetka (wskaźnika struktury, frakcji, procentu, proporcji)
prop.test(22, 72, conf.level = 0.98)
# 0.1909 0.4489
# te końce nie mają jednostek!
# interpretacja: przedział o końcach 0.1909 i 0.4489 z ufnością 0.98 obejmuje rzeczywistą wartość odsetka osób, które ukończyły LO(RM) w badanej populacji.
# b)
# test dla wskaźnika struktury
# hipoteza h0: p = 45%
# hipoteza h1: p < 45%
prop.test(22, 72, p = 0.45, alternative = 'l')
# statystyka testowa X-squared = 5.5, df = 1, p-value = 0.009508
# alpha = 0.05
# alpha > p-value, więc
# odrzucamy h0
# Alpha jest większa niż p-value, więc na poziomie istotności 0.05 odrzucamy hipotezę h0 i przyjmujemy h1, zatem odsetek osób, które ukończyły LO(RM) w badanej populacji studentów jest istotnie mniejszy, niż 45%.
# zadanie 3
# a)
# hipoteza h0: rozkład wagi w populacji kobiet jest normalny
# hipotezea h1: rozkład wagi w populacji kobiet nie jest normalny
shapiro.test(Ankieta.K$Waga)
# W = 0.94975, p-value = 0.6656
# alpha = 0.05
# alpha < p-value, więc
# na poziomie istotności 0.05 nie ma podstaw do odrzucenia h0, że rozkład wagi w populacji kobiet jest normalny
# b)
t.test(Ankieta.K$Waga, conf.level = 0.98)
# 49.34915 63.85085
# interpretacja: przedział o końcach 49.34915 i 63.85085 [kg] z ufnością 0.98 zawiera rzeczywistą wartość średniej wagi w populacji wszystkich kobiet studiujących na I roku WI
# zadanie 4
# a)
table(Ankieta$M.zamieszkania)
# akademik = 23
prop.test(23, 72, conf.level = 0.995)
# 0.1842 0.4918
# interpretacja: przedział o końcach 0.1842 i 0.4918 z ufnością 0.995 obejmuje rzeczywistą wartość odestka osób, które mieszkają w akademiku podczas studiowania na pierwszym roku kierunku informatyka na WI ZUT w Szczecinie w tym roku akademickim
# b)
# hipoteza h0: p = 0.35
# hipoteza h1: p != 0.35
prop.test(23, 72, p = 0.35, alternative = 'two.sided')
# X-squared = 0.17643, df = 1, p-value = 0.6745
# alpha = 0.05
# alpha < p-value, więc
# odrzucamy h0
# wniosek: Alpha jest mniejsze, niż p-value, więc nie ma podstaw do odrzucenia h0, że odsetek osób, które mieszkają w akademiku w populacji wszystkich studentów I roku na WI różnie się istotnie od 35%
#### === LAB 10 === Testowanie hipotez dla dwóch populacji oraz test dla prób zależnych ####
# zadanie 1
# Próby niezależne
# a)
# założenie 1: normalność rozkładów
# h0 rozkład średnich ocen w populacji studentek jest normalny
# h1 ~h0
# h0' rozkład średnich ocen w populacji studentów jest normalny
# h1' ~h0'
by(Ankieta$Średnia, Ankieta$Płeć, shapiro.test)
# dla kobiet: W = 0.97625, p-value = 0.942
# dla mężczyzn: W = 0.97148, p-value = 0.1578
# aplha = 0.01
# w obu przypadka alpha < p-value
# brak podstaw do odrzucenia h0 i h0'
# b)
# h0 jednorodność wariancji sigma.k^2 = sigma.m^2
# h1 ~h0
var.test(Ankieta$Średnia ~ Ankieta$Płeć)
# F = 0.40623, num df = 9, denom df = 61, p-value = 0.1459
# alpha = 0.01
# Wniosek: brak podstaw do odrzucenia h0
# będziemy stosować test bez poprawki welcha
# wariancje jednorodne = bez poprawki welcha
# c)
# h0 m.kobiet = m.mężczyzn
# h1 m.kobiet > m.mężczyzn
t.test(Ankieta$Średnia ~ Ankieta$Płeć, alternative = 'g', var.equal = TRUE)
# t = -0.49177, df = 70, p-value = 0.6878
# alpha = 0.01
# Wniosek: Na poziomie istotności 0.01 nie ma podstaw do odrzucenia hipotezy h0, zatem wyniki próby nie potwierdzają przypuszczenia, że średnie oceny studentek są wyższe niż studentów studiujących na I roku WI na ZUT w Szczecinie w tym roku akademickim.
# Zadanie 2
# alpha = 0.05
# Test dla dwóch wskaźników struktury
# grupy:
# 1 grupa mieszkających z rodziną
# 2 grupa mieszkających poza domem rodzinnym
# wyróżniona cecha: absolewnci TI
# Hipotezy:
# h0 p1 = p2
# h1 p1 < p2
table(Ankieta$M.zamieszkania, Ankieta$Sz.średnia)
prop.test(c(15, 20), c(32, 40), alternative = 'l')
# X-squared = 0.00069498, df = 1, p-value = 0.4895
# aplha = 0.05
# Wniosek: na poziomie istotności 0.05 nie można odrzucić hipotezy h0. Zatem odsetki osób, które ukończyły TI nie różnią się istotnie dla mieszkających podczas studiowania z rodziną oraz dla mieszkających poza domem rodzinnym.
# Zadanie 3
# próby zależne
# alpha = 0.01
# założenie: normalność różnicy zmiennych
# h0 rozkład różnicy zmiennych jest normalny
# h1 ~h0
x1 = c(225, 236, 312, 238, 241, 196, 205, 259, 218)
x2 = c(216, 195, 245, 235, 221, 170, 180, 265, 179)
shapiro.test(x1 - x2)
# W = 0.96898, p-value = 0.8858
# Wniosek: brak podstaw do odrzucenia h0
# test studenta dla dwóch średnich próby zależne
# h0 m1 - m2 = 0
# h1 m1 - m2 > 0
t.test(x1, x2, paired = T, alternative = 'g')
# t = 3.3633, df = 8, p-value = 0.004942
# Wniosek: na poziomie isotności 0.01 odrzucamy h0 i przyjmujemy h1, zatem leczenie statynami istotnie wpływa na obniżenie poziomu cholesterolu.
# Zadanie 4
# normalność rozkładów -> jednorodność wariancji -> właściwy test
# aplha = 0.01
# założenie 1: normalność rozkładów
# h0 średni wzrost w populacji studentek jest normalny
# h1 ~h0
# h0' średni wzrost w populacji studentów jest normalny
# h1 ~h0'
by(Ankieta$Wzrost, Ankieta$Płeć, shapiro.test)
# dla kobiet: W = 0.95432, p-value = 0.7197
# dla mężczyzn: W = 0.9598, p-value = 0.04048
# brak podstaw do odrzucenia h0 i h0'
# założenie 2: jednorodność wariancji
# h0 jednorodność wariancji k.sigma^2 = m.sigma^2
# h1 ~h0
var.test(Ankieta$Wzrost ~ Ankieta$Płeć)
# F = 1.2842, num df = 9, denom df = 61, p-value = 0.528
# brak podstaw do odrzucenia h0
# będziemy stosować test bez poprawki welcha
# h0 m.kobiet = m.mężczyzn
# h1 m.kobiet ≠ m.mężczyzn
t.test(Ankieta$Wzrost ~ Ankieta$Płeć, alternative = 'two.sided', var.equal = T)
# t = -5.2844, df = 70, p-value = 1.36e-06
# Na poziomie istotności 0.01 odrzucamy h0 i przyjmujemy h1.
# zadanie 8
# alpha = 0.02
# założenie 1: normalność rozkładu
# h0 rozkład średnich ocen w grupie posiadającej rodzeństwo jest normalny
# h1 ~h0
# h0' rozkład średnich ocen w grupie nieposiadającej rodzeństwa jest normalny
# h1' ~h0'
by(Ankieta$Średnia, Ankieta$Rodzeństwo, shapiro.test)
# nieposiadający rodzeństwa: W = 0.93477, p-value = 0.3929
# posiadający rodzeństwo: W = 0.97486, p-value = 0.26
# brak podstaw do odrzucenia h0 i h0'
# założenie 2: jednorodność wariancji
# h0 jednorodność wariancji n.sigma^2 = t.sigma^2
# h1 ~h0
var.test(Ankieta$Średnia ~ Ankieta$Rodzeństwo)
# F = 0.80082, num df = 12, denom df = 58, p-value = 0.704
# brak podstaw do odrzucenia h0
# test bez poprawki welcha
# h0 m.z_rodzeństwem = m.bez_rodzeństwa
# h1 m.z_rodzeństwem ≠ m.bez_rodzeństwa
t.test(Ankieta$Średnia ~ Ankieta$Rodzeństwo, alternative = 'two.sided', var.equal = T)
# t = -0.61915, df = 70, p-value = 0.5378
# wniosek: na poziomie istotności 0.02 brak podstaw do odrzucenia h0, że średnia ocen osób posiadających rodzeństwo nie różni istotnie od średniej osób nieposiadających rodzieństwa w badanej grupie.
#### === LAB 11 === Testy dla populacji > 3####
# zadanie 1
# zmienna mierzalna
plony = c(2.6, 2.4, 2, 1.8, 2.2, 1.5, 1.5, 1.4, 1.2, 1.5, 1.2, 1.5, 0.8, 1)
# zmienna grupująca
kombinacje = c(rep('1', 5), rep('2', 4), rep('3', 5))
## Normalność rozkładów
### (wariant skrócony)
by(plony, kombinacje, shapiro.test)
# kombinacja 1: W = 0.98676, p-value = 0.9672
# kombinacja 2: W = 0.82743, p-value = 0.1612
# kombinacja 3: W = 0.90345, p-value = 0.4292
# Brak podstaw do odrzucenia hipotez zerowych
## Jednorodność wariancji
# h0: sigma^2 = (sigma.2)^2 = (sigma.3)^2
# h1: ~h0
bartlett.test(plony ~ kombinacje)
# Bartlett's K-squared = 1.8396, df = 2, p-value= 0.3986
# alpha < p-value Brak podstaw do odrzucenia h0
## Test anova
# h0: m.1 = m.2 = m.3 (brak wpływu)
# h1: ~h0 (istotny wpływ)
anova(aov(plony ~ kombinacje))
# Response: plony
# Df Sum Sq Mean Sq F value Pr(>F)
# kombinacje 2 2.7571 1.37857 18.053 0.0003356 ***
# Residuals 11 0.8400 0.07636
# F: 18.053 p-value: 0.0003356
# Odrzucamy h0, przyjmujemy h1, nawóz ma istotny wpływ
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem nawożenie istotnie wpływa na plony rzepaku jarego.
# Zadanie 2
# Jedna próba
## Test normalności rozkładu
# wariant skrócony
shapiro.test(Ankieta.M$Waga)
# W = 0.94653, p-value = 0.009113
# Odrzucamy h0
# Test nieparametryczny Wilcoxona
# h0: mediana = 70
# h1: mediana > 70
wilcox.test(Ankieta.M$Waga, mu = 70, alternative = 'g')
# V = 1129.5, p-value = 0.008091
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1. Zatem mediana wagi populacji mężczyzn studiujących na I roku WI ZUT w Szczecinie jest istotnie większa od 70kg.
# Zadanie 3
# Dwie niezależne próby
utargi = c(7.6, 12.0, 7.3, 11.3, 7.0, 10.8, 6.5, 8.1, 3.2, 8.7, 8.8, 11.7, 12.7, 18.5, 3.3, 6.7, 8.6, 6.9, 3.8, 3.7) # zmienna mierzalna
miasta = c(rep('A', 13), rep('B', 7)) # zmienna grupująca
## Normalność rozkładu
# wariant skrócony
by(utargi, miasta, shapiro.test)
# Miasto A: W = 0.94565, p-value = 0.5341
# Brak podstaw do odrzucenia h0
# Miasto B: W = 0.76886, p-value = 0.01989
# Odrzucamy h0
# Wniosek: odrzucamy hipotezę, że rozkład miesięcznego utargu w mieście B jest zgodny z rozkładem normalnym.
## Test nieparametryczny wilcoxona
# h0: mediana.A = mediana.B
# h1: mediana.A > mediana.B
wilcox.test(utargi ~ miasta, alternative = 'g')
# W = 65, p-value = 0.0674
# brak podstaw do odrzucenia h0
# Wniosek: Na poziomie istotności 0.05 nie ma podstaw by odrzucić hipotezę h0. Mediany utargów w mieście A i B nie różnią się istotnie.
# Zadanie 4
# Dwie zależne próby
x1 = c(85, 122, 162, 206, 121, 250, 200, 156)
x2 = c(87, 82, 158, 96, 131, 121, 194, 130)
## Normalność rozkładu różnicy zmiennych
# wariant skrócony
shapiro.test(x1 - x2)
# W = 0.81838, p-value = 0.04487
# Wniosek: odrzucamy h0
## Test nieparametryczny Wilcoxona: próby zależne
# h0: mediana1 - mediana2 = 0
# h1: mediana1 - mediana2 > 0
wilcox.test(x1, x2, paired = T, alternative = 'g')
# V = 31, p-value = 0.03906
# Odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem trening istotnie wpływa na skrócenie czasu potrzebnego myszom na wyjście z labiryntu.
# Zadanie 5
frewkencja = c(32.5, 40.8, 41.7, 41.2, 37.9, 38.3, 42, 39.8, 43.1, 42.6, 38.9, 43.1, 40.4, 41.8, 42, 39, 43.7, 40, 39.7, 43, 43.1, 43.9, 44.2, 45.2, 44.6, 42.5, 43.4, 44.8, 42.8, 43.1, 44.8, 45)
miasta = c(rep('Wroclaw', 10), rep('Warszawa', 11), rep('Krakow', 11))
# alhpa = 0.05
# 3 próby
## Jednorodność wariancji
# h0: sigma^2 = (sigma.2)^2 = (sigma.3)^2
# h1: ~h0
bartlett.test(frewkencja ~ miasta)
# Bartlett's K-squared = 11.774, df = 2, p-value = 0.002775
# aplha > p-value
# odrzucamy h0, przyjmujemy h1
# h0: mediana.1 = mediana.2 = mediana.3
# h1: ~h0
kruskal.test(frewkencja ~ miasta)
# Kruskal-Wallis chi-squared = 16.791, df = 2, p-value = 0.0002259
# alpha > p-value
# odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem frekwencja w wyborach prezydenckich dla wszystkich tych miast nie jest taka sama.
# Zadanie 8
# 3 próby
# alpha = 0.01
## Test normalności
# wariant skrócony
by(Ankieta$L.godzin, Ankieta$M.zamieszkania, shapiro.test)
# akademik: W = 0.96227, p-value = 0.5107
# mieszkanie z rodziną: W = 0.98145, p-value = 0.8405
# stancja lub inne: W = 0.95429, p-value = 0.5278
# W każdej próbce brak podstaw do odrzucenia h0
## Test jednorodności wariancji
# h0: sigma.0^2 = (sigma.1)^2 = (sigma.2)^2
# h1: ~h0
bartlett.test(Ankieta$L.godzin ~ Ankieta$M.zamieszkania)
# Bartlett's K-squared = 0.47545, df = 2, p-value = 0.7884
# alpha < p-value
# brak podstaw do odrzucenia h0, zatem wariancje są jednorodne
# h0: m0 = m1 = m2 (brak wpływu)
# h1: ~h0 (istotny wpływ)
anova(aov(Ankieta$L.godzin ~ Ankieta$M.zamieszkania))
# F - 0.5896 p-value 0.5573
# alpha < 0.5573
# brak podstaw do odrzucenia h0
# Wniosek: Na poziomie istotności 0.01 nie ma podstaw do odrzucenia h0, zatem liczba godzin spędzonych przed komputerem w ciągu doby w popuplacji studentów pierwszego roku WI ZUT w Szczecinie w tym roku akademickim nie zależy od miejsca zamieszkania.
#### === LAB 12 === Korelacja i regresja, test niezależności chi kwadrat ####
# 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.

View File

@@ -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.

View File

@@ -0,0 +1,259 @@
# Węzły
Węzły interpolacyjne to inaczej nazwane punkty przez które przechodzi interpolowana funkcja. Żeby możliwe było znalezienie rozwiązania takiego zadania w każdym węźle koordynat X musi być różny.
# [Efekt Rungego](https://pl.wikipedia.org/wiki/Efekt_Rungego)
Efekt rungego polega na pogorszeniu się jakości interpolacji pomimo zwiększenia liczby węzłów (punktów). Początkowo im więcej węzłów tym lepsze przybliżenie, ale od pewnego momentu zaczyna się pogarszać, co widać szczególnie na krańcach przedziałów. To zachowanie dotyczy [interpolacji wielomianowej]. Aby to zjawisko wystąpiło muszą być spełnione dwie przesłanki:
- wysoki stopień wielomianu
- równa odległość pomiędzy węzłami interpolacyjnymi
# [Macierz Vandermonda](https://pl.wikipedia.org/wiki/Macierz_Vandermonde%E2%80%99a)
Taka macierz:
$$
A = \left(\begin{matrix}
1 & 1 & 1 & 1 \\
1 & 2 & 4 & 8 \\
1 & 3 & 9 & 27 \\
1 & 4 & 16 & 64
\end{matrix}\right)
$$
Albo bardziej ogólnie:
$$
A = \left(\begin{matrix}
1 & x_1 & x^2_1 & \cdots & x^{n-1}_1 \\
1 & x_2 & x^2_2 & \cdots & x^{n-1}_2 \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & x_n & x^2_n & \cdots & x^{n-1}_n
\end{matrix}\right)
$$
Wyznacznik tej macierzy to specjalny **wyznacznik Vandermonde'a** i jest zapisywany w postaci:
$$
\det A = \prod_{1 \leqslant i<j \leqslant n} (x_j-x_i).
$$
# [Punkt stacjonarny](https://pl.wikipedia.org/wiki/Punkt_stacjonarny)
Zwany również punktem krytycznym, punkt w dziedzinie funkcji rzeczywistej, w którym pierwsza pochodna przyjmuje wartość zero. W tym punkcie oryginalna funkcja oczywiście zmienia kierunek.
Jeśli w tym punkcie istnieje druga pochodna, to punkt ten jest ekstremum lokalnym lub punktem przegięcia (przegioles pale).
Dla funkcji wielu zmiennych w punkcie krytycznym zerują sie pochodne cząstkowe.
# [Gradient](https://pl.wikipedia.org/wiki/Gradient_(matematyka))
Wektor, który wskazuje gdzie funkcja rośnie. Długość wektora mówi nam o ile wzrasta funkcja na jednostkę długości.
uno dos tres quanto sinco sinco ses
[Wyznaczanie gradientu](https://youtu.be/Pt-AJvGEPuA?si=Q2Gh7xz62cELr_8j&t=9)
Ogólnie rzecz ujmując sprowadza się do tego, żeby obliczyć pochodne po następnych zmiennych ($x, y, z$), a potem umieścić je w wektorze. Potem obliczyć wartość gradientu dla konkretnego punktu.
# Metoda częściowego wyboru elementu podstawowego
Rozwinięcie metody eliminacji Gausaa, które polega na znalezieniem najlepszego kandydata do eliminowania kolumn przed rozpoczęciem całej procedury.
- Będąc w k-tym kroku eliminacji wybieramy k-tą kolumnę i szukamy maksimum po module poniżej głównej przekątnej włącznie.
- Ten wiersz gdzie znaleźliśmy nową liczbę zamieniamy z k-tym wierszem.
Dzięki temu nie dzielimy przez zero jak debil i pomniejszamy błędy wynikające z zaokrągleń wyników dzielenia małych liczb.
# [Metoda Newtona](https://pl.wikipedia.org/wiki/Metoda_Newtona)
Zwana również metodą stycznych polega na tym, że się styka ten teges. Proste i logiczne.
Algorytm prowadzi do znalezienia przybliżonej wartości miejsca zerowego funkcji jednej lub wielu zmiennych.
Jeżeli w przedziale znajduje się 1 pierwiastek funkcji, krańce mają różne znaki, pierwsza i druga mają stały znak w przedziale to wybieramy dowolny kraniec przedziału, wyznaczamy styczną do wykresu funkcji w tym punkcie, wyznaczamy odciętą punktu przecięcia stycznej z osią OX odcięta jest drugim przybliżeniem szukanego rozwiązania. Nową wartość przyjmujemy jako startową i tak powstaje perpetum debile.
Metodę te można uogólnić do przypadku wielowymiarowej. Wtedy ponownie wybieramy punkt startowy, a następnie rekurencyjnie przekształcamy wektor jedynek lub zerowy, aż do momentu satysfakcjonującego nas przybliżenia. Wektor ma tyle kolumn/wierszy co liczba zmiennych w wielomianie.Przkształcamy wektor zgodnie z równaniem macierzowym:
$$
x_{k+1} = x_K - (F'(x_k))^{-1} F(x_k)
$$
Gdzie $F'(x_K)$ to macierz Jacobiego. Zawiera wszystkie możliwe pochodne cząstkowe pierwszego rzędu. $F(x_K)$ to wektor wartości rozwiązań wszystkich równań dla aktualnego punktu.
Kończymy liczyć, gdy osiągniemy wystaczające przybliżenie, czyli wartość jest mniejsza niz epsilon.
# Wielomian interpolacyjny w postaci Newtona
Jak to gówno zbudować?
1. Bierzemy punkty np.
$$
\begin{align}
(x_o, y_0) \\
(x_1, y_1) \\
(x_2, y_2)
\end{align}
$$
2. Wykonujemy działania
$$
\begin{align}
I_1 &= \frac{y_0 - y_1}{x_0 - x_1} \\
I_2 &= \frac{y_2 - y_1}{x_2 - x_1} \\
I_3 &= \frac{I_2 - I_1}{x_2 - x_0} \\
\end{align}
$$
3. Podstawiamy:
$$
W(x) = y_0 + I_1(x - x_0) + I_3(x - x_0)(x - x_1) +…
$$
Tablica ilorazów różnicowych
| $x_i$ | $f(x_i)$ | $I_1$ | $I_2$ | $I_3$ | |
| --------- | -------- | ------------- | ------------------ | ----------------------- | --- |
| $x_0$<br> | $f(x_0)$ | $f[x_0, x_1]$ | $f[x_0, x_1, x_2]$ | $f[x_0, x_1, x_2, x_3]$ | |
| $x_1$ | $f(x_1)$ | $f[x_1, x_2]$ | $f[x_1, x_2, x_3]$ | | |
| ... | | | | | |
Czyli dla przykładu:
x: $-3\ 1\ 3$
f(x) $8\ 16\ 24$
| -3 | 8 | $\frac{8}{4} = 2$ | $\frac{1}{3}$ |
| ------------- | --- | ----------------- | ------------- |
| 1 | 16 | $\frac{8}{2} = 4$ | |
| 3 | 24 | | |
| | | | |
| Współczynniki | 8 | 2 | $\frac{1}{3}$ |
$W(x) = 8 + 2(x + 3) + \frac{1}{3}(x + 3)(x - 1)$
# [Hesjan](https://pl.wikipedia.org/wiki/Macierz_Hessego)
Elitarna macierz drugich pochodnych cząstkowych fla funkcji wielu zmiennych o wartościach rzeczywistych dwukrotnie różniczkowalnych w punkcie, w którym liczone są te pochodne.
Cała ta macierz opisuje własności krzywizny wykresu funkcji w otoczeniu punktu. Jest wyznaczana np. w punktach krytycznych przy wyszukiwaniu ekstremów i punktów przegięcia (przegioles).
Macierz ta jest kwadratowa.
Buduje się ją w sposób następujący:
Musimy policzyć wszytkie możliwe pochodne drugiego stopnia. Po x, po xy, po xz, po z, po zx, itp, itd. Potem układamy to tak:
- po przekątnej pochodne po jednej zmiennej
- w kolumnach ustawiamy pochodne po kolejnych zmiennych
- w rzędach zmieniamy naszą pojedyńczą zmienną pochodną
# [Wersor](https://pl.wikipedia.org/wiki/Wektor_jednostkowy)
Wektor jednostkowy o długości jeden. Wskazuje kierunek i zwrot pewnego wektora początkowego, któremu ten wersor się przypisuje. Każdy wektor można zamienić na wersor (znormalizować) dzieląc go przez jego długość.
![](../../../media/Pasted%20image%2020260617124924.png)
# [Aproksymacja sześcienna]
POlega na przykładaniu funkcje szcześciennej do wykresu. Jako punktów uzywa wartości funkcji i jej pochodnych. żeby to było możliwe to oczywiście musi być na krańcach przedzialu pochodna wymnożona na minusie tego typu
# Wyznaczniki macierzy trójkątnych i diagonalnych
Oblicza się je mnożąć przez siebie wszytkie liczby leżące na głównej przekątnej.
Macierz diagonalna ma liczby tylko na przekątnej.
Macierz trójkątna górna –» ma zera pod główną przekątną.
# [Metoda falsi](https://pl.wikipedia.org/wiki/Regula_falsi)
Falsi z nazwy metody oznacza oczywiście, że jest do dupy.
Bierzemy jeden punkt powyżej zera, drugi jest poniżej. Rysujemy prostą (falsi[znaną również pod nazwą prosta sraka]). Tam gdzie sraka przechodzi przez oś OX liczymy wartość funkcji. Zamieniamy to na ten poprzedni punkt. Powtarzamy, aż osiągniemy dokładność.
# [Metoda Powella](http://www.optymalizacja.w8.pl/Powella.html)
Metoda bezgradientowa, która wykorzystuje wersor.
Mamy dwa wektory (kierunki) $d_i$ i $d_j$. Nazywamy je sprzężonymi względem kwadratowej dodatnio określonej macierzy H jeśli:
$$
d_i^T \cdot H d_i = 0 \ \text {dla } i \neq j
$$
# [Metoda najszybszego spadku](https://pl.wikipedia.org/wiki/Metoda_najszybszego_spadku)
Metoda gradientowa.
$$
\begin{align}
P_{k + 1} &= P_K - \alpha_k \nabla_k \\
\text{gdzie:}
\alpha_k &= \frac{\nabla_k^T \nabla_k}{\nabla_K^T H_k \nabla_K}
\end{align}
$$
Co to dokładnie oznacza? Każdy kolejny krok to aktualny krok minus gradient razy krok. A krok $\alpha$ to transponowany gradient razy gradient podzielone przez transponowany gradient razy gradient razy hesjan.
Problemem tej metody jest to, że potrafi zwolni i zyzgakować, jeśli funkcja ma kształt wąskiej, ukośnej doliny. Żeby temu zapobiec:
- wprowadza się nowe kierunki za pomocą $\Delta = P_{k + 1} - P_K$
- obraca układ współrzędnych, by jedna z osi pokrywała się z dnem.
# Warunek przy szukaniu pierwiastków równań nieliniowych
$f(a) \cdot f(b) < 0$
W komputerach może występować zjawisko niedomiaru, które wynika z zaokrągleń do zera przy bardzo niskich wartościach. Aby temu zapobiec robi się taki myk:
```matlab
sign(f(a)) != sign(f(b))
```
# [Metoda połowienia](https://pl.wikipedia.org/wiki/Metoda_r%C3%B3wnego_podzia%C5%82u)
Algorytm poszukiwania pierwiastka funkcji.
Metoda polega na dzieleniu przedziału na pół, a następnie odrzucaniu podprzedziału, w którym dwa jego krańce nie zmieniają znaku.
# [Metoda złotego podziału](https://pl.wikipedia.org/wiki/Metoda_z%C5%82otego_podzia%C5%82u)
Metoda optymalizacji jednowymiarowej funkcji celu.
Polega na wybraniu dwóch punktów, które wyznaczane tak, by dzieliły aktualny przedział w proporcji złotego podziału ( $61.8\%$) Wybieramy punkt, który jest niżej, aż osiągniemy zadaną dokładność $\epsilon$. Wtedy bierzemy środek tego przedziału i *beng* mamy minimum!
# [Simplex](https://pl.wikipedia.org/wiki/Algorytm_sympleksowy)
## Jak to liczyć?
1. Mamy układ równań, przekształcamy go w taki sposób, by po prawej stronie wszystkie wartości były dodatnie
$$
\begin{align*}
&f(x,y) = 7x + 2y - 3z \to \max \\
&\text{ograniczenia:}
\end{align*}
$$
$$
\begin{align*}
\begin{cases}
2x + y - 3z &= 12 \\
5x - 3y + z &\geqslant 15 \\
-x + 2y &\geqslant -1 \implies x - 2y \leqslant 1
\end{cases}
\end{align*}
$$
2. Zamieniamy układ w taki sposób, by wyeliminować wszystkie symbole mniejsze/większe niż. Żeby to zrobić musimy albo odjąć albo dodać jakąś liczbę. Jeżeli mam więcej niż to musimy odjąć i analogicznie.
$$
\begin{align}
\begin{cases}
2x + y - 3z &= 12 \\
5x - 3y + z - S_1 &= 15 \\
-x + 2y + S_2 &= 1
\end{cases}
\end{align}
$$
3. Zapisujemy funkcję celu
$$
f(x, y, z, S_1, S_2) = 7x + 2y -3z + 0S_1 + 0S_2
$$
4. Sprawdzamy czy mamy macierz jednostkową, czyli czy mamy kwadrat 3x3 w którym w każdej kolumnie jest jedna jedynka i jest ona w różnych wierszach. W tym przypadku pasuje nam tylko $S_2$, więc dodajemy zmienne sztuczne.
$$
\begin{align}
\begin{cases}
2x + y -3z + a_1 &= 12 \\
5x - 3y + z - S_1 + a_2 &= 15 \\
x - 2y + S_2 &= 1
\end{cases}
\end{align}
$$
Macierz jednostkowa
![](../../../media/Pasted%20image%2020260616200137.png)
5. Dodajemy albo bardzo dużo zmiennych sztucznych albo bardzo mało. Jeśli szukamy max to muszą być ujemne i analogicznie.
$$
f(x, y, z, S_1, S_2) = 7x + 2y -3z + 0S_1 + 0S_2 - 1000a_1 - 1000a_2
$$
6. Przechodzimy do uzupełniania tabelki
- 1. W $Cj\rightarrow$ wpisujemy ilość następnych zmiennych.
- 2.Wiersz pod tym wpisujemy co to są za zmienne.
- 3. Pod $B\downarrow$ (bazowa) wpisujemy wyrazy wolne po przekształceniach.
- 4. Pod $WB\downarrow$(wektory bazowe) wpisujemy nasze nowe sztuczne zmienne, które tworzą naszą macierz jednostkową.
- 5. Pod $CB\downarrow$ wpisujemy ile mamy tych zmiennych.
- 6. Uzupełniamy środek tabelki wartościami z układu równań dla poszczególnych zmiennych
- 7. $WW\rightarrow$(wiersz wskaźnikowy) uzupełniamy poprzez wymnożenie wartości z kolumny CB razy poszczególne kolumny zmiennych. Np. $-1000 \cdot 12 + (-1000) \cdot 15 + 0 \cdot 1 = -27000$ . Potem od wyniku odejmujemy wartość funkcji celu. Czyli np dla kolumny $x$ wykonujemy działanie $-7000 - 7 = -7007$
| | | Cj$\rightarrow$ | 7 | 2 | -3 | 0 | 0 | -1000 | -1000 | |
| -------------- | --------------- | --------------- | ----- | ---- | ---- | ----- | ----- | ----- | ----- | ------------------ |
| CB$\downarrow$ | WB $\downarrow$ | B $\downarrow$ | x | y | z | $S_1$ | $S_2$ | $a_1$ | $a_2$ | $\frac{B}{x}$ |
| -1000 | $a_1$ | 12 | 2 | 1 | -3 | 0 | 0 | 1 | 0 | $\frac{12}{2} = 6$ |
| -1000 | $a_2$ | 15 | 5 | -3 | 1 | -1 | 0 | 0 | 1 | $\frac{15}{5} = 3$ |
| 0 | $S_2$ | 1 | 1 | -2 | 0 | 0 | 1 | 0 | 0 | 1 |
| | $WW\rightarrow$ | -27000 | -7007 | 1998 | 2003 | 1000 | 0 | 0 | 0 | |
- 8. Gdy już mamy taką tabelkę szukamy wartość zmiennej wiersza wskaźnikowego, która jest najmniejsza. W tym przypadku będzie to zmienna $x$. Ta kolumna będzie kluczowa.
- 9. Szukamy najmniejszej wartości w $\frac{B}{x}$. To będzie wiersz kluczowy.
- 10. Kolumna kluczowa wskazuje na wartość, która wchodzi do bazy, a wiersz kluczowy na wartość, która wylatuje.
- 11. Wartość na przecięciu się kolumny i wiersza kluczowego to pivot. Pivot musi być 1, a jeśli nie jest to mnożymy wiersz razy tyle, żeby był.
- 12. Używamy pivota, żeby zlikwidować liczbę nad nim. Ma być zerem! (Podobnie jak w metodzie eliminacji gaussa)
- 13.(7) Ponownie liczymy wiersz wskaźnikowy.
| | | Cj$\rightarrow$ | 7 | -2 | -3 | 0 | 0 | -1000 | -1000 | |
| -------------- | --------------- | --------------- | --- | ------ | ---- | ----- | ----- | ----- | ----- | ------------------ |
| CB$\downarrow$ | WB $\downarrow$ | B $\downarrow$ | x | y | z | $S_1$ | $S_2$ | $a_1$ | $a_2$ | $\frac{B}{y}$ |
| -1000 | $a_1$ | 10 | 0 | 5 | -3 | 0 | -2 | 1 | 0 | $\frac{10}{5} = 2$ |
| -1000 | $a_2$ | 10 | 0 | 7 | 1 | -1 | -5 | 0 | 1 | $\frac{10}{7}$ |
| 7 | $x$ | 1 | 1 | 2 | 0 | 0 | 1 | 0 | 0 | $\frac{1}{-2}$ |
| | $WW\rightarrow$ | -19993 | 0 | -12016 | 2003 | 1000 | 7007 | 0 | 0 | |
- 14.(8) szukamy najmniejszej wartości w WW. To jest kolumna kluczowa. Tutaj to będzie y
- 15. (9) wyliczamy $\frac{B}{x}$ i szukamy najmniejszej nieujemnej wartości. Wiersz kluczowy!
- 16. Powtarzamy te kroki, aż w WW nie będzie ujemnych wartości. Wtedy w kolumnie WB w WW będzie wartość optymalna funkcji celu. W kolumnie B znajdziemy wtedy wartości zmiennych funkcji, które wpływają na ten wynik. Gdybyśmy liczyli minimum to nie mogłoby być żadnych liczb dodatnich!
**Na egzaminie nie trzeba rysować drugiej tabelki!**

View File

@@ -0,0 +1 @@
Programowanie liniowe

View File

@@ -0,0 +1,233 @@
#include <algorithm>
#include <iostream>
#include <memory>
#include <ostream>
#include <stdexcept>
#include <string>
#include <vector>
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<std::unique_ptr<Pozycja>> 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<Pozycja> 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<Ksiazka>("Ogniem i Mieczem", 12, 10, w1, 360));
biblioteka.dodajPozycje(
std::make_unique<Czasopismo>("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();
}

View File

@@ -0,0 +1,188 @@
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
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<std::unique_ptr<Towar>> 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<Towar> 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<TowarSpozywczy>("burak", 20, 5, producent1, "67 lat"));
sklep.dodajTowar(
std::make_unique<TowarElektroniczny>("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;
}

View File

@@ -0,0 +1,110 @@
#include <exception>
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
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<std::unique_ptr<Towar>> 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;

View File

@@ -0,0 +1,121 @@
#include <cstddef>
#include <iostream>
#include <string>
class Towar {
double cena;
int sztuki;
public:
std::string nazwa;
Towar(std::string nazwa, double cena, int sztuki)
: nazwa(nazwa), cena(cena), sztuki(sztuki) {}
Towar() {}
void wypisz() const {
std::cout << "Nazwa: " << nazwa << '\n'
<< "Cena: " << cena << '\n'
<< "Liczba sztuk: " << sztuki << std::endl;
}
double wartosc() const { return cena * sztuki; }
void zmienCene(double nowaCena) { cena = nowaCena; }
void dodajSztuki(int ile) { sztuki += ile; }
// int operator+(Towar &t) { return cena + t.cena; }
Towar operator+(Towar &t) {
return Towar(nazwa + t.nazwa, cena + t.cena, sztuki + t.sztuki);
}
};
class Sklep {
Towar *sklep;
int max_ammount;
int current_ammount;
static int sklep_ammount;
public:
Sklep(size_t max_towary)
: max_ammount(max_towary), sklep(new Towar[max_towary]),
current_ammount(0) {
Sklep::sklep_ammount++;
}
~Sklep() {
delete[] sklep;
sklep = nullptr;
Sklep::sklep_ammount--;
}
bool dodajTowar(const Towar &t) {
if (current_ammount >= max_ammount) {
return false;
}
sklep[current_ammount++] = t;
return true;
}
Towar *znajdzTowar(const std::string &nazwa) {
for (int i = 0; i < current_ammount; i++) {
if (sklep[i].nazwa == nazwa) {
return &sklep[i];
}
}
return nullptr;
}
void wypiszWszystkie() const {
for (int i = 0; i < current_ammount; i++) {
sklep[i].wypisz();
}
}
double obliczWartoscSklepu() const {
double sum = 0;
for (int i = 0; i < current_ammount; i++) {
sum += sklep[i].wartosc();
}
return sum;
}
static int ileSklepow() { return Sklep::sklep_ammount; }
};
int Sklep::sklep_ammount = 0;
int main() {
Sklep sklep = Sklep(5);
std::cout << "=== 1. Oryginalny stan sklepu ===" << std::endl;
sklep.dodajTowar(Towar("Marchewka", 2, 3));
sklep.dodajTowar(Towar("Banan", 4, 2));
sklep.dodajTowar(Towar("Jabłko", 5, 3));
sklep.dodajTowar(Towar("Ziemniak", 10, 15));
sklep.wypiszWszystkie();
std::cout << std::endl;
std::cout << "=== 2. Modyfikowany stan sklepu ===" << std::endl;
Towar *znalezionyTowar = sklep.znajdzTowar("Marchewka");
znalezionyTowar->zmienCene(4);
sklep.wypiszWszystkie();
Towar *znalezionyTowar2 = sklep.znajdzTowar("Banan");
std::cout << std::endl;
std::cout << "=== 3. Dodajemy marchewkę z bananem ===" << std::endl;
Towar suma_towarow = *znalezionyTowar + *znalezionyTowar2;
suma_towarow.wypisz();
std::cout << std::endl;
std::cout << "=== 4. Wypisujemy wszystkie towary ===" << std::endl;
sklep.wypiszWszystkie();
std::cout << std::endl;
std::cout << "=== 5. Wypisujemy łączną wartość sklepu ===" << std::endl;
std::cout << "Wartość: " << sklep.obliczWartoscSklepu() << std::endl;
std::cout << std::endl;
std::cout << "=== 6. Wypisujemy łączną ilość sklepów ===" << std::endl;
std::cout << "Ilość: " << sklep.ileSklepow() << std::endl;
}

View File

@@ -0,0 +1,83 @@
#include <iostream>
#include <string>
class Produkt {
double cena;
int ilosc;
public:
std::string nazwa;
Produkt(std::string nazwa, double cena, int ilosc)
: nazwa(nazwa), cena(cena), ilosc(ilosc) {}
Produkt() {}
void wypisz() const {
std::cout << "Nazwa: " << nazwa << '\n'
<< "Cena: " << cena << '\n'
<< "Ilość: " << ilosc << std::endl;
}
double wartosc() const { return cena * ilosc; }
void zmienCene(double nowaCena) { cena = nowaCena; }
void dodajSztuke(int ile) { ilosc += ile; }
};
class Magazyn {
int max_pojemnosc;
int aktualna_pojemnosc;
static int ilosc_magazynow;
public:
Produkt *magazyn;
Magazyn(int pojemnosc)
: max_pojemnosc(pojemnosc), magazyn(new Produkt[pojemnosc]),
aktualna_pojemnosc(0) {}
~Magazyn() { delete[] magazyn; }
bool dodajProdukt(const Produkt &p) {
if (aktualna_pojemnosc >= max_pojemnosc) {
return false;
}
magazyn[aktualna_pojemnosc++] = p;
return true;
}
Produkt *znajdzProdukt(const std::string &nazwa) {
for (int i = 0; i < aktualna_pojemnosc; i++) {
if (magazyn[i].nazwa == nazwa) {
return &magazyn[i];
}
}
return nullptr;
}
void wypiszWszystkie() const {
for (int i = 0; i < aktualna_pojemnosc; i++) {
magazyn[i].wypisz();
}
}
double obliczWartoscMagazynu() const {
double wartosc = 0;
for (int i = 0; i < aktualna_pojemnosc; i++) {
wartosc += magazyn[i].wartosc();
}
return wartosc;
}
static int ileMagazynow() { return Magazyn::ilosc_magazynow; }
};
int Magazyn::ilosc_magazynow = 0;
int main() {
Magazyn m = Magazyn(10);
m.dodajProdukt(Produkt("marchewka", 2, 2));
m.dodajProdukt(Produkt("banan", 5, 3));
m.dodajProdukt(Produkt("gruszka", 4, 10));
Produkt *p = m.znajdzProdukt("gruszka");
p->zmienCene(234);
m.wypiszWszystkie();
m.obliczWartoscMagazynu();
m.ileMagazynow();
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,40 @@
#include <iostream>
class Zwierze {
public:
virtual void odglos() { std::cout << "..." << std::endl; }
virtual ~Zwierze() = default;
};
class Pies : public Zwierze {
public:
void odglos() override { std::cout << "Hau hau" << std::endl; }
};
class Kot : public Zwierze {
public:
void odglos() override { std::cout << "Miau miau" << std::endl; }
};
class Krowa : public Zwierze {
public:
void odglos() override { std::cout << "Muu muu" << std::endl; }
};
int main() {
const int SIZE = 3;
Zwierze *zwierzeta[SIZE];
zwierzeta[0] = new Pies();
zwierzeta[1] = new Kot();
zwierzeta[2] = new Krowa();
for (int i = 0; i < SIZE; i++) {
zwierzeta[i]->odglos();
}
for (int i = 0; i < SIZE; i++) {
delete zwierzeta[i];
}
return 0;
}

View File

@@ -0,0 +1,121 @@
#include <cstddef>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
class Adres {
std::string ulica;
int nr_mieszkania;
public:
Adres(std::string ulica, int nr_mieszkania)
: ulica(ulica), nr_mieszkania(nr_mieszkania) {}
friend std::ostream &operator<<(std::ostream &os, const Adres &adres) {
os << adres.ulica << " mieszkania " << adres.nr_mieszkania;
return os;
}
};
class Pracownik {
protected:
std::string imie;
float pensja;
std::unique_ptr<Adres> adres;
public:
virtual float obliczWyplate() const = 0;
Pracownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: imie(imie), pensja(pensja), adres(std::move(adres)) {}
virtual ~Pracownik() = default;
friend std::ostream &operator<<(std::ostream &os, const Pracownik &p) {
os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na "
<< *(p.adres);
return os;
}
};
class PracownikEtatowy : public Pracownik {
public:
PracownikEtatowy(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: Pracownik(imie, pensja, std::move(adres)) {}
float obliczWyplate() const override { return pensja; }
};
class Zleceniobiorca : public Pracownik {
float godziny;
public:
Zleceniobiorca(std::string imie, float pensja, std::unique_ptr<Adres> adres,
float godziny)
: Pracownik(imie, pensja, std::move(adres)), godziny(godziny) {}
float obliczWyplate() const override { return pensja * godziny; }
};
class Dzial {
std::vector<std::shared_ptr<Pracownik>> pracownicy;
public:
Dzial() = default;
void dodajPracownika(std::shared_ptr<Pracownik> pracownik) {
pracownicy.push_back(pracownik);
}
float sumaWyplat() const {
float sum = 0;
for (const auto &pracownik : pracownicy) {
sum += pracownik->obliczWyplate();
}
return sum;
}
void wypiszPracownikow() const {
std::cout << "=== Wszyscy pracownicy ===\n";
for (const auto &pracownik : pracownicy) {
std::cout << *pracownik << std::endl;
}
}
};
class Kierownik : public PracownikEtatowy {
std::vector<std::shared_ptr<Pracownik>> podwladni;
public:
Kierownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: PracownikEtatowy(imie, pensja, std::move(adres)) {}
float obliczWyplate() const override { return pensja; }
float sumaWyplatZespolu() const {
float sum = 0;
for (const auto &pracownik : podwladni) {
sum += pracownik->obliczWyplate();
}
return sum;
}
void dodajPracownika(std::shared_ptr<Pracownik> p) { podwladni.push_back(p); }
};
int main() {
Kierownik kierownik("Stasiek", 238943,
std::make_unique<Adres>("Wojska polskiego", 23));
kierownik.dodajPracownika(std::make_shared<PracownikEtatowy>(
"Bożena", 2500, std::make_unique<Adres>("Żołnierska", 18)));
kierownik.dodajPracownika(std::make_shared<Zleceniobiorca>(
"Adam", 6700, std::make_unique<Adres>("Wiejska", 1), 30));
std::cout << "Pracownicy sumarycznie zarabiają: "
<< kierownik.sumaWyplatZespolu() << std::endl;
return 0;
}

View File

@@ -0,0 +1,20 @@
#include <iostream>
class Baza {
public:
void metoda() const { std::cout << "Baza" << std::endl; }
};
class Pochodna : public Baza {
public:
void metoda() const { std::cout << "Pochodna" << std::endl; }
};
int main() {
Pochodna p;
Baza &ref = p;
Baza *ptr = &p;
p.metoda(); // pochodna
ref.metoda(); // baza
ptr->metoda(); // baza
}

View File

@@ -0,0 +1,17 @@
#include <iostream>
class Baza {
public:
virtual void metoda() const { std::cout << "Baza" << std::endl; }
};
class Pochodna : public Baza {
public:
void metoda() const { std::cout << "Pochodna" << std::endl; }
};
int main() {
Pochodna p;
Baza b = p;
b.metoda(); // część pochodna została zgubiona
}

View File

@@ -0,0 +1,54 @@
#include <cmath>
#include <iostream>
#include <memory>
#include <vector>
class Figura {
public:
virtual float pole() const = 0;
virtual float obwod() const = 0;
virtual ~Figura() = default;
};
class Kolo : public Figura {
float r;
public:
Kolo(float r) : r(r) {}
float pole() const override { return M_PI * r * r; }
float obwod() const override { return M_PI * 2 * r; }
};
class Prostokat : public Figura {
float a, b;
public:
Prostokat(float a, float b) : a(a), b(b) {}
float pole() const override { return a * b; }
float obwod() const override { return 2 * a + 2 * b; }
};
class Trojkat : public Figura {
float a, b, c, h;
public:
Trojkat(float a, float b, float c, float h) : a(a), b(b), c(c), h(h) {}
float pole() const override { return (a * h) * 0.5; }
float obwod() const override { return a + b + c; }
};
int main() {
std::vector<std::unique_ptr<const Figura>> figury;
figury.push_back(std::make_unique<Kolo>(2.0));
figury.push_back(std::make_unique<Prostokat>(2, 3));
figury.push_back(std::make_unique<Trojkat>(1, 2, 3, 4));
for (std::unique_ptr<const Figura> &element : figury) {
std::cout << "Obwod figury to: " << element->obwod() << std::endl;
std::cout << "Pole figury to: " << element->pole() << std::endl;
;
}
}

View File

@@ -0,0 +1,20 @@
#include <iostream>
class Abstrakcyjna {
public:
virtual void f() = 0;
virtual ~Abstrakcyjna() = default;
};
class Konkretna : public Abstrakcyjna {
public:
void f() override { std::cout << "OK"; }
};
int main() {
// Abstrakcyjna a; // nie kompiluje się, ponieważ a jest k
// lasą abstrakcyjną.
Konkretna k; // kompiluje
Abstrakcyjna *ptr = new Konkretna(); // kompiluje
Abstrakcyjna &ref = k; // kompiluje
}

View File

@@ -0,0 +1,32 @@
#include <cstddef>
#include <iostream>
class Zasob {
int *arr;
public:
Zasob(size_t size) : arr(new int[size]) { std::cout << "Alokujemy arr\n"; }
virtual ~Zasob() { // bez tego wyciek pamięci
std::cout << "Destruktor virtualny\n";
delete[] arr;
}
};
class DuzyZasob : public Zasob {
int *arr2;
public:
DuzyZasob(size_t size1, size_t size2) : Zasob(size1), arr2(new int[size2]) {
std::cout << "Alokujemy arr2\n";
}
~DuzyZasob() override {
std::cout << "Domyślny Destruktor DużegoZasobu\n";
delete[] arr2;
}
};
int main() {
Zasob *z = new DuzyZasob(2, 4);
delete z;
}

View File

@@ -0,0 +1,22 @@
#include <iostream>
class Ksztalt {
public:
virtual double pole() const = 0;
virtual ~Ksztalt() = default;
};
class Kolo : public Ksztalt {
double r;
public:
Kolo(double promien) : r(promien) {}
double pole() const { return 3.14 * r * r; }
};
void wypisz(Ksztalt &k) { std::cout << k.pole(); }
int main() {
Kolo k = Kolo(2);
wypisz(k);
}

View File

@@ -0,0 +1,31 @@
#include <iostream>
#include <ostream>
#include <string>
class Pojazd {
public:
virtual std::string opis() = 0;
virtual ~Pojazd() = default;
friend std::ostream &operator<<(std::ostream &os, Pojazd &p) {
os << p.opis();
return os;
}
};
class Samochod : public Pojazd {
public:
std::string opis() override { return "To jest samochód"; }
};
class Rower : public Pojazd {
public:
std::string opis() override { return "To jest rower"; }
};
int main() {
Samochod s;
Rower r;
std::cout << s << std::endl;
std::cout << r << std::endl;
}

View File

@@ -0,0 +1,96 @@
#include <cstddef>
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
class Adres {
std::string ulica;
int nr_mieszkania;
public:
Adres(std::string ulica, int nr_mieszkania)
: ulica(ulica), nr_mieszkania(nr_mieszkania) {}
friend std::ostream &operator<<(std::ostream &os, Adres &adres) {
os << adres.ulica << " mieszkania " << adres.nr_mieszkania;
return os;
}
};
class Pracownik {
protected:
std::string imie;
float pensja;
std::unique_ptr<Adres> adres;
public:
virtual float obliczWyplate() = 0;
Pracownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: imie(imie), pensja(pensja), adres(std::move(adres)) {}
virtual ~Pracownik() = default;
friend std::ostream &operator<<(std::ostream &os, Pracownik &p) {
os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na "
<< *(p.adres);
return os;
}
};
class PracownikEtatowy : public Pracownik {
public:
PracownikEtatowy(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: Pracownik(imie, pensja, std::move(adres)) {}
float obliczWyplate() override { return pensja; }
};
class Zleceniobiorca : public Pracownik {
float godziny;
public:
Zleceniobiorca(std::string imie, float pensja, std::unique_ptr<Adres> adres,
float godziny)
: Pracownik(imie, pensja, std::move(adres)), godziny(godziny) {}
float obliczWyplate() override { return pensja * godziny; }
};
class Dzial {
std::vector<std::shared_ptr<Pracownik>> pracownicy;
public:
Dzial() {};
void dodajPracownika(std::shared_ptr<Pracownik> pracownik) {
pracownicy.push_back(pracownik);
}
float sumaWyplat() const {
float sum = 0;
for (auto &pracownik : pracownicy) {
sum += pracownik->obliczWyplate();
}
return sum;
}
void wypiszPracownikow() const {
std::cout << "=== Wszyscy pracownicy ===\n";
for (const auto &pracownik : pracownicy) {
std::cout << *pracownik << std::endl;
}
}
};
int main() {
Dzial dzial = Dzial();
dzial.dodajPracownika(std::make_shared<PracownikEtatowy>(
"Bożena", 2500, std::make_unique<Adres>("Żołnierska", 18)));
dzial.dodajPracownika(std::make_shared<Zleceniobiorca>(
"Adam", 6700, std::make_unique<Adres>("Wiejska", 1), 30));
dzial.wypiszPracownikow();
std::cout << "Pracownicy sumarycznie zarabiają: " << dzial.sumaWyplat();
return 0;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,64 @@
#include <cmath>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
class Ksztalt {
public:
virtual ~Ksztalt() = default;
virtual double pole() = 0;
virtual std::string opis() = 0;
};
class Kolo : public Ksztalt {
int r;
public:
Kolo(int r) : r(r) {}
double pole() override { return r * r * M_PI; }
std::string opis() override { return "To jest koło";}
~Kolo() override {}
};
class Trojkat : public Ksztalt {
int a, h;
public:
Trojkat(int a, int h) : a(a), h(h) {}
double pole() override { return a * h * 0.5; }
std::string opis() override { return "To jest trójkąt";}
~Trojkat() override {}
};
class Kwadrat : public Ksztalt {
int a;
public:
Kwadrat(int a) : a(a) {}
double pole() override { return a * a; }
std::string opis() override { return " To jest kwadrat"; }
~Kwadrat() override {}
};
double sum_pole(std::vector<std::unique_ptr<Ksztalt>> &vec) {
double sum = 0;
for (auto &ksztalt : vec) {
sum += ksztalt->pole();
}
return sum;
}
int main() {
std::vector<std::unique_ptr<Ksztalt>> vec;
vec.push_back(std::make_unique<Trojkat>(2, 4));
vec.push_back(std::make_unique<Kolo>(2));
vec.push_back(std::make_unique<Kwadrat>(4));
std::cout << "Suma pól wszystkich figur to: " << sum_pole(vec) << std::endl;
}

View File

@@ -0,0 +1,51 @@
#include <iostream>
#include <memory>
class StrategiaPodatkowa {
public:
virtual double oblicz(double kwota) const = 0;
virtual ~StrategiaPodatkowa() = default;
};
class PodatekLiniowy : public StrategiaPodatkowa {
const double procent = 0.19;
public:
double oblicz(double kwota) const override { return kwota * procent; }
};
class PodatekProgresywny : public StrategiaPodatkowa {
const double prog_1 = 0.19;
const double prog_2 = 0.8;
public:
double oblicz(double kwota) const override {
return (kwota < 4000) ? (kwota * prog_1) : (kwota * prog_2);
}
};
class BrakPodatku : public StrategiaPodatkowa {
public:
double oblicz(double) const override { return 0.0; }
};
class Faktura {
std::unique_ptr<StrategiaPodatkowa> strategia;
double kwota;
public:
Faktura(std::unique_ptr<StrategiaPodatkowa> s, double kwota)
: strategia(std::move(s)), kwota(kwota) {}
double kwotaDoZaplaty() const { return strategia->oblicz(kwota) + kwota; }
};
int main() {
Faktura faktura_socjalistyczna(std::make_unique<PodatekProgresywny>(), 5000);
Faktura faktura_wolnorynkowa(std::make_unique<PodatekLiniowy>(), 5000);
Faktura faktura_libertalinistyczna(std::make_unique<BrakPodatku>(), 5000);
std::cout << faktura_socjalistyczna.kwotaDoZaplaty() << std::endl;
std::cout << faktura_wolnorynkowa.kwotaDoZaplaty() << std::endl;
std::cout << faktura_libertalinistyczna.kwotaDoZaplaty() << std::endl;
}

View File

@@ -0,0 +1,111 @@
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
class Zwierze {
public:
virtual std::string odglos() = 0;
virtual std::string jedzenie() = 0;
virtual double ileKalorii() = 0;
virtual ~Zwierze() = default;
friend std::ostream &operator<<(std::ostream &os, Zwierze &z) {
os << "To zwierze wydaje dźwięk: " << z.odglos() << ".\nJe " << z.jedzenie()
<< " i potrzebuje " << z.ileKalorii() << " kalorii dziennie\n";
return os;
}
};
class Lew : public Zwierze {
public:
std::string odglos() override { return "Odgłos lwa"; }
std::string jedzenie() override { return "Mięso";}
double ileKalorii() override { return 2348; }
};
class Slon : public Zwierze {
public:
std::string odglos() override { return "Odgłos słonia"; }
std::string jedzenie() override { return "Liście";}
double ileKalorii() override { return 23; }
};
class Papuga : public Zwierze {
public:
std::string odglos() override { return "Odgłos papugii"; }
std::string jedzenie() override { return "Ziarna"; }
double ileKalorii() override { return 2; }
};
class Waz : public Zwierze {
public:
std::string odglos() override { return "Odgłos węża"; }
std::string jedzenie() override { return "Mięso"; }
double ileKalorii() override { return 387; }
};
class Opiekun {
public:
void nakarm() { std::cout << "Nakarmione" << std::endl; }
};
class Wybieg {
Opiekun opiekun_wybiegu;
public:
std::vector<std::unique_ptr<Zwierze>> zwierzeta;
public:
Wybieg(std::vector<std::unique_ptr<Zwierze>> zwierzeta,
Opiekun opiekun_wybiegu)
: zwierzeta(std::move(zwierzeta)), opiekun_wybiegu(opiekun_wybiegu) {}
};
class Zoo {
std::vector<std::unique_ptr<Wybieg>> wybiegi;
public:
Zoo(std::vector<std::unique_ptr<Wybieg>> wybiegi)
: wybiegi(std::move(wybiegi)) {}
double dziennaPorcjaKalorii() {
double sum = 0;
for (auto &wybieg : wybiegi) {
for (const auto &zwierze : wybieg->zwierzeta) {
sum += zwierze->ileKalorii();
}
}
return sum;
}
friend std::ostream &operator<<(std::ostream &os, Zoo &z) {
os << '[';
for (auto &wybieg : z.wybiegi) {
for (const auto &zwierze : wybieg->zwierzeta) {
os << *zwierze << ',';
}
}
os << ']';
return os;
}
};
int main() {
std::vector<std::unique_ptr<Zwierze>> zwierzeta;
zwierzeta.push_back(std::make_unique<Waz>());
zwierzeta.push_back(std::make_unique<Slon>());
zwierzeta.push_back(std::make_unique<Lew>());
Opiekun opiekun;
std::vector<std::unique_ptr<Wybieg>> wybiegi;
wybiegi.push_back(std::make_unique<Wybieg>(std::move(zwierzeta), opiekun));
Zoo zoo = Zoo(std::move(wybiegi));
std::cout << "Dzienna porcja kalorii: " << zoo.dziennaPorcjaKalorii()
<< std::endl;
std::cout << zoo;
}

View File

@@ -0,0 +1,179 @@
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
class StrategiaZywienia {
public:
virtual std::string pobierzOpisStrategii() const = 0;
virtual ~StrategiaZywienia() = default;
};
class Drapieznik : public StrategiaZywienia {
public:
std::string pobierzOpisStrategii() const override {
return "Drapieznik (wymaga miesa)";
}
};
class Roslinozerca : public StrategiaZywienia {
public:
std::string pobierzOpisStrategii() const override {
return "Roslinozerca (wymaga roslin)";
}
};
class Wszystkozerca : public StrategiaZywienia {
public:
std::string pobierzOpisStrategii() const override {
return "Wszystkozerca (je wszystko)";
}
};
class Zwierze {
protected:
std::unique_ptr<StrategiaZywienia> strategia;
public:
Zwierze(std::unique_ptr<StrategiaZywienia> strat)
: strategia(std::move(strat)) {}
virtual std::string odglos() = 0;
virtual std::string jedzenie() = 0;
virtual double ileKalorii() = 0;
virtual ~Zwierze() = default;
void ustawStrategie(std::unique_ptr<StrategiaZywienia> nowaStrategia) {
strategia = std::move(nowaStrategia);
}
std::string pokazJakJe() const {
return strategia ? strategia->pobierzOpisStrategii() : "Brak strategii";
}
friend std::ostream &operator<<(std::ostream &os, Zwierze &z) {
os << "To zwierze wydaje dzwiek: " << z.odglos() << ".\nJe " << z.jedzenie()
<< ", potrzebuje " << z.ileKalorii()
<< " kcal. Styl zycia: " << z.pokazJakJe() << "\n";
return os;
}
};
class Lew : public Zwierze {
public:
Lew() : Zwierze(std::make_unique<Drapieznik>()) {}
std::string odglos() override { return "Odgłos lwa"; }
std::string jedzenie() override { return "Mięso";}
double ileKalorii() override { return 2348; }
};
class Slon : public Zwierze {
public:
Slon() : Zwierze(std::make_unique<Roslinozerca>()) {}
std::string odglos() override { return "Odgłos słonia"; }
std::string jedzenie() override { return "Liście";}
double ileKalorii() override { return 20000; }
};
class Papuga : public Zwierze {
public:
Papuga() : Zwierze(std::make_unique<Roslinozerca>()) {}
std::string odglos() override { return "Odgłos papugii"; }
std::string jedzenie() override { return "Ziarna"; }
double ileKalorii() override { return 2; }
};
class Waz : public Zwierze {
public:
Waz() : Zwierze(std::make_unique<Drapieznik>()) {}
std::string odglos() override { return "Odgłos węża"; }
std::string jedzenie() override { return "Mięso"; }
double ileKalorii() override { return 387; }
};
std::unique_ptr<Zwierze> stworzZwierze(const std::string &gatunek) {
if (gatunek == "Lew" || gatunek == "lew") {
return std::make_unique<Lew>();
} else if (gatunek == "Slon" || gatunek == "slon") {
return std::make_unique<Slon>();
} else if (gatunek == "Papuga" || gatunek == "papuga") {
return std::make_unique<Papuga>();
} else if (gatunek == "Waz" || gatunek == "waz") {
return std::make_unique<Waz>();
}
return nullptr;
}
class Opiekun {
public:
void nakarm() { std::cout << "Nakarmione" << std::endl; }
};
class Wybieg {
Opiekun opiekun_wybiegu;
public:
std::vector<std::unique_ptr<Zwierze>> zwierzeta;
Wybieg(std::vector<std::unique_ptr<Zwierze>> zwierzeta,
Opiekun opiekun_wybiegu)
: zwierzeta(std::move(zwierzeta)), opiekun_wybiegu(opiekun_wybiegu) {}
};
class Zoo {
std::vector<std::unique_ptr<Wybieg>> wybiegi;
public:
Zoo(std::vector<std::unique_ptr<Wybieg>> wybiegi)
: wybiegi(std::move(wybiegi)) {}
double dziennaPorcjaKalorii() {
double sum = 0;
for (auto &wybieg : wybiegi) {
for (const auto &zwierze : wybieg->zwierzeta) {
sum += zwierze->ileKalorii();
}
}
return sum;
}
friend std::ostream &operator<<(std::ostream &os, Zoo &z) {
os << "[\n";
for (auto &wybieg : z.wybiegi) {
for (const auto &zwierze : wybieg->zwierzeta) {
os << " " << *zwierze;
}
}
os << ']';
return os;
}
};
int main() {
std::vector<std::unique_ptr<Zwierze>> zwierzeta;
zwierzeta.push_back(stworzZwierze("Waz"));
zwierzeta.push_back(stworzZwierze("Slon"));
zwierzeta.push_back(stworzZwierze("Lew"));
std::cout << "Przed zmianą strategii" << std::endl;
std::cout << *zwierzeta[2];
std::cout << "\n Dynamiczna podmiana strategii dla Lwa..." << std::endl;
zwierzeta[2]->ustawStrategie(std::make_unique<Wszystkozerca>());
std::cout << *zwierzeta[2];
std::cout << "-------------------------------------------\n" << std::endl;
Opiekun opiekun;
std::vector<std::unique_ptr<Wybieg>> wybiegi;
wybiegi.push_back(std::make_unique<Wybieg>(std::move(zwierzeta), opiekun));
Zoo zoo = Zoo(std::move(wybiegi));
std::cout << "Dzienna porcja kalorii w calym zoo: "
<< zoo.dziennaPorcjaKalorii() << " kcal\n"
<< std::endl;
std::cout << zoo << std::endl;
return 0;
}

View File

@@ -0,0 +1,21 @@
class A {
public:
virtual void f() = 0;
virtual void g() = 0;
virtual void h() = 0;
virtual ~A() = default;
};
class B : public A {
public:
void f() override { return; }
void g() override final { return; }
void h() override { return; }
~B() { return; }
};
class C final : public B {
void f() override final { return; }
void g() override final { return; } // błąd
void h() override final { return; }
};

View File

@@ -0,0 +1,34 @@
#include <iostream>
#include <memory>
#include <vector>
class Czlowiek {
public:
virtual void mowa() const { std::cout << "..." << std::endl; }
virtual ~Czlowiek() = default;
};
class Polak : public Czlowiek {
public:
void mowa() const override { std::cout << "Czesc!" << std::endl; }
};
class Anglik : public Czlowiek {
public:
void mowa() const override { std::cout << "Hello!" << std::endl; }
};
int main() {
std::vector<std::unique_ptr<Czlowiek>> ludzie;
ludzie.push_back(std::make_unique<Polak>());
ludzie.push_back(std::make_unique<Anglik>());
ludzie.push_back(std::make_unique<Czlowiek>());
for (const auto &c : ludzie)
c->mowa();
// Cześć!
// Hello!
// ...
// Przy metodzie niewirtualnej pojawi się błąd kompilacji nadpisujemy meto
// dę, która nie jest wirtualna
}

View File

@@ -0,0 +1,45 @@
#include <iostream>
class Pojazd {
public:
virtual ~Pojazd() = default;
virtual void wydajDzwiekWirtualnie() {} // metoda wirtualna
};
class Samochod : public Pojazd {
public:
void sygnal() { std::cout << "Sygnał!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Sygnał!"; }
};
class Rower : public Pojazd {
public:
void Dzwonek() { std::cout << "Dzyń dzyń!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Dzyń dzyń!"; }
};
class Motocykl : public Pojazd {
public:
void Warkot() { std::cout << "Wrum wrum!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Wrum wrum!"; }
};
void wydajDzwiek(Pojazd *p) {
if (Samochod *s = dynamic_cast<Samochod *>(p)) {
s->sygnal();
} else if (Rower *r = dynamic_cast<Rower *>(p)) {
r->Dzwonek();
} else if (Motocykl *m = dynamic_cast<Motocykl *>(p)) {
m->Warkot();
}
}
void wydajDzwiek2(Pojazd &p) { p.wydajDzwiekWirtualnie(); }
int main() {
Rower r2;
Pojazd *r = &r2;
wydajDzwiek(r);
wydajDzwiek2(r2);
}

View File

@@ -0,0 +1,48 @@
#include <iostream>
#include <typeinfo>
class Pojazd {
public:
virtual ~Pojazd() = default;
virtual void wydajDzwiekWirtualnie() {} // metoda wirtualna
};
class Samochod : public Pojazd {
public:
void sygnal() { std::cout << "Sygnał!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Sygnał!"; }
};
class Rower : public Pojazd {
public:
void Dzwonek() { std::cout << "Dzyń dzyń!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Dzyń dzyń!"; }
};
class Motocykl : public Pojazd {
public:
void Warkot() { std::cout << "Wrum wrum!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Wrum wrum!"; }
};
class NiepolimorficznyTyp {};
class NiepolimorficznyTyp2 : public NiepolimorficznyTyp {};
void pokazTyp(const Pojazd *p) {
const std::type_info &ti = typeid(*p);
std::cout << "Rzeczywisty typ: " << ti.name() << std::endl;
}
void pokazTyp2(const NiepolimorficznyTyp *n) {
const std::type_info &ti = typeid(*n);
std::cout << "Rzeczywisty typ: " << ti.name() << std::endl;
}
int main() {
Pojazd p;
Samochod s;
NiepolimorficznyTyp2 npol;
pokazTyp(&p);
pokazTyp(&s);
pokazTyp2(&npol);
}

View File

@@ -0,0 +1,42 @@
#include <iostream>
#include <typeinfo>
class Pojazd {
public:
virtual ~Pojazd() = default;
virtual void wydajDzwiekWirtualnie() {} // metoda wirtualna
};
class Samochod : public Pojazd {
public:
void sygnal() { std::cout << "Sygnał!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Sygnał!"; }
};
class Rower : public Pojazd {
public:
void Dzwonek() { std::cout << "Dzyń dzyń!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Dzyń dzyń!"; }
};
class Motocykl : public Pojazd {
public:
void Warkot() { std::cout << "Wrum wrum!"; }
void wydajDzwiekWirtualnie() override { std::cout << "Wrum wrum!"; }
};
int main() {
Rower r;
Pojazd *p = &r;
Samochod *s_static = static_cast<Samochod *>(p);
std::cout
<< "Wynik static_cast: " << s_static
<< "\n"; // miejsce w pamięci. dowolne wywołanie metody zwróci teraz błąd
Samochod *s_dynamic = dynamic_cast<Samochod *>(p);
std::cout << "Wynik dynamic_cast: " << s_dynamic
<< "\n"; // nullptr, bo sprawdził w runtime, że typ się nie zgadza
}

View File

@@ -0,0 +1,48 @@
#include <iostream>
#include <string>
#include <vector>
template <typename T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &v) {
os << "[";
for (size_t i = 0; i < v.size(); ++i) {
os << v[i];
if (i != v.size() - 1)
os << ", ";
}
os << "]";
return os;
}
template <typename T1, typename T2> class Para {
T1 pierwszy;
T2 drugi;
public:
Para(const T1 &p, const T2 &d) : pierwszy(p), drugi(d) {}
const T1 &pobierzPierwszy() const { return pierwszy; }
const T2 &pobierzDrugi() const { return drugi; }
friend std::ostream &operator<<(std::ostream &os, const Para<T1, T2> &para) {
os << "(" << para.pierwszy << ", " << para.drugi << ")";
return os;
}
};
int main() {
Para<int, std::string> p1(42, "Tralala");
std::cout << "Para 1: " << p1 << "\n";
std::cout << "Pierwszy element p1: " << p1.pobierzPierwszy() << "\n\n";
Para<double, double> p2(3.1415, 2.7182);
std::cout << "Para 2: " << p2 << "\n";
std::cout << "Drugi element p2: " << p2.pobierzDrugi() << "\n\n";
std::vector<int> liczby = {1, 1, 2, 3, 5, 8};
Para<std::string, std::vector<int>> p3("Fibonacci", liczby);
std::cout << "Para 3: " << p3 << "\n";
return 0;
}

View File

@@ -0,0 +1,33 @@
#include <bitset>
#include <iostream>
template <typename T> class Liczalna {
public:
void zliczDoN(int n) {
for (int i = 0; i < n; i++) {
static_cast<T *>(this)->wypisz(i);
}
}
};
class Dziesietna : public Liczalna<Dziesietna> {
public:
void wypisz(int liczba) { std::cout << "Dziesietnie: " << liczba << "\n"; }
};
class Binarna : public Liczalna<Binarna> {
public:
void wypisz(int liczba) {
std::cout << "Binarnie: " << std::bitset<8>(liczba) << "\n";
}
};
int main() {
Dziesietna d;
d.zliczDoN(4);
Binarna b;
b.zliczDoN(4);
return 0;
}

View File

@@ -0,0 +1,30 @@
#include <iostream>
#include <string>
class Pracownik {
std::string imie;
public:
Pracownik(const std::string &i) : imie(i) {}
virtual double pensja() const { return 0; }
virtual void wypisz() const {
std::cout << imie << ", pensja: " << pensja() << std::endl;
}
virtual ~Pracownik() {}
};
class Etatowy : public Pracownik {
double stawka;
public:
Etatowy(const std::string &i, double s) : Pracownik(i), stawka(s) {}
double pensja() const override { return stawka; }
};
void przetworz(Pracownik &p) { p.wypisz(); }
int main() {
Pracownik *tab[] = {new Etatowy("Ala", 5000)};
przetworz(*tab[0]);
delete tab[0];
}

View File

@@ -0,0 +1,27 @@
#include <algorithm>
#include <iostream>
#include <vector>
template <typename T> T wiekszy(T a, T b) { return a > b ? a : b; }
template <typename T> void zamien(T &a, T &b) {
T c = a;
a = b;
b = c;
}
template <typename T> void wypisz(T *tab, int n) {
for (int i = 0; i < n; i++) {
std::cout << *(tab + i);
}
std::cout << std::endl;
}
template <typename T> void sortuj3(T a, T b, T c) {
std::vector<T> vec{a, b, c};
std::sort(vec.begin(), vec.end());
for (const auto &symbol : vec) {
std::cout << symbol;
}
}

View File

@@ -0,0 +1,9 @@
#include <iostream>
template <typename T> T potroj(T x) { return x * 3; }
int main() {
std::cout << potroj(7) << '\n'; // 21
std::cout << potroj(2.5) << '\n'; // 7.5
std::cout << potroj('A') << '\n'; // dziwny znak
}

View File

@@ -0,0 +1,13 @@
#include "narzedzia.hpp"
int main() {
int a = 2, b = 1, c = 4;
sortuj3(a, b, c);
std::cout << std::endl;
double i = 1.5, j = 0, k = 14.234;
sortuj3(i, j, k);
std::cout << std::endl;
std::string x = "abc", y = "cde", z = "gde";
sortuj3(x, y, z);
std::cout << std::endl;
}

View File

@@ -0,0 +1,10 @@
template <typename T> T wiekszy(T a, T b) { return a > b ? a : b; }
int main() {
wiekszy(2, 5); // int int
wiekszy(2.0, 5.0); // double double
// wiekszy(2, 5.0); // nie uruchomi się, bowiem zadeklarowalilśmy dwa
// argumenty tego samego typu, a podajemy dwa różne
wiekszy<double>(2, 5.0); // double
wiekszy('A', 'Z'); // char
}

View File

@@ -0,0 +1,9 @@
#include <iostream>
template <typename T> T srednia(T a, T b) { return (a + b) / 2; }
int main() {
std::cout << srednia(3, 4) << std::endl; // co się wypisze? 3
std::cout << srednia(3.0, 4.0) << std::endl; // co się wypisze? 3.5
std::cout << srednia<double>(3, 4.0) << std::endl; // 3.5
}

View File

@@ -0,0 +1,21 @@
#include <iostream>
template <typename T> void zamien(T &a, T &b) {
T c = a;
a = b;
b = c;
}
template <typename T> void zamiana_i_wyswietlenie(T &x, T &y) {
zamien(x, y); // teraz x == 2, y == 1
std::cout << x << ',' << y << std::endl;
}
int main() {
int x = 2, y = 4;
zamiana_i_wyswietlenie(x, y);
double i = 2.5, j = 3.5;
zamiana_i_wyswietlenie(i, j);
std::string a = "hej", b = "ho";
zamiana_i_wyswietlenie(a, b);
}

View File

@@ -0,0 +1,14 @@
#include <iostream>
template <typename T> T minZ3(T a, T b, T c) {
return a < b ? (a < c ? a : c) : (b < c ? b : c);
}
int main() {
if (minZ3(7, 2, 5) == 2) {
std::cout << "1 ok\n";
}
if (minZ3(3.5, 1.2, 4.8) == 1.2) {
std::cout << "2 ok\n";
}
}

View File

@@ -0,0 +1,17 @@
#include <iostream>
template <typename T> int policz(const T *tab, int n, T wartosc) {
int count = 0;
for (int i = 0; i < n; i++) {
if (*(tab + i) == wartosc)
count++;
}
return count;
}
int main() {
int dane[] = {1, 2, 3, 2, 2, 5};
if (policz(dane, 6, 2) == 3) {
std::cout << "Zgadza się :D\n";
}
}

View File

@@ -0,0 +1,13 @@
#include <iostream>
template <typename T, int N> void powtorz(const T &wartosc) {
for (int i = 0; i < N; i++) {
std::cout << wartosc;
}
std::cout << '\n';
}
int main() {
powtorz<char, 5>('*'); // *****
powtorz<int, 3>(7); // 7 7 7
}

View File

@@ -0,0 +1,12 @@
// Fragment A
template <typename T> T podwoj(T x) { return x + x; }
podwoj(2, 3); // funkcja przyjmuje jeden argument a jest wywołana z dwoma
// Fragment B
template <typename T> 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 <typename T> T wiekszy(T a, T b) { return a > b ? a : b; }
wiekszy("abc", 5); // musi być dwa razy ten sam typ danych, a nie dwa różne

View File

@@ -0,0 +1,21 @@
#include "narzedzia.hpp"
int main() {
std::cout << wiekszy(2, 4) << std::endl;
std::cout << wiekszy(2.2, 4.3) << std::endl;
std::cout << wiekszy("abc", "cdf") << std::endl;
std::cout << "\n===\n";
int x = 2, y = 4;
zamien(x, y);
std::cout << x << ',' << y;
double i = 2.5, j = 3.5;
zamien(i, j);
std::cout << i << ',' << j;
std::string a = "abc", b = "cde";
zamien(a, b);
std::cout << a << ',' << b;
}

Some files were not shown because too many files have changed in this diff Show More