PO2026: Zasady uczestnictwa oraz regulaminy zajęć laboratoryjnych

Zasady obowiązujące na zajęciach:

Każdy uczestnik zajęć lab. wykonuje na komputerze w pracowni dwa zadania: podstawowe (pierwszego poziomu) za 6 pkt. i dodatkowe (drugiego poziomu) za 4 pkt. Zadań nie wolno realizować na własnym laptopie. Dopiero kiedy prowadzący odbierze i pozytywnie oceni zadanie podstawowe, można zacząć rozwiązywać zadanie dodatkowe (dodatkowe bywa łatwiejsze). Studenci mogą realizować swoje zadania tylko na zajęciach – nie ma możliwości kończenia programu w domu i przesyłania go do oceny w godzinach wieczornych czy następnego dnia. Studenci obowiązkowo uploadują do moodle rozwiązane zadania I i II poziomu w trakcie zajęć (moodle stanowi archiwum prac studentów). Po uploadowaniu koniecznie należy kliknąć „oddaj do oceny”.

W trakcie zajęć lab. obowiązuje całkowity zakaz korzystania z zasobów internetu. Używanie komunikatorów, korzystanie z wyszukiwarki sieciowej, sprawdzanie informacji na forach społecznościowych lub innych stronach poświęconych programowaniu w c/c++ skutkuje natychmiastowym opuszczeniem pracowni i oceną 0 pkt za realizowane zadanie.
Wyjątki:
http://www.cplusplus.com/
materiały z wykładu dostępne na platformie e-learningowej Moodle UKSW: https://e.uksw.edu.pl

Student może za to korzystać swobodnie z papierowych książek i notatek oraz wydruków. Jeżeli ktoś ma tablet z książkami w pdf’ie to ma obowiązek pokazać prowadzącemu, że na czas zajęć ma w nim wyłączony kontakt ze światem (WiFi).

Na zajęciach lab. prowadzący nie prezentuje żadnego mini-wykładu, a jedynie rozdaje i objaśnia zadania oraz odpowiada na konkretne pytania poszczególnych studentów dotyczące tworzonego kodu programu. Po wykonaniu zadania należy natychmiast zasygnalizować to prowadzącemu, który podejdzie i oceni wykonany program. Oceniony program należy uploadować do moodle. Osoby, które rozliczą pozytywnie obydwa zadania wcześniej, nie czekają w pracowni do zakończenia zajęć, ale opuszczają ją niezwłocznie po otrzymaniu oceny i wysłaniu programu do moodle. Zgłoszenie rozwiązania gotowego do oceny przez wiele osób na kilka minut przed końcem zajęć może skutkować brakiem możliwości oceny tych osób, które zgłosiły to najpóźniej, a w rezultacie – końcowym wynikiem 0 pkt dla tych osób.

W okolicach 4. zajęć w semestrze rozdawane są studentom zadania semestralne. Nie ma jednak podziału zaliczenia semestru na dwie oceny – z zajęć lab. i z zadania semestralnego. W ostatnim dniu semestru wystawiana jest jedna łączna ocena. Strategie postępowania w rodzaju „w semestrze zaliczę laboratoria a przez wakacje zrobię zadanie semestralne” są nieakceptowane. Student musi wykonać zadanie semestralne w semestrze i albo zaliczy wszystko przed rozpoczęciem sesji letniej, albo otrzymuje ocenę negatywną z zajęć lab.

Ważne: odnośniki do stron www z pełnymi zasadami zaliczenia zajęć lab. oraz z regulaminami są poniżej. Należy koniecznie zapoznać się z tymi informacjami przed rozpoczęciem pierwszych zajęć.

Ostatnia deska ratunku dla tych, którzy nie zaliczyli zajęć lab. w semestrze:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/wyjatek/

ZTP2025: Wyniki egzaminu – termin pierwszy

Wiersze zawierają: trzy ostatnie cyfry nr indeksu, liczbę zdobytych punktów i proponowaną ocenę.

  1. ***132   15.5   3.5
  2. ***137   1   2
  3. ***255   16   3.5
  4. ***259   18   4
  5. ***290   21   4.5
  6. ***305   16   3.5
  7. ***308   13.5   3
  8. ***322   23   5
  9. ***473   5.5   2
  10. ***481   17.5   4
  11. ***671   1   2
  12. ***674   8.5   2

W razie niejasności, proszę o kontakt mailowy.

ALIN2025: Wyniki z egzaminu zerowego

Lista osób, które otrzymały ocenę pozytywną z zajęć lab. i ocenę pozytywną na egzaminie zerowym. Wiersze zawierają: trzy ostatnie cyfry nr indeksu, liczbę zdobytych punktów i ocenę z egzaminu zerowego.

  1. ***003   16   5
  2. ***172   16   5
  3. ***225   16   5
  4. ***238   12   4
  5. ***378   12   4
  6. ***467   10   3.5
  7. ***475   14   4.5
  8. ***487   16   5
  9. ***497   16   5
  10. ***511   16   5
  11. ***534   15   5
  12. ***543   12   4
  13. ***549   16   4
  14. ***560   15   5
  15. ***579   12.5   4
  16. ***594   12   4
  17. ***627   13   4.5
  18. ***637   14   4.5
  19. ***639   14   4.5
  20. ***658   11   3.5

W razie niejasności, proszę o kontakt mailowy.

ZTP2025: Wyniki z egzaminu zerowego

Lista osób, które otrzymały ocenę pozytywną z zajęć lab. ale nie zostały zwolnione z egzaminu za bardzo dobre wyniki i osiągnęły co najmniej 50% pkt. na egzaminie zerowym. Wiersze zawierają: trzy ostatnie cyfry nr indeksu, liczbę zdobytych punktów i proponowaną ocenę.

  1. ***130   12 + ε   3
  2. ***151   12 + ε   3
  3. ***170   15   3.5
  4. ***198   15.5   3.5
  5. ***204   15   3.5
  6. ***213   21.5   4.5
  7. ***271   17   4
  8. ***279   12   3
  9. ***280   14.5   3.5
  10. ***284   15   3.5
  11. ***286   22   5
  12. ***406   21   4.5
  13. ***507   17.5   4
  14. ***977   12 + ε   3

Lista osób, które uczestniczyły w egzaminie zerowym, ale liczba zdobytych na egzaminie punktów nie przekroczyła progowej wartości 50% możliwych do zdobycia.

  1. ***132
  2. ***255
  3. ***259
  4. ***290
  5. ***305
  6. ***308
  7. ***364
  8. ***671
  9. ***674

W razie niejasności, proszę o kontakt mailowy.

Osoby z pozytywną oceną z lab., które nie uzyskały oceny pozytywnej na „zerówce”, zapraszam w najbliższy piątek, 6.02, godz. 11:00, na pierwszy termin egzaminu i zachęcam do wcześniejszego zapoznania się z Regulaminem uczestnictwa w egzaminach (jest to regulamin dla Programowania Obiektowego, ale regulamin dla ZTP jest identyczny. Jedyna różnica to brak części praktycznej na egzaminie ZTP).

Prośba do studentów

Szanowni Państwo,
od środy 21 stycznia do wtorku 3 lutego (tylko dwa tygodnie!) będzie otwarta możliwość oceniania zajęć, w których uczestniczyliście. Od lat odbywa się to za pomocą ankiet. Ankiety mają istotne znaczenie dla oceny nauczycieli akademickich oraz kierunków studiów. Naprawdę.

Niestety, również od lat borykamy się z tym samym problemem. Ankiety wypełniają najczęściej osoby mające skrajne opinie: negatywne lub pozytywne. Do tej pory takich osób nie było wiele, więc też statystyczna waga tych głosów nie była wielka i nie sposób z tego dobrze wnioskować.

Dlatego zwracam się do was z prośbą: jeżeli będziecie mieli chwilę wolnego czasu, wypełnijcie ankiety. Nawet jeżeli jesteście przeciwnikami ankiet albo odnosicie się do niektórych zajęć bez emocji i trudno wam coś powiedzieć. Wtedy wypełnijcie tylko te odpowiedzi, gdzie trzeba podać liczbę (np. od 0 do 5). A w komentarzach nie piszcie nic, jeżeli nic wam nie przychodzi do głowy. Im więcej głosów, tym bardziej wiarygodna ocena. My, nauczyciele akademiccy to zawsze doceniamy i jesteśmy autentycznie wdzięczni również wtedy, kiedy oceny są niskie.

Głosowanie jest w pełni anonimowe i odbywa się na platformie USOSweb. Od 21 stycznia ankiety będą dostępne (po zalogowaniu do USOSweb) pod adresem: https://usosweb.uksw.edu.pl/kontroler.php?_action=dla_stud/studia/ankiety/index

Zapraszam wszystkich,
Krzysztof Trojanowski

ZTP2025: Zadania przed lab. 7

Zadanie #1:

Przyjmij, że A, B, C i D reprezentują punkty w przestrzeni n-wymiarowej. Punkty te są reprezentowane w programie przez wektory współrzędnych. Wektor A zawiera dla każdej współrzędnej uzyskaną niezależnie wartość losową z generatora liczb o rozkładzie jednostajnym z przedziału [-10,10]. Wektor B zawiera wartości stałe [1,..,1].

Pobierz od użytkownika liczbę wymiarów przestrzeni n, utwórz odpowiednich rozmiarów wektory, przy czym zainicjuj też odpowiednio A i B, a następnie napisz kod wykonujący kolejno następujące obliczenia:

  1. D = A*B
  2. C = 3*B + D
  3. D = 3*(A+C)-(A*B)

gdzie operator '*’ oznacza mnożenie, przy czym kiedy argumentami są skalar i wektor, następuje przemnożenie wszystkich współrzędnych wektora przez skalar, natomiast w przypadku, kiedy argumentami są dwa wektory, jest to iloczyn Hadamarda (zobacz: https://pl.wikipedia.org/wiki/Mnożenie_macierzy). Sprawdź na danych testowych, czy obliczenia wykonują się poprawnie.

Uwaga: do zaimplementowania w/w operacji nie wykorzystuj żadnych pętli (for, while, repeat), a wyłącznie algorytmy STL i obiekty funkcyjne (własne lub biblioteczne). Jeżeli to potrzebne, rozłóż operacje na pojedyncze kroki, których wynik zapamiętuj w wektorach pomocniczych.

Zadanie #2:

W celu wygenerowania punktu na powierzchni hipersfery (zobacz: https://pl.wikipedia.org/wiki/Hipersfera) z centrum w środku układu współrzędnych należy wykonać następujące kroki:

  1. wygenerować wektor Z, którego każda współrzędna jest uzyskaną niezależnie wartością losową z generatora liczb o rozkładzie normalnym. Liczba współrzędnych wektora odpowiada liczbie wymiarów przestrzeni, w której definiowana jest hipersfera,
  2. policzyć ||Z||, tj. długość wektora Z, a następnie podzielić każdą ze współrzędnych wektora Z przez tę długość.

Nowy wektor Z reprezentuje punkt na powierzchni hipersfery o promieniu 1 z centrum w środku układu współrzędnych.

Wygeneruj wiele takich punktów dla przestrzeni 2-wymiarowej i przedstaw je w postaci graficznej. Sprawdź, czy układają się w kształt okręgu.

Uwaga: do zaimplementowania w/w operacji nie wykorzystuj żadnych pętli (for, while, repeat), a wyłącznie algorytmy STL i obiekty funkcyjne (własne lub biblioteczne). Jeżeli to potrzebne, rozłóż operacje na pojedyncze kroki, których wynik zapamiętuj w wektorach pomocniczych.

ZTP2025: Zadania przed lab. 6

Zadanie #1:

Napisz funkcję, która wczytuje macierz z pliku tekstowego zapisaną tak, że w kolejnych wierszach pliku są wartości komórek kolejnych wierszy macierzy rozdzielone spacjami, a następnie dokonuje jej transpozycji. Przyjmij, że wymiary wczytywanej macierzy są nieznane, ale że dane w pliku są na pewno poprawne (tj. wiersze przechowują tylko liczby, liczby liczb w wierszach są takie same, itp.). Do wczytania macierzy użyj kontenera typu <deque<deque<double>>. Funkcja zwraca transponowaną macierz w postaci wskaźnika do dynamicznie alokowanego kontenera typu vector<vector<double>>. Wypisz w oknie konsoli zawartość wynikowego kontenera i sprawdź, czy transpozycja została przeprowadzona poprawnie.

Zadanie #2:

Wczytaj słowa z kolejnych wierszy z pliku tekstowego do listy list, tj. kontenera typu list<list<string>>, tak aby kontener zawierał listę wierszy, gdzie każdy wiersz jest reprezentowany przez listę słów z tego wiersza. Posortuj rosnąco słowa z każdego wiersza wg zasady sortowania takiej jak w słowniku języka polskiego, a następnie scal posortowane listy słów do jednej listy wynikowej reprezentowanej przez inny kontener typu list<string>. Wypisz w oknie konsoli zawartość wynikowego kontenera w postaci kolumny i upewnij się, że sortowanie i scalanie się powiodło. Testy przeprowadź na pliku mistrz.txt

ZTP2025: Zadania przed lab. 5

Zadanie #1

Wprowadzenie:

Zamieszczony poniżej kod programu reprezentuje przykład programowania z wykorzystaniem cech charakterystycznych. W programie wykorzystywane są dwie klasy reprezentujące dwa pojęcia:

  1. temperatura_wody – liczba rzeczywista reprezentująca temperaturę wody
  2. kostka_do_gry – liczba całkowita reprezentująca wartość, jaka może wypaść w wyniku rzutu kostką do gry.

Dla tych klas zdefiniowano ich cechy charakterystyczne. Są nimi:

  1. _jest_liczba – cecha mówiąca, czy danych obiekt reprezentuje liczbę,
  2. _jest_liczba_calkowita – cecha mówiąca, czy liczba którą reprezentuje danych obiekt, jest liczbą całkowitą,
  3. _nalezy_do_przedzialu – cecha mówiąca, czy liczba którą reprezentuje danych obiekt, należy do przedziału,
  4. _dolna_granica_przedzialu – wartość dolnej granicy przedziału, do którego mogą należeć liczby reprezentowane przez danych obiekt,
  5. _gorna_granica_przedzialu – wartość górnej granicy przedziału, do którego mogą należeć liczby reprezentowane przez danych obiekt,

Cechy charakterystyczne zostały zaimplementowane w programie. W tym celu najpierw zostały zaimplementowane dwie klasy: Bazowe_Cechy oraz Cechy: public Bazowe_Cechy tworzące pojęcie zbioru cech.

Następnie dla każdej z dwóch klas: temperatura_wody i kostka_do_gry zostały skonkretyzowane w odpowiedni sposób przypisane im klasy cech:

  1. Cechy<temperatura_wody>: public Bazowe_Cechy
  2. Cechy<kostka_do_gry>: public Bazowe_Cechy

Działanie programu polega na gromadzeniu danych liczbowych różnych typów w kontenerach, przy czym kontenery do walidacji wprowadzanych danych używają cech charakterystycznych. W tym celu zdefiniowana została klasa reprezentująca kontener SzablonStosu przystosowany do przechowywania dowolnych wartości, w tym obiektów typu temperatura_wody i kostka_do_gry. Metoda push tego kontenera przed umieszczeniem danej dokonuje jej walidacji posługując się informacjami z klasy Bazowe_Cechy.

Wykorzystanie kontenera zostało zademonstrowane w funkcji main. W kodzie main tworzone są trzy kontenery K1, K2 i K3, a następnie są wypełniane wartościami. Uwaga: kontener K1 jest zapełniany wartościami tak długo, póki wystarczy zasobów komputera (w trakcie wykonania programu warto uruchomić menedżer zadań i w sekcji wydajności obserwować, jak ubywa wolnej pamięci w miarę pracy programu).

Zadanie:

  1. Przenieś kod do środowiska VS C++, skompiluj i uruchom.
  2. Przeanalizuj kod, upewnij się, że rozumiesz rolę wszystkich pól i metod w klasach i potrafisz to wyjaśnić na zajęciach.
  3. Upewnij się, że potrafisz wyjaśnić, dlaczego tyle właśnie elementów zostaje umieszczonych w każdym z trzech kontenerów (a nie więcej).
  4. dodaj do kodu jeszcze jedną klasę reprezentującą pojęcie liczbowe „numer kołnierzyka koszuli” i skonkretyzuj w odpowiedni sposób odpowiadającą jej klasę cech. Następnie, jeżeli to konieczne, rozszerz kod metody push tak aby poprawnie walidował obiekty nowego typu. W funkcji main dodaj kontener K4 w którym zgromadzisz kilka obiektów nowego typu.
  5. Przygotuj się do rozwijania tego kodu dla potrzeb nowych rodzajów wartości, jakie można przechowywać w tym kontenerze.

Pliki do pobrania:

  1. Plik programu: ZTP-traits.cpp
  2. Plik z danymi wejściowymi: qv-lab4 (po założeniu nowego projektu VC++ należy go umieścić w tym samym folderze, co plik z kodem programu).