Треки
/
Rust
Rust
/
Вправи
/
Трикутник
Трикутник

Трикутник

Середня

Вказівки

Визначте, чи є трикутник equilateral, isosceles або scalene.

Трикутник equilateral має всі три сторони однакової довжини.

Трикутник isosceles має принаймні дві сторони однакової довжини. (Іноді його визначають як такий, що має рівно дві сторони однакової довжини, але в межах цієї вправи будемо вважати, що принаймні дві.)

Трикутник scalene має всі сторони різної довжини.

Примітка

Щоб фігура взагалі була трикутником, усі сторони повинні мати довжину > 0, а сума довжин будь-яких двох сторін має бути не меншою за довжину третьої сторони.

Note

Виродженими називають трикутники, у яких сума довжин двох сторін дорівнює довжині третьої сторони, наприклад 1, 1, 2. Ми вирішили не додавати тестів для вироджених трикутників у цій вправі. Такі випадки можна обробити за бажанням або просто проігнорувати.

У рівняннях:

Нехай a, b і c будуть сторонами трикутника. Тоді всі три наведені нижче вирази мають бути істинними:

a + b ≥ c
b + c ≥ a
a + c ≥ b

Дивіться нерівність трикутника

Реалізація цього може набувати багатьох форм. Ось кілька тем, які можуть допомогти, залежно від підходу, який ми оберемо.

А можливо, ми придумаємо підхід, який не використовує жодного з них!

Довжини, які не є цілими числами

Базова вправа перевіряє розпізнавання трикутників, усі сторони яких є цілими числами. Однак деякі трикутники неможливо подати самими лише цілими числами. Простий приклад: трикутник із кутом 90 градусів між двома рівними сторонами довжиною 1. Його третя сторона має довжину, що дорівнює квадратному кореню з 2, а це ірраціональне число (тобто його не можна записати ні як ціле число, ні як дріб).

Переписувати функції аналізу, щоб вони працювали і з цілими числами, і з числами з плаваючою комою, було б стомливо, а робити це для всіх можливих цілих типів і типів із плаваючою комою - особливо стомливо: якщо взяти знакові та беззнакові варіанти розрядності 8, 16, 32, 64 і 128, то це були б 10 повторних реалізацій по суті одного й того самого коду, і це ще до того, як ми взагалі візьмемося за числа з плаваючою комою!

Є кращий спосіб: дженерики. Переписавши свій Triangle як Triangle<T>, ми можемо написати код один раз і перекласти роботу зі створення всіх цих спеціалізацій на компілятор. Зауважмо, що для використання математичних операцій нам потрібно обмежити наш узагальнений тип типами, які підтримують ці операції, за допомогою трейтів.

Є кілька бонусних тестів, які можна запустити, щоб перевірити нашу реалізацію на числах з плаваючою комою. Щоб увімкнути їх, запустімо тести з прапорцем можливості generic, ось так:

cargo test --features generic
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Rust Exercism

Час розпочати Трикутник?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Rust, а також 99 вправ та справжнє наставництво від людей, і все це безкоштовно.