diff --git a/uczelnia/2_semestr/programowanie/laby/kol1 b/uczelnia/2_semestr/programowanie/laby/kol1 new file mode 100755 index 0000000..8e6cea8 Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/kol1 differ diff --git a/uczelnia/2_semestr/programowanie/laby/kolokwium1.cpp b/uczelnia/2_semestr/programowanie/laby/kolokwium1.cpp index e69de29..cb216af 100644 --- a/uczelnia/2_semestr/programowanie/laby/kolokwium1.cpp +++ b/uczelnia/2_semestr/programowanie/laby/kolokwium1.cpp @@ -0,0 +1,29 @@ +#include +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; +} diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/1 b/uczelnia/2_semestr/programowanie/laby/lab5/out/1 new file mode 100755 index 0000000..85024cc Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/1 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/10 b/uczelnia/2_semestr/programowanie/laby/lab5/out/10 new file mode 100755 index 0000000..cb6846b Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/10 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/3 b/uczelnia/2_semestr/programowanie/laby/lab5/out/3 new file mode 100755 index 0000000..2b6bd13 Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/3 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/4 b/uczelnia/2_semestr/programowanie/laby/lab5/out/4 new file mode 100755 index 0000000..df7a647 Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/4 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/5 b/uczelnia/2_semestr/programowanie/laby/lab5/out/5 new file mode 100755 index 0000000..78ff424 Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/5 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/6 b/uczelnia/2_semestr/programowanie/laby/lab5/out/6 new file mode 100755 index 0000000..b1e826f Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/6 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/7 b/uczelnia/2_semestr/programowanie/laby/lab5/out/7 new file mode 100755 index 0000000..72b5dd2 Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/7 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/8 b/uczelnia/2_semestr/programowanie/laby/lab5/out/8 new file mode 100755 index 0000000..eb4c4ad Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/8 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/out/9 b/uczelnia/2_semestr/programowanie/laby/lab5/out/9 new file mode 100755 index 0000000..e7e956c Binary files /dev/null and b/uczelnia/2_semestr/programowanie/laby/lab5/out/9 differ diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad1.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad1.cpp index 4d3c6d2..398b5bd 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad1.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad1.cpp @@ -6,7 +6,7 @@ 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 - // lokowana na stercie + // 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 diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad10.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad10.cpp index d8c4152..3709ddf 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad10.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad10.cpp @@ -1,2 +1,59 @@ // Przepisz rozwiązanie zadania 9, używając std::unique_ptr zamiast su // rowego wskaźnika. Sprawdź, co musisz zmienić i co działa tak samo. + +#include +#include + +double obliczSrednia(std::unique_ptr &tab, int n) { + double sum = 0; + for (int i = 0; i < n; i++) { + sum += tab[i]; + } + return sum / n; +} + +double znajdzMin(std::unique_ptr &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 &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 arr = std::make_unique(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; +} diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad4.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad4.cpp index 784e7c8..328fa07 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad4.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad4.cpp @@ -3,5 +3,26 @@ // wartości krok i zwróć wskaźnik. Pamiętaj, że wywołujący jest odpowiedzialny za del // te[]. -int *generujTableau(int n, int krok); +#include + +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} diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad5.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad5.cpp index 1d1903e..a7e027c 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad5.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad5.cpp @@ -1,11 +1,17 @@ // Uzupełnij program i sprawdź zachowanie. Wyjaśnij, dlaczego wyniki mogą się różn // ić. +#include + void podwojWartoscia(int x) { x *= 2; } void podwojWskaznikiem(int *p) { *p *= 2; } -int *q = new int(5); -podwojWartoscia(*q); -std::cout << *q << '\n'; // co zostanie wypisane? -podwojWskaznikiem(q); -std::cout << *q << '\n'; // co zostanie wypisane? -delete q; + +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 +} diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad6.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad6.cpp index fc495d6..903b21c 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad6.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad6.cpp @@ -2,8 +2,13 @@ // apisz poprawną wersję. int *stworzTablice(int n) { - int tab[n]; // (1) — co jest nie tak? + // 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? + 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; } diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad7.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad7.cpp index 7624cf1..0b30d1c 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad7.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad7.cpp @@ -2,8 +2,16 @@ // Upewnij się, że nie musisz pisać delete. // Wersja z surowym wskaźnikiem: -double *wynik = new double(3.14); -std::cout << *wynik << '\n'; -delete wynik; +// double *wynik = new double(3.14); +// std::cout << *wynik << '\n'; +// delete wynik; // Twoja wersja z unique_ptr: // ... + +#include +#include + +int main() { + std::unique_ptr wynik = std::make_unique(3.14); + std::cout << *wynik << '\n'; +} diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad8.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad8.cpp index 1d4d66f..f4e9b49 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad8.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad8.cpp @@ -3,14 +3,15 @@ #include #include + int main() { auto a = std::make_shared(42); - std::cout << a.use_count() << '\n'; // ? + std::cout << a.use_count() << '\n'; // 1 { auto b = a; - std::cout << a.use_count() << '\n'; // ? + std::cout << a.use_count() << '\n'; // 2 auto c = a; - std::cout << a.use_count() << '\n'; // ? + std::cout << a.use_count() << '\n'; // 3 } - std::cout << a.use_count() << '\n'; // ? + std::cout << a.use_count() << '\n'; // 1 } diff --git a/uczelnia/2_semestr/programowanie/laby/lab5/zad9.cpp b/uczelnia/2_semestr/programowanie/laby/lab5/zad9.cpp index ec1474c..e0a14de 100644 --- a/uczelnia/2_semestr/programowanie/laby/lab5/zad9.cpp +++ b/uczelnia/2_semestr/programowanie/laby/lab5/zad9.cpp @@ -7,3 +7,61 @@ // • poprawnie zwalnia pamięć // Użyj funkcji pomocniczych: obliczSrednia(double* tab, int n), // znajdzMin(double* tab, int n), znajdzMax(double* tab, int n). + +#include + +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; +}