Menu
CoddyTech

Ulasan: Kalkulator Bentuk

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 33 dari 107.

challenge icon

Tantangan

Mudah

Mari kita buat kalkulator bentuk yang menggabungkan semua konsep interface dari bab ini. Kamu akan membuat sistem yang dapat memproses berbagai bentuk geometri secara seragam melalui interface bersama, untuk menunjukkan kehebatan polimorfisme di Go.

Kamu akan mengatur kodemu dalam tiga file:

  • shape.go: Definisikan interface Shape dengan dua method: Area() float64 dan Perimeter() float64. Buat juga fungsi bernama DescribeShape yang menerima bentuk apa pun yang memenuhi Shape dan mengembalikan string berformat yang menampilkan luas dan kelilingnya.
  • shapes.go: Buat dua struct yang memenuhi interface Shape:
    • Rectangle dengan field Width dan Height
    • Circle dengan field Radius
    Setiap struct harus menerapkan kedua method Area() dan Perimeter(), serta method String() (yang menerapkan fmt.Stringer) untuk mengembalikan deskripsi bentuk yang mudah dibaca.
  • main.go: Baca data bentuk dari input, buat bentuk yang sesuai, lalu gunakan fungsi DescribeShape untuk menampilkan informasi tentang masing-masing bentuk. Cetak juga setiap bentuk secara langsung untuk menunjukkan interface Stringer.

Input berikut akan diberikan:

  • Baris 1: Lebar Rectangle (float)
  • Baris 2: Tinggi Rectangle (float)
  • Baris 3: Radius Circle (float)

Untuk perhitungan, gunakan 3.14159 sebagai nilai pi. Keliling Circle adalah 2 * pi * radius.

Method String() milikmu harus mengembalikan:

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

Fungsi DescribeShape harus mengembalikan:

Area: [area], Perimeter: [perimeter]

Format semua nilai float dengan dua angka di belakang koma menggunakan %.2f.

Contohnya, jika inputnya adalah 4, 3, dan 5, outputmu seharusnya:

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

Cetak setiap bentuk terlebih dahulu menggunakan method String(), lalu cetak deskripsinya dari DescribeShape. Proses Rectangle terlebih dahulu, lalu Circle.

Coba sendiri

package main

import (
	"fmt"
)

func main() {
	// Baca nilai input
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: Buat Rectangle dengan lebar dan tinggi yang diberikan

	// TODO: Buat Circle dengan jari-jari yang diberikan

	// TODO: Cetak Rectangle (menggunakan method String())
	// TODO: Cetak deskripsi Rectangle menggunakan DescribeShape()

	// TODO: Cetak Circle (menggunakan method String())
	// TODO: Cetak deskripsi Circle menggunakan DescribeShape()
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online