Menu
Coddy logo textTech

Metoda obwodu

Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 58 z 70.

challenge icon

Wyzwanie

Łatwy

Rozszerzmy nasz Shape Manager, dodając metodę :getPerimeter() zarówno do klasy Rectangle, jak i Circle. Podobnie jak w przypadku :getArea(), każda figura oblicza swój obwód w inny sposób, ale obie używają tej samej nazwy metody: to doskonały przykład polimorfizmu w praktyce.

Kontynuuj pracę z istniejącymi plikami:

  • Shape.lua: Twoja bazowa klasa Shape pozostaje bez zmian.
  • Rectangle.lua: Dodaj metodę :getPerimeter(), która zwraca obwód prostokąta, obliczony według wzoru 2 × (width + height).
  • Circle.lua: Dodaj metodę :getPerimeter(), która zwraca obwód koła, obliczony według wzoru 2 × π × radius. Użyj math.pi jako wartości π.
  • main.lua: Załaduj oba moduły figur, odczytaj wymiary z danych wejściowych, utwórz jeden prostokąt i jedno koło, a następnie wypisz sześć wierszy: nazwę, pole i obwód prostokąta, a potem nazwę, pole i obwód koła.

Obie figury mają teraz kompletny interfejs z metodami :getName(), :getArea() i :getPerimeter(): wszystkie są dostępne pod tymi samymi nazwami metod, mimo że ich implementacje są różne.

Dane wejściowe: Trzy wiersze: szerokość (liczba), wysokość (liczba) i promień (liczba).

Dane wyjściowe: Sześć wierszy w podanej kolejności: nazwa prostokąta, pole prostokąta, obwód prostokąta, nazwa koła, pole koła, obwód koła.

Spróbuj swoich sił

-- Załaduj moduł Rectangle
local Rectangle = require('Rectangle')

-- Załaduj moduł Circle
local Circle = require('Circle')

-- Wczytaj szerokość i wysokość z wejścia
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Utwórz nową instancję Rectangle o podanych wymiarach
local rect = Rectangle:new(width, height)

-- Utwórz nową instancję Circle o podanym promieniu
local circ = Circle:new(radius)

-- Wypisz nazwę, pole i obwód prostokąta
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- Wypisz nazwę, pole i obwód koła
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Lua online