Friday, 3 November 2017

একটি সংখ্যাকে উলটো করে প্রিন্ট করার প্রোগ্রাম

মনেকরি, 2017  সংখ্যাটিকে  উলটো করে প্রিন্ট করতে হবে। এখন এই কাজটি কিভাবে করা যায়?
এই কঠিন কাজটি সহজ করার জন্য আমাদের পরিচিত একটা অপারেটর আছে। মডুলাস (%) অপারেটর।

এবার দেখি কিভাবে কাজটি করবোঃ
কোন সংখ্যাকে ১০ দিয়ে মড করলে তার সর্বশেষ অংকটি পাওয়া যায়।
প্রথমে 2017  কে 10 দিয়ে মড করলামঃ 2017 % 10 = 7
এই 7 কে প্রিন্ট করে দিলাম।

তারপর 2017 কে 10 দিয়ে ভাগ করলামঃ 2017/10 = 201
আবার 201 কে 10 দিয়ে মড করলামঃ 201 % 10 =  1
এই 1 কে প্রিন্ট করে দিলাম।

তারপর 201 কে 10 দিয়ে ভাগ করলামঃ 201/10 = 20
আবার 20 কে 10 দিয়ে মড করলামঃ 20 % 10 =  0
এই 0 কে প্রিন্ট করে দিলাম।

তারপর 20 কে 10 দিয়ে ভাগ করলামঃ 20/10 = 2
আবার 2 কে 10 দিয়ে মড করলামঃ 2 % 10 =  2
এই 2 কে প্রিন্ট করে দিলাম।


যদি আমরা কোন নিউ লাইন অথবা স্পেস ছাড়া প্রিন্ট করি তাহলেই আউটপুট টা পেয়ে যাবো।


প্রোগ্রামঃ

#include<stdio.h>
int main()
{
    int num = 2017,mod;

    mod = num%10;
    printf("%d",mod);

    num = num/10;
    mod = num%10;
    printf("%d",mod);

    num = num/10;
    mod = num%10;
    printf("%d",mod);

    num = num/10;
    mod = num%10;
    printf("%d",mod);

    return 0;
}



তোমার জন্য কাজঃ  উপরের প্রোগ্রামটি লুপ ব্যবহার করে করো।

তুমি এখনই নিচের অংশ না পড়ে লুপ দিয়ে প্রোগ্রামটা করার চেস্টা করো, যদি কমপক্ষে পাঁচ বার চেষ্টা করার পর না পারো, তাহলে নিচের অংশ পড়। 


লক্ষ্য করে দেখো আমরা num কে 10 দিয়ে ভাগ করার কাজ টি ঠিক ততক্ষণ পর্যন্ত করে গেছি যতক্ষণ না num এর মান 0 না হয়েছে।

প্রোগ্রামঃ

#include<stdio.h>
int main()
{
    int num = 2017,mod;


    while(num>0)
    {
        mod = num%10;
        printf("%d",mod);
        num = num/10;
    }

    return 0;

}


এবার তোমাকে বলা হলো  2017 কে উলটো করে সেটা একটা ভেরিয়েবলে রাখতে হবে। এখন তো আর একটা একটা করে প্রিন্ট করে দিলে খেল খতম হবে না। আমাদের যা করতে হবে , একটা ই ভেরিয়েবল এ  7102 রাখতে হবে। তারপর প্রিন্ট করতে বলা হলে প্রিন্ট করবো যোগ করতে বলা হলে যোগ করবো, যা করতে বলা হয় প্রোগ্রামে তা করবো। কিন্তু আগে তো উলটো করে একটা ভেরিয়েবলে রাখতে হবে। 

এবার চলো দেখে নেই কিভাবে কাজটি করা যায়। 
আবার 2017 এ চলে যাই, 
আমরা 2017 কে 10 দিয়ে মড করলাম, 2017 % 10 = 7
এই 7 কে আমরা rev নামক ভেরিয়েবলে রাখলাম। 
rev = 7.

তারপর, 2017 কে 10 দিয়ে ভাগ করলাম। 
2017/10  = 201

তারপর আগের মতো 201 কে 10 দিয়ে মড করলাম।
 201%10 = 1

এতক্ষণ যা করলাম সব আগের মতো , এখন ব্যপারটা বোঝতে চেষ্টা করো। 
আমরা rev এ 7 কে রেখেছিলাম। 
এবার rev কে ১০ দিয়ে গুণ করে তার সাথে 1 যোগ করে দিবো।

মানে দাঁড়ালোঃ  (rev*10) + 1 = (7*10)+1 = 70+1 =71.

এরপর আবার আগের প্রসেসে ফিরে যাই। 

তারপর, 201 কে 10 দিয়ে ভাগ করলাম। 
201/10  = 20

তারপর  20 কে 10 দিয়ে মড করলাম।
 20%10 = 0
এবার rev কে ১০ দিয়ে গুণ করে তার সাথে 0 যোগ করে দিবো।

মানে দাঁড়ালোঃ  (rev*10) + 0 = (71*10)+0 = 710+0 =710.

তারপর, 20 কে 10 দিয়ে ভাগ করলাম। 
20/10  = 2

তারপর  2 কে 10 দিয়ে মড করলাম।
 2%10 = 2
এবার rev কে ১০ দিয়ে গুণ করে তার সাথে 2 যোগ করে দিবো।

মানে দাঁড়ালোঃ  (rev*10) + 2 = (710*10)+2 = 7100+2 =7102.

ব্যাস আমরা পেয়ে গেলাম আমাদের কাংখিত ফলাফল। 


প্রোগ্রামটা নিজে লেখার চেষ্টা করো। 

Wednesday, 1 November 2017

লুপ দিয়ে অংক গণনা

আগের পোস্টে আমরা log ব্যবহার করে একটি সংখ্যায় কতটি অংক আছে তা নির্ণয়ের প্রোগ্রাম দেখেছি।

এবার আমরা দেখবো লুপ দিয়ে কিভাবে কাজটি করা যায়।


#include<stdio.h>
int main()
{
    int num,i,count=0;
    printf("Enter a Number:\n");
    scanf("%d",&num);
    while(num>0)
    {
        num = num/10;
        count++;
    }
    printf("Total digit = %d\n",count);

    return 0;
}


ব্যাখ্যাঃ 
একটা সংখ্যাকে ১০ দিয়ে ভাগ করলে এর সর্বশেষ অংকটি মুছে যায়। 

মনেকরি আমাদের কাছে একটি সংখ্যা আছে ঃ 123456

এবার আমাদের প্রমাণ করতে হবে এখানে ছয়টি অংক আছে। 


ধাপ - ১ঃ  123456 / 10 = 12345 
               
               ১২৩৪৫৬ কে ১০ দিয়ে ভাগকরলে ভাগফল হবে ১২৩৪৫। তারমানে, আমরা সর্বশেষ অংকটি  মুছে দিয়েছি। 
         
     count : 1.
     
 ধাপ - ২ঃ  12345 / 10 = 1234 
               
               ১২৩৪৫ কে ১০ দিয়ে ভাগকরলে ভাগফল হবে ১২৩৪। তারমানে, আমরা সর্বশেষ অংকটি  মুছে দিয়েছি। 
         
     count : 2.

ধাপ - ৩ঃ  1234 / 10 = 123 
               
               ১২৩৪ কে ১০ দিয়ে ভাগকরলে ভাগফল হবে ১২৩। তারমানে, আমরা সর্বশেষ  অংকটি  মুছে দিয়েছি। 
         
     count : 3.

প্রতিবার একটি সংখ্যা মুছার পর যদি আমরা count এর মান 1 করে বাড়াই , তাহলে আমরা উত্তর পেয়ে যাবো।


আশাকরি তোমরা বোঝতে পেরেছো। বাকী ধাপগুলো নিজেই করে ফেলো। 

ব্রেকিং কন্ডিশনঃ
আমরা ব্রেকিং কন্ডিশন হিসেবে ব্যবহার করেছি   num>0   তারমানে যতক্ষণ পর্যন্ত আমাদের সংখ্যাটা ০ এর চেয়ে বড় থাকবে ততক্ষণ পর্যন্ত লুপ চলবে। তাহলে আমাদের প্রোগ্রামে এমন কিছু করতে হবে যাতে num এর মান শুণ্য বা তার থেকে ছোট হয়। এই কাজটা আমরা করেছি num কে প্রতিবার 10 দিয়ে ভাগ করে। 






তোমাদের জন্য একটি কাজঃ   ইউজারের কাছ থেকে একটি সংখ্যা ইনপুট নিবে এবং সবগুলা অংকের যোগফল নির্ণয়ের প্রোগ্রাম লিখবে। 
Hints : Modulus operator ( % ) ব্যবহার করে সর্বশেষ সংখ্যা বের করো । :p

Thursday, 19 October 2017

একটি সংখ্যার মধ্যে কতোগুলা অংক আছে তা নির্ণয় করার প্রোগ্রাম লিখো।

1234 - এখানে কয়টি সংখ্যা আছে? মোট চারটি।
এবার আমরা প্রোগ্রাম দিয়ে কিভাবে তা বের করবো।
অনেকগুলা পদ্ধতি আছে।

 log10(1000) = 3
লগারিদম ব্যবহার করে আমরা কাজটা করতে পারি। যারা লগারিদম নিয়ে জানতে চাও একটু কষ্ট করে গুগল করে দেখে নাও।
একে log(1000) এভাবেও লেখা হয়। কারণ এই log কে বলা হয় কমন লগারিদম এবং শুধু log মানেই ধরে নেওয়া হয় এটি 10 based.

আমাদের কে 1000 সংখ্যাটা পেতে হলে ১০ কে কয় বার গুণ করতে হবে?
10*10*10=1000
তাহলে আমাদের ৩ বার গুণ করা লাগছে।
উপরের log ফাংশনটাও কিন্তু 3 আউটপুট দিয়েছে।  তারমানে একটি সংখ্যা পেতে হলে 10 কে কতবার গুণ করতে হবে log ফাংশন সেই আউটপুট দেয়।
এবার যদি 1234 পেতে চাই তাহলে ১০ কে কতবার গুণ করা লাগবে?
চলো দেখি,
10*10*10*10=10000

তারমানে চারবার গুণ করলে হচ্ছে ১০,০০০ যা ১২৩৪ থেকে অনেক বড়। আর ৩ বার গুণ করলে হচ্ছে ১০০০। যা ১২৩৪ থেকে ছোট।

তোমাদের হাতের কাছে ক্যাকুলেটর থাকলে log(1234) করে দেখো। রেসাল্ট আসবে 3.0913 এরকম কিছু।
আমরা যদি দশমিকে পরের অংশ বাদ দিয়ে দেই তাহলে ৩ পাচ্ছি।
তোমরা হয়তো ভাবছো  1000 অথবা 1234 এ সংখ্যা মোট চারটি আমি তিন নিয়ে এতো প্যাচাল করছি কেন? আছে আছে কারণ আছে। তবে এখনই বলছি না। এই লেখাটা সম্পূর্ণ পড়ার পর নিজেই কারণটা জানতে পারবে।
এবার তোমাদের একটি ছোট টেকনিক বলে দেই। আমাদের কাছে যতটা সংখ্যা থাকবে log ফাংশন তার থেকে উত্তর 1 কম দিবে।
ক্যালকুলেটরে  log(1) দিয়ে দেখো উত্তর আসবে 0.
log(12) দিলে উত্তর আসবে 1.
তারমানে আমাদের অঙ্ক যতটা উত্তর তার থেকে 1 কম।
আমি জানি তোমার মাথায় সমাধান এসে গেছে log ফাংশন যা রেসাল্ট দিবে তার সাথে আমরা ১ যোগ করে দিলেই খেল খতম।

 আমরা যেসব ক্যালকুলেটর ব্যবহার করে তা 10 based তাই log(num) লিখলেই আমাদের কাজ হয়ে যায় । কিন্তু প্রোগ্রামিং এর  ক্ষেত্রে  base উল্লেখ করে দিতে হবে। log10(num) এভাবে। 

তাহলে চলো প্রোগ্রামটা দেখে নেইঃ

#include <stdio.h> #include <math.h> /* log10() ব্যবহার করার জন্য এই হেডারফাইল */ int main() { int num; int count = 0; /* নাম্বার Input নেওয়ার জন্য */ printf("Enter any number: "); scanf("%d", &num); /* মোট অংক হিসাব করার জন্য log10(num) এর সাথে 1 যোগ */ count = log10(num) + 1; printf("Total digits: %d", count); return 0; }

Thursday, 12 October 2017

Swap (অদল-বদল)

Swap প্রোগ্রামিং এর একটি গুরুত্বপূর্ণ বিষয়। সহজ কথায় swap হলো দুই বা ততোধিক কিছুর মধ্যে অদল-বদল করা।

আগে একটি উদাহারণ দেই।

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

তাহলে তুমি সহজেই তৃতীয় আরেকটি বালতি দিয়ে কাজটি করতে পারো।
মনেকরো তুমি আরেকটি বালতি আনলে যার নাম দিলাম টেম্পোরারি বালতি।

  1.  তুমি প্রথমে টেম্পোরারি বালতিতে দুধ রাখলে। তাহলে,এখন তোমার দুধের বালতি খালি। 
  2. দুধের বালতিতে তুমি পানি রাখলে। এবার তোমার পানির বালতি খালি। 
  3. এখন টেম্পোরারি বালতি থেকে পানির বালতিতে দুধ রাখলে।

এবার লক্ষ্য করে দেখো তোমার দুধের বালতিতে পানি এবং পানির বালতিতে দুধ চলে গেছে। নিচের ছবিটি দেখোঃ






এবার চলো আমরা একটা প্রোগ্রাম দেখিঃ 
#include<stdio.h>
int main()
{
    int a,b,temp;

    a=10, b=20;

    temp=a;
    a = b;
    b= temp;
    
    /* Now a = 20 and b = 10 */
    printf(" a = %d\n b = %d\n",a,b);
    return 0;
}

আশা করি বোঝতে পেরেছো। না পারলে শুরু থেকে আবার চেস্টা করো। 











Wednesday, 4 October 2017

অ্যারে সার্চ (linear search)

একটি অ্যারে তে যেসব উপাদান থাকে আমরা চাইলে সেগুলা বারবার ব্যবহার করতে পারি।

আগের পর্বে আমরা অ্যারের উপাদানগুলো যোগ করার প্রোগ্রাম করেছিলাম।
মনেকরো আমরা ১ থেকে ১০ পর্যন্ত সবগুলা সংখ্যা যোগ করতে চাই, সেক্ষেত্রে আমরা একটি লুপ দিয়ে কাজটি করতে পারি। লুপ নিয়ে কিছু সহজ সমস্যা (Loop exercise)  এর প্রথম সমস্যাটা দেখতে পারো। এবার হয়তো মনে হতে পারে যে কাজটি লুপ দিয়েই এতো সহজে করা যায় সেখানে অ্যারে কেন ব্যবহার করবো?! কিন্তু মনেকরো ১-১০ পর্যন্ত যোগ করার সময় পাঁচ নম্বরে যে সংখ্যাটা যোগ করেছি তা আমরা জানতে চাই।
  1+2+3+4+5+6+7+8+9+10  তাহলে পাঁচ নম্বরে 5 আছে। এটা অ্যারে ব্যবহার করলে যেকোন সময় আউটপুট এ দেখাতে পারবে। যদি তোমার অ্যারের নাম  a হয় এবং  0 besed index হয় তাহলে a[4] প্রিন্ট করলে তা পেয়ে যাবে। আর যদি 1 besed index হয় তাহলে a[5] প্রিন্ট করলে তা পেয়ে যাবে।
তোমার মনে হতে পারে একথা তো আর প্রোগ্রাম করে বলতে হবে না। মুখেই বলে দেওয়া যায় যে, পাঁচ নম্বর ইনডেক্স এ কোন সংখ্যা ছিলো।

তাহলে আমরা আরেকটু গভীরে যাই। আমরা আসলে এমন একটি প্রোগ্রাম লিখেছি যেখানে যেকোন নম্বর দিয়ে যোগ করা যায়। 1 2 3 4  5.. এভাবে ইনপুট দিতে হবে এমন কোন কথা নেই। ইউজার চাইলে  10 300 2 5 55 .... এভাবেও ইনপুট দিতে পারে। অ্যারের যোগ [Find the sum of all elements] পোস্টটা আবার দেখতে পারো।  এখন যদি আমরা জানতে চাই পাঁচ নম্বরে কোন সংখ্যা ইনপুট দেওয়া হয়েছিল ? অ্যারে দিয়ে করলে তা খুব সহজেই বলে দিতে পারবো।

এখন হয়তো তোমার ইচ্ছা হলো অ্যারের প্রথম উপাদান আর শেষ উপাদান যোগ করে তার মান sum নামক ভেরিয়েবলে রাখবে! তো ধরে নিলাম তুমি ৫ টি উপাদানের অ্যারে নিয়েছো। যেটি শুরু হয়েছে a[0] থেকে এবং শেষ হয়েছে a[4] এ । তাহলে sum = a[0]+a[4]; এই লাইনটা লিখলেই হবে।

আশা করি অ্যারে নিয়ে তোমাদের ধারণা অনেক পরিষ্কার হয়েছে ।


এবার আমাদের আজকের মূল বিষয়ে ফিরে যাই,
আমরা  অ্যারে তে অনেকগুলা সংখ্যা জমা রাখার পর মনেকরো  হঠাৎ একটা সংখ্যা খোঁজার প্রয়োজন হলো। হতে পারে কোন শ্রেণিতে ছাত্র - ছাত্রীর রোল নম্বর,  মনেকরো,আমরা একটি শ্রেণি থেকে কয়েকজন ছাত্র -ছাত্রী নিয়ে একটা প্রোগ্রামিং ক্লাব তৈরি করেছি। ক্লাবের সব সদস্যের রোল নম্বর একটি অ্যারেতে রেখেছি। এখন আমরা জানতে চাই আমাদের ক্লাবে (অ্যারেতে) 33 রোলের কোন শিক্ষার্থী আছে কি না? সেটা আমরা খুব সহজে লিনিয়ার সার্চ ব্যবহার করে  জানতে পারি।

আরো গভীরে যাও (+_+):


লিনিয়ার শব্দের অর্থ  রৈখিক। কাজেই বোঝতে পারছো এই সার্চটি একটি রেখার মতো কাজ করে।

নিচের চিত্রটি দেখোঃ

source: https://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif

এখানে ১০ টি উপাদানের একটি অ্যারে আছে। এর মধ্যে আমরা 33 সংখ্যাটাকে খোঁজবো । তার জন্য আমাদের যা করতে হবে তা হলো এক এক করে সবগুলা সংখ্যা চেক করবো যে সংখ্যাটি 33 এর সমান কি না? যখনই আমরা 33 পেয়ে যাবো আমাদের সার্চ ব্রেক করে দেবো।

এবার চলো প্রগ্রামটি দেখে নেইঃ


#include<stdio.h>
int main()
{
    int a[100],i,n,item;
    printf("Enter the size of array:\n");
    scanf("%d",&n);
    printf("Enter %d elements: \n",n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    printf("Entered elements: are\n");
    for(i=0; i<n; i++)
    {
        printf("%d\t",a[i]);
    }
    printf("\nEnter the item you want to search: \n");
    scanf("%d",&item);
    for(i=0; i<n; i++)
    {
        if(a[i]==item)
        {
            printf("Item found at %d th position\n",i+1);
            break;
        }
    }
    return 0;
}


printf("\nEnter the item you want to search: \n");      এই লাইনের আগ পর্যন্ত কোড গুলা আশাকরছি বোঝতে পারছো। কোন সমস্যা হলে আগের টিউটোরিয়াল গুলা দেখতে পারো।
  • আমরা printf("\nEnter the item you want to search: \n");    এই লাইনে ইউজারকে বলছি যে সে সংখ্যাটা সার্চ করতে হবে তা ইনপুট দিতে। তারপরের লাইনে আমরা সংখ্যাটা ইনপুট নিয়েছি। এবং তা item নামক ভেরিয়েবল এ রেখেছি।
  • এবার আমরা একটা লুপ চালিয়েছি অ্যারের শুরু থেকে শেষ পর্যন্ত। লুপের ভিতরে আমরা একটা শর্ত দিয়েছি। যেখানে প্রতিটা উপাদানকে চেক করছি তা আমাদের item এর সমান কি না।  যদি কখনো শর্ত মিলে যায় অর্থাৎ আমরা যে সংখ্যাটা খোঁজছি তা পাওয়া যায় তাহলে প্রিন্ট করবে কততম পজিশনে সংখ্যাটা পাওয়া গেছে। এবং এই পজিশনটা হলো i যতবার ঘুরেছে এর সমান। যেহেতু আমরা ইনডেক্সিং 0 থেকে করেছি তাই আমাদের আউটপুট এ i+1 করে দিয়েছি। কারণ আমরা সাধারণত পজিশন 0 থেকে হিসাব না করে 1 থেকে করি। প্রিন্ট করার পর আমরা লুপ ব্রেক করে দিয়েছি। কারণ আমাদের খোজা শেষ। 
কিন্তু মনেকরো আমরা যে সংখ্যা খোঁজছি তা অ্যারেতে নেই। এক্ষেত্রে আমাদের উপরের প্রোগ্রাম কোন আউটপুট দিবে না।
তবে আমরা যদি প্রোগ্রামটা একটু পরিবর্তন করে flag ভেরিয়েবল ব্যবহার করি তাহলে সহজেই এই সমস্যা সমাধান করা যাবে, প্রোগ্রামটা দেখে নেইঃ

 
#include<stdio.h>
int main()
{
    int a[100],i,n,item,flag=0;
    printf("Enter the size of array:\n");
    scanf("%d",&n);
    printf("Enter %d elements: \n",n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("Entered elements: are\n");
    for(i=0;i<n;i++)
    {
        printf("%d\t",a[i]);
    }
    printf("\nEnter the item you want to search: \n");
    scanf("%d",&item);
    for(i=0;i<n;i++)
    {

       if(a[i]==item)
        {
            printf("Item found at %d th position\n",i+1);
            flag++;
            break;
        }
    }
    if(flag==0)
    {
        printf("Item not found in this array! \n");
    }
    return 0;
}

আমরা flag=0 ধরে নিয়েছিলাম। আর যদি আমাদের কাংখিত সংখ্যাটা পাওয়া যায় তখন আমরা break করার পুর্বে flag++ করে এর মান পরিবর্তন করে দিয়েছি। তুমি চাইলে flag--, flag=1, ইত্যাদি যা খুশি করতে পারো। তবে যাই করো লক্ষ্য রেখো flag এর মান যেন পরিবর্তন হয়।
তারপর আমরা flag এর বাইরে শর্ত দিয়েছি  flag এর মান শুণ্য এর সমান হলে প্রিন্ট করবে যে সংখ্যাটা এই অ্যারেতে খোঁজে পাওয়া যায় নি।
আর যদি flag এর মান শুণ্য না হয়? আমাদের এই শর্ত কিছু প্রিন্ট করবে না। কারণ শর্তটি তখন মিথ্যা হয়ে যাবে।  কিন্তু উপরের লুপের ভিতরের শর্ত সত্য হবে তাই প্রিন্ট করবে  সংখ্যাটি কত তম পজিশনে পাওয়া গেছে।   
কারণটা নিজেই বোঝার চেস্টা করো। আমি আর ব্যাখ্যা করছি না। 

HaPpY cOdInG :)       
   

অ্যারের যোগ [Find the sum of all elements]


আমরা অ্যারে ইনপুট এবং আউটপুট দেখেছি। এখন আমরা দেখবো কি করে একটা অ্যারের সবগুলা উপাদান যোগ করতে হয়।

অ্যারের সবগুলা উপাদান যোগ করার প্রোগ্রাম:


#include<stdio.h>
int main()
{
    int num[100],i,n,sum=0;
 
    printf("Enter the size of array:\n");
    scanf("%d",&n);
    printf("Enter %d numbers:\n",n);
    for(i=0; i<n;i++)
    {
        scanf("%d",& num[i]);
     
        sum=sum+num[i];
    }
    printf("Sum of all elements are:%d\n",sum);
    return 0;
}



নমূনা ইনপুট:
5
1 2 3 4 5

নমূনা আউটপুট:

15.

বিস্তারিত:
মনেকরি, ইউজার ৫ টি সংখ্যা ইনপুট দিয়েছেন। আমাদের কাজ হলো ৫ টি সংখ্যার যোগফল দেখানো।
উপরের নমূনা ইনপুটে 1 2 3 4 5
দেওয়া হয়েছে। তাই আউটপুট হবে,
1+2+3+4+5=15।


- [ ] প্রথমে আমরা ভেরিয়েবল ডেক্লিয়ার করেছি। আশাকরি তা বোঝতে পারছো।num[100] নামের অ্যারে তে আমরা অ্যারের সাইজ 100 দিয়েছি। আমরা চাইলে অন্য যেকোন সংখ্যা দিতে পারি। তবে, 100 দেওয়ার কারণে যে, আমাদের 100 টি সংখ্যাই নিতে হবে ব্যপারটি এমন না। আমরা সর্বোচ্ছ ১০০ টি সংখ্যা নিয়ে কাজ করতে পারবো। এখন আমরা ১০০ এর কম যতটি সংখ্যা ইচ্ছা তা নিতে পারি। কিন্তু ১০০ এর বেশি সংখ্যা নিয়ে কাজ করতে হলে আমাদের অ্যারের সাইজ বাড়াতে হবে।

- [ ] একটি বিষয় পরিষ্কার করা ভালো। আমরা মোট ১০০ টি সংখ্যা নিয়ে কাজ করতে পারবো এর মানে হলো আমাদের অ্যারেতে সর্বোচ্ছ ১০০ টি সংখ্যা রাখা যাবে। তবে যে সংখ্যাগুলো রাখবো তা ১০০ এর মধ্যে থাকতে হবে এমন কোন কথা নেই। আমরা চাইলে 400,900,12000,99999 রাখতে পারি।

- [ ] যেহেতু আমরা ইন্টিজার অ্যারে ডেক্লিয়ার করেছি তাই আমরা ইন্টিজার ভেরিয়েবলে যত বড় সংখ্যা রাখতে পারি অ্যারের প্রতিটা ইন্ডেক্স এ ততো বড় সংখ্যা রাখতে পারবো।


এবার দেখা যাক প্রোগ্রাম কিভাবে কাজ করছে:
1. আমরা প্রথমে ইউজারের কাছ থেকে ইনপুট নিয়েছি,কতটি সংখ্যা যোগ করতে হবে।
2. তারপর আমরা লুপের সাহায্যে n  সংখ্যক সংখ্যা ইনপুট নিয়েছি। ধরি ইউজার 5 ইনপুট দিয়েছেন।
3. প্রথমে লুপে i=0, তাই যে সংখ্যা টি ইনপুট নিবো তা অ্যারের 0 তম ইনডেক্স এ বসবে। মানে num[0] তে।
4. আমাদের sum = 0 ছিলো। একটি সংখ্যা ইনপুট নেওয়ার পর আমরা sum এর সাথে সংখ্যাটি যোগ করছি। তাই, ধরে নেই প্রথম সংখ্যাটি 1. তাই, sum=sum+num[i] হওয়ার পর sum=0+1 বা sum=1.
5. তারপর i++ এ যাওয়ার পর i=1. তাই এবার যে সংখ্যা ইনপুট নিবো তা num[1] এ বসবে।ধরি এবার ইউজার 2 ইনপুট দিয়েছেন। এরপর sum=sum+num[i] হবে। যেহেতু sum এর মান 1. এর সাথে 2 যোগ হবে। তাহলে sum=3.
6. তারপর i++ এ যাওয়ার পর i=2. তাই এবার যে সংখ্যা ইনপুট নিবো তা num[2] এ বসবে।ধরি এবার ইউজার 3 ইনপুট দিয়েছেন। এরপর sum=sum+num[i] হবে। যেহেতু sum এর মান 3. এর সাথে 3 যোগ হবে। তাহলে sum=6.
7. তারপর i++ এ যাওয়ার পর i=3. তাই এবার যে সংখ্যা ইনপুট নিবো তা num[3] এ বসবে।ধরি এবার ইউজার 4 ইনপুট দিয়েছেন। এরপর sum=sum+num[i] হবে। যেহেতু sum এর মান 6. এর সাথে 4 যোগ হবে। তাহলে sum=10.
8. তারপর i++ এ যাওয়ার পর i=4. তাই এবার যে সংখ্যা ইনপুট নিবো তা num[4] এ বসবে।ধরি এবার ইউজার 5 ইনপুট দিয়েছেন। এরপর sum=sum+num[i] হবে। যেহেতু sum এর মান 10. এর সাথে 5 যোগ হবে। তাহলে sum=15.
9. আমরা ধরে নিয়েছিলাম n = 5. এখানে আমাদের লুপের ব্রেকিং কন্ডিশন i<n. যেহেতু i=4 এবং i++ হওয়ার পর  তা 5 হবে তখন  i<n শর্তটি মিথ্যা হয়ে যাবে। তাই,কম্পাইলার লুপ থেকে বের হয়ে যাবে।
10. এবার কম্পাইলার দেখবে  printf("Sum of all elements are:%d\n",sum);    তাই sum এর মান প্রিন্ট করবে। যেহেতু sum এর মান 15. তাই আউটপুট আসবে Sum of all elements are:15 
না বোঝলে অবশ্যই কমেন্টে জানাবেন ।

Monday, 2 October 2017

সায়েন্স ফিকশনঃ রহস্যভেদ

প্রতিদিনের মতো ট্রেনিং এ যাবার জন্য রবো শিপ থেকে বের হলো গ্রে বট। সে এখন লেভেল থি ক্যাটাগরির রোবট। তার মতো আরো হাজার খানেক রবোট রয়েছে লেভেল থ্রি ক্যাটাগরির। রোবটদেরকে বিভিন্ন শ্রেণিতে ভাগ করে দিয়েছে পৃথিবীর মানুষ। কাজের দক্ষতার উপর ভিত্তি করে এসব ক্যাটাগরি নির্ধারণ করা হয়েছে। প্রথম ক্যাটাগরির রবোটরা হলো সবচেয়ে বেশি ক্ষমতা সম্পন্ন। এদের দিয়ে গবেষণা,প্রতিরক্ষার এবং নানান ধরনের ঝুকিপুর্ণ পরীক্ষার প্রধান কাজগুলো করানো হয়।
এই তো বেশকিছু দিন আগে প্রোহান্টকে  নিউ-ট্রি তে পাঠানো হয়। নিউ ট্রি হলো নতুন আবিষ্কৃত একটি গ্রহ। মানুষের ধারণা এখানে  অন্য কোন প্রাণিদের অস্তিত্ব রয়েছে। গ্রহটির অবস্থান সূর্যের খুব কাছাকাছি। প্রোহান্ট সে যাত্রায় বেশকিছু গুরুত্বপুর্ণ এবং চাঞ্চল্যকর তথ্য নিয়ে এসেছে।
প্রোহান্ট এর অবস্থান বরাবর নাকি আলোর বেগে একধরণের আলোক রশ্নি ছোটে আসে।মাত্র ০.০১ মিলিসেকন্ড সময়ের ব্যবধানে নিজেকে সরিয়ে নেয় প্রোহান্ট। তারজায়গায় লেভেল সিক্স এর কোন রোবট থাকলে এতদ্রুত আত্নরক্ষা করতে পারতো না। হয় তো মারাত্নক ক্ষতিগ্রস্ত হতো। ঠিক কি কারণে এই রশ্নি এসেছে তা এখনো জানা যায় নি। তবে মনেকরা হচ্ছে নিউ ট্রি গ্রহের চারপাশে রয়েছে অদৃশ্য সয়ংক্রিয় প্রতিরক্ষা ব্যবস্থা। বেশকিছু আলামত থেকে এই সিধান্তে উপনীত হয়েছে মহাকাশ গবেষণার কাজে নিয়োজিত লেভেল ওয়ান ক্যাটাগরির রোবটরা। তবে, এ আলামতগুলো সম্পর্কে জানতে পারে নি গ্রে বট। তার কারণ হচ্ছে নিরাপত্তার সার্থে সবার কাছে আলামতগুলো প্রকাশ করা হয় নি।


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

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

 আচমকা একটা শব্দ হলো। অনেকটা ওয়ার্নিং মেসেজ এ যেরকম শব্দ হয়।  আরে এ তো হিক্যাপ।
আকাশের দিকে থাকিয়ে আছে। হ্যা, উপরে কিছু একটা উড়ছে, আর সেই শব্দ টা এর থেকেই আসছে। হিক্যাপ লেভেল টু এর রোবট। গ্রে বট হিক্যাপ কে জিজ্ঞেস করার আগেই হিক্যাপ রিড করে নিলো গ্রেবট এর প্রশ্ন। হিক্যাপ বলতে লাগলো - হ্যালী হচ্ছে একধনের যন্ত্র যেটা কোন চালক ছাড়াই উড়ে। প্রচন্ড রকম আর্টিফিশিয়ার ইন্টেলিজেন্স দেওয়া হয়েছে একে। কোন জায়গায় কত কোণে উড়তে  হবে, কত উপরে উড়তে হবে সব বোঝেও । তবে এখন এর থেকে ওয়ারনিং ম্যাসেজ আসছে। মনে হয় সিস্টেম ঠিক মতো কাজ করছে না। এটি তৈরির সময় নিজে কাজ করেছে হিক্যাপ।
তাই সে রিড করতে চেস্টা করলো সমস্যা কোথায়। না ! সে তো কোন সমস্যা আন্দাজ করতে পারছে না।  এবার একটি স্পস্ট ম্যসেজ আসলো হ্যালী নামক যন্ত্র থেকে "লেজার এর বিকিরণ হচ্ছে উপর থেকে" ভাবতে থাকে গ্রে বট তাহলে কি এই একই আলোক রশ্নি  প্রোহান্ট কে আক্রমণ করেছিল? রহস্যভেদ করতে চায় গ্রে বট।

চলবে............