Menu
Coddy logo textTech

Calculadora de área de figuras

Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 61 de 61.

challenge icon

Desafío

Fácil

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

¡Construyamos una calculadora del área de figuras que demuestre el poder de los objetos de rasgo y el polimorfismo! Crearás un sistema en el que diferentes figuras, círculos y cuadrados, se puedan almacenar juntas en una sola colección y cuyo área total se pueda calcular mediante una interfaz unificada.

Organizarás tu código en tres archivos:

  • shape.rs: Define el rasgo Shape con un método area que devuelve un f64. Este rasgo establece el contrato que todas las figuras deben cumplir.
  • shapes.rs: Crea dos estructuras que implementen tu rasgo. Un Circle tiene un radius (f64), y un Square tiene un side (f64). Cada estructura debe implementar el rasgo 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, guárdalos en un vector de objetos de rasgo, calcula el área total e imprime el resultado.

Las fórmulas del área son:

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

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

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 ambas como f64).

Pruébalo tú mismo

mod shape;
mod shapes;

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

// TODO: Implementa la función total_area
// Debería 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: Calcula y devuelve 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: Crea un Circle con el radio dado
    // TODO: Crea un Square con el lado dado
    // TODO: Almacena ambas formas en un Vec<Box<dyn Shape>>
    // TODO: Llama a total_area e imprime el resultado en el formato: "Total area: {total}"
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Rust online