Kurzusok
/
Rust
Rust
/
Feladatok
/
Háromszög
Háromszög

Háromszög

Közepes

Utasítások

Állapítsd meg, hogy egy háromszög equilateral, isosceles vagy scalene.

Az equilateral háromszög mindhárom oldala ugyanolyan hosszú.

Az isosceles háromszögnek legalább két oldala ugyanolyan hosszú. (Néha úgy szokták megadni, hogy pontosan két oldala ugyanolyan hosszú, de ebben a feladatban legalább kettőt értünk alatta.)

A scalene háromszög minden oldala különböző hosszú.

Megjegyzés

Ahhoz, hogy egy alakzat egyáltalán háromszög legyen, minden oldalának 0-nál nagyobbnak kell lennie, és bármely két oldal hosszának összege legalább akkora kell legyen, mint a harmadik oldal hossza.

Note

A degenerált háromszögek olyan háromszögek, amelyekben két oldal hosszának összege egyenlő a harmadik oldal hosszával, például 1, 1, 2. Úgy döntöttünk, hogy ebben a feladatban nem teszünk bele teszteket degenerált háromszögekre. Ha szeretnél, foglalkozhatsz ezekkel az esetekkel, vagy nyugodtan figyelmen kívül hagyhatod őket.

Képletekkel kifejezve:

Legyen a, b és c a háromszög oldalai. Ekkor az alábbi három kifejezés mindegyikének igaznak kell lennie:

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

Lásd: háromszög-egyenlőtlenség

A megvalósítás sokféle formát ölthet. Íme néhány téma, ami segíthet, attól függően, milyen megközelítést választasz.

Vagy lehet, hogy olyan megközelítést találsz ki, amelyik egyiket sem használja!

Nem egész hosszúságok

Az alapfeladat olyan háromszögek azonosítását teszteli, amelyeknek minden oldala egész szám. Vannak azonban olyan háromszögek, amelyeket nem lehet pusztán egész számokkal leírni. Egyszerű példa egy olyan háromszög, amelynek két egyenlő, 1 hosszúságú oldala 90 fokos szöget zár be. A harmadik oldalának hossza négyzetgyök 2, ami irracionális szám (vagyis nem írható fel egész számként vagy törtként).

Fárasztó lenne átírni az elemzőfüggvényeket, hogy egyszerre kezeljék az egész és a lebegőpontos eseteket, és különösen fárasztó lenne mindezt az összes lehetséges egész- és lebegőpontos típusra megtenni: a 8, 16, 32, 64 és 128 bites szélesség előjeles és előjel nélküli változataival ez alapvetően ugyanannak a kódnak a 10 újraimplementálása lenne, még mielőtt a lebegőpontos típusokra gondolnánk!

Van jobb megoldás is: generics. Ha a Triangle-t Triangle<T>-ként írod meg, egyszer kell megírnod a kódot, és a specializációk legenerálásának munkáját átadhatod a fordítónak. Ne feledd, hogy a matematikai műveletek használatához a generikus típusodat olyan típusokra kell korlátoznod, amelyek támogatják ezeket a műveleteket, méghozzá trait-ek segítségével.

Van néhány bónusz teszt is, amit lefuttathatsz; ezek a lebegőpontos számokon tesztelik a megvalósításodat. A bekapcsolásukhoz futtasd a teszteket a generic feature flaggel, így:

cargo test --features generic
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Rust Exercism

Készen állsz elkezdeni a(z) Háromszög feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Rust nyelvet 99 feladat segítségével, valódi emberi mentorálással, mindez ingyen.