জোড়-বিজোড় লুপের শর্ত
ক্যাম্পাসের যেদিকে যাবি, দেখবি কাপল আর কাপল। জোড়ায় জোড়ায় তারা ক্লাসে যায়। জোড়ায় জোড়ায় লাইব্রেরিতে যায়। জোড়ায় জোড়ায় ক্যান্টিনে যায়। জোড়ায় জোড়ায় বাথরুমে যায়। অন্তত একজন বাথরুমে গেলে আরেকজন বাথরুমের সামনে গার্ড হিসেবে দাঁড়িয়ে থাকে। তবে সেই সময় যে বাইরে দাঁড়িয়ে থাকে, তাকে সিঙ্গেল বা বিজোড় ভেবে প্রপোজ করে বসিস না আবার। একটু পরে দেখবি, বাথরুমের দরজা খুলে আরেকজন এসে ঠিকই বিজোড়কে জোড় বানিয়ে ফেলছে।
সংখ্যার ক্ষেত্রেও জোড়-বিজোড় সংখ্যা আছে
জোড়সংখ্যা, যেমন— 2, 4, 6, 8, 10, 12, 14, 16...
আবার বিজোড়সংখ্যা, যেমন— 1, 3, 5, 7, 9...
কিন্তু কোনটা জোড় আর কোনটা বিজোড় সংখ্যা, সেটা কীভাবে বুঝবি? বুঝার সিম্পল সিস্টেম আছে। জাস্ট কোনো সংখ্যাকে 2 দিয়ে ভাগ করলে ভাগশেষ 0 হয়, তখন সেই সংখ্যাটি জোড় সংখ্যা এবং যখন কোনো সংখ্যাকে 2 দিয়ে ভাগ করার পরে ভাগশেষ 1 থাকে, তখন সেই সংখ্যাকে আমরা বিজোড় সংখ্যা বলি।
এখন জোড়সংখ্যার জন্য যদি আমরা কোড লিখি। একটা লুপের ভিতরে
for (let i = 0; i < 20; i++) {
if (i % 2 == 0) {
console.log(i);
}
}
Output: 0 2 4 6 8 10 12 14 16 18এই কোডটি শুধু জোড় সংখ্যাগুলো প্রিন্ট করে দেখাচ্ছে।
আবার, যদি বিজোড় সংখ্যার জন্য আমরা কোড লিখি:
for (let i = 0; i < 20; i++) {
if (i % 2 == 1) {
console.log(i);
}
}
Output: 1 3 5 7 9 11 13 15 17 19এই কোডটি আমাদের বিজোড় সংখ্যাগুলো প্রিন্ট করবে। তুই চাইলে if-এর কন্ডিশন এভাবেও লিখতে পারিস— i % 2 != 0। "Not equal" সম্পর্কে আমরা অনেক আগেই জেনেছি। চাইলে তুই এই লজিকটাও ব্যবহার করে বিজোড় সংখ্যা প্রিন্ট করতে পারবি।
ওপরের কোড দুটিতে আমরা 0 থেকে 20-এর আগ পর্যন্ত যতগুলো জোড় ও বিজোড় সংখ্যা রয়েছে, তা প্রিন্ট করেছি।
এই ঠিক একই কাজ আমরা চাইলে কন্ডিশন ছাড়াও করতে পারি। সেটা কীভাবে? শুধুমাত্র আমাদের for লুপের, লুপ ভেরিয়েবল চেইঞ্জ করার যে পার্ট রয়েছে, সেখানে একটু পরিবর্তন করে:
সাধারণত i++ দিয়ে লুপ চলার সময় i-এর মান এক এক করে বাড়ানো হয়। তবে লুপ চলার সময় i-এর মান 2 করে বাড়াতে চাইলে i++ এর জায়গায় i = i + 2 বা i += 2 লিখলে লুপ যতবার চলবে, ততবার i-এর মান 2 করে বাড়বে।
for (let i = 1; i < 20; i = i + 2) {
console.log(i);
}
Output: 1 3 5 7 9 11 13 15 17 19প্রথমে আমাদের লুপ ভেরিয়েবলের মান ছিল i = 1 এবং যখন একটি লুপ কমপ্লিট হলো, এই লুপ ভেরিয়েবলের সাথে অর্থাৎ i = i + 2 হয়েছে। মানে 1 + 2 = 3;-এর পর ভেরিয়েবলের মান 3 হয়েছে, যা কি না একটা বিজোড়সংখ্যা।
আবার 3 + 2 = 5
আবার 5 + 2 = 7
...
এভাবে করে প্রতিবারই 2 যোগ করার মাধ্যমে আমরা একটার পর একটা বিজোড় সংখ্যা পেতে পারি।
একইভাবে তুই চাইলে 2 থেকে শুরু করে 20 পর্যন্ত সবগুলা জোড়সংখ্যাও পেতে পারস।
for (let i = 2; i < 20; i = i + 2) {
console.log(i);
}
Output: 2 4 6 8 10 12 14 16 18তুই খেয়াল করলে দেখবি, এখানে 20 পর্যন্ত আউটপুট দেখায়নি, 18-তে শেষ। কারণ, for লুপের মাঝখানে শর্ত আছে 20-এর কম। তাই 20 যখন গেছে, তখন শর্ত মিথ্যা হয়ে গেছে, আর লুপ সাথে সাথে বন্ধ হয়ে গেছে। তুই যদি 20 হলেও লুপটা চালাতে চাস, তাহলে শর্তটা হালকা একটু মোডিফাই করে দে।
for (let i = 2; i <= 20; i = i + 2) {
console.log(i);
}
Output: 2 4 6 8 10 12 14 16 18 20ভাজতে ভাজতে বিভাজ্য
তোকে একটা প্রবলেম দেয়া হলো— এক থেকে ত্রিশ পর্যন্ত এমন সংখ্যাগুলো প্রিন্ট করতে হবে, যা 5 দিয়ে বিভাজ্য। তাহলে তুই সেটা কীভাবে করবি?
প্রবলেমটা খুবই সহজ। তুই একটু নিজে থেকে চিন্তা করলেই অ্যান্সার দিতে পারবি।
না পারলে যে খুব একটা প্রবলেম হবে, তা নয়। আমরা একই জিনিস ঘুরিয়ে-ফিরিয়ে বারবার প্র্যাকটিস করব, যার মাধ্যমে আমাদের কাছেও এইসব প্রবলেমগুলো ডাল-ভাতের মতো সহজ মনে হবে।
প্রথমেই 1 থেকে 30 পর্যন্ত একটি লুপ চালা:
for (let i = 1; i <= 30; i++) {
}এখন তোকে এমন একটা কন্ডিশন দিতে হবে, যেটার মাধ্যমে শুধু ওই সংখ্যাগুলো থাকবে, যেগুলো 5 দিয়ে বিভাজ্য। একটু চিন্তা করে দেখ, এরকমটা আমরা আগে কোথাও করেছি কি না। হ্যাঁ, করেছি। কীভাবে?
i % 2 == 0 কন্ডিশনটা তোর চেনা চেনা লাগছে কি না? দেখ তো!
হ্যাঁ, ঠিক এভাবেই 2 দিয়ে বিভাজ্য কি না অর্থাৎ 2 দিয়ে ভাগ যাচ্ছে কি না, সেটা চেক করছি। সো, সেটা যদি করতে পারস, তাহলে 5 দিয়ে ভাগ যাচ্ছে কি না, সেটা বের করতে পারবি না? অবশ্যই পারবি। জাস্ট 2-এর জায়গায় 5 বসিয়ে i % 5 == 0 করে ফেল। তারপর এইটাকে একটা if-এর শর্ত হিসেবে ইউজ করে তার ভিতরে কনসোল লগ করে ফেল।
for (let i = 1; i <= 30; i++) {
if (i % 5 == 0) {
console.log(i);
}
}
Output: 5 10 15 20 25 30 কোডটা খুব মজার ছিল, তাই না?
এখন যদি তোকে একটু ব্যতিক্রমভাবে বলি যে, 1 থেকে 30 পর্যন্ত এমন সংখ্যাগুলো প্রিন্ট কর, যা 3 দিয়ে বিভাজ্য। আশা করি এটা তুই খুব সহজেই করে ফেলবি।
for (let i = 1; i <= 30; i++) {
if (i % 3 == 0) {
console.log(i);
}
}
Output: 3 6 9 12 15 18 21 24 27 30 আবার ধর, 1 থেকে 30 পর্যন্ত এমন সংখ্যাগুলো প্রিন্ট কর, যা 3 অথবা 5 দিয়ে বিভাজ্য।
সেটা তুই একসাথে কীভাবে করবি? খুবই সহজ:
for (let i = 1; i <= 30; i++) {
if (i % 5 == 0 || i % 3 == 0) {
console.log(i);
}
}
Output: 3 5 6 9 10 12 15 18 …… 30এখানে আমরা OR (||) অপারেটরটি ব্যবহার করেছি, যেটা আমরা অনেক আগেই শিখেছি।
এখন যদি তোকে বলা হয়, 3 এবং 5 উভয় দিয়ে বিভাজ্য সংখ্যাগুলো প্রিন্ট কর, তাহলে কি করতে পারবি?
খুবই সহজ। শুধু OR অপারেটরের জায়গায় AND(&&) অপারেটর ব্যবহার করতে হবে:
for (let i = 1; i <= 30; i++) {
if (i % 5 == 0 && i % 3 == 0) {
console.log(i);
}
}
Output: 15 30 কি, বিষয়গুলো সহজ না?
এখন যদি তোকে নতুন একটা প্রবলেম সলভ করতে বলি, তুই কি সেটা পারবি? আশা করি তুই পারবি।
Practice:
- তোর কাজ হবে 20 থেকে 50 পর্যন্ত যে সকল সংখ্যা 7 দিয়ে বিভাজ্য, তা আউটপুট হিসেবে দেখা।
- এইবার 40 থেকে 80 পর্যন্ত যে সকল সংখ্যা 5 দিয়ে এবং 7 দিয়ে বিভাজ্য, তা আউটপুট হিসেবে দেখা।
- এখন তোর প্রবলেম হলো 1 থেকে 40 পর্যন্ত যে সকল সংখ্যা 13 দিয়ে বিভাজ্য, তাদের যোগফল কর।
- For লুপ দিয়ে 1 থেকে 50 পর্যন্ত লুপ চালাবি। তবে লুপ চালানোর সময় লুপ ভেরিয়েবলের মান প্রত্যেকবার 4 করে বাড়াবি।
- 0 থেকে 100 পর্যন্ত সব সংখ্যাগুলো প্রিন্ট কর, যা 9 এবং 6 দিয়ে বিভাজ্য।
- 1 থেকে 50 পর্যন্ত এমন সংখ্যাগুলো প্রিন্ট কর, যা 3 এবং 4 উভয়ের দ্বারা বিভাজ্য এবং সংখ্যাগুলোর যোগফল বের কর।