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.

PO2024: Wejściówka na Lab.13

Do klasy bazowej wybranej do realizacji na lab. 11 (reprezentującej samochód albo urządzenie optyczne albo osobę na uczelni) dodaj przeciążony operator += jako metodę należącą do klasy. Zaproponuj własną logikę sumowania obiektów (np. gdyby to było sumowanie kwadratów, to wynikiem sumowania może być kwadrat, którego pole jest sumą pól składników sumy, albo którego bok ma długość równą sumie długości boków składników sumy). Utwórz listę dynamiczną zawierającą 5 elementów typu klasy bazowej, po czym zsumuj je do obiektu pomocniczego typu klasy bazowej korzystając z napisanego operatora. Na koniec wywołaj metodę wypisz na rzecz obiektu przechowującego wartość sumy.

Przetestowany, działający program (tylko plik z kodem źródłowym) uploaduj do https://e.uksw.edu.pl jako rozwiązanie zadania „Wejściówka” w sekcji „Temat 13”.

Hint: na lab.13 będą rozwijane programy napisane na lab.11 i 12.