Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| modul:archiv:m320:learningunits:lu97:loesungen:lu05-aufgabe_1 [2026/08/30 14:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | modul:archiv:m320:learningunits:lu97:loesungen:lu05-aufgabe_1 [2026/08/30 14:06] (aktuell) – ↷ Seite von modul:m320:learningunits:lu97:loesungen:lu05-aufgabe_1 nach modul:archiv:m320:learningunits:lu97:loesungen:lu05-aufgabe_1 verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ==== Lösung 1 - Delegation anwenden ==== | ||
| + | <file python circle_cuboid.py> | ||
| + | class Point: | ||
| + | """ | ||
| + | Die ist ein Punkt auf den Koordinaten x, y | ||
| + | """ | ||
| + | |||
| + | def __init__(self, | ||
| + | """ | ||
| + | Erzeugt einen Punkt auf den Koordinaten x und y | ||
| + | :param x: Horizontale Komponente | ||
| + | :param y: Vertikale Komponente | ||
| + | """ | ||
| + | self.__x = x | ||
| + | self.__y = y | ||
| + | |||
| + | @property | ||
| + | def x(self) -> float: | ||
| + | return self.__x | ||
| + | |||
| + | @x.setter | ||
| + | def x(self, x: float): | ||
| + | self.__x = x | ||
| + | |||
| + | @property | ||
| + | def y(self) -> float: | ||
| + | return self.__y | ||
| + | |||
| + | @y.setter | ||
| + | def y(self, y: float): | ||
| + | self.__y = y | ||
| + | |||
| + | def __str__(self) -> str: | ||
| + | return f" | ||
| + | |||
| + | |||
| + | class Cuboid: | ||
| + | """ | ||
| + | Das ist ein Quadrat mit der Seitenlänge 2*u | ||
| + | """ | ||
| + | def __init__(self, | ||
| + | """ | ||
| + | Erzeugt ein Quadrat mit 4 Eckpunkten und der Seitenlänge 2*u | ||
| + | :param u: entspricht demnach einer halben Seitenlänge | ||
| + | """ | ||
| + | self.points = [ | ||
| + | Point(u, u), | ||
| + | Point(-u, u), | ||
| + | Point(u, -u), | ||
| + | Point(-u, -u) | ||
| + | ] | ||
| + | |||
| + | def scale(self, f: float) -> None: | ||
| + | """ | ||
| + | Skaliert die Kompenenten der Eckpunkte um den Faktor f | ||
| + | :param f: Skalierungsfaktor | ||
| + | """ | ||
| + | for p in self.points: | ||
| + | p.x = p.x * f | ||
| + | p.y = p.y * f | ||
| + | |||
| + | @property | ||
| + | def area(self) -> float: | ||
| + | """ | ||
| + | Berechnet die Fläche und gibt sie retour. | ||
| + | :return: Fläche | ||
| + | """ | ||
| + | p = self.points[0] | ||
| + | return round(2 * p.x * 2 * p.y) | ||
| + | |||
| + | def __str__(self) -> str: | ||
| + | points = "," | ||
| + | return f" | ||
| + | |||
| + | |||
| + | class Circle: | ||
| + | """ | ||
| + | Kreis mit Radius u | ||
| + | """ | ||
| + | |||
| + | def __init__(self, | ||
| + | """ | ||
| + | Erzeugt ein Kreis mit dem Radius u. | ||
| + | :param u: Radius | ||
| + | """ | ||
| + | self.__radius = u | ||
| + | |||
| + | @property | ||
| + | def radius(self) -> float: | ||
| + | return round(self.__radius) | ||
| + | |||
| + | def scale(self, f: float) -> None: | ||
| + | """ | ||
| + | Skaliert den Radius um den Faktor f | ||
| + | :param f: Skalierungsfaktor | ||
| + | """ | ||
| + | self.__radius *= f | ||
| + | |||
| + | @property | ||
| + | def area(self) -> float: | ||
| + | """ | ||
| + | Berechnet die Fläche und gibt sie retour. | ||
| + | :return: Fläche | ||
| + | """ | ||
| + | r = self.__radius | ||
| + | PI = 3.142 | ||
| + | return round(PI * r * r) | ||
| + | |||
| + | def __str__(self) -> str: | ||
| + | return f" | ||
| + | |||
| + | |||
| + | class CircleCuboid(): | ||
| + | """ | ||
| + | Quadrat mit Inkreis und der Seitenlänge 2*u | ||
| + | """ | ||
| + | def __init__(self, | ||
| + | """ | ||
| + | Erzeugt ein Quadrat mit Inkreis | ||
| + | :param u: Radius des Inkreises | ||
| + | """ | ||
| + | self.__circle_ref = Circle(u) | ||
| + | self.__cuboid_ref = Cuboid(u) | ||
| + | |||
| + | @property | ||
| + | def circle(self): | ||
| + | |||
| + | @property | ||
| + | def cuboid(self): | ||
| + | |||
| + | def scale(self, f): | ||
| + | """ | ||
| + | Skaliert die Komponenten um den Faktor f | ||
| + | :param f: Skalierungsfaktor | ||
| + | """ | ||
| + | self.__circle_ref.scale(f) | ||
| + | self.__cuboid_ref.scale(f) | ||
| + | |||
| + | @property | ||
| + | def area_difference(self): | ||
| + | """ | ||
| + | Berechnet die Flächendifferenz der beiden Komponenten und gibt sie retour. | ||
| + | :return: Flächendifferenz | ||
| + | """ | ||
| + | return round(self.__cuboid_ref.area - self.__circle_ref.area) | ||
| + | |||
| + | def __str__(self): | ||
| + | return f" | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | if __name__ == ' | ||
| + | print(" | ||
| + | p1 = Point(1, 2) | ||
| + | p2 = Point(3, 4) | ||
| + | print(p1, p2) | ||
| + | |||
| + | print(" | ||
| + | cc = CircleCuboid(3) | ||
| + | print(cc) | ||
| + | |||
| + | factor = 20 | ||
| + | cc.scale(factor) | ||
| + | print(f" | ||
| + | print(cc) | ||
| + | |||
| + | </ | ||