দুইয়ের অধিক সংখ্যার গসাগু নির্ণয়। বিভিন্ন Way তে সি প্রোগ্রামিং দিয়ে

টিউন বিভাগ এডুটিউনস
প্রকাশিত
জোসস করেছেন

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

আসসালামু আলাইকুম, কেমন আছেন সবাই? আশা করছি সবাই ভালো আছেন৷

আজ আমি সি প্রোগ্রামিং দিয়ে কিভাবে অনেকগুলো সংখ্যার গ.সা.গু নির্ণয় করা যায় তা শেয়ার করব৷ আমাদের বইয়ে (ইন্টারমিডিয়েট) দেখেছেন যে সেখানে do - while লুপ দিয়ে দুটি সংখ্যার গসাগু নির্ণয় করার কোড দেওয়া আছে৷ কিন্তু আমি চিন্তা করেছিলাম কিভাবে do while লুপ ব্যবহার না করে দুটি সংখ্যার গসাগু নির্ণয় করা যায়৷ for loop দিয়ে সফল হলাম৷ এরপর চিন্তা করলাম দুটি না করে তিনটি সংখ্যার গুসাগু নির্ণয় করা যায় কিনা৷ তাও আলহামদুলিল্লাহ সফল হয়ে গেলাম৷ এরপর চিন্ত্রা করলাম অনেকগুলো সংখ্যার গসাগু নির্ণয় করব কিভাবে? এটাতেও অনেক সময় ব্যয়ের পরে সফল হলাম৷ আজ আমার সেই চিন্তাগুলোই শেয়ার করছি৷ হয়তো এই ট্রিকগুলো আপনাদেরও কাজে লাগতে পারে৷ পরীক্ষায় যদি do while loop না এসে বলে for loop দিয়ে করতে তাহলেও এটা কাজে লাগতে পারে৷ [আর মনে করবেন না আমাদের অটোপাশ দিয়ে দিবে৷ আমাদের বেচের অটোপাশ দেওয়ার সম্ভাবনা একেবারেই কম৷ অর্থাৎ আমাদের পরীক্ষা ঠিকই হয়ে যাবে]

আপনার যদি কোনো ল্যাপটপ না থাকে আমার মতো তাহলে আপনি প্লে স্টোর থেকে সি প্রোগ্রাম রান করার জন্য বিভিন্ন app পাবেন৷ সেখান থেকে নামিয়ে নিতে পারেন৷ যারা অফলাইনে প্রোগ্রাম রান করাতে চান তারা CxxDroid ইন্সটন করতে পারেন৷ আবার যারা অনলাইনেই করতে চান তারা CppDroid ইন্সটন করতে পারেন৷

For offline use - Download CxxDroid & For online use- Download CppDroid from Play Store

do while loop ছাড়া যদি for loop দিয়ে দুটি সংখ্যার গসাগু বের করতে চান তাহলে আপনাকে ফর লুপের তিনটা শর্তের দুইটা লিখতে পারেবেন কিন্তু কখন শেষ হবে সেই শর্ত for loop এ লিখতে পারবেন না৷ কারণ কতক্ষণ পর্যন্ত দুইটি সংখ্যাকে ভাগ করব তা আমরা জানি না৷ কিন্তু কোথায় শেষ হবে তা বলে না দিলে তো লুপ কেবল চলতেই থাকবে, কখনো শেষ হবে না৷ তাহলে কি করা যায়! এরকম শর্ত দিয়ে তো কোনো কাজই হবে না৷ আর লুপ শেষই যদি না হয় তাহলে তো আউটপুটই পাব না৷ ওহ, আমি for loop দিয়ে এটা সমাধান করার সময় প্রথম বাধা পেয়েছিলাম এখানেই৷ অনেক সময় ব্যয় করার পর একটা খুব সহজ সমাধান পেয়ে গিয়েছিলাম৷ এটাই এখন বলল৷

আমরা for loop দিয়ে প্রোগ্রামটি লিখার সময় যেহেতু সমাপ্ত হওয়ার শর্ত দিতে পারব না তাহলে আমাদের নিম্নোক্তভাবে প্রোগ্রামটি লিখতে হবে-

int i;
for(i=1; ; i+ +){.}

একটা ভেরিয়েবল i নিয়েছি এবং এটা দিয়ে লুপের কাজ করছি৷ for লুপ ব্যবহার করেছি কিন্তু মাঝখানে কিছু না লিখে ফাঁকা রেখেছি৷ তো যেহেতু এখানে ফাঁকা রেখেছি সেহেতু আমাদের একটা break এর দরকার পরবে লুপের ভিতর৷ এটা আমাদের ফলাফল পাওয়ার পর লুপটি ব্রেক করে দিবে৷ এবার বুঝতে পেরেছেন নিশ্চয়ই৷ আমরা নিচের মতো করে প্রোগ্রাম লিখে ফেলতে পারি৷

#include<stdio.h>

int main()
{int a, b;
printf(" নাম্বার দুটি লিখুন ৷ প্রথম সংখ্যাটি বড় হবে৷ \n");
scanf("%d %d", &a, &b);

int i, r;
for(i=1; ;i+ +){r=a%b;
a=b;
b=r;
if(r=0){break;}
printf("GCD is: %d", a);
return 0;}


দেখুন আমরা ব্রেক ইউজ করে লুপ বন্ধ করে দিয়েছি৷ প্রোগ্রামটি app এ চালিয়ে দেখবেন ঠিকঠাকভাবে কাজ করছে৷
এখন,
r=a%b;
a=b;
b=r;
এটার মানে কি?
এটা বুঝতে হলে আমরা দুটি সংখা ধরে নিই 15, 10
প্রথমে আমরা 15 কে 10 দিয়ে ভাগ করব এবং ভাগশেষটা সংগ্রহ করব৷ মানে 10)15(1 এরকম হবে আর ভাগশেষ হবে 5৷ তাই আমরা লিখেছি৷
r=a%b;
এখানে r এর মান হবে 5 যেহেতু এটা ভাগশেষ নিচ্ছি৷
তারপর আমরা ভাগশেষ 5 দিয়ে 10 কে ভাগ করব এবং ভাগশেষ সংগ্রহ করব৷ 5)10(2 এরকম হবে৷
দেখুন এবার 10 এর জায়গার 5, 15 এর জায়গায় 10 হয়েছে৷ আর এটার জন্যই লিখেছি-
a=b;
b=r;
তারপর আবার r=a%b এর কাজ চলবে৷ এখন ভাগফল যেহেতু শূণ্য হয়েছে তাই ব্রেক করে দিয়েছি আর a মানে এখন 5 ই হবে গসাগু৷

এটা আমরা এভাবেও করতে পারতাম-

#include<stdio.h>

int main()
{int a, b;
printf(" নাম্বার দুটি লিখুন \n");
scanf("%d %d", &a, &b);

int i, r, gcd;
for(i=2; ;i+ +){if(a%i=0&&b%i=0){gcd=i;
break;}
printf("GCD is: %d", gcd);
return 0;}


i=2 থেকে নিয়েছি যেহেতু 1 দিয়ে উভয়টাই ভাগ যাবে৷ এটা বুঝা খুব সহজ৷
যদি দুটি সংখ্যা 15 আর 10 নিই তাহলে 5 দিয়ে 15 ভাগ যাবে এবং ভাগশেষ 0 হবে এবং 5 দিয়ে 10 ও ভাগ যাবে এবং ভাগশেষ 0 হবে৷ লুপের ভিতর আমি এই শর্তই বলেছি৷

Output-

আমি a এবং b দুটি সংখ্যা নিয়েছি৷ আপনি ইচ্ছা করলে এ ওয়েতে অনেকগুলো সংখ্যা নিতে পারেন এবং && দিয়ে প্রত্যেকটাতে শর্ত দিয়ে গসাগু বের করতে পারেন৷ যেমন আপনি যদি a, b & c তিনটা সংখ্যা নিন তাহলে আপনি আপনি লুপের ভিতর এরকম শর্ত লিখতে পারেন-

if(a%i=0&& b%i=0&& c%i=0)

বাকি সব তো একইরকম৷

এবার যদি অনেকগুলো সংখ্যার গসাগু বের করতে চাই তাহলে কি করতে পারি?
আপনি যদি লক্ষ্য করে থাকেন তবে দেখবেন যে আপনি যতগুলো সংখ্যার গসাগু বের করতে চাচ্ছেন ঐ সংখ্যাগুলোর গসাগু সংখ্যাগুলোর মধ্যে যে সংখ্যাটা সবচেয়ে ছোট তার চেয়েও ছোট হবে অথবা তার সমান হবে৷ যদি 10, 15, 20 এই তিনটা সংখ্যার গসাগু বের করেন তাহলে ফলাফল 10 মানে সর্বনিম্ন সংখ্যা৷ যইদ 10, 15, 25 এই তিনটা সংখ্যার গসাগু বের করেন তাহলে গসাগু হবে 5৷ মানে সর্বনিম্ন সংখ্যার চেয়েও কম৷ এর মানে গসাগু সবসময় ছোট সংখ্যাটির চেয়ে ছোট বা সমান হবে৷

তাহলে এখন এ সিদ্ধান্তে পৌছা যায় যে আমরা যখন লুপ চালাব তখন আমরা লুপ শেষ করব সর্বনিম্ন সংখ্যায় এসে৷ যদি যেসব সংখ্যা দিয়ে গসাগু বের করতে চান তাদের মধ্যে সর্বনিম্ন সংখ্যা 10 হয়ে তাহলে for loop টি এভাবেও লেখা যেত -
for(i=1;i<=10;i+ +);

আমরা যদি না জানি কোন সংখ্যাটি সবচেয়ে ছোট তাহলেও কিন্তু সমস্যা নাই৷ কারণ যদি 10, 15, 25 এই তিনটা সংখ্যার মধ্যে গসাগু বের করতে হয় আর আমরা যদি 2 থেকে 15 পর্যন্ত সংখ্যা দিয়ে ভাগ করে দেখি যে কোন সংখ্যাটি 10, 15 এবং 25 কে বিভাজ্য করে তাহলে কি কোনো সমস্যা আছে? তাহলেও কিন্তু কোনো সমস্যা নাই৷ ফলাফল ঠিকই 5 আসবে কারণ 1 থেকে 15 পর্যন্ত 5 দ্বারাই ঐ সংখ্যাগুলোকে ভাগ করা যায়্৷
তাহলে আমরা যখন লুপ চালাব তখন 2 থেকে শুরু করব এবং শেষ করব যখন লুপের সংখ্যাটি আমাদের দেওয়া সর্বনিম্ন সংখ্যার সমান বা বড় হয়৷ তাহলেই আমাদের লুপের কাজ চলবে৷

এবার চলে আসি আমাদের মূল কাজে, আমাদের বের করতে হবে অনেকগুলো সংখ্যার গসাগু৷ এজন্য আমরা একটা array ব্যবহার করব৷ এই array তেই যেসব সংখ্যার গসাগু বের করতে চাই তা জমা রাখব৷ এখন প্রশ্ন হলো array ব্যবহার করলে তো এর সাইজ নির্ধারণ করে দিতে হবে৷ আমরা যেহেতু প্রোগ্রাম বানাব আর ব্যবহারকারী সেই প্রোগ্রাম থেকে গসাগু নির্ণয় করবে তাই আমরা কিন্তু জানছি না ব্যবহারকারী কয়টি সংখ্যার গসাগু বের করতে যাচ্ছে৷ তাই আমরা এমন একটা পদ্ধতি অবলম্বন করব যার মাধ্যমে আমরা প্রথমে ব্যবহারকারীকে বলল যে আপনি কতগুলো সংখ্যা ইনপুট করতে চান?
এরপর ব্যবহারকারী লিখে দিতে যে সে কয়টি সংখ্যা নিয়ে গসাগু বের করতে চাচ্ছে৷ আর এদিকে আমরা array এর সাইজ জেনে গেলাম৷ ব্যবহারকারী যে সংখ্যা ইনপুট করবে তাই আমরা array এর সাইজ হিসেবে বসিয়ে দিব৷
অত:পর আমরা ব্যবহারকারীকে বলব যে এবার আপনি আপনার সংখ্যাগুলো ইনপুট করুন৷ ব্যবহারকারী স্পেস দিয়ে দিয়ে সংখ্যাগুলো ইনপুট দিবে আর ইনপুট দেবার পর এন্টারে চাপ দিবে৷ এন্টারে চাপ দিলে তো আমাদের প্রোগ্রাম সাথে সাথে তাকে গসাগুর মান বের করে দিতে হবে৷ তাই না? তো দেখি এবার গসাগু কিভাবে বের করব৷
int n;
printf("How many numbers do you want to input?");
scanf("%d", &n);
int ara[n];
printf("Enter all number \n");
int i, g;
for(i=0;i<n;i+ +){scanf("%d", &ara[i]);}

উপরে দেখুন আমরা প্রথমে একটা ভেরিয়েবল নিব তাতে ব্যবহারকারী যত সংখ্যা ইনপুট করতে চায় তা বলবে৷ এটা আমরা যেই array নিয়েছি তাতে বসিয়ে দিয়েছি সাইজ হিসেবে (int ara[n]) ৷ এবার আমরা array তে n সংখ্যক সংখ্যা নিব৷ তাই n পর্যন্ত লুপ চালিয়ে ব্যবহারকারী থেকে সবগুলো সংখ্যা নিয়েছি৷ এটা লুপ দিয়েই করতে হবে৷ এবার -

int j, gcd;
for(j=2;j<n;j+ +){for(i=1;i<=ara[0];i+ +){if(ara[0]%i=0&&ara[1]%i=0){g=i;

if(ara[j]%g=0){gcd=g;}
printf("Greatest Common Divisor: %d", gcd);

এবার তিনটি ভেরিয়াবল নিয়েছি j, g & gcd ৷ এই j দিয়ে আমরা কত পর্যন্ত array নিব তা বলে দিব৷ এখনে i দিয়ে আমরা 1 থেকে শুরু করে array এর প্রথম সংখ্যা পর্যন্তু সংখ্যা দিয়ে array এর প্রথম এবং দ্বিতীয় সংখ্যাটিকে ভাগ করব৷ তাহলে আমরা একটা গসাগু পাব দুইটি সংখ্যার মধ্যে৷ আমি যেভাবে চিন্তা করেছি তা হলো দুইটি সংখ্যার গসাগু মানে সবগুলো সংখ্যার গসাগু হতে হবে৷ অর্থৎ এমন যেসব সংখ্যা দিয়ে দুইটি সংখ্যা ভাগ যাবে সেসব সংখ্যা দিয়ে অবশ্যই array এর সবগুলো সংখ্যা ভাগ যাবে৷
যেমন 10, 20, 15, 25 সংখ্যাগুলোর মধ্যে 10 এবং 20 কে 5 ও 10 দ্বারা ভাগ করা যায়৷ এদের মধ্যে 5 দ্বারা array এর সবগুলো সংখ্যাগুলো ভাগ করা যায়৷ অর্থাৎ 5 ই হলো নির্ণেয় গসাগু৷
এই কাজটাই আমি দুইটি লুপের ভিতর করেছি দেখেন৷ প্রথমে
if(ara[0]%i=0&&ara[1]%i=0){g=i;}
দিয়ে বলেছি যদি array এর প্রথম দুটি সংখ্যাকে ভাগ করা যায় এমন একটি সংখ্যা i তে আসে তাহলে g=i হয়ে যাবে৷ তারপর -
if(ara[j]%g=0){gcd=g;}
এর মাধ্যমে বলে দিয়েছি g এর যেসব সংখ্যা পাওয়া যাবে সেগুলো দ্বারা array এর সবগুলো সংখ্যা ভাগ করে দিব৷ যে সংখ্যাটি দ্বারা array এর সবগুলো সংখ্যা ভাগ করা যাবে সেটাই হবে গসাগু৷ এভাবে সহজেই আমরা অনেকগুলো সংখ্যা থেকে গসাগু বের করে ফেলতে পারব আর ব্যবহারকারীর এন্টার দেওয়ার সাথে সাথেই প্রোগ্রাম বলে দিবে গসাগু কত৷
পুরো প্রোগ্রামটা এভাবে-

#include<stdio.h>
int main()
{int n;
printf("How many numbers do you want to input?\n");
scanf("%d", &n);
int ara[n];
printf("Enter all number \n");
int i, g;
for(i=0;i<n;i+ +){scanf("%d", &ara[i]);}
int j, gcd;
for(j=2;j<n;j+ +){for(i=1;i<=ara[0];i+ +){if(ara[0]%i=0&&ara[1]%i=0){g=i;

if(ara[j]%g=0){gcd=g;}
printf("Greatest Common Divisor: %d", gcd);
return 0;}

app এ প্রোগ্রামটি লিখে রান করান৷

আউটপুট দেখুন৷ আমি কয়েকটি সংখ্যা ইনপুট করে আউটপুট পেলাম -


তো আজকে এ পর্যন্তই৷ যদি প্রোগ্রামট বুঝতে না পারেন তাহলে আবার দেখবেন৷ বারবার পড়লে বুঝতে পারবেন৷ সাথে প্রেকটিস তো আছেই৷
ধন্যবাদ সবাইকে৷

Level 1

আমি সৈয়দ মফিজুল ইসলাম। , Brahmanbaria। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 6 বছর 5 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 1 টি টিউন ও 0 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস