Menu
Coddy logo textTech

Powtórka — kalkulator figur

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 33 z 107.

challenge icon

Wyzwanie

Łatwy

Zbudujmy kalkulator figur, który łączy wszystkie zagadnienia dotyczące interfejsów z tego rozdziału. Stworzysz system, w którym można jednolicie przetwarzać różne figury geometryczne za pomocą wspólnego interfejsu, demonstrując siłę polimorfizmu w Go.

Rozmieścisz kod w trzech plikach:

  • shape.go: Zdefiniuj interfejs Shape z dwiema metodami: Area() float64 i Perimeter() float64. Utwórz też funkcję o nazwie DescribeShape, która przyjmuje dowolny element typu Shape i zwraca sformatowany ciąg znaków przedstawiający jego pole i obwód.
  • shapes.go: Utwórz dwie struktury implementujące interfejs Shape:
    • Rectangle z polami Width i Height
    • Circle z polem Radius
    Każda struktura powinna implementować metody Area() i Perimeter(), a także metodę String() (implementującą fmt.Stringer), która zwraca czytelny opis figury.
  • main.go: Odczytaj dane figur z wejścia, utwórz odpowiednie figury i użyj funkcji DescribeShape, aby wyświetlić informacje o każdej z nich. Wypisz też bezpośrednio każdą figurę, aby zademonstrować interfejs Stringer.

Dane wejściowe będą następujące:

  • Wiersz 1: szerokość prostokąta (liczba zmiennoprzecinkowa)
  • Wiersz 2: wysokość prostokąta (liczba zmiennoprzecinkowa)
  • Wiersz 3: promień koła (liczba zmiennoprzecinkowa)

Do obliczeń użyj 3.14159 jako wartości pi. Obwód koła wynosi 2 * pi * radius.

Metody String() powinny zwracać:

  • Rectangle: Rectangle(Width x Height)
  • Circle: Circle(Radius: R)

Funkcja DescribeShape powinna zwracać:

Area: [area], Perimeter: [perimeter]

Formatuj wszystkie wartości zmiennoprzecinkowe do dwóch miejsc po przecinku za pomocą %.2f.

Na przykład dla danych wejściowych 4, 3 i 5 wynik powinien wyglądać następująco:

Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42

Najpierw wypisz każdą figurę (używając jej metody String()), a następnie jej opis zwrócony przez DescribeShape. Najpierw przetwórz prostokąt, a potem koło.

Spróbuj swoich sił

package main

import (
	"fmt"
)

func main() {
	// Wczytaj wartości wejściowe
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: Utwórz Rectangle o podanej szerokości i wysokości

	// TODO: Utwórz Circle o podanym promieniu

	// TODO: Wypisz prostokąt (używa metody String())
	// TODO: Wypisz opis prostokąta za pomocą DescribeShape()

	// TODO: Wypisz koło (używa metody String())
	// TODO: Wypisz opis koła za pomocą DescribeShape()
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online