ZPO 2018: Zadanie przed lab.3

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

Zadanie:

Korzystając z szablonu kontenera Konten utwórz w funkcji main obiekt reprezentujący kontener 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 identyfikujących przedział danych z kontenera, 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:
//generates a psuedo-random double between 0.0 and 0.999...
double randdouble()
{
return rand()/(double(RAND_MAX)+1);
}

ZPO 2018: Zadania przed lab.2

Zadania, które dotyczą zakresu materiału, jaki będzie poruszany na lab. 2. Rozwiązanie tych zadań nie jest wymagane. 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ł je na ekranie, a zadaniem gracza jest podać szybko odpowiadający jej kod ascii. 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.

ZPO 2018: Zadania przed lab.1

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

Zadanie #1:

W pliku dane-lab1.txt znajdują się dane z czterech czujników mierzących temperaturę. Każdy wiersz reprezentuje jeden pomiar i zawiera cztery wartości: nr porządkowy (liczba całkowita), zmierzoną temperaturę (liczba rzeczywista), datę i godzinę (napis), oraz nr czujnika (liczba całkowita). Separatorem wartości jest przecinek.

Zaproponuj typ danych przechowujący pomiar. Następnie zadeklaruj stuelementową tablicę, korzystając z szablonu Tablica prezentowanego na wykładzie z PO, której elementami są dane z czujników (należy dokonać konkretyzacji szablonu klasy Tablica na rzecz zaproponowanego typu danych reprezentujących dane z czujnika i utworzyć jeden obiekt takiego skonkretyzowanego typu).
Kod szablonu jest dostępny na stronie www:
https://troja.uksw.edu.pl/programowanie-obiektowe/kody-programow/
– plik wykład13b.h

Napisz program, który – z wykorzystaniem strumieni – wczyta dane z pliku do tablicy, a następnie wypisze jej zawartość w oknie konsoli, rezerwując dla każdej z czterech wartości stałą liczbę znaków (sam zaproponuj, ile znaków zarezerwować dla każdej z kolumn, aby żadne wartości nie zostały przycięte, oraz aby kolumny w sumie nie przekroczyły standardowej szerokości okna konsoli).

Zadanie #2:

W pliku dane-lab1.txt znajdują się dane z czterech czujników mierzących temperaturę. Każdy wiersz reprezentuje jeden pomiar i zawiera cztery wartości: nr porządkowy (liczba całkowita), zmierzoną temperaturę (liczba rzeczywista), datę i godzinę (napis), oraz nr czujnika (liczba całkowita). Separatorem wartości jest przecinek. Z wykorzystaniem strumieni wczytaj dane z tego pliku i zapisz do drugiego w formacie tabelki, tj. rezerwując dla każdej z czterech wartości stałą liczbę znaków oraz z ramkami i wierszem nagłówkowym. Do rysowania ramek użyj znaków +, -, |.