Menu
Coddy logo textTech

Calculadora de área de figuras

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 61 de 61.

challenge icon

Desafío

Fácil

Este desafío final reúne rasgos (traits), objetos de rasgo (trait objects) y polimorfismo para resolver un problema práctico: calcular el área total de diferentes formas almacenadas en una sola colección.

¡Vamos a construir una calculadora de área de formas que demuestre el poder de los objetos de rasgo y el polimorfismo! Crearás un sistema donde diferentes formas —círculos y cuadrados— pueden almacenarse juntas en una sola colección y calcular su área total a través de una interfaz unificada.

Organizarás tu código en tres archivos:

  • shape.rs: Define el trait Shape con un método area que devuelva un f64. Este trait establece el contrato que todas las formas deben cumplir.
  • shapes.rs: Crea dos estructuras que implementen tu trait. Un Circle tiene un radius (f64), y un Square tiene un side (f64). Cada estructura debe implementar el trait Shape con su fórmula de área correspondiente. Para los círculos, usa 3.14159 como π.
  • main.rs: Importa ambos módulos y crea una función total_area que acepte un Vec<Box<dyn Shape>> y devuelva la suma de todas las áreas. Usando las entradas proporcionadas, crea un círculo y un cuadrado, almacénalos en un vector de objetos de rasgo, calcula el área total e imprime el resultado.

Las fórmulas de área son:

  • Círculo: 3.14159 × radius × radius
  • Cuadrado: side × side

Tu salida debe mostrar el área total de todas las formas:

Total area: {total}

Por ejemplo, con las entradas 2.0 (radio del círculo) y 3.0 (lado del cuadrado):

Total area: 21.56636

Esto se debe a que: Área del círculo = 3.14159 × 2² = 12.56636, Área del cuadrado = 3² = 9, Total = 21.56636

Y con las entradas 1.0 y 4.0:

Total area: 19.14159

Recibirás dos entradas: el radio del círculo y la longitud del lado del cuadrado (analiza ambos como f64).

Pruébalo tú mismo

mod shape;
mod shapes;

use shape::Shape;
use shapes::{Circle, Square};

// TODO: Implementar la función total_area
// Debe aceptar un Vec<Box<dyn Shape>> y devolver la suma de todas las áreas como f64
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
    // TODO: Calcular y devolver la suma de todas las áreas de las formas
    0.0
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let radius: f64 = input1.trim().parse().expect("Invalid number");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let side: f64 = input2.trim().parse().expect("Invalid number");

    // TODO: Crear un Circle con el radio dado
    // TODO: Crear un Square con el lado dado
    // TODO: Almacenar ambas formas en un Vec<Box<dyn Shape>>
    // TODO: Llamar a total_area e imprimir el resultado en el formato: "Total area: {total}"
}

Todas las lecciones de Object Oriented Programming