##### IB111 skupina 10 #####
##### cvičení 10

# kód musí projít nástrojem 'flake8' bez chyb
# používej typovou annotaci, kontroluj 'C:\Python3.7\python.exe -m mypy --strict --disallow-any-expr'


### OBJEKTY
# ÚKOL 1
# Napište třídu Rectangle pro reprezentaci obdélníku o dané šířce a výšce.
# a) Výšku a šířku lze měnit metodami Rectangle.set_width(new_width) a Rectangle.set_height(new_height).
# b) Třída obsahuje atribut Rectangle.area(), který udává aktuální obsah obdélníka.

>>> obdelnik = Rectangle(3, 4)
>>> print(obdelnik.height)
3
>>> print(obdelnik.width)
4
>>> print(obdelnik.area)
12
>>> obdelnik.set_width(5)
>>> print(obdelnik.width)
5
>>> print(obdelnik.area)
15


# ÚKOL 2
# Napište třídu Point pro reprezentaci bodu v rovině (parametry x a y). Potom implementujte funkci,
# distance(a: Point, b: Point) -> float:, která vypočítá vzdálenost dvou bodů.

>>> a = Point(1, 2)
>>> b = Point(3, 5)
>>> print(distance(a, b))
3.6055

ZŘETĚZENÉ SEZNAMY
# ÚKOL 3
# Vytvořte dle přednášky třídu Node, která bude obsahovat data a ukazatel na další objekt Node.
# Pomocí třídy node lze vytrvářet zřetězené seznamy.


# ÚKOL 4
# Pomocí třídy Node implementujte třídu Stack, která reprezentuje třídu datovou strukturu zásobník
# jako zřetězený seznam. Třída Stack má následující metody:
# a) Stack.pop() pro odebrání poslední hodnoty ze zásobníku,
# b) Stack.push() pro přídání dat na konec zásobníku

>>> stack = Stack()
>>> stack.push(3)
>>> stack.push(6)
>>> print(stack.pop() + stack.pop())
9
>>> print(stack.pop())
None


# ÚKOL 5
# Pomocí třídy Node implementujte třídu SortedList. Třída si pamautuje seznam hodnot, který udržuje seřazený. Třída je implementována jako zřetězený seznam. Třída SortedList má následující metody:
# a) SortedList.add() přidá prvek do seznamu. Seznam udržuje seřazený,
# b) SortedList.min_value() vrátí nejmenší hodnotu v seznamu
# c) SortedList.max_value() vrátí největší hodnotu v seznamu

>>> numbers = SortedList()
>>> numbers.add(5)
>>> numbers.add(2)
>>> numbers.add(8)
>>> numbers.add(1)
>>> numbers.add(4)
>>> print(numbers.min_value())
1
>>> print(numbers.max_value())
8
