Menu
Coddy logo textTech

Récapitulatif - Calculateur de formes

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy. Leçon 33 sur 107.

challenge icon

Défi

Facile

Construisons un calculateur de formes qui réunit tous les concepts d’interfaces de ce chapitre. Tu vas créer un système dans lequel différentes formes géométriques peuvent être traitées uniformément grâce à une interface commune, illustrant la puissance du polymorphisme dans Go.

Tu organiseras ton code dans trois fichiers :

  • shape.go : définis une interface Shape avec deux méthodes : Area() float64 et Perimeter() float64. Crée également une fonction appelée DescribeShape qui accepte n’importe quel Shape et renvoie une chaîne formatée affichant à la fois son aire et son périmètre.
  • shapes.go : crée deux structures qui implémentent l’interface Shape :
    • un Rectangle avec les champs Width et Height
    • un Circle avec un champ Radius
    Chaque structure doit implémenter les méthodes Area() et Perimeter(), ainsi qu’une méthode String() (implémentant fmt.Stringer) qui renvoie une description lisible de la forme.
  • main.go : lis les données des formes en entrée, crée les formes appropriées et utilise ta fonction DescribeShape pour afficher les informations sur chacune d’elles. Affiche également chaque forme directement afin de démontrer l’interface Stringer.

Les entrées suivantes seront fournies :

  • Ligne 1 : largeur du rectangle (float)
  • Ligne 2 : hauteur du rectangle (float)
  • Ligne 3 : rayon du cercle (float)

Pour les calculs, utilise 3.14159 comme valeur de pi. Le périmètre du cercle est 2 * pi * radius.

Tes méthodes String() doivent renvoyer :

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

Ta fonction DescribeShape doit renvoyer :

Area: [area], Perimeter: [perimeter]

Formate toutes les valeurs flottantes avec deux décimales en utilisant %.2f.

Par exemple, avec 4, 3 et 5, ta sortie doit être :

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

Affiche d’abord chaque forme (en utilisant sa méthode String()), puis sa description renvoyée par DescribeShape. Traite d’abord le rectangle, puis le cercle.

Essayez vous-même

package main

import (
	"fmt"
)

func main() {
	// Lire les valeurs d'entrée
	var width, height, radius float64
	fmt.Scanln(&width)
	fmt.Scanln(&height)
	fmt.Scanln(&radius)

	// TODO: Créer un Rectangle avec la largeur et la hauteur données

	// TODO: Créer un Cercle avec le rayon donné

	// TODO: Afficher le rectangle (utilise la méthode String())
	// TODO: Afficher la description du rectangle en utilisant DescribeShape()

	// TODO: Afficher le cercle (utilise la méthode String())
	// TODO: Afficher la description du cercle en utilisant DescribeShape()
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Go en ligne