Menu
Coddy logo textTech

Ripasso - Calcolatore di forme

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 33 di 107.

challenge icon

Sfida

Facile

Costruiamo un calcolatore di forme che riunisce tutti i concetti sulle interfacce di questo capitolo. Creerai un sistema in cui forme geometriche diverse possono essere elaborate in modo uniforme tramite un'interfaccia condivisa, dimostrando la potenza del polimorfismo in Go.

Organizzerai il codice in tre file:

  • shape.go: Definisci un'interfaccia Shape con due metodi: Area() float64 e Perimeter() float64. Crea anche una funzione chiamata DescribeShape che accetta qualsiasi Shape e restituisce una stringa formattata che mostra sia la sua area sia il suo perimetro.
  • shapes.go: Crea due struct che implementano l'interfaccia Shape:
    • Un Rectangle con i campi Width e Height
    • Un Circle con un campo Radius
    Ogni struct deve implementare sia i metodi Area() e Perimeter(), sia un metodo String() (che implementa fmt.Stringer) che restituisce una descrizione leggibile della forma.
  • main.go: Leggi i dati delle forme dall'input, crea le forme appropriate e usa la tua funzione DescribeShape per visualizzare le informazioni su ciascuna. Stampa anche direttamente ogni forma per dimostrare l'interfaccia Stringer.

Verranno forniti i seguenti input:

  • Riga 1: larghezza del rettangolo (numero in virgola mobile)
  • Riga 2: altezza del rettangolo (numero in virgola mobile)
  • Riga 3: raggio del cerchio (numero in virgola mobile)

Per i calcoli, usa 3.14159 come valore di pi. Il perimetro del cerchio è 2 * pi * radius.

I tuoi metodi String() devono restituire:

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

La tua funzione DescribeShape deve restituire:

Area: [area], Perimeter: [perimeter]

Formatta tutti i valori in virgola mobile con due cifre decimali usando %.2f.

Ad esempio, dati 4, 3 e 5, il tuo output dovrebbe essere:

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

Stampa prima ogni forma (usando il suo metodo String()), poi la sua descrizione restituita da DescribeShape. Elabora prima il rettangolo, poi il cerchio.

Provalo tu

package main

import (
	"fmt"
)

func main() {
	// Leggi i valori di input
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: Crea un Rectangle con la larghezza e l'altezza indicate

	// TODO: Crea un Circle con il raggio indicato

	// TODO: Stampa il rettangolo (usa il metodo String())
	// TODO: Stampa la descrizione del rettangolo usando DescribeShape()

	// TODO: Stampa il cerchio (usa il metodo String())
	// TODO: Stampa la descrizione del cerchio usando DescribeShape()
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online