Menu
Coddy logo textTech

Rückblick – Formenrechner

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

challenge icon

Aufgabe

Einfach

Wir erstellen einen Formrechner, der alle Schnittstellenkonzepte aus diesem Kapitel zusammenführt. Du erstellst ein System, in dem verschiedene geometrische Formen einheitlich über eine gemeinsame Schnittstelle verarbeitet werden können, und demonstrierst damit die Leistungsfähigkeit des Polymorphismus in Go.

Du organisierst deinen Code auf drei Dateien verteilt:

  • shape.go: Definiere eine Shape-Schnittstelle mit zwei Methoden: Area() float64 und Perimeter() float64. Erstelle außerdem eine Funktion namens DescribeShape, die eine beliebige Shape akzeptiert und eine formatierte Zeichenkette zurückgibt, die sowohl deren Fläche als auch deren Umfang anzeigt.
  • shapes.go: Erstelle zwei Strukturen, die die Shape-Schnittstelle implementieren:
    • Ein Rectangle mit den Feldern Width und Height
    • Ein Circle mit dem Feld Radius
    Jede Struktur soll sowohl die Methoden Area() und Perimeter() als auch eine String()-Methode implementieren (wodurch fmt.Stringer implementiert wird), die eine lesbare Beschreibung der Form zurückgibt.
  • main.go: Lies Formdaten aus der Eingabe, erstelle die entsprechenden Formen und verwende deine Funktion DescribeShape, um Informationen zu jeder Form anzuzeigen. Gib außerdem jede Form direkt aus, um die Stringer-Schnittstelle zu demonstrieren.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Breite des Rechtecks (Gleitkommazahl)
  • Zeile 2: Höhe des Rechtecks (Gleitkommazahl)
  • Zeile 3: Radius des Kreises (Gleitkommazahl)

Verwende für die Berechnungen 3.14159 als Wert von Pi. Der Umfang des Kreises ist 2 * pi * radius.

Deine String()-Methoden sollen Folgendes zurückgeben:

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

Deine Funktion DescribeShape soll Folgendes zurückgeben:

Area: [area], Perimeter: [perimeter]

Formatiere alle Gleitkommawerte mit zwei Dezimalstellen mithilfe von %.2f.

Wenn beispielsweise 4, 3 und 5 angegeben werden, sollte deine Ausgabe folgendermaßen aussehen:

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

Gib zuerst jede Form aus (mithilfe ihrer String()-Methode) und anschließend ihre Beschreibung aus DescribeShape. Verarbeite zuerst das Rechteck und 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

Übe selbstständig: Online-Go-Compiler