Klasa Kształt oraz klasy Koło i Kwadrat
Treść zadania
Zaprojektuj hierarchię klas:
Ksztalt— klasa bazowa dla wszystkich kształtów. Ma metodęwypisz(), która wypisuje informacje o kształcie w trzech liniach:`
Kształt: <nazwa>
<parametr>
Pole powierzchni: <pole>`
Metodawypisz()jest napisana tylko raz, w klasieKsztalt— korzysta z metodnazwa(),parametr()ipole(), które nadpisują klasy potomne.Kolo(r)— dziedziczy poKsztalt. Metodanazwa()zwracaKoło,parametr()zwraca napisPromień: <r>, apole()zwraca $\pi r^2$.Kwadrat(a)— dziedziczy poKsztalt. Metodanazwa()zwracaKwadrat,parametr()zwraca napisDługość boku: <a>, apole()zwraca $a^2$.
Program wczytuje listę kształtów, wypisuje informacje o każdym z nich (bloki oddzielone pustą linią), a na końcu — po pustej linii — sumę pól wszystkich kształtów.
Dane wejściowe
- 1. linia: liczba kształtów $n$
- kolejne $n$ linii:
kolo ralbokwadrat a, gdzie $r$ i $a$ są dodatnimi liczbami rzeczywistymi
Dane wyjściowe
- Dla każdego kształtu blok trzech linii opisany w treści; po każdym bloku pusta linia.
- Ostatnia linia:
Suma pól: <suma>.
Wszystkie liczby (promień, bok, pola i suma) wypisz z dokładnością do 2 miejsc po przecinku.
Ograniczenia
- $1 \le n \le 20$
- $0 < r, a \le 1000$
Uwagi
- Metody
nazwa(),parametr()ipole()w klasieKsztaltmogą zgłaszać wyjątekNotImplementedError— w ten sposób zaznaczamy, że każda klasa potomna musi je nadpisać.
Przykład
2 kolo 5 kwadrat 4
Kształt: Koło Promień: 5.00 Pole powierzchni: 78.54 Kształt: Kwadrat Długość boku: 4.00 Pole powierzchni: 16.00 Suma pól: 94.54
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 19
Zadania w tym rozdziale uczą dziedziczenia: klasa potomna przejmuje atrybuty i metody klasy bazowej, może je nadpisać (override) albo rozszerzyć, wywołując wersję z klasy bazowej przez super(). Dzięki polimorfizmowi ten sam kod (np. pętla po liście obiektów) wywołuje metodę odpowiednią dla konkretnej klasy obiektu. Dziedziczenie przydaje się też przy wyjątkach: własne wyjątki to klasy dziedziczące po Exception, które można układać w hierarchie.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- W każdym zadaniu dostajesz kod startowy ze szkieletami klas i gotowym wczytywaniem danych. Twoim zadaniem jest uzupełnienie klas — wynik programu zależy od tego, jak działają Twoje klasy.
- Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np.
Kolo,Czlowiek. - „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np.
f"{x:.2f}"(3.00,4.50). - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono1 kwadrat 1
Kształt: Kwadrat Długość boku: 1.00 Pole powierzchni: 1.00 Suma pól: 1.00
Test 2
Nie uruchomiono1 kolo 1
Kształt: Koło Promień: 1.00 Pole powierzchni: 3.14 Suma pól: 3.14
Test 3
Nie uruchomiono3 kwadrat 2.5 kolo 0.5 kwadrat 10
Kształt: Kwadrat Długość boku: 2.50 Pole powierzchni: 6.25 Kształt: Koło Promień: 0.50 Pole powierzchni: 0.79 Kształt: Kwadrat Długość boku: 10.00 Pole powierzchni: 100.00 Suma pól: 107.04
Test 4
Nie uruchomiono2 kolo 2 kolo 3
Kształt: Koło Promień: 2.00 Pole powierzchni: 12.57 Kształt: Koło Promień: 3.00 Pole powierzchni: 28.27 Suma pól: 40.84
Test 5
Nie uruchomiono4 kwadrat 3 kwadrat 0.1 kolo 10 kwadrat 7
Kształt: Kwadrat Długość boku: 3.00 Pole powierzchni: 9.00 Kształt: Kwadrat Długość boku: 0.10 Pole powierzchni: 0.01 Kształt: Koło Promień: 10.00 Pole powierzchni: 314.16 Kształt: Kwadrat Długość boku: 7.00 Pole powierzchni: 49.00 Suma pól: 372.17