Menu
Coddy logo textTech

Итоги — Printable Point

Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 39 из 61.

challenge icon

Задание

Легко

Давайте объединим все стандартные traits, которые вы изучили, создав полнофункциональную структуру Point, которую можно отлаживать, красиво отображать и сравнивать на равенство!

Вы организуете код в двух файлах:

  • point.rs: Определите общедоступную структуру Point с общедоступными полями x и y (оба типа i32). Ваша Point должна поддерживать три возможности:
    • Отладочная печать с помощью {:?}. Выведите это автоматически
    • Удобное для пользователя отображение с помощью {} в формате (x, y): реализуйте это вручную, используя std::fmt::Display
    • Сравнение на равенство с помощью ==: выведите PartialEq
  • main.rs: Подключите модуль point и создайте два экземпляра Point, используя предоставленные inputs. Продемонстрируйте все три возможности, напечатав first точку в формате debug, напечатав second точку в формате display и сравнив, равны ли две точки.

Ваш вывод должен продемонстрировать работу всех трёх возможностей traits:

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

Например, для inputs 3, 5, 3, 5:

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

А для inputs 10, 20, 5, 15:

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

Вы получите four inputs: координаты x и y для first точки, а затем координаты x и y для second точки. Разберите каждый input как i32.

Попробуйте сами

mod point;

use point::Point;

fn main() {
    // Считать четыре входных значения: 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: Создать два экземпляра Point, используя входные данные

    // TODO: Вывести первую точку, используя отладочный формат {:?}
    // Формат: "Debug: Point { x: ..., y: ... }"

    // TODO: Вывести вторую точку, используя формат отображения {}
    // Формат: "Display: (..., ...)"

    // TODO: Сравнить две точки и вывести результат
    // Формат: "Equal: true" или "Equal: false"
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Rust