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

ZTP2024: Zadania przed lab.4

Zadanie #1

Wprowadzenie:

Zamieszczony poniżej do pobrania 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).

ZTP2024: Zadania przed lab.3

Zadania, które dotyczą zakresu materiału, jaki będzie poruszany na lab. 3. Rozwiązanie nie jest wymagane. Zadania stanowią wyłącznie pomoc w przygotowaniu się do zajęć.

Zadanie #1:

Zaprojektuj szablon kontenera typu stos posiadający zagnieżdżoną klasę reprezentującą iteratory stosu. Następnie utwórz w funkcji main obiekt reprezentujący stos do przechowywania zmiennych typu double i umieść w nim za pomocą metody push dowolną liczbę (nie większą od 100) wartości losowych rzeczywistych z przedziału 〈0, 10).

Napisz szablony trzech funkcji, które jako argument wejściowy przyjmują parę iteratorów stosu identyfikujących przedział danych z kontenera (tak jak na slajdzie 150, wykład 3), i które dla liczb w tym przedziale znajdują lub obliczają i zwracają:

  1. wartość minimalną/maksymalną,
  2. medianę,
  3. wartość średnią.

Przyjmij, że typ danych przechowywanych w kontenerze zawsze pozwala na wszystkie standardowe operacje arytmetyczne i logiczne (posiada odpowiednie operatory). Uwaga: funkcje nie otrzymują w argumentach wywołania referencji ani wskaźnika do obiektu kontenera, a jedynie iteratory wskazujące na poprawny przedział danych w nim zawartych.

Zademonstruj poprawne działanie tych szablonów funkcji wywołując je w funkcji main dla przykładowych danych zapisanych w kontenerze. Na początku na potrzeby testów poprawności spreparuj dane testowe w kontenerze tak, aby łatwo było w pamięci policzyć wynik i potwierdzić poprawność działania szablonów funkcji.


Hint: aby wygenerować wartość losową z przedziału 〈0, 1) można np. użyć funkcji:

#include <cstdlib> // zawiera RAND_MAX
#include <ctime> // zawiera funkcję time()
//generuje liczbę pseudolosową typu double z przedziału od 0.0 do 0.999...
double randdouble() {
return rand()/(double(RAND_MAX)+1);
}

int main() {
std::srand(std::time(NULL));
double x = randdouble();
}

ZTP2024: Zadania przed lab.2

Zadania, które dotyczą zakresu materiału, jaki będzie poruszany na lab. 2. Rozwiązanie nie jest wymagane. Zadania stanowią wyłącznie pomoc w przygotowaniu się do zajęć.

Zadanie #1:

W kolejnych wierszach pliku znajdują się wyrażenia arytmetyczne zapisane w odwrotnej notacji polskiej (ale bez wykorzystania nawiasów). Napisz program, który będzie odczytywał wiersz i obliczał wartość, a jeżeli w wyrażeniu jest błąd składni, to rzucał wyjątek. Wyjątek zostaje przechwycony na końcu programu i obsłużony w postaci wyświetlenia komunikatu o rodzaju błędu. Dostosuj wartość wyjątku do rodzaju błędu.

Zadanie #2:

Napisz grę, która będzie losowała dowolne litery z alfabetu i wyświetlała je na ekranie, a zadaniem gracza jest podać szybko kod ascii odpowiadający danej literze. Fragment programu odpowiedzialny za zadawanie pytań i sprawdzanie odpowiedzi użytkownika jest zamknięty w funkcji, która zwraca liczbę całkowitą – sumaryczną liczbę sekund, jakiej użytkownik potrzebował, żeby udzielać odpowiedzi na serię pytań. Może zdarzyć się, że użytkownik poda niewłaściwy kod ascii, ale to nie powoduje przerwania gry. Dopiero w przypadku popełnienia przez użytkownika drugiej pomyłki zamiast kolejnego pytania rzucany jest wyjątek, który jest przechwycony dopiero w funkcji main. W ramach obsługi wyjątku użytkownik dostaje pytanie, czy chce spróbować jeszcze raz i jeżeli tak – funkcja zadająca pytania jest ponownie wywoływana.

Zadanie #3:

Język Markdown jest jednym z najprostszych języków znaczników, mimo to jednak znajduje wiele zastosowań, m.in. w plikach readme. W tym języku można formatować tekst, który później zostanie odpowiednio zwizualizowany w oknie przeglądarki.

W języku „Markdown” wskazywanie czcionek, które mają być użyte w poszczególnych fragmentach dokumentu, odbywa się wg następującej składni: najpierw znak otwierający formatowanie, np. _, *, __, ** lub `, potem tekst podlegający formatowaniu, a na koniec ten sam znak, ale tym razem oznaczający koniec formatowanego fragmentu tekstu. Przykłady: _italic_, *italic*, __bold__, **bold**, `monospace`.

Napisz parser, który będzie sprawdzał poprawność formatowania czcionek w tekście zawartym w pliku. Przyjmij, że poprawne formatowanie wymaga, aby liczba znaków otwierających i zamykających była sobie równa, oraz aby formatowane obszary nie przecinały się ani nie zagnieżdżały. W przypadku wykrycia błędu składni rzucany jest wyjątek, który zostanie przechwycony na końcu programu i obsłużony w postaci wyświetlenia komunikatu o błędzie. Dostosuj wartość wyjątku do rodzaju błędu.

ZTP2024: Wskazówki przed lab. 1

Zasady ogólne

Zasady wykonywania i oceniania programów na stacjonarnych zajęciach lab.:

  • Każdy uczestnik wykonuje na komputerze w pracowni dwa zadania w środowisku MS Visual Studio: 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 poza pracownią 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ęć. Rozwiązania uploadowane po zajęciach nie będą oceniane.

Pełny opis zasad jest zamieszczony w moodle.

Rozwiązania będą weryfikowane za pomocą oprogramowania antyplagiatowego MOSS (tak samo jak w ubiegłym semestrze), dlatego oceny wystawione na zajęciach mogą jeszcze być później korygowane na podstawie wyników raportu MOSS (zbytnie podobieństwo kodu powoduje obniżenie oceny u wszystkich wskazanych w raporcie, tj. bez ustalania, kto był rzeczywistym autorem, a kto popełnił plagiat).

Porady przed lab. 1

Zadania realizowane na pierwszych zajęciach lab. będą dotyczyły materiału z wykładów PO z poprzedniego semestru. Dlatego proszę Państwa o przejrzenie materiału z poprzedniego semestru, a zwłaszcza dwóch ostatnich wykładów (szablony funkcji i klas oraz strumienie, w tym przeciążone operatory pisania do strumienia).

PO2024: Wyniki egzaminu – termin drugi, 10.09

Wiersze zawierają: trzy ostatnie cyfry z nr indeksu, liczbę punktów za część teoretyczną, liczbę punktów za część praktyczną, całkowitą liczbę zdobytych punktów i ocenę.

  1. ***045   7   3   10   2
  2. ***397   16   8   24   3.5
  3. ***446   10   10   20 +ε   3
  4. ***448   21.5   8   29.5   4
  5. ***508   17.5   16   33.5   4.5
  6. ***526   7.5   5   12.5   2
  7. ***531   18.5   13   31.5   4
  8. ***545   17.5   0   17.5   2
  9. ***546   9.5   8   17.5   2
  10. ***595   20   6   26   3.5
  11. ***621   9.5   13   22.5   3
  12. ***638   11   9   20 +ε   3
  13. ***668   21   16   37   5
  14. ***699   17.5   10   27.5   3.5
  15. ***898   7   3   10   2
  16. ***899   7   13   20 +ε   3
  17. ***943   17   12   29   4
  18. ***944   16   9   25   3.5

Osoby zainteresowane wglądem w swoją pracę egzaminacyjną proszę o kontakt celem ustalenia terminu.

W razie niejasności proszę o kontakt mailowy.

PO2024: Poprawa lab. i egzamin w sesji wrześniowej – terminy i zasady

Termin poprawy zajęć laboratoryjnych

9 września (poniedziałek), godz. 11:00, pracownia komputerowa 119, bud. 21. Czas trwania: około 4 godzin zegarowych.

II termin egzaminu

10 września (wtorek), godz. 11:00, sala 114, bud.21. Egzamin w drugim terminie ma formę i czas trwania identyczne jak w pierwszym (uwaga: ograniczenia w trakcie trwania egzaminu zostały rozszerzone o wprowadzenie „ciszy radiowej”; proszę o uważne przeczytanie jeszcze raz opisu zasad).

Zasady udziału w poprawie zajęć laboratoryjnych

Zgodnie z regulaminem zaliczeń przedmiotów, studenci, którzy na laboratorium nie zdobyli wystarczającej liczby punktów i otrzymali ocenę negatywną, mają prawo do poprawy tej oceny. Ci, którzy zamierzają uczestniczyć w poprawie, muszą jednak najpierw otrzymać ocenę pozytywną z zadania semestralnego. Rozwiązania zadań semestralnych (zzipowany komplet plików, spełniających wszystkie formalne wymagania) studenci przekazują do oceny swoim prowadzącym zajęcia. Jeżeli ktoś w czerwcu pozytywnie rozliczył swoje zadanie semestralne, to jest już dopuszczony do poprawy. Takie osoby mogą teraz przypomnieć o pozytywnym zaliczeniu zadania swoim prowadzącym, ponieważ przed poprawą będę prosił prowadzących o przesłanie do mnie list osób, które otrzymały oceny pozytywne za zadanie semestralne. Tylko osoby, które będą na tych listach, zostaną dopuszczone do poprawy w poniedziałek, 9 września.

Studenci przekazują do swoich prowadzących rozwiązania zadań semestralnych do oceny według zasad i zgodnie z terminami ustalonymi przez tych prowadzących. Studenci z mojej grupy, którzy chcą przystąpić do poprawy, a nie mają jeszcze zaliczonego zadania semestralnego, przesyłają mi je do oceny w postaci załącznika do maila w terminie od 2 (poniedziałek) do 5 września (czwartek) do końca dnia. Prace przesłane później mogą nie zostać ocenione, a prace przesłane wcześniej mogą niechcący zostać przeoczone. Mail z odpowiedzią/oceną zostanie wysłany zwrotnie, tj. na adres mailowy, z którego nadesłano rozwiązanie. Wszystkie oceny za zadania semestralne muszą zostać wystawione do 6 września (piątek), do końca dnia.

Zgłoszenie udziału w poprawie zajęć laboratoryjnych

Osoby, które chcą i mogą przystąpić do poprawy, przysyłają do mnie mailem swoje zgłoszenie udziału w poprawie (wystarczy jedno zdanie typu „zgłaszam swój udział w …”, a poniżej imię, nazwisko i nr indeksu). Zgłoszenie należy wysłać w terminie od 2 (poniedziałek) do 7 września (sobota), do końca dnia. Proszę nie przysyłać zgłoszeń wcześniej, bo mogą zostać przeze mnie niechcący przeoczone. Brak przesłania w terminie zgłoszenia udziału spowoduje, że nie zostanie przygotowane zadanie dla danej osoby i tym samym uniemożliwi jej udział w poprawie. Uwaga: jeżeli żadne zgłoszenia nie zostaną przesłane w terminie, poprawa zostanie odwołana.

PO2024: Wyniki egzaminu – termin pierwszy, 19.06

Wiersze zawierają: trzy ostatnie cyfry z nr indeksu, liczbę punktów za część teoretyczną, liczbę punktów za część praktyczną, całkowitą liczbę zdobytych punktów i ocenę.

  1. ***045   7   1   8   2
  2. ***050   12   8   20+ε   3
  3. ***107   17.5   5   22.5   3
  4. ***242   12.5   14   26.5   3.5
  5. ***311   19.5   1   20.5   3
  6. ***327   16   5   21   3
  7. ***379   11   9   20+ε   3
  8. ***397   6.5   8   14.5   2
  9. ***428   18.5   5   23.5   3
  10. ***432   23   14   37   5
  11. ***446   9   5   14   2
  12. ***448   16.5   0.5   17   2
  13. ***475   14   6.5   20.5   3
  14. ***476   13   7   20+ε   3
  15. ***478   21.5   6   27.5   3.5
  16. ***501   21   9   30   4
  17. ***508   8.5   1   9.5   2
  18. ***526   6.5   5   11.5   2
  19. ***531   14.5   0   14.5   2
  20. ***536   17   3   20+ε   3
  21. ***545   15.5   0   15.5   2
  22. ***546   7.5   1   8.5   2
  23. ***549   21   0   21   3
  24. ***559   19   6   25   3.5
  25. ***571   19.5   7   26.5   3.5
  26. ***578   16.5   8   24.5   3.5
  27. ***595   14.5   1   15.5   2
  28. ***620   25   3   28   4
  29. ***621   12.5   6   18.5   2
  30. ***638   7   0   7   2
  31. ***658   19.5   2   21.5   3
  32. ***668   10   7   17   2
  33. ***699   7.5   5.5   13   2
  34. ***728   22.5   2   24.5   3.5
  35. ***899   2.5   5   7.5   2
  36. ***907   15   5   20+ε   3
  37. ***939   15.5   8   23.5   3
  38. ***945   23.5   1   24.5   3.5

Wgląd w prace egzaminacyjne będzie możliwy we czwartek, 27.06, w godz. od 12:00 do 12:30 (lub dłużej, aż do ostatniego zainteresowanego) w pok. 1247 bud. 12.

W razie niejasności proszę o kontakt mailowy

PO2024: 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. oraz proponowaną ocenę.

  1. ***305   5
  2. ***334   5
  3. ***471   5
  4. ***482   4.5
  5. ***550   4.5
  6. ***577   5
  7. ***587   5
  8. ***639   4.5
  9. ***732   5
  10. ***734   5

Ocena zostanie wpisana do protokołu USOS jako ocena zdobyta w pierwszym terminie.

W razie niejasności proszę o kontakt mailowy.