Napisz program szyfrujący tekst wprowadzany przez użytkownika. W tym celu przygotuj tablicę dwuwymiarową A o wymiarze 5 na 5 przechowującą wartości typu char
, oraz tablicę jednowymiarową B, przechowującą wskaźniki do zmiennych typu char
. Czytaj dalej
PO2025: zasady prowadzenia zajęć laboratoryjnych
Wybrane najważniejsze 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 w pełni 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 (platforma e-learningowa Moodle UKSW https://e.uksw.edu.pl/) 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. To znaczy, że obowiązuje również całkowity zakaz korzystania ze smartfonów, tabletów i innych urządzeń mobilnych. 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/
https://en.cppreference.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 zrobił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.
Strony www z pełną listą zasad dotyczących organizacji i zaliczenia zajęć lab. z PO:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/
w tym:
Zasady dla zadań lab.:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/zasady-dla-zadan-lab/
Zasady dla zadania sem.:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/zasady-dla-zadania-sem/
Proszę studentów o zapoznanie się z powyższymi zasadami przed przyjściem na pierwsze zajęcia, aby uniknąć niepotrzebnych nieporozumień.
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/
ZTP2024: Wyniki z egzaminu w terminie pierwszym
Lista ocen osób, które uczestniczyły w egzaminie w pierwszym terminie. Wiersze zawierają: trzy ostatnie cyfry nr indeksu, liczbę zdobytych punktów i proponowaną ocenę.
- ***045 0 2
- ***112 12 + ε 3
- ***121 12.5 3
- ***242 14 3
- ***302 12 + ε 3
- ***397 16.5 3.5
- ***446 14 3
- ***482 19.5 4
- ***507 4 2
- ***539 7.5 2
- ***597 7.5 2
- ***618 12 + ε 3
- ***627 12.5 3
- ***630 11 2
- ***899 0 2
- ***900 12 + ε 3
- ***907 19.5 4
W razie niejasności, proszę o kontakt mailowy.
Prace będą do wglądu w piątek (7 lutego), w godz. 12:30-13:00 (lub do ostatniej zainteresowanej osoby) w pok. 1247, bud. 12. Uwaga: wcześniej będę na spotkaniu z ks. Prorektorem, które będzie miało miejsce w Dziekanacie i które może się przedłużyć. Informację o tym, że spotkanie nadal trwa, można będzie uzyskać w Dziekanacie. w takim wypadku proszę o poczekanie. Bezpośrednio po spotkaniu przyjdę do pokoju 1247.
AIN2024: Zmiana godziny egzaminu AIN, termin I
Informuję o zmianie godziny I terminu egzaminu AIN. Dla osób, które mają ocenę pozytywną z zajęć lab., a nie uzyskały oceny pozytywnej na egzaminie zerowym, egzamin odbędzie się 5 lutego, w środę, o godz. 12:00 w sali 106, bud. 21 (w jednej auli razem z egzaminem „Zaawansowane techniki programowania”).
AIN2024: 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 i ocenę z egzaminu zerowego.
- ***037 4
- ***055 5
- ***226 4.5
- ***229 4.5
- ***232 4.5
- ***233 4.5
- ***239 4
- ***244 4.5
- ***254 4
- ***261 4.5
- ***269 5
- ***271 5
- ***273 4.5
- ***274 4.5
- ***275 4.5
- ***293 4
- ***306 4.5
- ***477 4
- ***563 5
- ***598 4
- ***764 4.5
- ***851 3.5
- ***867 3.5
- ***887 4.5
- ***889 4.5
- ***890 4
- ***891 5
- ***986 4
W razie niejasności, proszę o kontakt mailowy.
ZTP2024: 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ę.
- ***311 20.5 4.5
- ***432 24 5
- ***448 24 5
- ***508 22 5
- ***509 17 4
- ***526 13.5 3
- ***531 19.5 4.5
- ***536 12 + ε 3
- ***543 16 3.5
- ***546 13.5 3
- ***549 16.5 3.5
- ***554 23.5 5
- ***571 12 + ε 3
- ***577 22 5
- ***587 17.5 4
- ***621 14 3
- ***638 12 + ε 3
- ***668 22.5 5
- ***728 23.5 5
- ***734 14.5 3.5
- ***807 18 4
- ***939 24 5
- ***943 24 5
- ***944 15 3.5
- ***945 22 5
Lista osób, które otrzymały ocenę pozytywną z zajęć lab., nie zostały zwolnione z egzaminu za bardzo dobre wyniki i uczestniczyły w egzaminie zerowym, ale liczba zdobytych na egzaminie punktów nie przekroczyła progowej wartości 50% możliwych do zdobycia. Wiersze zawierają trzy ostatnie cyfry nr indeksu.
- ***045
- ***112
- ***121
- ***302
- ***397
- ***428
- ***446
- ***482
- ***507
- ***597
- ***618
- ***627
- ***630
- ***900
- ***907
W razie niejasności, proszę o kontakt mailowy.
ZTP2024: Lista osób zwolnionych z egzaminu
Lista zawiera trzy ostatnie cyfry numeru indeksu osób zwolnionych z egzaminu za bardzo dobre wyniki na zajęciach lab.
- ***107
- ***305
- ***334
- ***428
- ***471
- ***550
- ***559
- ***577
- ***620
- ***699
- ***732
Osoby te z egzaminu z wykładu otrzymują ocenę 5 (bardzo dobry), która zostanie wpisana do protokołu USOS jako ocena zdobyta w pierwszym terminie.
W razie niejasności proszę o kontakt mailowy.
ZTP2024: Zadania przed lab.7
Założenia
Przyjmijmy, że mamy zbiór punktów w przestrzeni n-wymiarowej, przy czym współrzędne pojedynczego punktu są reprezentowane w postaci wektora liczb rzeczywistych o długości n. Mówimy, że punkt A dominuje nad punktem B, jeżeli dla każdej współrzędnej A(i) odpowiadająca jej współrzędna B(i) jest mniejsza lub równa, oraz istnieje co najmniej jedna taka współrzędna j dla której A(j)>B(j). Można też wtedy powiedzieć, że B jest zdominowane przez A. Jeżeli natomiast dla pary punktów taki warunek nie jest spełniony, tj. ani A nie dominuje nad B, ani B nad A, wtedy uważamy punkty A i B za nieporównywalne względem siebie.
W zbiorze punktów punkt niezdominowany to taki, który może tylko dominować lub być nieporównywalnym z wszystkimi pozostałymi punktami.
Zadanie #1
Wygeneruj zbiór 100 losowych punktów w przestrzeni n-wymiarowej, po czym znajdź w nim zbiór punktów niezdominowanych. Algorytm znajdowania punktów niezdominowanych polega na porównaniu każdego punktu ze wszystkimi pozostałymi (nie dokonujemy porównania punktu z samym sobą). Jeżeli dla aktualnie sprawdzanego punktu z żadnego porównania nie wyniknie, że jest zdominowany, to znaczy, że jest niezdominowany. Kopię znalezionego punktu niezdominowanego należy zapisać w kontenerze pomocniczym. Na koniec sprawdzania kontener pomocniczy zawiera wyłącznie punkty niezdominowane.
Algorytm można zrealizować np. z pomocą dwóch kontenerów zawierających zestawy tych samych 100 punktów oraz kontenera pomocniczego, który początkowo jest pusty. Punkty z pierwszego kontenera są punktami sprawdzanymi, a punkty z drugiego – punktami z którymi dokonywane jest sprawdzenie. Do kontenera pomocniczego trafiają kopie tych punktów z kontenera pierwszego, które okazały się niezdominowane. Realizacja czynności odbywa się za pomocą dwóch pętli for
– zewnętrznej (punkty z pierwszego kontenera) i wewnętrznej (punkty z drugiego kontenera).
Po zaimplementowaniu algorytmu spróbuj zaimplementować go ponownie, ale tym razem bez używania pętli for, while, repeat
, natomiast stosując algorytmy STL oraz własne lub biblioteczne obiekty funkcyjne. Sprawdź, czy uzyskałeś ten sam wynik.
Zadanie #2
Wygeneruj zbiór 100 punktów losowo rozłożonych na okręgu (w przestrzeni 2-wymiarowej) o promieniu 1 (zobacz Zadania przed lab. 6: zadanie #2), po czym znajdź w nim zbiór punktów niezdominowanych i zapisz do oddzielnego kontenera. W kontenerze tym uporządkuj niezdominowane punkty rosnąco pod względem ich pierwszej współrzędnej. Wykorzystując algorytm adjacent_difference
(slajdy 121 i 122, wykład 9) wygeneruj wektory łączące kolejne niezdominowane punkty (tj. wektory: od punktu 1 do 2, od 2 do 3, od 3 do 4, itd.). Następnie policz długości tych wektorów, tj. euklidesowe odległości między kolejnymi punktami i zapisz do jeszcze jednego kontenera. Na koniec policz średnią odległość między kolejnymi punktami oraz wariancję tej odległości.
Przy pisaniu kodu programu unikaj pętli for, while, repeat
, a zamiast nich stosuj algorytmy STL oraz własne lub biblioteczne obiekty funkcyjne.
Hint:
Zadanie dotyczące znajdowania zbioru punktów niezdominowanych może pojawić się na lab.7. Na zajęciach można będzie wykorzystać fragmenty własnego kodu opracowanego w domu.
ZTP2024: Zadania przed lab.6
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:
- D = A*B
- C = 3*B + D
- 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%C5%BCenie_macierzy#Iloczyn_Hadamarda). 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:
- 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,
- 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.
ZTP2024: Zadania przed lab.5
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