خط مونتاژ

خط مونتاژ

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

مقدمه

اعداد

دو نوع رایج‌ترین عدد در Ruby عبارت‌اند از:

  • اعداد صحیح: اعدادی که هیچ رقمی بعد از جداکننده‌ی اعشار ندارند (اعداد کامل). مثال‌ها عبارت‌اند از -6، 0، 1، 25، 976 و 500000.
  • اعداد اعشاری: اعدادی که یک یا چند رقم بعد از جداکننده‌ی اعشار دارند. مثال‌ها عبارت‌اند از -2.4، 0.1، 3.14، 16.984025 و 1024.0.

این اعداد از طریق کلاس‌های Integer و Float پیاده‌سازی می‌شوند.

این کلاس‌ها متدهایی دارند که مقادیر را از یکی به دیگری تبدیل می‌کنند. اعداد Integer به یک واحد کامل دقیق‌اند، در حالی که دقت Float کسری نسبت به یک عدد کامل است:

  • Integer#to_f: تبدیل به یک عدد اعشاری جدید
  • Float#ceil: گرد کردن به بالا تا نزدیک‌ترین عدد صحیح
  • Float#floor: گرد کردن به پایین تا نزدیک‌ترین عدد صحیح
  • Float#round: گرد کردن به نزدیک‌ترین عدد صحیح
  • Float#to_i: بریدن تا نزدیک‌ترین عدد صحیح

دستورهای شرطی

Ruby چیزهایی دارد که به آن‌ها عبارات کنترل جریان می‌گویند؛ این‌ها برای کنترل نحوه‌ی اجرای برنامه به کار می‌روند و یک مقدار درست‌نما یا غلط‌نما می‌گیرند. عملگرهایی هم وجود دارند که می‌توان با آن‌ها مقادیر درست‌نما یا غلط‌نما ساخت؛ به این‌ها عملگرهای مقایسه می‌گویند.

دو عبارت کنترلی اصلی وجود دارند که تعیین می‌کنند کدام کد اجرا شود و کدام نشود؛ به بیان دیگر، کدام شاخه‌ی داده‌شده اجرا شود.

این دو عبارت‌اند از: if و عبارت unless.

عملگرهای مقایسه

از عملگرهای مقایسه برای مقایسه‌ی مقادیر و برگرداندن مقدار true یا false استفاده می‌شود. عملگرهای زیر نیاز دارند دو مقداری که با هم مقایسه می‌شوند از یک نوع باشند. اگر مقادیر از یک نوع نباشند، کامپایلر خطا می‌دهد. در ادامه فهرستی از این عملگرها و مثالی از زمانی که مقدار true می‌دهند آمده است:

متد توضیح مثال
< کوچک‌تر از 4 < 5
<= کوچک‌تر یا مساوی 4 <= 4
> بزرگ‌تر از 3 > 1
>= بزرگ‌تر یا مساوی 2 >= 2

برخلاف عملگرهایی که پیش‌تر گفته شد، از عملگرهای مساوی و نامساوی می‌توان برای مقایسه‌ی هر نوع مقداری استفاده کرد. عملگر == برای بررسی برابری دو مقدار به کار می‌رود و نوع مقدار را هم بررسی می‌کند. عملگر != هم به همین شکل کار می‌کند، اما اگر مقادیر نامساوی باشند true و اگر مساوی باشند false برمی‌گرداند. در ادامه فهرستی از عملگرهای مساوی و نامساوی و مثالی از زمانی که مقدار true می‌دهند آمده است:

متد توضیح مثال
== مساوی 4 == 4
!= نامساوی 5 != 4

دستور if

دستور if برای بررسی این به کار می‌رود که یک شرط داده‌شده «درست‌نما» است یا «غلط‌نما». اگر شرط درست‌نما باشد، کد داخل دستور if اجرا می‌شود. یک دستور if با کلیدواژه‌ی end پایان می‌یابد.

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

دستور unless

دستور unless بسیار شبیه دستور if کار می‌کند، اما کد داخل دستور unless را زمانی اجرا می‌کند که شرط غلط‌نما باشد.

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

دستور else

دستور else می‌تواند همراه با دستور if به کار رود. دستور else اگر شاخه‌ی if اجرا نشود، اجرا می‌شود.

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

دستورهای «if آبشاری»

دستور elsif می‌تواند همراه با دستور if به کار رود. دستور elsif زمانی اجرا می‌شود که شاخه‌ی if اجرا نشود و شرط دستور elsif درست‌نما باشد. دستورهای elsif را می‌توان به هم زنجیره کرد و نخستین شرط درست‌نما اجرا می‌شود. همچنین می‌توان یک دستور else در انتهای دستور if قرار داد که اگر هیچ‌یک از دستورهای پیشین درست نبوده باشد، اجرا می‌شود.

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

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

در این تمرین کدی می‌نویسید که تولید یک خط مونتاژ در یک کارخانه‌ی خودروسازی را تحلیل کند. سرعت خط مونتاژ می‌تواند از 0 (خاموش) تا 10 (حداکثر) متغیر باشد.

در کندترین سرعتش (1)، هر ساعت 221 خودرو تولید می‌شود. تولید به‌صورت خطی با سرعت افزایش می‌یابد. بنابراین با تنظیم سرعت روی 4، باید هر ساعت 4 * 221 = 884 خودرو تولید کند. اما سرعت‌های بالاتر احتمال تولید خودروهای معیوب را افزایش می‌دهد، خودروهایی که در این صورت باید دور انداخته شوند. جدول زیر نشان می‌دهد که سرعت چگونه بر نرخ موفقیت تأثیر می‌گذارد:

  • 1 تا 4: نرخ موفقیت ۱۰۰٪.
  • 5 تا 8: نرخ موفقیت ۹۰٪.
  • 9: نرخ موفقیت ۸۰٪.
  • 10: نرخ موفقیت ۷۷٪.

دو کار پیش رو دارید.

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

متد AssemblyLine#production_rate_per_hour را پیاده‌سازی کنید تا نرخ تولید خط مونتاژ را در هر ساعت، با در نظر گرفتن نرخ موفقیتش، محاسبه کند. توجه داشته باشید که مقدار بازگشتی نمونه‌ای از Float است.

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. محاسبه‌ی تعداد خودروهای سالم تولیدشده در هر دقیقه

متد AssemblyLine#working_items_per_minute را پیاده‌سازی کنید تا محاسبه کنید در هر دقیقه چند خودروی کامل و سالم تولید می‌شود. توجه داشته باشید که مقدار بازگشتی نمونه‌ای از Integer است.

AssemblyLine.new(6).working_items_per_minute
#=> 19
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ruby Exercism

آماده‌اید خط مونتاژ را شروع کنید؟

در Exercism ثبت‌نام کنید تا Ruby را همراه با 21 مفهوم121 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.