Menu
Coddy logo textTech

Powtórka – punkt do wydrukowania

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 39 z 61.

challenge icon

Wyzwanie

Łatwy

Zbierzmy wszystkie standardowe cechy, których się nauczyłeś, tworząc w pełni funkcjonalną strukturę Point, którą można debugować, czytelnie wyświetlać i porównywać pod kątem równości!

Podzielisz swój kod na dwa pliki:

  • point.rs: Zdefiniuj publiczną strukturę Point z publicznymi polami x i y (oba typu i32). Twoja struktura Point powinna obsługiwać trzy możliwości:
    • Wyświetlanie w trybie debugowania za pomocą {:?}. Wyprowadź tę cechę automatycznie
    • Przyjazne dla użytkownika wyświetlanie za pomocą {} w formacie (x, y): zaimplementuj je ręcznie przy użyciu std::fmt::Display
    • Porównywanie równości za pomocą ==: wyprowadź cechę PartialEq
  • main.rs: Dołącz moduł point i utwórz dwie instancje Point przy użyciu podanych danych wejściowych. Zademonstruj wszystkie trzy możliwości, wyświetlając pierwszy punkt w formacie debugowania, wyświetlając drugi punkt w formacie Display i porównując, czy oba punkty są równe.

Wynik powinien pokazywać działanie wszystkich trzech możliwości cech:

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

Na przykład dla danych wejściowych 3, 5, 3, 5:

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

A dla danych wejściowych 10, 20, 5, 15:

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

Otrzymasz cztery dane wejściowe: współrzędne x i y pierwszego punktu, a następnie współrzędne x i y drugiego punktu. Każdą z nich sparsuj jako i32.

Spróbuj swoich sił

mod point;

use point::Point;

fn main() {
    // Wczytaj cztery wartości: 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: Utwórz dwie instancje Point na podstawie wczytanych wartości

    // TODO: Wypisz pierwszy punkt w formacie debugowania {:?}
    // Format: "Debug: Point { x: ..., y: ... }"

    // TODO: Wypisz drugi punkt w formacie wyświetlania {}
    // Format: "Display: (..., ...)"

    // TODO: Porównaj dwa punkty i wypisz wynik
    // Format: "Equal: true" lub "Equal: false"
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online