ট্র্যাক
/
Swift
Swift
/
অনুশীলনী
/
ফ্রিল্যান্সার রেট
ফ্রিল্যান্সার রেট

ফ্রিল্যান্সার রেট

লার্নিং অনুশীলনী

ভূমিকা

সংখ্যা

Swift-এ মূলত দুই ধরনের সংখ্যা থাকে: ইন্টিজার আর ফ্লোটিং-পয়েন্ট সংখ্যা।

পাঠযোগ্যতা বাড়াতে আপনি সংখ্যার লিটারেলে আন্ডারস্কোর বসাতে পারেন: 1_000_000 আর 1000000 একেবারে একই। ফ্লোটিং-পয়েন্ট লিটারেল দশমিক বা সূচকীয় নোটেশনে লেখা যায়।

বেশিরভাগ ক্ষেত্রেই ইন্টিজারের জন্য আপনি Int আর ফ্লোটিং-পয়েন্ট সংখ্যার জন্য Double ব্যবহার করেন:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

পাটিগণিত অপারেটর

সংখ্যা নিয়ে হিসাব করার জন্য Swift সাধারণ পাটিগণিত অপারেটর দেয়:

অপারেটর বিবরণ উদাহরণ
+ যোগ 4 + 6-এর ফলাফল 10
- বিয়োগ 15 - 10-এর ফলাফল 5
* গুণ 2 * 3-এর ফলাফল 6
Caution

Swift টাইপ-সেফ, তাই পাটিগণিতের কাজে ভিন্ন টাইপের সংখ্যা একসাথে মেশাতে দেয় না। আপনি সরাসরি একটি Int আর একটি Double যোগ বা গুণ করতে পারবেন না; আগে একটি টাইপকে অন্যটির সাথে মিলিয়ে কনভার্ট করতে হবে।

ভাগ

/ অপারেটর দিয়ে ভাগ করা হয়। দুই পাশের অপারেন্ড দুটোই ইন্টিজার হলে, ইন্টিজার ভাগ ভগ্নাংশের অবশিষ্ট অংশটুকু বাদ দিয়ে দেয়:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

শূন্য নয় এমন কোনো ফ্লোটিং-পয়েন্ট সংখ্যাকে শূন্য দিয়ে ভাগ করলে ফল আসে inf বা -inf. 0.0-কে 0.0 দিয়ে ভাগ করলে পাওয়া যায় nan (Not a Number, অর্থাৎ সংখ্যা নয়)। এর বিপরীতে, কোনো ইন্টিজারকে শূন্য দিয়ে ভাগ করলে কম্পাইল-টাইম বা রানটাইম এরর হয়:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

ভাগশেষ অপারেটর

ভাগশেষ অপারেটর (%) দুইটি ইন্টিজার ভাগ করার পর যে ভাগশেষ অবশিষ্ট থাকে তা বের করে:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

Swift-এ % মডুলো অপারেটর নয়, বরং সত্যিকারের ভাগশেষ অপারেটর। ফল সবসময় প্রথম অপারেন্ডের (যেটিকে ভাগ করা হচ্ছে) চিহ্নই নেয়, দ্বিতীয় অপারেন্ডের চিহ্ন যা-ই হোক না কেন:

5 % -2  // 1
-5 % 2  // -1

ফ্লোটিং-পয়েন্ট সংখ্যা রাউন্ড করা

আপনি rounded() মেথড দিয়ে একটি ফ্লোটিং-পয়েন্ট সংখ্যাকে রাউন্ড করতে পারেন। ডিফল্টভাবে rounded() নিকটতম ইন্টিজারে রাউন্ড করে। চাইলে আপনি নির্দিষ্ট একটি রাউন্ডিং রুল দিতে পারেন, যেমন .up বা .down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

টাইপ ইনফারেন্স

টাইপ অ্যানোটেশন ছাড়া কোনো সংখ্যার কনস্ট্যান্ট বা ভ্যারিয়েবল ডিক্লেয়ার করলে Swift নিজেই তার টাইপ অনুমান করে নেয়:

  • পূর্ণ সংখ্যাগুলোর ডিফল্ট Int.
  • দশমিক বিন্দুযুক্ত সংখ্যাগুলোর ডিফল্ট Double.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

টাইপ কনভার্সন (ডেটা টাইপ রূপান্তর)

ভিন্ন টাইপের মান নিয়ে কাজ করতে হলে Double(_:) বা Int(_:)-এর মতো টাইপ ইনিশিয়ালাইজার দিয়ে একটি মানকে অন্যটিতে কনভার্ট করুন:

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

নির্দেশনা

এই অনুশীলনীতে আপনি এমন কোড লিখবেন যা একজন ফ্রিল্যান্সারকে একজন প্রজেক্ট ম্যানেজারের সঙ্গে যোগাযোগ করতে সাহায্য করবে। আপনার কাজ হলো কয়েকটি ইউটিলিটি দেওয়া, যেগুলো দিয়ে দৈনিক ও মাসিক রেট দ্রুত হিসাব করা যায়, প্রয়োজনে একটি নির্দিষ্ট ছাড়সহ।

প্রথমে ফ্রিল্যান্সার ও প্রজেক্ট ম্যানেজারের মধ্যে কয়েকটি নিয়ম ঠিক করে নিই:

  • দৈনিক রেট হলো ঘণ্টাপ্রতি রেটের ৮ গুণ।
  • এক মাসে বিল করার মতো ২২টি দিন থাকে।

কখনও কখনও ফ্রিল্যান্সার তার দৈনিক রেটে ছাড় দিতে চান (যেমন তার সবচেয়ে বিশ্বস্ত ক্লায়েন্ট বা অলাভজনক ক্লায়েন্টদের জন্য)।

ছাড়কে শতাংশ বোঝানো ভগ্নসংখ্যা হিসেবে মডেল করা হয়, যেমন 25.0 (২৫%)।

1. ঘণ্টাপ্রতি রেট থেকে দৈনিক রেট হিসাব করুন

ঘণ্টাপ্রতি রেট প্যারামিটার হিসেবে নিয়ে দৈনিক রেট হিসাব করার জন্য dailyRateFrom নামের একটি ফাংশন ইমপ্লিমেন্ট করুন। চুক্তিতে বলা আছে যে এক দিনে বিল করার মতো ৮টি ঘণ্টা থাকে।

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

রিটার্ন করা দৈনিক রেটটি একটি Double হওয়া উচিত।

2. ঘণ্টাপ্রতি রেট ও ছাড় থেকে মাসিক রেট হিসাব করুন

ছাড়যুক্ত মাসিক রেট হিসাব করার জন্য monthlyRateFrom ফাংশন ইমপ্লিমেন্ট করুন। এটি দুটি প্যারামিটার নেয়: একটি ঘণ্টাপ্রতি রেট এবং শতাংশে ছাড়।

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

রিটার্ন করা মাসিক রেটটি নিকটতম পূর্ণ সংখ্যায় রাউন্ড আপ করতে হবে (সিলিং নিন)।

3. বাজেট, ঘণ্টাপ্রতি রেট ও ছাড় থেকে সম্পূর্ণ কর্মদিবসের সংখ্যা হিসাব করুন

workdaysIn নামের একটি ফাংশন ইমপ্লিমেন্ট করুন, যেটি একটি বাজেট, একটি ঘণ্টাপ্রতি রেট ও একটি ছাড় নেয় এবং হিসাব করে যে সেটি দিয়ে কতগুলো সম্পূর্ণ দিনের কাজ হয়।

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

রিটার্ন করা দিনসংখ্যা পরবর্তী পূর্ণ সংখ্যায় রাউন্ড ডাউন করতে হবে (ফ্লোর নিন)।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Swift Exercism

ফ্রিল্যান্সার রেট শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Swift ট্র্যাকের 35টি কনসেপ্ট116টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।