Compare commits

...

5 Commits

Author SHA1 Message Date
d38af389b6 kod 2026-03-31 16:57:45 +02:00
fc780b0220 gitignore 2026-03-31 15:29:05 +02:00
59d771de82 kod 2026-03-31 15:26:41 +02:00
3a5efebd4b rzeczy 2026-03-31 15:01:08 +02:00
c9945fb1d3 matma 2026-03-31 13:41:09 +02:00
25 changed files with 474 additions and 2 deletions

2
.gitignore vendored
View File

@@ -3,6 +3,6 @@
.trash
.idea
*.out
*/out
.Rhistory
main

View File

@@ -1,3 +1,76 @@
# 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 (ω)
- Zbiory przeliczalne
- Działania na zbiorach i zdarzeniach (dopełnienie, suma, przekrój)
- Zdarzenie niemożliwe i zdarzenia wykluczające się
- Przestrzenie mierzalne i zbiory borelowskie
**2. Definicje i miary prawdopodobieństwa**
- Klasyczna definicja prawdopodobieństwa (Laplace'a) dla przestrzeni skończonych
- Miara Lebesgue'a (odnosząca się do długości, pola i objętości)
- Prawdopodobieństwo geometryczne i pojęcie miary bezatomowej
**3. Zmienna losowa i statystyka opisowa (charakterystyki zmiennej)**
- Definicja zmiennej losowej jako funkcji
- Dystrybuanta i jej własności (ciągłość, granice w nieskończoności)
- Miary rozproszenia: Wariancja, odchylenie standardowe (σ) i współczynnik zmienności
- Miary położenia: Kwantyle, mediana, kwartyle, centyle (oraz ich praktyczne zastosowanie, np. do mierzenia długości dziecka)
- Miary asymetrii rozkładu (np. wydłużony ogon, na przykładzie rozkładu płac)
- Wartości skrajne (konieczność ich odrzucania przy pomiarach)
- Dominanta (moda)
**4. Rozkłady prawdopodobieństwa**
- **Rozkłady dyskretne (skokowe):**
- Rozkład zero-jedynkowy (0-1)
- Rozkład dwumianowy (wzmianka o trójkącie Pascala)
- Rozkład geometryczny (ciąg geometryczny z parametrami _p_ i _q_)
- Rozkład Poissona
- **Zmienne i rozkłady typu ciągłego:**
- Związek dystrybuanty z całką (pole pod wykresem)
- Rozkład wykładniczy
- Rozkład normalny (funkcja Gaussa)
**5. Wektory losowe i zagadnienia zaawansowane**
- Niezależność zmiennych losowych
- Wektory losowe (w tym wektory typu skokowego) i ich dystrybuanty
- Charakterystyki wektora losowego
- Twierdzenia graniczne (jako temat zamykający)
# Zdarzenia losowe
## Jak wygląda przestrzeń zdarzeń elementarnych?
zdarzenie $\omega$
@@ -122,3 +195,27 @@ Dystrybuanta wektora losowego
Wektor losowy typu skokowego
# Charakterystyki wektora losowego centralne, twierdzenia graniczne i elementy statystyki opisowej
Ostatni temat z prawdopodobieństwa.
Zmienne dwuwymiarowe.
Kowariancja jest symetryczna
Kowariancja to miara określające siłę oraz zależność dwóch zmiennych losowych.
Suma zmiennych to suma wariancji +- suma kowariancji
Jeżeli zmienne X i Y są niezależne to kowariancja jest 0. Tego twierdzenia nie można odwrócić.
Współczynnik korelacji liniowej Pearsona.
Macierz kowariancji (momentów)
Nie rozumiem co tu się dzieje.
Centralne twierdzenie graniczne — jeśli ciąg zmiennych losowych $Y_{n\space n \in N}$ jest zbieżny według rozkładu do zmiennej losowej Y o rozkładzie $N(0,1)$
Twierdzenie Lindberga - Levy'ego i Moivre'a - Laplace'a
Elementy statystyki opisowej

View File

@@ -0,0 +1,60 @@
# Zadanie 1
A = matrix(c(1, 1, qnorm(0.3), qnorm(0.75)), 2, 2)
B = c(5281.21, 9090.9)
wynik = solve(A, B)
m = wynik[1]
sigma = wynik[2]
print(m)
print(sigma)
# a)
# P(x > 7800)
pnorm(7800, m, sigma, F) * 100 # 39.42534
# b)
round(qnorm(15/100, m, sigma),2) # 3654.13
# zadanie 2
A = matrix(c(1, 1, qnorm(0.8), qnorm(0.44)), 2, 2)
B = c(120, 90)
wynik = solve(A, B)
m = wynik[1]
sigma = wynik[2]
# a)
# P(X < 45)
pnorm(45, m, sigma) # 0.05051767
# b)
qnorm(0.13, m, sigma, F) # 128.6069
# zadanie 3
m = 165.5
sig = (155 - m)/qnorm((1 - 0.93)/2)
round(pnorm(170, m, sig, F) * 500)
# zadanie 4
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 5
m = 4001.50
sig = (3503 - m)/qnorm((1 - 0.15)/2)
qnorm(0.25, m, sig, F)
# zadanie 6
# 45 < X < 55
A = matrix(c(1, 1, qnorm(2/524), qnorm(517/524)), 2, 2)
B = c(17, 70)
wynik = solve(A,B)
m = wynik[1]
sig = wynik[2]
pnorm(55, m, sig) - pnorm(45, m, sig)

Binary file not shown.

View File

@@ -0,0 +1,29 @@
#include <iostream>
using namespace std;
class Pole_Szymon_Prusiewicz {
public:
int x, y;
Pole_Szymon_Prusiewicz(int x, int y) : x(x), y(y) {
cout << x << ' ' << y << endl;
}
~Pole_Szymon_Prusiewicz() { cout << "koniec zycia" << endl; }
void oblicz_pole() { cout << "Pole wynosi: " << x * y << endl; }
Pole_Szymon_Prusiewicz &operator=(const Pole_Szymon_Prusiewicz &inne_pole) {
cout << "Przypisanie" << endl;
if (this != &inne_pole) {
x = inne_pole.x;
y = inne_pole.y;
}
return *this;
}
};
int main() {
Pole_Szymon_Prusiewicz p1(1, 2);
Pole_Szymon_Prusiewicz p2 = p1;
p1.oblicz_pole();
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.

View File

@@ -0,0 +1,15 @@
// Prześledź krok po kroku poniższy kod. Dla każdej linii zanotuj wartość ptr, *ptr
// (jeśli dostępna) oraz czy pamięć jest zaalokowana.
#include <iostream>
int main() {
int *ptr = nullptr; // deklarujemy wskaźnik wskazujący na nic
ptr = new int(5); // wskaźnik wskazuje teraz na wartość 5. jest ona za
// alokowana na stercie
std::cout << *ptr << '\n'; // wyświetla 5
*ptr = *ptr + 3; // zwiększamy wartość o 3
std::cout << *ptr << '\n'; // wyświetla 8
delete ptr; // usuwa liczbę na którą wskazuje wskaźnik
ptr = nullptr; // wskaźnik teraz na nic nie wskazuje
}

View File

@@ -0,0 +1,59 @@
// Przepisz rozwiązanie zadania 9, używając std::unique_ptr<double[]> zamiast su
// rowego wskaźnika. Sprawdź, co musisz zmienić i co działa tak samo.
#include <iostream>
#include <memory>
double obliczSrednia(std::unique_ptr<double[]> &tab, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += tab[i];
}
return sum / n;
}
double znajdzMin(std::unique_ptr<double[]> &tab, int n) {
double min = 6, x;
for (int i = 0; i < n; i++) {
x = tab[i];
min = x < min ? x : min;
}
return min;
}
double znajdzMax(std::unique_ptr<double[]> &tab, int n) {
double max = 0, x;
for (int i = 0; i < n; i++) {
x = tab[i];
max = x > max ? x : max;
}
return max;
}
int main() {
std::cout << "Ile chcesz podać ocen: " << std::endl;
int n;
std::cin >> n;
std::unique_ptr<double[]> arr = std::make_unique<double[]>(n);
// wypełniamy tablicę
for (int i = 0; i < n; i++) {
std::cout << "Podaj ocenę numer " << i + 1 << ' ';
std::cin >> arr[i];
}
double max = znajdzMax(arr, n);
double min = znajdzMin(arr, n);
double avg = obliczSrednia(arr, n);
std::string comment = avg > 3.5 ? "Uczeń zaliczył :D" : "Uczeń oblał D:";
std::cout << "=== Oceny ===" << std::endl;
for (int i = 0; i < n; i++) {
std::cout << arr[i] << ' ';
}
std::cout << std::endl;
std::cout << "=== Informacje ===" << std::endl;
std::cout << "Największa ocena: " << max << '\n' << "Najmniejsza ocena: " << min << '\n' << "Średnia: " << avg << '\n' << comment << std::endl;
return 0;
}

View File

@@ -0,0 +1,21 @@
// Poniższy kod zawiera kilka błędów. Wskaż każdy z nich i zaproponuj poprawkę
void funkcja() {
int *a = new int(
10); // do wskaźnika a przypisujemy wartość 10 zaalokowaną na stercie
int *b = new int(
20); // do wskaźnika b przypisujemy wartość 20 zaalokowaną na stercie
// a = b; // (1) // do wskaźnika a przypisujemy adres wskaźnika b
// teraz oba wskaźniki wskazują na 20.
// delete a; // (2) // usuwa wartość 20 ze sterty
// delete b; // (3) // usuwa wartość 20 ze sterty
// poprawa: zamiast przypisywać adresy przypiszmy wartości na które wskazują!
*a = *b;
delete a;
delete b;
// dodatkowo pokażmy że nie wskazują teraz na nic
a = nullptr;
b = nullptr;
}

View File

@@ -0,0 +1,29 @@
// Napisz program, który wczytuje od użytkownika liczbę n, alokuje tablicę n lic
// b całkowitych na stercie, wczytuje n wartości, oblicza i wypisuje ich
// sumę, a następnie poprawnie zwalnia pamięć.
#include <iostream>
int sumuj(int *arr, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += *(arr + i);
}
return sum;
}
int main() {
int n;
std::cout << "Podaj rozmiar tablicy: ";
int *arr = new int[n];
std::cin >> n;
for (int i = 0; i < n; i++) {
std::cout << "Podaj wartość numer: " << i + 1 << ": ";
std::cin >> *(arr + i);
}
std::cout << "Suma tych liczb to: " << sumuj(arr, n);
delete[] arr;
arr = nullptr;
return 0;
}

View File

@@ -0,0 +1,28 @@
// Napisz funkcję o poniższej sygnaturze. Zaalokuj tablicę, wypełnij ją kole
// nymi wielokrotnościami
// wartości krok i zwróć wskaźnik. Pamiętaj, że wywołujący jest odpowiedzialny za del
// te[].
#include <iostream>
int *generujTableau(int n, int krok) {
int *arr = new int[n];
for (int i = 0; i < n; i++) {
*(arr + i) = krok * i;
}
return arr;
}
void pokazTableau(int *arr, int n) {
for (int i = 0; i < n; i++) {
std::cout << *(arr + i) << ' ';
}
std::cout << std::endl;
}
int main() {
int *arr = generujTableau(5, 3);
pokazTableau(arr, 5);
}
// Przykład: generujTableau(5, 3) zwraca {0, 3, 6, 9, 12}

View File

@@ -0,0 +1,17 @@
// Uzupełnij program i sprawdź zachowanie. Wyjaśnij, dlaczego wyniki mogą się różn
// ić.
#include <iostream>
void podwojWartoscia(int x) { x *= 2; }
void podwojWskaznikiem(int *p) { *p *= 2; }
int main() {
int *q = new int(5);
podwojWartoscia(*q);
std::cout << *q << '\n'; // co zostanie wypisane? // 5
podwojWskaznikiem(q);
std::cout << *q << '\n'; // co zostanie wypisane? // 10
delete q;
// wyniki różnią się, bowiem w podwojeniu wartością mnożymy lokalną kopię argumentu razy 2, a w podwojeniu wskaźnikiem mnożymy wartość przetrzymywaną w miejscu, na które wskazuje wskaźnik
}

View File

@@ -0,0 +1,14 @@
// Poniższy fragment ma błąd logiczny i błąd zarządzania pamięcią. Zidentyfikuj oba i n
// apisz poprawną wersję.
int *stworzTablice(int n) {
// int tab[n]; // (1) — co jest nie tak? // alokuje na stosie - błąd
int *tab = new int[n]; // alokujemy na stercie
for (int i = 0; i < n; i++)
tab[i] = i;
return tab; // (2) — co jest nie tak? // poprzednio zwracaliśmy adres lokalnej zm
// ennej, teraz zwracamy adres danych zaalokowanych na stercie
// i jest super
}
int main() { return 0; }

View File

@@ -0,0 +1,17 @@
// Przepisz poniższy kod, zastępując ręczną alokację obiektem unique_ptr.
// Upewnij się, że nie musisz pisać delete.
// Wersja z surowym wskaźnikiem:
// double *wynik = new double(3.14);
// std::cout << *wynik << '\n';
// delete wynik;
// Twoja wersja z unique_ptr:
// ...
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<double> wynik = std::make_unique<double>(3.14);
std::cout << *wynik << '\n';
}

View File

@@ -0,0 +1,17 @@
// Prześledź poniższy kod. Przed każdym std::cout przewidź wartość use_count(), a nast
// pnie uruchom program i porównaj
#include <iostream>
#include <memory>
int main() {
auto a = std::make_shared<int>(42);
std::cout << a.use_count() << '\n'; // 1
{
auto b = a;
std::cout << a.use_count() << '\n'; // 2
auto c = a;
std::cout << a.use_count() << '\n'; // 3
}
std::cout << a.use_count() << '\n'; // 1
}

View File

@@ -0,0 +1,67 @@
// Napisz program, który:
// • pyta użytkownika o liczbę ocen n
// • dynamicznie alokuje tablicę n liczb double
// • wczytuje oceny od użytkownika
// • oblicza i wypisuje średnią, ocenę minimalną i maksymalną
// • wypisuje informację, czy student zaliczył (średnia >= 3.0)
// • poprawnie zwalnia pamięć
// Użyj funkcji pomocniczych: obliczSrednia(double* tab, int n),
// znajdzMin(double* tab, int n), znajdzMax(double* tab, int n).
#include <iostream>
double obliczSrednia(double *tab, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += *(tab + i);
}
return sum / n;
}
double znajdzMin(double *tab, int n) {
double min = 6, x;
for (int i = 0; i < n; i++) {
x = *(tab + i);
min = x < min ? x : min;
}
return min;
}
double znajdzMax(double *tab, int n) {
double max = 0, x;
for (int i = 0; i < n; i++) {
x = *(tab + i);
max = x > max ? x : max;
}
return max;
}
int main() {
std::cout << "Ile chcesz podać ocen: " << std::endl;
int n;
std::cin >> n;
double *arr = new double[n];
// wypełniamy tablicę
for (int i = 0; i < n; i++) {
std::cout << "Podaj ocenę numer " << i + 1 << ' ';
std::cin >> *(arr + i);
}
double max = znajdzMax(arr, n);
double min = znajdzMin(arr, n);
double avg = obliczSrednia(arr, n);
std::string comment = avg > 3.5 ? "Uczeń zaliczył :D" : "Uczeń oblał D:";
std::cout << "=== Oceny ===" << std::endl;
for (int i = 0; i < n; i++) {
std::cout << *(arr + i) << ' ';
}
std::cout << std::endl;
std::cout << "=== Informacje ===" << std::endl;
std::cout << "Największa ocena: " << max << '\n' << "Najmniejsza ocena: " << min << '\n' << "Średnia: " << avg << '\n' << comment << std::endl;
delete[] arr;
arr = nullptr;
return 0;
}

View File

@@ -10,4 +10,6 @@ Postać standardowa funkcji boolowskiej może być sumacyjna lub iloczynowa, mog
Nudy gówno tralalalalalal
rlc sratata
rlc sratata
Czas propagacji na wykresie czasu to przesunięcie zielonej linii.