সূচিপত্র

ধর তোমাকে বলা হল তোমাকে পর পর দশটা ইন্টিজার দেওয়া হবে। তোমাকে সব ইন্টিজার দেওয়া শেষে এদের যোগফলটা বলতে হবে। সমস্যাটা খুবই সহজ, একটু চিন্তা করলেই তুমি এটার সমাধান করে ফেলতে পারবে। তোমার কোডটা হবে হয়তো এরকমঃ

#include <iostream>
using namespace std;

int main() {
    int n,i,sum = 0;
    for (i = 0; i<10; i++) {
        cin >> n;
        sum = sum +n;
    }
    cout << sum;
}

কিন্তু এত সহজ সমস্যা তো আর দিবে না! ধর এবার তোমাকে বলা হল তোমাকে সংখ্যাগুলার যোগফল লেখার সংখ্যাগুলোও প্রিন্ট করতে হবে, যেমনঃ

Input: 1 2 3 4 5 6 7 8 9 10

তোমার আউটপুট হতে হবে নিচের মতঃ

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

এখন হল সমস্যার শুরু! আমরা এখন পর্যন্ত যা যা শিখেছি, তার মাধ্যমে এটা সমাধান করা বেশ ঝামেলার। কেননা এখন আমাদেরকে সংখ্যাগুলো সংরক্ষন করে রাখতে হবে। আর প্রতিটা সংখ্যা রাখার জন্য লাগবে একটা করে ভ্যারিয়েবল। আর আমরা যদি না জানি, সে কয়টা ইন্টিজার দিবে (ধর সে তোমাকে প্রথমে বলবে সে n সংখ্যক ইন্টিজার দিবে। এরপর সে n টা ইন্টিজার দিবে।), তাহলে তো কথায় নেই!

এ সমস্যা সমাধানে আমাদের সাহায্য করবে অ্যারে! অ্যারেকে আমরা চিন্তা করতে পারি অনেকগুলা ভ্যারিয়েবলের একটা লিস্ট হিসেবে!

একটি অ্যারে ব্যবহারের জন্য প্রথমেই আমাদেরকে শিখতে হবে অ্যারে ডিক্লারেশন। অ্যারে ডিক্লেয়ার করা খুবই সহজ। এজন্য আমাদের লিখতে হবেঃ

element_type array_name[number_of_elements];

যেমন, ১০০ ধারণ ক্ষমতার ইন্টিজার অ্যারে ডিক্লেয়ার করার জন্য আমরা লিখবোঃ int ara[100];

একইভাবেঃ double ara2[100];

কিংবা, char ara3[200];

সি++ এর একটা সুবিধা হল, এখানে তুমি ভ্যারিয়েবল সাইজড অ্যারে ডিক্লেয়ার করতে পার। অর্থাৎ, দুইটা থার্ড ব্যাকেটের মধ্যে অ্যারের যে উপাদান সংখ্যা বলে দিতে হচ্ছে, সেটা কনস্ট্যান্ট না হয়ে ভ্যারিয়েবল হলেও সমস্যা নেই।

যেমন আমরা নিচের কোডটা লিখতে পারিঃ

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int ara[n];
}

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

এখন আমরা অ্যারে ডিক্লারেশন শিখে গেছি। এবার আমরা দেখবো কিভাবে অ্যারেতে মান ইনপুট নিতে হয়। এজন্য আমাদের লাগবে ইন্ডেক্সের ধারণা। এটা অনেকটা রোল নাম্বারের মত। ধর, তোমাকে তোমার ক্লাসের স্টুডেন্টের তালিকা দিতে বলা হল। তাহলে তালিকাটা হবে অনেকটা এরকমঃ

  1. অমুক

  2. তমুক

  3. ওমুক

  4. সমুক

  5. কমুক

এখানে, অমুকের ইন্ডেক্স ১, কমুকের ইন্ডেক্স ৫। অ্যারের ক্ষেত্রে ব্যাপারটা অনেকটা এমন। তবে পার্থক্য হল, সি++-এ অ্যারের ইন্ডেক্স শুরু হয় ০ থেকে। তাই প্রথম উপাদানের ইন্ডেক্স হবে ০, দ্বিতীয়টির ১, এভাবে চলতে চলতে ১০০ নাম্বার উপাদানের ইন্ডেক্স হবে ৯৯, n তম উপাদানের ইন্ডেক্স n-1!

তাহলে, আমরা দেখলাম n সংখ্যক উপাদানের একটা অ্যারেতে ইন্ডেক্স ০ থেকে (n-1)-এ গিয়ে শেষ হয়। তাহলে আমরা  ০ থেকে (n-1) পর্যন্ত একটা লুপ চালিয়ে দিয়ে খুব সহজেই প্রত্যেকটা ইন্ডেক্সে একটা করে উপাদান রেখে দিতে পারি! তাহলে আর কথা না বাড়িয়ে কোডটা লিখে ফেলা যাকঃ

#include <iostream>
using namespace std;

int main() {
    int n,i;
    cin >> n; // user array-r upadan shonkha bolbe
    int ara[n];
    // niche ekta ekta kore shongkha dibe
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }
}

খেয়াল কর, i-এর মান যেমন ০ থেকে ১ করে বাড়তে থাকবে, ঠিক তখন ইন্ডেক্সও শুরু থেকে ১ করে বাড়তে থাকবে। কিন্তু আমরা এই কথা বিশ্বাস করে বসে থাকবো না! প্রিন্ট করে দেখবো আসলেই কোডটা ঠিক আছে কি না।

এজন্য এখন আমরা ঠিক একই রকমের আরেকটা লুপে অ্যারের ০ থেকে n-1 পর্যন্ত উপাদান গুলা প্রিন্ট করে দিব!

#include <iostream>
using namespace std;

int main() {
    int n,i;
    cin >> n; // user array-r upadan shonkha bolbe
    int ara[n];
    // niche ekta ekta kore shongkha dibe
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }
    cout << "Here are the numbers you entered:\n";
    for (i=0;i<n;i++) {
        cout << ara[i] << endl;
    }
}

এই কোডটা রান করে যদি নিচের ইনপুটটা দাও

10

1 2 3 4 5 6 7 8 9 10

তাহলে আউটপুটটা হবে নিচের মতঃ

Snap 2015-04-27 at 21.37.35

অর্থাৎ আমাদের ইনপুটটা ঠিক ভাবেই নেওয়া হচ্ছে!

যেহেতু আমরা অ্যারে নিয়ে কাজ করা মোটামুটি শিখে ফেলেছি, তাহলে এবার আমাদের সমস্যাটা অ্যারের মাধ্যমে করা যাক। আমাদেরকে যা যা করতে হবেঃ

(১) আমাদেরকে প্রথমেই ইউজার থেকে জানতে হবে, তিনি কয়টা ইন্টিজার দিতে চান।

(২) এরপর আমাদেরকে অ্যারেটা ডিক্লেয়ার করে ইনপুট নিতে হবে।

(৩) এরপর আবার সব উপাদান যোগ করতে হবে।

(৪) এরপর প্রিন্ট করার সময় প্রথমেই উপাদানগুলা একটার পর একটা প্রিন্ট করতে হবে

(৫) শুধু উপাদান প্রিন্ট করলেই হবে না, এদের মাঝে জায়গা মত “+” চিহ্নও দিতে হবে। এখানে শর্ত ঠিক করে নেওয়াটা একটু চিন্তা করলেই হয়ে যাবে।

(৬) সবশেষে একটা “=” চিহ্ন দিয়ে যোগফলটা প্রিন্ট করতে হবে।

তাহলে কাজ শুরু করে নেওয়া যাক। ইনপুট নেওয়া পর্যন্ত কাজটা আমরা ইতোমধ্যেই করে ফেলেছি।

#include <iostream>
using namespace std;
int main() {
    int n,i;
    cout << "How many integers do you want to add?\n";
    cin >> n;
    int ara[n];
    cout << "Please enter your integers:\n"
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }
    return 0;
}

এবার আমাদের আরেকটা লুপ চালিয়ে উপাদানগুলো যোগ করতে হবে। তার জন্য আমাদের একটা ভ্যারিয়েবল ডিক্লেয়ার করতে হবে।

/* ভ্যারিয়েবলের মান হিসেবে ০ ইনিশিয়ালাইজ করতে ভুলবে না। 😉 কাজ শুরু করার সময় আমাদের যোগফল তো শূন্যই থাকে!  কিন্তু এই সামান্য ভুলে যাওয়া ভুলই দেখা যায় অনেক প্রোগ্রামারের ঘুম হারাম করে। :p */

#include <iostream>
using namespace std;
int main() {
    int n,i;
    cout << "How many integers do you want to add?\n";
    cin >> n;
    int ara[n];
    cout << "Please enter your integers:\n"
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }
    
    int sum = 0; // initialization 
    // niche jog korbo shonkha gula
    for (i=0;i<n;i++) {
        sum = sum + ara[i];
    }
    
    return 0;
}

এবার আমাদের কাজ প্রায় শেষের দিকে। আমাদের এখন উপাদানগুলো প্রিন্ট করতে হবে। কাজটা সহজ। আরেকটা লুপ!

#include <iostream>
using namespace std;
int main() {
    int n,i;
    cout << "How many integers do you want to add?\n";
    cin >> n;
    int ara[n];
    cout << "Please enter your integers:\n";
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }

    int sum = 0; // initialization
    // niche jog korbo shonkha gula
    for (i=0;i<n;i++) {
        sum = sum + ara[i];
    }

    // upadan gula pashapashi likhbo
    for (i=0;i<n;i++) {
        cout << ara[i];
        cout << " ";
    }

    return 0;
}

এখন 5 (number of elements) 1 2 3 4 5 -এর জন্য এই কোডের আউটপুট হবে নিচের মতঃ

Snap 2015-04-28 at 18.10.26

উপস! যোগ চিহ্নগুলো দেওয়া হয়নি। এখন একটু বুঝে চিহ্নটা দিতে হবে। এখানে দেখ, শেষ সংখ্যাটা ছাড়া বাকি সব গুলা সংখ্যার সাথেই একটা যোগ চিহ্ন আছে। তাহলে আমাদের শর্ত হবে এমন যেন শেষ সংখ্যা ছাড়া আগের সবগুলোর সাথে একটা যোগ চিহ্ন প্রিন্ট হয়।

#include <iostream>
using namespace std;
int main() {
    int n,i;
    cout << "How many integers do you want to add?\n";
    cin >> n;
    int ara[n];
    cout << "Please enter your integers:\n";
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }

    int sum = 0; // initialization
    // niche jog korbo shonkha gula
    for (i=0;i<n;i++) {
        sum = sum + ara[i];
    }

    // upadan gula pashapashi likhbo
    for (i=0;i<n;i++) {
        cout << ara[i];
        cout << " ";
        if (i<(n-1)) cout << "+ ";
    }

    return 0;
}

কোডটা রান করে দেখ। এখন সবশেষে আমাদের কাজ হবে একটা সমান চিহ্ন দিয়ে এরপর যোগফলটা প্রিন্ট করে দেওয়া। তো সেটাও করে ফেলা যাক!

#include <iostream>
using namespace std;
int main() {
    int n,i;
    cout << "How many integers do you want to add?\n";
    cin >> n;
    int ara[n];
    cout << "Please enter your integers:\n";
    for (i=0;i<n;i++) {
        cin >> ara[i];
    }

    int sum = 0; // initialization
    // niche jog korbo shonkha gula
    for (i=0;i<n;i++) {
        sum = sum + ara[i];
    }

    // upadan gula pashapashi likhbo
    for (i=0;i<n;i++) {
        cout << ara[i];
        cout << " ";
        if (i<(n-1)) cout << "+ ";
    }
    cout << "= ";
    cout << sum <<endl;
    return 0;
}

এখন আমরা আমাদের কাঙ্ক্ষিত আউটপুট পেয়ে যাব!

Snap 2015-04-28 at 18.15.23

তবে আমরা একটা বোকামি করেছি। শুধু শুধুই যোগ করার সময় একটা অতিরিক্ত লুপ চালিয়েছি। এই কাজটা আমরা স্ক্যান বা প্রিন্ট করার সময়ই করে ফেলতে পারতাম।

#include <iostream>
using namespace std;
int main() {
    int n,i;
    int sum = 0;
    cout << "How many integers do you want to add?\n";
    cin >> n;
    int ara[n];
    cout << "Please enter your integers:\n";
    for (i=0;i<n;i++) {
        cin >> ara[i];
        sum = sum + ara[i];
    }
    for (i=0;i<n;i++) {
        cout << ara[i];
        cout << " ";
        if (i<(n-1)) cout << "+ ";
    }
    cout << "= ";
    cout << sum <<endl;
    return 0;
}

কোডটা রান করে দেখ, একই কাজই করবে!

কিন্তু, তুমি যদি এত সহজেই পার পেয়ে যাও, তাহলে তো যে প্রবলেম বানায়, তার মন ভরবে না! সে এখন তোমাকে বললো, সে যেভাবে ইনপুট দিবে, আউটপুট দেওয়ার সময় তার উল্টা ক্রমে সাজাতে হবে! অর্থাৎ,

Input: 1 2 3 4 5 6 7 8 9 10

এর জন্য তোমার আউটপুট হতে হবে নিচের মতঃ

10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 55

কাজটা খুব একটা কঠিন না, শুধু লুপটা n-1 থেকে শুরু করে ১ করে কমিয়ে ০ তে গিয়ে শেষ করতে হবে।

এটা তোমার জন্যই রেখে দিলাম। এছাড়াও তোমার কাজ হবে এই কোডগুলো cstdio হেডার ফাইল ইউজ করেও করে ফেলা।

আজকের মত এখানেই শেষ। আগামী পর্বে আমরা অ্যারে দিয়ে আরও বিভিন্ন কাজ করবো, সাথে থাকবে আরও অনেক হোমওয়ার্ক। 😉 ততদিন পর্যন্ত বিদায়! 🙂

Muntasir Wahed

Muntasir Wahed

System Administrator at স্বশিক্ষা.com
Jack of all trades, master of none.
Muntasir Wahed
Muntasir Wahed