Klasa Kształt oraz klasy Koło i Kwadrat

Zadanie 2 z 7 · rozdział 19Trudność: 2 z 3dziedziczeniepolimorfizmmath

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>
    `
    Metoda wypisz() jest napisana tylko raz, w klasie Ksztalt — korzysta z metod nazwa(), parametr() i pole(), które nadpisują klasy potomne.
  • Kolo(r) — dziedziczy po Ksztalt. Metoda nazwa() zwraca Koło, parametr() zwraca napis Promień: <r>, a pole() zwraca $\pi r^2$.
  • Kwadrat(a) — dziedziczy po Ksztalt. Metoda nazwa() zwraca Kwadrat, parametr() zwraca napis Długość boku: <a>, a pole() 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 r albo kwadrat 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() i pole() w klasie Ksztalt mogą zgłaszać wyjątek NotImplementedError — w ten sposób zaznaczamy, że każda klasa potomna musi je nadpisać.

Przykład

Wejście
2
kolo 5
kwadrat 4
Wyjście
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
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.

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 uruchomiono
Wejście
1
kwadrat 1
Oczekiwane wyjście
Kształt: Kwadrat
Długość boku: 1.00
Pole powierzchni: 1.00

Suma pól: 1.00

Test 2

Nie uruchomiono
Wejście
1
kolo 1
Oczekiwane wyjście
Kształt: Koło
Promień: 1.00
Pole powierzchni: 3.14

Suma pól: 3.14

Test 3

Nie uruchomiono
Wejście
3
kwadrat 2.5
kolo 0.5
kwadrat 10
Oczekiwane wyjście
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 uruchomiono
Wejście
2
kolo 2
kolo 3
Oczekiwane wyjście
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 uruchomiono
Wejście
4
kwadrat 3
kwadrat 0.1
kolo 10
kwadrat 7
Oczekiwane wyjście
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
Uruchom z własnymi danymi