مشخص کنید که یک مثلث متساویالاضلاع، متساویالساقین یا مختلفالاضلاع است.
در مثلث متساویالاضلاع، طول هر سه ضلع یکسان است.
در مثلث متساویالساقین، طول دستکم دو ضلع یکسان است. (گاهی آن را با داشتن دقیقاً دو ضلع با طول یکسان تعریف میکنند، اما در این تمرین میگوییم دستکم دو ضلع.)
در مثلث مختلفالاضلاع، طول هر ضلع با دیگری متفاوت است.
برای اینکه یک شکل اصلاً مثلث باشد، طول همهی ضلعها باید بزرگتر از ۰ باشد و مجموع طولهای هر دو ضلع باید بزرگتر یا مساوی طول ضلع سوم باشد.
مثلثهای تباهیده مثلثهایی هستند که در آنها مجموع طول دو ضلع برابر طول ضلع سوم است، مثلاً 1, 1, 2.
تصمیم گرفتیم در این تمرین برای مثلثهای تباهیده Testهایی قرار ندهیم.
اگر مایل باشید میتوانید به این موقعیتها رسیدگی کنید، یا آنها را با خیال راحت نادیده بگیرید.
در قالب معادلهها:
فرض کنید a، b و c ضلعهای مثلث باشند.
آنگاه هر سه عبارت زیر باید برقرار باشند:
a + b ≥ c
b + c ≥ a
a + c ≥ b
نامساوی مثلث را ببینید.
پیادهسازی این تمرین میتواند شکلهای گوناگونی داشته باشد. بسته به رویکردی که در پیش میگیرید، این موضوعها میتوانند به شما کمک کنند.
یا شاید بتوانید رویکردی بیابید که از هیچیک از اینها استفاده نمیکند!
تمرین پایه، تشخیص مثلثهایی را میآزماید که همهی ضلعهایشان عدد صحیح باشند. اما بعضی مثلثها را نمیتوان تنها با عددهای صحیح نشان داد. یک مثال ساده، مثلثی است که دو ضلع برابر به طول ۱ آن، زاویهای ۹۰ درجه میسازند. ضلع سوم آن طولی برابر با ریشهی دوم ۲ دارد که عددی گنگ است (یعنی نمیتوان آن را بهصورت عدد صحیح یا کسر نوشت).
بازنویسی توابع تحلیل برای رسیدگی به هر دو حالت عدد صحیح و اعشاری خستهکننده خواهد بود، و انجام این کار برای همهی انواع ممکن عدد صحیح و اعشاری بهویژه خستهکننده است: با در نظر گرفتن گونههای علامتدار و بیعلامت با پهنای بیت ۸، ۱۶، ۳۲، ۶۴ و ۱۲۸، این کار به ۱۰ پیادهسازی دوباره از کدی اساساً یکسان میانجامد، آن هم پیش از آنکه نوبت به اعداد اعشاری برسد!
راه بهتری هم هست: generics. اگر Triangle خود را بهصورت Triangle<T> بازنویسی کنید، میتوانید کدتان را یک بار بنویسید و کار تولید همهی آن تخصصها را به کامپایلر بسپارید. توجه کنید که برای انجام عملیات ریاضی، باید نوع جنریک خود را با کمک traits به انواعی محدود کنید که از آن عملیات پشتیبانی میکنند.
چند تست دیگر هم بهعنوان امتیاز هست که میتوانید اجرا کنید و پیادهسازیتان را روی اعداد اعشاری بیازمایند. برای فعال کردن آنها، تستهایتان را با پرچم ویژگی generic اجرا کنید، به این شکل:
cargo test --features generic