Menu
Coddy logo textTech

まとめ - 図形計算機

CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 33/107。

challenge icon

チャレンジ

簡単

この章で学んだすべてのインターフェースの概念を統合した、図形計算機を作成しましょう。異なる幾何学図形を共通のインターフェースを通じて一律に処理できるシステムを構築し、Goにおけるポリモーフィズムの威力を体験してください。

コードは以下の3つのファイルに分けて構成します:

  • shape.go: Area() float64Perimeter() float64 の2つのメソッドを持つ Shape インターフェースを定義します。また、任意の Shape を受け取り、その面積と周囲の長さの両方を示すフォーマット済み文字列を返す DescribeShape という関数を作成します。
  • shapes.go: Shape インターフェースを実装する2つの構造体を作成します:
    • WidthHeight フィールドを持つ Rectangle
    • Radius フィールドを持つ Circle
    各構造体は Area()Perimeter() メソッドの両方を実装し、さらに図形の読みやすい説明を返す String() メソッド(fmt.Stringer インターフェースの実装)を実装する必要があります。
  • main.go: 入力から図形データを読み取り、適切な図形を作成し、DescribeShape 関数を使用して各図形の情報を表示します。また、Stringer インターフェースを実証するために、各図形を直接出力します。

以下の入力が提供されます:

  • 1行目: 長方形の幅 (float)
  • 2行目: 長方形の高さ (float)
  • 3行目: 円の半径 (float)

計算には、piの値として 3.14159 を使用してください。円の周囲の長さは 2 * pi * radius です。

String() メソッドは以下を返す必要があります:

  • Rectangle: "Rectangle(%.2f x %.2f)"
  • Circle: "Circle(Radius: %.2f)"

DescribeShape 関数は以下を返す必要があります:

Area: %.2f, Perimeter: %.2f

すべての浮動小数点値は、%.2f を使用して小数点以下2桁でフォーマットしてください。

例えば、435 が与えられた場合、出力は以下のようになります:

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

最初に各図形を出力し(String() メソッドを使用)、次に DescribeShape による説明を出力してください。長方形を先に処理し、その次に円を処理します。

自分で試してみよう

package main

import (
	"fmt"
)

func main() {
	// 入力値を読み込む
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: 指定された幅と高さでRectangle(長方形)を作成する

	// TODO: 指定された半径でCircle(円)を作成する

	// TODO: 長方形を出力する(String()メソッドを使用)
	// TODO: DescribeShape()を使用して長方形の説明を出力する

	// TODO: 円を出力する(String()メソッドを使用)
	// TODO: DescribeShape()を使用して円の説明を出力する
}

オブジェクト指向プログラミングのすべてのレッスン