Menu
Coddy logo textTech

Recapitulação - Ponto Imprimível

Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 39 de 61.

challenge icon

Desafio

Fácil

Vamos reunir todas as traits padrão que você aprendeu criando uma struct Point completa que pode ser depurada, exibida de forma elegante e comparada para igualdade!

Você organizará seu código em dois arquivos:

  • point.rs: Defina uma struct Point pública com campos x e y públicos (ambos i32). Seu Point deve suportar três capacidades:
    • Impressão de depuração (Debug) com {:?} — derive isso automaticamente
    • Exibição amigável ao usuário com {} no formato (x, y) — implemente isso manualmente usando std::fmt::Display
    • Comparação de igualdade com == — derive PartialEq
  • main.rs: Importe seu módulo point e crie duas instâncias de Point usando as entradas fornecidas. Demonstre as três capacidades imprimindo o primeiro ponto com o formato de depuração, imprimindo o segundo ponto com o formato de exibição e comparando se os dois pontos são iguais.

Sua saída deve mostrar todas as três capacidades das traits em ação:

Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}

Por exemplo, com as entradas 3, 5, 3, 5:

Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: true

E com as entradas 10, 20, 5, 15:

Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: false

Você receberá quatro entradas: as coordenadas x e y para o primeiro ponto, seguidas pelas coordenadas x e y para o segundo ponto. Analise cada uma como i32.

Experimente você mesmo

mod point;

use point::Point;

fn main() {
    // Leia quatro entradas: x1, y1, x2, y2
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x1: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y1: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x2: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: i32 = input.trim().parse().expect("Invalid input");

    // TODO: Crie duas instâncias de Point usando as entradas

    // TODO: Imprima o primeiro ponto usando o formato debug {:?}
    // Formato: "Debug: Point { x: ..., y: ... }"

    // TODO: Imprima o segundo ponto usando o formato display {}
    // Formato: "Display: (..., ...)"

    // TODO: Compare os dois pontos e imprima o resultado
    // Formato: "Equal: true" ou "Equal: false"
}

Todas as lições de Object Oriented Programming