Menu
Coddy logo textTech

Rückblick - Formen-Rechner

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 33 von 107.

challenge icon

Aufgabe

Einfach

Lassen Sie uns einen Formenkalkulator erstellen, der alle Interface-Konzepte aus diesem Kapitel zusammenführt. Sie werden ein System erstellen, in dem verschiedene geometrische Formen einheitlich über ein gemeinsames Interface verarbeitet werden können, was die Mächtigkeit des Polymorphismus in Go demonstriert.

Sie werden Ihren Code über drei Dateien organisieren:

  • shape.go: Definieren Sie ein Shape-Interface mit zwei Methoden: Area() float64 und Perimeter() float64. Erstellen Sie außerdem eine Funktion namens DescribeShape, die ein beliebiges Shape akzeptiert und einen formatierten String zurückgibt, der sowohl die Fläche als auch den Umfang anzeigt.
  • shapes.go: Erstellen Sie zwei Structs, die das Shape-Interface implementieren:
    • Ein Rectangle mit den Feldern Width und Height
    • Ein Circle mit einem Radius-Feld
    Jedes Struct sollte sowohl die Methoden Area() und Perimeter() implementieren, als auch eine String()-Methode (die fmt.Stringer implementiert), die eine lesbare Beschreibung der Form zurückgibt.
  • main.go: Lesen Sie Formdaten aus der Eingabe ein, erstellen Sie die entsprechenden Formen und verwenden Sie Ihre DescribeShape-Funktion, um Informationen über jede Form anzuzeigen. Geben Sie außerdem jede Form direkt aus, um das Stringer-Interface zu demonstrieren.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Rechteckbreite (float)
  • Zeile 2: Rechteckhöhe (float)
  • Zeile 3: Kreisradius (float)

Verwenden Sie für Berechnungen 3.14159 als Wert für Pi. Der Kreisumfang ist 2 * pi * radius.

Ihre String()-Methoden sollten Folgendes zurückgeben:

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

Ihre DescribeShape-Funktion sollte Folgendes zurückgeben:

Area: [area], Perimeter: [perimeter]

Formatieren Sie alle Float-Werte mit zwei Dezimalstellen unter Verwendung von %.2f.

Zum Beispiel sollte Ihre Ausgabe bei 4, 3 und 5 wie folgt aussehen:

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

Geben Sie zuerst jede Form aus (unter Verwendung ihrer String()-Methode), dann ihre Beschreibung von DescribeShape. Verarbeiten Sie zuerst das Rechteck, dann den Kreis.

Probier es selbst

package main

import (
	"fmt"
)

func main() {
	// Eingabewerte lesen
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: Erstelle ein Rectangle mit der angegebenen Breite (width) und Höhe (height)

	// TODO: Erstelle einen Circle mit dem angegebenen Radius

	// TODO: Gib das Rechteck aus (verwendet die String() Methode)
	// TODO: Gib die Beschreibung des Rechtecks mit DescribeShape() aus

	// TODO: Gib den Kreis aus (verwendet die String() Methode)
	// TODO: Gib die Beschreibung des Kreises mit DescribeShape() aus
}

Alle Lektionen in Objektorientierte Programmierung