مسیرها
/
Elixir
Elixir
/
تمرین‌ها
/
نرخ‌های فریلنسر
نرخ‌های فریلنسر

نرخ‌های فریلنسر

تمرین یادگیری

مقدمه

اعداد صحیح

در Elixir دو نوع مختلف عدد وجود دارد: «اعداد صحیح» و «اعداد اعشاری».

اعداد صحیح، اعدادی بدون جزء اعشاری هستند.

integer = 3
# => 3

اعداد اعشاری

اعداد اعشاری، اعدادی هستند که یک یا چند رقم پس از جداکننده‌ی اعشار دارند. این اعداد از قالب اعشاری دقت مضاعف ۶۴ بیتی استفاده می‌کنند.

float = 3.45
# => 3.45

کار با اعداد

در ماژول‌های Integer و Float می‌توانید چند تابع مفید برای کار با این نوع‌ها پیدا کنید. عملگرهای حسابی پایه در ماژول Kernel تعریف شده‌اند.

تبدیل

اعداد صحیح و اعشاری را می‌توان در یک عبارت حسابی با هم ترکیب کرد. استفاده از یک عدد اعشاری در عبارت باعث می‌شود نتیجه هم اعشاری باشد.

2 * 3
# => 6

2 * 3.0
# => 6.0

اما وقتی تقسیم می‌کنید، نتیجه همیشه یک عدد اعشاری خواهد بود، حتی اگر فقط از اعداد صحیح استفاده کنید.

6 / 2
# => 3.0

برای تبدیل یک عدد اعشاری به عدد صحیح، می‌توانید جزء اعشاری را با trunc/1 حذف کنید.

دستورالعمل‌ها

در این تمرین کدی می‌نویسید که به یک فریلنسر کمک می‌کند با یک مدیر پروژه ارتباط برقرار کند. وظیفه‌ی شما این است که چند ابزار فراهم کنید که نرخ‌های روزانه و ماهانه را سریع محاسبه می‌کنند و در صورت نیاز تخفیف داده‌شده را هم در نظر می‌گیرند.

ابتدا چند قاعده بین فریلنسر و مدیر پروژه تعیین می‌کنیم:

  • نرخ روزانه ۸ برابر نرخ ساعتی است.
  • هر ماه ۲۲ روز قابل‌صورت‌حساب دارد.

گاهی فریلنسر پیشنهاد می‌دهد که روی نرخ روزانه‌اش تخفیف بگذارد (برای نمونه برای وفادارترین مشتریانش یا برای مشتریان غیرانتفاعی).

تخفیف‌ها به شکل اعداد اعشاری مدل می‌شوند که درصد را نشان می‌دهند؛ برای نمونه 25.0 یعنی ۲۵ درصد.

1. محاسبه‌ی نرخ روزانه بر اساس نرخ ساعتی

تابعی به اسم daily_rate پیاده‌سازی کنید که نرخ روزانه را با گرفتن نرخ ساعتی به عنوان پارامتر محاسبه کند. طبق قرارداد، هر روز ۸ ساعت قابل‌صورت‌حساب دارد.

FreelancerRates.daily_rate(60)
# => 480.0

نرخ روزانه‌ی برگشتی باید یک عدد اعشاری باشد.

2. محاسبه‌ی قیمت پس از تخفیف

تابعی به اسم apply_discount پیاده‌سازی کنید که قیمت را پس از تخفیف محاسبه کند.

FreelancerRates.apply_discount(150, 10)
# => 135.0

مقدار برگشتی همیشه باید یک عدد اعشاری باشد و به هیچ شکلی گرد نشود.

3. محاسبه‌ی نرخ ماهانه بر اساس نرخ ساعتی و تخفیف

تابعی به اسم monthly_rate پیاده‌سازی کنید که نرخ ماهانه‌ی دارای تخفیف را محاسبه کند. این تابع دو پارامتر می‌گیرد: نرخ ساعتی و درصد تخفیف.

FreelancerRates.monthly_rate(77, 10.5)
# => 12130

نرخ ماهانه‌ی برگشتی باید به نزدیک‌ترین عدد صحیح و به سمت بالا (سقف) گرد شود.

4. محاسبه‌ی تعداد روزهای کاری کامل بر اساس بودجه، نرخ ساعتی و تخفیف

تابعی به اسم days_in_budget پیاده‌سازی کنید که بودجه، نرخ ساعتی و تخفیف را می‌گیرد و محاسبه می‌کند که این مبلغ پوشش چند روز کار کامل را می‌دهد.

FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1

تعداد روزهای برگشتی باید به سمت پایین (کف) و تا یک رقم اعشار گرد شود.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Elixir Exercism

آماده‌اید نرخ‌های فریلنسر را شروع کنید؟

در Exercism ثبت‌نام کنید تا Elixir را همراه با 58 مفهوم168 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.