Menu
Coddy logo textTech

Powtórka — kalkulator kształtów

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 30 z 70.

challenge icon

Wyzwanie

Łatwy

Stwórzmy kalkulator kształtów, który łączy wszystko, czego nauczyłeś się o interfejsach i polimorfizmie. Utworzysz system, w którym różne kształty można przetwarzać w jednolity sposób za pomocą wspólnego interfejsu, demonstrując możliwości polimorfizmu czasu wykonywania.

Rozmieścisz swój kod w czterech plikach:

  • IShape.cs: Zdefiniuj interfejs o nazwie IShape w przestrzeni nazw Shapes. Każdy kształt musi umieć obliczyć swoje pole i opisać siebie. Zadeklaruj dwie metody: CalculateArea() zwracającą wartość typu double oraz GetDescription() zwracającą wartość typu string.
  • Circle.cs: Utwórz klasę Circle w przestrzeni nazw Shapes, która implementuje IShape. Okrąg ma właściwość Radius (double) ustawianą za pomocą konstruktora. Wzór na pole to Math.PI * Radius * Radius. Opis powinien zwracać "Circle with radius {Radius}".
  • Rectangle.cs: Utwórz klasę Rectangle w przestrzeni nazw Shapes, która implementuje IShape. Prostokąt ma właściwości Width i Height (obie typu double), ustawiane za pomocą konstruktora. Pole to po prostu iloczyn szerokości i wysokości. Opis powinien zwracać "Rectangle {Width}x{Height}".
  • Program.cs: W pliku głównym utwórz okrąg i prostokąt na podstawie wartości wejściowych, a następnie umieść je w tablicy referencji typu IShape. Przejdź przez pętlę po tablicy i dla każdego kształtu wypisz jego opis, a następnie pole zaokrąglone do dwóch miejsc po przecinku. To pokazuje, jak możesz przetwarzać zupełnie różne kształty za pomocą tego samego interfejsu!

Otrzymasz trzy dane wejściowe:

  • Promień okręgu (double)
  • Szerokość prostokąta (double)
  • Wysokość prostokąta (double)

Wypisz wynik dla każdego kształtu w następującym formacie:

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

Na przykład, jeśli dane wejściowe to 5, 4 i 6, wynik powinien wyglądać tak:

Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00

Zauważ, że pętla nie musi wiedzieć, czy przetwarza okrąg, czy prostokąt — po prostu wywołuje metody interfejsu, a polimorfizm zajmuje się resztą. Na tym polega elegancja programowania z użyciem interfejsów!

Spróbuj swoich sił

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // Wczytaj wartości wejściowe
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Utwórz obiekt Circle o podanym promieniu
        
        // TODO: Utwórz obiekt Rectangle o podanej szerokości i wysokości
        
        // TODO: Utwórz tablicę IShape zawierającą oba kształty
        
        // TODO: Przejdź przez tablicę i dla każdego kształtu:
        // - Wypisz opis za pomocą GetDescription()
        // - Wypisz "Area: ", a następnie wynik CalculateArea() zaokrąglony do 2 miejsc po przecinku
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online