লাসাগনা

লাসাগনা

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

ভূমিকা

মূল বিষয়গুলো

C++ যাত্রা শুরু করতে আমরা ভ্যারিয়েবল, ফাংশন কল আর কমেন্ট দিয়ে শুরু করছি।

কমেন্ট

কমেন্ট দুই রকমের: সিঙ্গেল-লাইন আর মাল্টি-লাইন। একই লাইনে //-এর পরে যা কিছু আসে, কম্পাইলার সেগুলো উপেক্ষা করে। মাল্টি-লাইন কমেন্টকে C-স্টাইল কমেন্টও বলা হয়। এগুলো /* আর */ দিয়ে ঘেরা থাকে। এগুলোর মাঝে যা কিছু থাকে, সেটাও উপেক্ষা করা হয়।

ভ্যারিয়েবল

C++ একটি টাইপড ভাষা। সব টাইপ কম্পাইল টাইমে জানা থাকা দরকার, আর সাধারণত সেগুলো স্পষ্টভাবে উল্লেখ করতে হয়। একটি ভ্যারিয়েবলের টাইপ বদলানো যায় না। years নামের একটি ইন্টিজার ভ্যারিয়েবল এভাবে ডিক্লেয়ার করা যায়:

int years;

ভ্যারিয়েবল ডিক্লেয়ার করার সময়ই ইনিশিয়ালাইজ করা ভালো অভ্যাস। এটি করার জন্য C++ বিভিন্ন পদ্ধতি দেয়। দ্বিতীয় বন্ধনী দিয়ে লেখা ভার্সনটি আধুনিক C++-এর সাথে বেশি মানানসই, তবে সমান চিহ্ন দিয়ে লেখা ভার্সনটিও খুবই প্রচলিত।

int tomatoes{80};
int potatoes = 40;
Caution

C++ আসলে আন-ইনিশিয়ালাইজড ভ্যারিয়েবল ব্যবহারের অনুমতি দেয়। ভ্যারিয়েবলটি সচেতনভাবে সেট না করা পর্যন্ত এটি আনডিফাইন্ড থাকে এবং এতে যা কিছুই থাকতে পারে। সেট করার আগেই ব্যবহার করে ফেলার এরর আর আনডিফাইন্ড বিহেভিয়ার এড়াতে সবসময় ইনিশিয়ালাইজ করা বাঞ্ছনীয়। আনডিফাইন্ড বিহেভিয়ার আপনার প্রোগ্রাম আগে ঠিকঠাক চললেও সবচেয়ে অসময়ে ক্র্যাশ করাতে পারে। যতই জোর দেওয়া হোক কম বলা হবে: যেকোনো মূল্যে আনডিফাইন্ড বিহেভিয়ার এড়িয়ে চলুন।

গাণিতিক অপারেশন

*, + বা --এর মতো অপারেটর 3 * 2 বা tomatoes + potatoes-এর মতো একটি এক্সপ্রেশনের অংশ হতে পারে।

ভ্যারিয়েবল আপডেট করা

ভ্যারিয়েবল নিজেদের টাইপ ধরে রাখলে আপনি সেগুলো পুনরায় অ্যাসাইন করতে পারেন:

tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well

ফাংশন

ফাংশনের একটি নাম, একটি রিটার্ন টাইপ আর একটি (সম্ভবত খালি) প্যারামিটার লিস্ট থাকে। always_fortyseven নামের একটি ফাংশন, যা সবসময় 47 রিটার্ন করবে, দেখতে এমন হবে:

int always_fortyseven() {
    return 47;
}

এখানে vip_fee, যার একটি প্যারামিটার আছে:

int vip_fee(int standard_fee) {
    /*
    vip_fee calculates the vip fee based on the standard_fee.
    */
    int vip_multi{3};
    return standard_fee * vip_multi;
}

আর total_fee, একটি ফাংশন যার তিনটি প্যারামিটার আছে এবং যেটি আরেকটি ফাংশন কল করে।

int total_fee(int vips, int adults, int kids) {
    /*
    total_fee calculates the total price for a group of VIP and adult guests with kids.
    Kids get a flat discount on the standard fee.
    VIP guest fees are calculated by calling vip_fee.
    */
    int standard_fee{30};
    int kids_discount{15};

    int kids_total_fee = kids * (standard_fee - kids_discount);
    int vips_total_fee = vips * vip_fee(standard_fee);
    int adult_total_fee = adults * standard_fee;

    return vips_total_fee + adult_total_fee + kids_total_fee;
}

কিছু অন্য ভাষার মতো C++-এ ফাংশন শেষ স্টেটমেন্টের মান রিটার্ন করে না। কোড কম্পাইল হওয়ার জন্য return কিওয়ার্ডটি লাগে।

হোয়াইটস্পেস

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

// Formatting makes it easier to find bugs

int eggs_yolks =  3;
int      yeast = 15;

int flour=500;int sugar=200;// compact, but difficult to read

নির্দেশনা

লুসিয়ানের বান্ধবী এখন বাড়ির পথে, আর তিনি তখনও তাদের বিবাহবার্ষিকীর ডিনার রান্না করেননি!

এই অনুশীলনীতে আপনি কিছু কোড লিখবেন, যা দিয়ে লুসিয়ান তাঁর প্রিয় রান্নার বই থেকে একটি চমৎকার লাসানিয়া রান্না করতে পারবেন।

আপনার সামনে চারটি কাজ, যেগুলোর সবই লাসানিয়া রান্না করতে লাগা সময়ের সাথে সম্পর্কিত।

1. মিনিটে প্রত্যাশিত ওভেন সময় ডিফাইন করুন

ovenTime() ফাংশনটি ডিফাইন করুন, যেটি কোনো আর্গুমেন্ট নেয় না এবং লাসানিয়াকে কত মিনিট ওভেনে থাকতে হবে তা রিটার্ন করে। রান্নার বই অনুযায়ী, প্রত্যাশিত ওভেন সময় ৪০ মিনিট:

ovenTime();
// => 40

2. ওভেনে বাকি থাকা সময় মিনিটে হিসাব করুন

remainingOvenTime(int actualMinutesInOven) ফাংশনটি ডিফাইন করুন, যেটি লাসানিয়া ওভেনে যত মিনিট আছে তা আর্গুমেন্ট হিসেবে নেয় এবং আগের কাজের প্রত্যাশিত ওভেন সময়ের ভিত্তিতে লাসানিয়াকে আরও কত মিনিট ওভেনে থাকতে হবে তা রিটার্ন করে।

remainingOvenTime(30);
// => 10

3. প্রস্তুতির সময় মিনিটে হিসাব করুন

preparationTime(int numberOfLayers) ফাংশনটি ডিফাইন করুন, যেটি লাসানিয়ায় আপনি যত স্তর যোগ করেছেন তার সংখ্যা আর্গুমেন্ট হিসেবে নেয় এবং লাসানিয়া প্রস্তুত করতে আপনার কত মিনিট লেগেছে তা রিটার্ন করে, ধরে নিয়ে যে প্রতিটি স্তর প্রস্তুত করতে আপনার ২ মিনিট লাগে।

preparationTime(2);
// => 4

4. অতিবাহিত সময় মিনিটে হিসাব করুন

elapsedTime(int numberOfLayers, int actualMinutesInOven) ফাংশনটি ডিফাইন করুন, যেটি দুটি আর্গুমেন্ট নেয়: প্রথম আর্গুমেন্টটি হলো লাসানিয়ায় আপনি যত স্তর যোগ করেছেন তার সংখ্যা, আর দ্বিতীয় আর্গুমেন্টটি হলো লাসানিয়া কত মিনিট ওভেনে আছে তার সংখ্যা। ফাংশনটি রিটার্ন করবে লাসানিয়া রান্না করতে আপনি কত মিনিট কাজ করেছেন, যা হলো প্রস্তুতির সময় (মিনিটে) এবং এই মুহূর্তে লাসানিয়া ওভেনে যত মিনিট কাটিয়েছে তার যোগফল।

elapsedTime(3, 20);
// => 26
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
C++ Exercism

লাসাগনা শুরু করতে প্রস্তুত?

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