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

Pratique por conta própria: Compilador de Rust online