Some application of loops:
## You are told to "do something" until u get EOF(End of file) or you are not told when you would stop
while (scanf("%d",&n) == 1)
{
//do something
}
scanf যতটা আলাদা আলাদা জিনিস ইনপুট নেয় তত return করে। এখানে একটা জিনিস ইনপুট নিছে তাই, 1 return করছে। দুটা ইনপুট নিলে 2 return করত। যেই পর্যন্ত সে কিছু পাবে ওই পর্যন্ত সে scan করবে। যখন পাবে না তখন EOF অর্থাৎ -1 return করবে, আর তখন লুপ ব্রেক করবে।
or
while (scanf("%d",&n) != EOF)
{
//do something
}
EOF পাওয়ার আগ পর্যন্ত loop চালাবে। EOF এর মান -1
or
while (scanf("%d",&n) != -1)
{
//do something
}
একই জিনিস। EOF এর বদলে -1 দেয়া হইছে।
## You are told to "do something" until u get n = 0
while (scanf("%d",&n) != EOF && n != 0)
{
//do something
}
দুইটা শর্ত-এর যেকোন একটা false হলেই loop break করবে। scan করে 0 পেলেই লুপ ব্রেক করবে।
## iterating a string:
ধরি আমাদের একটা স্ট্রিং দেয়া আছে, এর মাঝে কতটা small latter আছে বের করতে হবে;
char str[100];
// str এ কোন কিছু scan করব।
int count=0,len = strlen(str); // strlen() is a library function, need to declare #include<string.h> to use it
for (int i = 0; i < len; i += 1) // কোন স্ট্রিং এর length lenn হলে এর character গুলোর index 0 -> len-1
{
if(str[i] >= 'a' && str[i] <= 'z') count++;
}
কাজটা একটু অন্য ভাবেও কওরা যায়। string এর শেষে যেহেতু NULL অর্থাৎ '\0' থাকে তাই একে লেখা যায়
int count=0;
for (int i = 0; str[i] != '\0' ; i += 1) // NULL পাওয়ার আগ পর্যন্ত loop চলবে।
{
if(str[i] >= 'a' && str[i] <= 'z') count++;
}
কোন condition true হলে 1 return হয়, নাহলে 0. condition এ 0 ছাড়া অন্য সবকিছুর মান এর কাছে true. NULL এর ASCI value 0. মানে NULL মানে false আর সবকিছু true. তাই loop টা এইভাবেও লেখা যায়।
int count=0;
for (int i = 0; str[i] ; i += 1) // str[i] এর value '\0' অর্থাৎ 0 হলেই loop ব্রেক করবে।
{
if(str[i] >= 'a' && str[i] <= 'z') count++;
}
find n-th Fibonacci number :
Fibonacci series: 0 1 1 2 3 5 8 13 21 ....
এই সিরিজের প্রথম ও দ্বিতীয় পদ ১, এর পরের যেকোন পদের মান তার আগের দুই পদের যোগফল।
CODE:
long long first,second,third,n; // ফিবনাচ্চি সিরিজ খুব দ্রুত বাড়ে, তাই long long, এটা দিয়েও
// বড় n এর জন্য মান বের করা যাবে না
first=0;
second = third = 1; // হ্যাঁ, এমনে একবারে দুইটার মান change করা যায়।
// -> scan n, we would find n'th fibonacci number
// প্রতিবার আমরা third পদ বের করব যখন আমাদের আগের দুই(second, first) পদ যানা আছে।
for (int i = 3; i <= n; i += 1)
{
third = first + second; // n তম পদ আগের দুই পদের যোগফল।
first = second; // আগের second এখন first পদ হয়ে গেছে।
second = third; // আগের third এখন second পদ হয়ে গেছে।
// আগে first কে change ও পরে second কে change করা হয়েছে।
// উল্টোটা করলে কি কাজ করতো?
}
if(n == 1) // -> print 0 // first Fibonacci number is 0
else
// -> print third
( কোন একটা কারণে বাংলা কিছু যুক্ত বর্ণ ঠিকভাবে দেখাচ্ছে না। কষ্ট করে বুঝে নিও )