সি প্রোগ্রাম দিয়ে বেজ কনভার্শন

এই পোস্টে আমরা ডেসিমাল নাম্বারকে বাইনারীতে কনভার্ট করার প্রোগ্রাম করতে শিখবো। এ জন্য আমাদের আগে থেকে অ্যারে (Array) সম্পর্কে বেসিক ধারণা থাকা লাগবে।

ডেসিমাল বা দশমিক সংখ্যাকে বাইনারীতে রুপান্তরের জন্যে আমরা দশমিক সংখ্যাকে ক্রমান্বয়ে ভাগ করতে থাকি এবং প্রত্যেক ক্ষেত্রে প্রাপ্ত ভাগফলগুলোকে বিপরীত ক্রমে সাজিয়ে বসাই। ঠিক এই কাজটিই আমরা আজকের প্রোগ্রামে করবো।একটি ডেসিমাল নাম্বারকে ক্রমান্বয়ে ভাগ করে প্রাপ্ত ভাগশেষ গুলো একটি অ্যারের মধ্যে রেখে দিবো এবং অ্যারের এলিমেন্টগুলো বিপরীতক্রমে প্রিন্ট করবো।

শুরুতেই প্রোগ্রামের জন্য প্রয়োজনীয় ভেরিয়েবল ও অ্যারে ডিক্লেয়ার করে নিই।

#include <stdio.h>

int main()
{
    long int a,c;
    int i=0,count=0;
    char bol[10000];
}

 

ইন্টেজার a তে আমরা নির্ণেয় ডেসিমাল নাম্বারটি রাখবো এবং c তে তা কপি করে নিবো।কপি কেন করতেসি তা আমরা কিছুক্ষন পরেই বুঝতে পারবো।ইন্টেজার i দিয়ে আমরা লুপ চালাবো এবং count এ মোট রিমাইন্ডার বা ভাগশেষ সংখ্যা গুনে রাখবো। bol[10000] একটি ক্যারেক্টার টাইপ অ্যারে যেটার মধ্যে আমরা রিমাইন্ডার গুলোকে রেখে দিবো।

#include <stdio.h>

int main()
{
    long int a,c;
    int i=0,count=0;
    char bol[10000];
    scanf("%ld", &a);
    c = a;
}

একটি হুয়াইল লুপ চালিয়ে আমরা রিমাইন্ডারগুলি বের করে নিবো আর সেগুলোকে bol অ্যারের মধ্যে ইনসার্ট করে রাখবো।সাথে সাথে রিমাইন্ডার সংখ্যাও কাউন্ট করে রাখবো।

#include <stdio.h>

int main()
{
    long int a,c;
    int i=0,count=0;
    char bol[10000];
    scanf("%ld", &a);
    c = a;
    while(a!=0)
    {
        bol[i] = a%2;
        a = a / 2;
        count++;
        i++;
    }
}

ধরি a=12,তাহলে প্রথমবার লুপ রান পর bol[0]=12%2=0,a=12/2=6,count=1,i=1 হবে।দ্বিতীয়বার লুপ রান করার পর bol[1]=6%2=0,a=6/2=3,count=2,i=2 হবে।তৃতীয়বারে bol[2]=3%2=1,a=3/2=1,count=2,i=2 এবং শেষবারে bol[3]=1%2=1,a=1/2=0,count=3,i=3 হবে। লুপ শেষে অ্যারের ভ্যালু bol= “0011” দেখাবে।

আমাদের শেষ কাজ হবে অ্যারের এলিমেন্টগুলো বিপরীতক্রমে প্রিন্ট করা। a=0 হলে বাইনারী হিসেবে প্রোগ্রাম শুধু 0 প্রিন্ট করবে।while লুপ চলাকালে a এর ভ্যালু বার বার চেঞ্জ হয়।তাই c তে আমরা a এর ইনিশিয়াল ভ্যালু অ্যাসাইন করে রাখা হইসে। শুন্য ছাড়া অন্য যেকোন ধনাত্মক মানের জন্য আমরা ফরলুপের সাহায্যে অ্যারে প্রিন্ট করবো।

#include <stdio.h>

int main()
{
    long int a,c;
    int i=0,count=0;
    char bol[10000];
    scanf("%ld", &a);
    c = a;
    while(a!=0)
    {
        bol[i] = a%2;
        a = a / 2;
        count++;
        i++;
    }
    if(c==0)
    {
        printf("0");
    }
    else
    {
        for(i=count-1; i>=0; i--)
        {
            printf("%d", bol[i]);
        }
    }
    printf("n");
    return 0;
}

23 তম লাইনের ফরলুপ বিপরীতক্রমে অ্যারে এলিমেন্টগুলি প্রিন্ট করবে।এখন সমস্ত প্রোগ্রামটি কম্পাইল করে আমরা অনেক বড় ডেসিমাল সংখ্যারও বাইনারী কনভার্শন করতে পারবো।

সি প্রোগ্রাম দিয়ে বেজ কনভার্শন

সি প্রোগ্রাম দিয়ে সিরিজ সমাধান

সি প্রোগ্রাম দিয়ে সিরিজ সমাধান

আমাদেরকে বলা হল এমন একটি সি প্রোগ্রাম লিখ যা নিন্মোক্ত সিরিজের প্রথম n সংখ্যক পদের যোগফল দেখাবে

1 2+ 32 + 52+…. + n2  যেখানে n হচ্ছে যেকোন ইনপুট।

সিরিজটি আমরা লক্ষ করি।সিরিজটি কে এভাবে লেখা যায়-

1 2+ 32 + 52+ 72+…. + n2

(1) 2+ (3)2+ (5)2+ (5+2)2+…. + n2

(1) 2+ (3)2+ (3+2)2+ (5+2)2+…. + n2

(1) 2+ (1+2)2+ (3+2)2+ (5+2)2+…. + n2

সিরিজটির প্রদগুলোকে স্কয়ার বিহীন সিকোয়েন্স কল্পনা করলে তা হবে নিন্মরূপ

(1), (1+2),(3+2) ,(5+2),…. ,n

প্রত্যেকটি পদ তার আগের পদ এবং 2 এর সমস্টির সমান। তার মানে যদি আমরা একটি সংখ্যা (এই অনুক্রমে তা 1) নিয়ে তার সাথে পর্যায়ক্রমে 2 যোগ করতে থাকি তাহলে প্রত্যেকবার আমরা বর্তমান সংখ্যার পরবর্তি সংখ্যাটি পাবো। যেহেতু আমরা একই কাজ বারবার করবো-এই আমরা এইখানে লুপ (for loop) ব্যবহার করবো । অর্থ্যাৎ লুপ হচ্ছে যা একই কাজ বার বার করে। আমরা আমাদের কোড লিখা শুরু করি।

#include
int main()

 

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

int n,i;
int sum=0;
printf("Enter the n i.e. max values of series: ");
scanf("%d",&n);

সিরিজটি শুরু হয়েছে 1 থেকে । তাই আমাদের লুপ শুরু হবে 1 থেকে।এই 1 কে একটি ভেরিয়েবলের মধ্যে রাখা হয়।এটিই লুপ ভেরিয়েবল। সিরিজটিতে পদের মান n এর সমান না হওয়া পর্যন্ত পদের মান 2 করে বাড়তে থাকে।তাই আমাদের লুপটি চলতে থাকবে যতক্ষন না পর্যন্ত লুপ ভেরিয়েবলের মান (আমাদের কোডে i) n এর সমান না হয়। লুপ ডিক্লেয়ার করার সিন্টেক্স নিন্মরুপঃ

for(i =1;i <= n;i+=2)

{

}

এখানে লুপ শুরু হবে i =1 মান টি দিয়ে। i+=2 এর মানে হচ্ছে i এর মান 2 করে বাড়বে। i <= n হচ্ছে লুপের শর্ত বা কন্ডিশন । এটি সত্য হলে লুপ তার কাজ(লুপের মধ্যে যা অ্যাসাইন করা হয় ) চালিয়ে যাবে। এখানে i এর মান n এর চেয়ে কম বা সমান হলেই লুপ চলবে, নতুবা লুপ তার কাজ শেষ করে দিবে।

আমরা বার বার যে কাজ টি করতে যাচ্ছি তা হচ্ছে বারবার বর্গ করে যোগ করা। শুরুতে আমরা ধরে নিয়েছি আমাদের ধারার যোগফল 0 । কাজ টি করার জন্য নিচের লুপের মধ্যে Sum=sum+(i*i) অ্যাসাইন করি।

for(i =1;i <= n;i+=2)

{
Sum=sum+(i*i);
}

i =1 হলে লুপের ভিতর থাকা Sum=sum+(i*i) কমান্ড কম্পাইলার একবার রীড করবে। অর্থ্যৎ Sum মান হবে Sum=0+(1*1)=1 । তারপর i এর মান 2 বৃদ্ধি পেয়ে 3 হবে। কম্পাইলার Sum=1+(2*2)=5 করে দিবে। এভাবে বারবার i এবং sum এর মান বাড়তে থাকবে। যখন i = n হবে তখনও লুপের ভিতরের কমান্ড রীড হবে। ইনপুট হিসেবে n=100 নিলে লুপের সর্বশেষ কাজ হবে
Sum= 328350+(100*100)=338350 করা।

এখন শুধুমাত্র printf(“Sum of the series:%d “,sum); লিখেই আমরা আলোচ্য সিরিজের যোগফল পেতে পারি। তাহলে আমাদের সম্পুর্ন কোড হবে নিন্মরূপ-

#include
int main()

{
int n,i;
int sum=0;
printf("Enter the n i.e. max values of series: ");
scanf("%d",&n);
for(i =1;i <= n;i+=2)
{
Sum=sum+(i*i);
}

printf("Sum of the series:%d ",sum);

return 0;
}

মনে করো আমরা লুপ ব্যবহার করতে চাই না সেক্ষেত্রে আমাদের ধারার যোগফল বের করার সূত্র জানতে হবে।

n সংখ্যক বিজোড় স্বাভাবিক সংখ্যার বর্গের সমষ্টি:

1

2

3

4

5

6

1 2+ 32 + 52+ 72+…. + n2 = (n * (2n + 1)*(2n – 1)) / 3 খুব সহজেই (n * (2n + 1)*(2n – 1)) / 3 সূত্র ব্যবহার করে আমরা উপরের ধারার সমষ্টি নির্ণয় করে ফেলতে পারি ( যদিও দেখলে এভাবে সূত্র বের করা কত কঠিন )। কিন্তু সকল ক্ষেত্রে ধারার সমষ্টি এভাবে বের করা সম্ভব নাও হতে পারে।

#include<stdio.h>
int main()

{ 
   int n,i;
   int sum=0;
   printf("Enter the n i.e. max values of series: ");
   scanf("%d",&n);
   sum=(n * (2n + 1)*(2n - 1)) / 3; 
   printf("Sum of the series:%d ",sum);
   return 0; 
} 

প্রথম n সংখ্যক স্বাভাবিক সংখ্যার বর্গের সমষ্টি:

1 2+ 22 + 32+ 42+…. + n2  = { n(n+1)(2n+1)}/6

খুব সহজেই { n(n+1)(2n+1)}/6 সূত্র ব্যবহার করে আমরা n সংখ্যক স্বাভাবিক সংখ্যার বর্গের সমষ্টি নির্ণয় করে ফেলতে পারি।

#include
int main()
{
    int n;
    int sum=0;
    printf("Enter the n i.e. max values of series:");
    scanf("%d",n);
    sum = { n(n+1)(2n+1)}/6;
    printf("Sum of the series:%d ",sum);
    return 0;
}

আবার আমরা জানি প্রথম n সংখ্যক স্বাভাবিক সংখ্যার ঘনের সমষ্টি:

1 3+ 23 + 33+ 43+…. + n3 = {n(n+1)/2}^2

খুব সহজেই {n(n+1)/2}^2 সূত্র ব্যবহার করে আমরা n সংখ্যক স্বাভাবিক সংখ্যার ঘনের সমষ্টি নির্ণয় করে ফেলতে পারি।

এখন যদি প্রথম n সংখ্যক স্বাভাবিক সংখ্যার চতুর্ঘাতের সমষ্টি নির্ণয় করতে বলা হয়:

1 4+ 24 + 34+ 44+…. + n4  = ? ?

খুব সহজেই হয়তো সূত্র বের করে আমরা n সংখ্যক স্বাভাবিক সংখ্যার চতুর্ঘাতের সমষ্টি নির্ণয় করে ফেলতে পারি।

এখন যদি প্রথম n সংখ্যক স্বাভাবিক সংখ্যার পঞ্চ ঘাত বা ষষ্ঠ ঘাত এর সমষ্টি নির্ণয় করতে বলা হয় কি করবো ?

খুব সহজেই এবার হয়তো সূত্র বের করা যাবে না। তাই আমরা যদি লুপ দিয়ে একটি কম্পিউটার প্রোগ্রাম লিখে ফেলি তাহলেই আমাদের এই সমস্যা সমাধান হয়ে যায়।

যেমন নিচের প্রোগ্রাম এ প্রথম n সংখ্যক স্বাভাবিক সংখ্যার চতুর্ঘাতের সমষ্টি নির্ণয় করতে বলা হয়: 1 5+ 25 + 35+ 45+…. + n5 

#include<stdio.h>
int main()

{ 
   int n,i;
   int sum=0;
   printf("Enter the n i.e. max values of series: ");
   scanf("%d",&n);
   for(i =1;i <= n;i+=1)
   {  
      Sum=sum+(i*i*i*i*i);
   } 
   
   printf("Sum of the series:%d ",sum);

   return 0; 
}