সূচিপত্র

এ পর্যন্ত আমরা 1D অ্যারে সম্পর্কে জেনেছি, এবং এধরণের অ্যারে নিয়ে কিছু কাজ করেছি। 2D অ্যারে নিয়ে জানার আগে আমাদের 1D অ্যারে নিয়ে আরও ভাল মত বুঝতে হবে। আর এজন্য এই পর্বে আমরা এধরণের অ্যারে নিয়ে আরও কিছু কাজ করবো।

এই পর্বটা হবে একটু ভিন্ন ধরণের। আমি প্রবলেম দিব, এবং সেগুলো কীভাবে সলভ করতে হবে, সেটা সম্পর্কে হিন্টস দিব। কোড করতে হবে তোমাদেরকে। সমস্যা হলে আমি যতদূর পারি সাহায্য করবো। তো কথা না বাড়িয়ে শুরু করে দেওয়া যাক।

(১) তোমাকে ১০০ টা সংখ্যা দেওয়া হবে। তোমাকে বলতে হবে এ সংখ্যাগুলোর মধ্যে কয়টা জোড়।

প্রথমেই তোমাকে একটা ১০০ উপাদানের অ্যারে ডিক্লেয়ার করতে হবে। এরপর লুপ চালিয়ে ইনপুট নিতে হবে। নতুন একটা ভ্যারিয়েবল (নাম ধরা যাক count) নিয়ে তার মান ইনিশিয়ালাইজ করতে হবে ০। এরপর আরেকবার লুপ চালিয়ে সংখ্যা জোড় নাকি সেটা দেখতে হবে। জোড় হলে count-এর মান ১ করে বাড়াতে হবে।

খুবই সহজ কাজ। তবে দুইবার লুপ না চালিয়ে একবার লুপ চালিয়েই কাজটা করে ফেলা যায়! এমনকি অ্যারে না নিয়েও কাজটা করা যায়। কিন্তু নিবা, কারণ তোমাকে অ্যারে নিয়ে শিখতে হবে! যেহেতু প্রথম সমস্যা, তাই এটার কোডটা আমি দেখিয়ে দিচ্ছি।

#include <stdio.h>
int main() {
    int ara[100], count = 0, i;
    for (i=0; i<100; i++) {
        scanf("%d", &ara[i];
        if (ara[i]%2 == 0) count++;
    }
    printf("%d\n", count);
    return 0;
}

(২) প্রথমে তোমাকে একটি সংখ্যা (n)  দেওয়া হবে। এরপর তোমাকে n সংখ্যক ইন্টিজার দেওয়া হবে। তোমাকে এদের মধ্যে সবচেয়ে বড় আর সবচেয়ে ছোট ইন্টিজারটা প্রিন্ট করতে হবে। তোমার সুবিধার জন্য ধরে নিতে পার সংখ্যাগুলা অবশ্যই -100000 থেকে বড়, 100000 থেকে ছোট হবে।

স্যাম্পল ইনপুটঃ

5

1 2 3 4 5

স্যাম্পল আউটপুটঃ

Largest integer: 5

Smallest integer: 1

  1.  এজন্য তোমাকে প্রথমেই সংখ্যাগুলো ইনপুট নিয়ে একটা অ্যারেতে রাখতে হবে।
  2. এরপর তুমি দুইটা ভ্যারিয়েবল ডিক্লেয়ার করতে পার, max আর min.
  3. এবার তুমি একটা লুপ চালাবে 0 থেকে n-1 পর্যন্ত। প্রতি লুপে তুমি দুইটা জিনিস চেক করবে –
  • i বিশিষ্ট ইন্ডেক্সে যে ইন্টিজারটা আছে, সেটা max থেকে বড় কিনা। যদি বড় হয়, তাহলে max-এর মান সেট করে দিবা ara[i]
  •  i বিশিষ্ট ইন্ডেক্সে যে ইন্টিজারটা আছে, সেটা min থেকে ছোট কিনা। যদি ছোট হয়, তাহলে min-এর মান সেট করে দিবা ara[i]

এখন সমস্যা হল, max আর min-এর ইনিশিয়ালাইজেশনটা। সেটা ইতোমধ্যেই বুঝতে পারার কথা। তোমাকে বলে দেওয়া হয়েছে ইন্টিজারগুলোর রেঞ্জ -100000 থেকে 100000 পর্যন্ত। তাহলে সবচেয়ে ছোট সংখ্যাটা সর্বোচ্চ 100000 হতে পারে। আবার সবচেয়ে বড় সংখ্যার সর্বনিম্ন মান হতে পারে -100000.

/* উপরের কথাটা বুঝতে না পারলে নিচের উদাহারণটা দেখ। ধর তোমাকে পাঁচটা সংখ্যা দেওয়া হল -১০০, -২০০, ৪০০, ২০০, ৬০০০।

এখন তুমি যদি লুপটা চালাও, তাহলে প্রথমেই সে চেক করবে max (যার মান ছিল -১০০০০০) থেকে -১০০ বড় কিনা। দেখতেই পাচ্ছ বড়। তাহলে max-এর মান সেট করে দিবা -১০০। এরপরের লুপে গিয়ে চেক হল max(যার মান ছিল -১০০)-এর চেয়ে -২০০ বড় কি না। যেহেতু বড় না, সেহেতু এবার কিছু না করেই পরের লুপে যাবে। তারপর আবার চেক হতে হতে শেষ পর্যন্ত max-এর মান দাঁড়াবে ৬০০০। এভাবে তোমরা min-এর ব্যাপারটাও ভিজুয়ালাইজ করার চেষ্টা কর। */

(৩) একটা ক্যারেক্টার অ্যারেতে  n সংখ্যক অ্যালফাবেট নিয়ে সেখানে কয়টা ভাউয়েল আছে সেটা প্রিন্ট করতে হবে।

স্যাম্পল ইনপুটঃ

7

a e i o u j s

স্যাম্পল আউটপুটঃ

There are 5 vowels.

এটা সলভ করা খুবই ইজি। তাই কিছু বললাম না। নিজেরাই করে ফেল!

(৪) তোমাকে n সংখ্যক সংখ্যা দেওয়া হবে। এরপর তোমাকে সেখান থেকে একটা সংখ্যা খুজে বের করতে হবে, এবং সেটা কয় নাম্বার সংখ্যা সেটা বলে দিতে হবে, যদি পাওয়া না যায়, তবে বলতে হবে যে সংখ্যাটা নাই ইনপুটের মধ্যে।

স্যাম্পল ইনপুটঃ

10

1 2 3 4 5 6 7 8 9 10

11

স্যাম্পল আউটপুটঃ

11 was not found!

স্যাম্পল  ইনপুট ২ঃ

10

1 2 3 4 5 6 7 8 9 10

2

স্যাম্পল আউটপুটঃ

2 is the second number!

(৫) একটা অ্যারেতে n সংখ্যক ইন্টিজার নিয়ে আরেকটি অ্যারেতে সেগুলোকে উল্টোভাবে স্টোর করে এরপর সেকেন্ড অ্যারেটার উপাদানগুলো প্রিন্ট করতে হবে।

(৬) তোমাকে ১ থেকে ১০০ পর্যন্ত n সংখ্যক সংখ্যা দেওয়া হবে। তোমাকে নিচের মত করে প্রিন্ট করতে হবে কোন সংখ্যা কয়বার আছে।

There are %d 1 in this array.

There are %d 2 in this array.

… … …

… … …

… … …

There are %d 100 in this array.

আগের একটা প্রবলেমে আমরা count নামের একটা ভ্যারিয়েবল নিয়ে হিসেব রেখেছিলাম না? এখন আমাদের একই ভাবে ১০০ ধরণের সংখ্যার জন্য হিসাব রাখতে হবে। তাহলে আমরা হিসেব রাখার জন্য নতুন একটা অ্যারে ডিক্লেয়ার করে দিব। বাকি কাজটা সহজ, নিজেই করে ফেল। 🙂

(৭) এই প্রবলেমটা আজকের প্রবলেমগুলোর মধ্যে সবচেয়ে কঠিন। তোমাকে n সংখ্যক ইন্টিজার দেওয়া হবে ধনাত্মক এবং ঋণাত্মক মিলিয়ে। তোমাকে বলতে হবে ইনডেক্সের কোন রেঞ্জের মধ্যে উপাদানগুলোর যোগফল সর্বোচ্চ।

স্যাম্পল ইনপুটঃ

10

1 2 3 -7 8 -1 7 – 7 9 -29

স্যাম্পল আউটপুটঃ

The maximum sum is 16, from index 4 to 8.

// খেয়াল কর, আমি অ্যারের ইনডেক্স বলছি। আর অ্যারেতে n তম সংখ্যার ইনডেক্স হয় n-1!

এটা নিয়ে চিন্তা করতে থাক। পারলে ভাল, না পারলেও সমস্যা নাই! কমেন্টে জানাও। উত্তর পেয়ে যাবা! তবে তার আগে অবশ্যই অন্তত আধা ঘন্টা নিজে নিজে চেষ্টা করবা! অন্য প্রবলেমগুলোর ক্ষেত্রেও একই কথা প্রযোজ্য। 🙂

আজকের মত এখানেই শেষ। আগামী পর্বে আমরা মাল্টিডাইমেনশনাল অ্যারে নিয়ে শিখবো। আর আজকে যে প্রবলেমগুলো দিলাম সব আমার ১-১ এর অ্যাসাইনমেন্ট থেকে। এগুলো দিয়েছিলেন হাসনাইন হেইকেল জামি স্যার। স্যারকে ধন্যবাদ! 😀

হ্যাপি কোডিং! 😀

Muntasir Wahed

Muntasir Wahed

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