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

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

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

ভূমিকা

C++-এর বিল্ট-ইন সংখ্যা টাইপগুলোকে ইন্টিজার ও ফ্লোটিং পয়েন্টে ভাগ করা যায়। ইন্টিজার হলো পূর্ণসংখ্যা, যেমন 0, 691 বা -2. ফ্লোটিং পয়েন্ট সংখ্যা হলো দশমিক বিন্দুসহ সংখ্যা, যেমন 6.02214076, 0.1 বা -1.616.

ইন্টিজার

নিচের উদাহরণে চারটি আলাদা ভ্যারিয়েবলের ডিক্লারেশন ও ইনিশিয়ালাইজেশন দেখানো হয়েছে

int m_morales{9241};              // base 10: 0-9
int a_apaec{0x24CD};              // base 16: 0-9 and A-F
int m_gargan{0b10010000011001};   // base  2: 0-1
int b_reilly{022031};             // base  8: 0-7
                                  // Leading with a 0 not the letter o.

কোনো int ভ্যারিয়েবলে মান অ্যাসাইন করতে চাইলে সরাসরি একটি লিটারাল দিয়েই তা করতে পারেন। লিটারাল হলো কোডে সরাসরি লেখা একটি সংখ্যা, যেমন 9241। সংখ্যার বিভিন্ন বেসের জন্য আলাদা আলাদা ইন্টিজার লিটারাল আছে। দশমিক ইন্টিজার লিটারাল সবচেয়ে কমন এবং এতে 0 থেকে 9 পর্যন্ত অঙ্ক ব্যবহার করা হয়। 0x-এর মতো একটি বিশেষ প্রিফিক্স যোগ করে অন্য বেসও ব্যবহার করা যায়। উপরের উদাহরণে 9241 সংখ্যাটিকে তার চারটি রূপ ও প্রিফিক্সসহ দেখানো হয়েছে। সব ভ্যারিয়েবলই একই মানে ইনিশিয়ালাইজ করা হয়েছে।

বিভিন্ন রূপ পদ্ধতি সম্পর্কে আরও বিস্তারিত জানতে একটি ছোট টিউটোরিয়াল দেখুন।

পড়তে সুবিধা হওয়ার জন্য অ্যাপস্ট্রোফি দিয়ে অঙ্কগুলোকে আলাদা করতে পারেন। 9'241 আর 0b0100'100'0001'1001 বা 92'4'1 একই।

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

ফ্লোটিং-পয়েন্ট লিটারাল দুই ধরনের হয়। সহজবোধ্য 0.0024 ছাড়াও এর সায়েন্টিফিক নোটেশন 2.4e-3 ব্যবহার করা যায়। সবচেয়ে কমন ফ্লোটিং-পয়েন্ট টাইপ হলো double।

অ্যারিথমেটিক

এক্সপ্রেশন গঠনের জন্য C++ +, -, *, /, ( ও ) এবং % সাপোর্ট করে। দুটি ইন্টিজারের মধ্যে করা অপারেশনের ফলাফলও একটি ইন্টিজার হয়। 5 / 2 রিটার্ন করবে 2। জড়িত টাইপগুলোর একটি যদি ফ্লোটিং-পয়েন্ট টাইপ হয়, তবে ফলাফলও ফ্লোটিং-পয়েন্ট হবে। 5.0 / 2 এবং 5 / 2.0 রিটার্ন করবে 2.5। % হলো ভাগশেষ অপারেটর এবং এটি একটি ইন্টিজার ভাগের ভাগশেষ রিটার্ন করে: 5%3 হলো 2।

অ্যাসাইনমেন্ট অপারেটর

অ্যাসাইনমেন্ট অপারেটর একটি ভ্যারিয়েবলে একটি লিটারাল অ্যাসাইন করে। এটি সবসময় ডান থেকে বামে ঘটে, কখনোই উল্টো দিকে নয়।

int length = 5;
int width = 2;
length = width;

এখানে length ভ্যারিয়েবলে ইন্টিজার মান 5 অ্যাসাইন করা হয়েছে। এরপর width ভ্যারিয়েবলে ইন্টিজার মান 2 অ্যাসাইন করা হয়। সবশেষে width-এর মান length ভ্যারিয়েবলে কপি করা হয় এবং আগের মান 5 হারিয়ে যায়। এটাও মনে রাখবেন, অ্যাসাইনমেন্ট অপারেশনের মুহূর্তে আমরা কেবল width-এর মানটিই length ভ্যারিয়েবলে অ্যাসাইন করছি। তাই পরে কোনো এক সময় width-এর মান বদলে গেলেও, length যে মান পাবে তাতে কোনো প্রভাব পড়বে না।

অ্যাসাইনমেন্ট অপারেটরকে অন্য অপারেটরগুলোর (অ্যারিথমেটিক ও বিটওয়াইজ) সাথে মিলিয়ে compound assignment অপারেটর বানানো যায়: +=, -=, *=, /=, %=। এই অপারেটরগুলো একটি ভ্যারিয়েবলের উপর অপারেশন চালিয়ে তার বর্তমান মান পরিবর্তন করে।

// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6

people ও eggs ভ্যারিয়েবল দুটি 0 দিয়ে ইনিশিয়ালাইজ করা হয়। এরপর people ভ্যারিয়েবলের বর্তমান মান 0-এর সাথে ইন্টিজার মান 2 যোগ করে তা আবার people ভ্যারিয়েবলে অ্যাসাইন করি। এখন people হয়ে যায় 2। এরপর প্রতিটি মানুষের জন্য 3টি করে ডিম যোগ করি, মোট হয় 6টি ডিম। এখন এই 6-কে eggs ভ্যারিয়েবলের বর্তমান মান 0-এর সাথে যোগ করে আবার eggs ভ্যারিয়েবলে অ্যাসাইন করি। এখন eggs হবে 6। সমতুল্য এক্সপ্রেশন হবে people = people + 2 এবং eggs = eggs + (3 * people)।

নির্দেশনা

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

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

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

কখনো কখনো ফ্রিল্যান্সার তার দৈনিক হারে ছাড় দিতে চান (যেমন তার সবচেয়ে অনুগত গ্রাহকদের জন্য কিংবা অলাভজনক গ্রাহকদের জন্য)।

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

1. ঘণ্টার হার দেওয়া থাকলে দৈনিক হার হিসাব করুন

প্যারামিটার হিসেবে ঘণ্টার হার নিয়ে দৈনিক হার হিসাব করতে daily_rate নামে একটি ফাংশন লিখুন। চুক্তি অনুযায়ী এক দিনে ৮টি বিলযোগ্য ঘণ্টা থাকে।

daily_rate(60)
// => 480.0

রিটার্ন করা দৈনিক হার double টাইপের হতে হবে।

2. ছাড়ের পরের দাম হিসাব করুন

ছাড়ের পরের দাম হিসাব করতে apply_discount নামে একটি ফাংশন লিখুন। এটি দুটি প্যারামিটার নেবে: মূল দাম এবং শতকরা হিসেবে ছাড়ের হার।

apply_discount(150, 10)
// => 135.0

রিটার্ন করা মান সব সময় double টাইপের হতে হবে, কোনোভাবেই রাউন্ড করা যাবে না।

3. ঘণ্টার হার ও ছাড় দেওয়া থাকলে মাসিক হার হিসাব করুন

ছাড় প্রয়োগ করা মাসিক হার হিসাব করতে একটি monthly_rate ফাংশন লিখুন। এতে দুটি প্যারামিটার থাকবে: ঘণ্টার হার এবং শতকরা হিসেবে ছাড়।

monthly_rate(77, 10.5)
// => 12130

রিটার্ন করা মাসিক হারকে নিকটতম ইন্টিজারে রাউন্ড আপ করতে হবে (অর্থাৎ সিলিং নিতে হবে)।

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

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

days_in_budget(20'000, 80, 11.0)
// => 35

রিটার্ন করা দিনসংখ্যাকে নিকটতম ইন্টিজারে রাউন্ড ডাউন করতে হবে (অর্থাৎ ফ্লোর নিতে হবে)।

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

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

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