আমরা পূর্বের পর্বে জেনেছি সি প্রোগ্রামিং এর for লুপ স্টেটমেন্ট নিয়ে। এই পর্বে আমরা সি প্রোগ্রামিং এর while লুপ স্টেটমেন্ট নিয়ে বিস্তারিত আলোচনা করব।
while লুপকে মূলত for লুপের বিকল্প হিসেবে ব্যবহার করা হয়। আমাদের প্রোগ্রামে শর্ত সাপেক্ষে একাধিক স্টেটমেন্ট নির্দিষ্ট সংখ্যকবার নির্বাহ করতে এই লুপ ব্যবহার করা হয়। অর্থাৎ while লুপে যতক্ষণ না পর্যন্ত কন্ডিশন মিথ্যা হয়, ততক্ষণ পর্যন্ত এই লুপের স্টেটমেন্ট চলতে থাকবে। আর যদি আমাদের লুপের expression প্রথমেই মিথ্যা হয় তাহলে এর স্টেটমেন্ট আর চলবে না বা কাজ করবে না। তখন while লুপের বাইরে গিয়ে প্রোগ্রামের পরবর্তী স্টেটমেন্ট গুলো রান করা শুরু করে।
initialization;while(condition){----------statements----------increment/decrement;}
এখানে, প্রথমেই initialization মানে একটা প্রাথমিক মান নির্ধারণ করে দিতে হয় নতুবা প্রাথমিক মান 0 থেকে শুরু হয়। এরপর while কিওয়ার্ডের প্যারেন্থেসিসের ভিতরে condition বা শর্ত দিতে হয়। যদি আমাদের দেওয়া condition সত্য হয় তাহলে while লুপটির বডিতে যে স্টেটমেন্ট গুলো থাকবে সেগুলো বারবার এক্সিকিউট হবে আর আমাদের দেওয়া শর্ত যদি সত্য না হয়, তাহলে while লুপটির ভিতরে আর ডুকবে না অর্থাৎ এই স্টেটমেন্ট আর এক্সিকিউট হবে না। তখন while লুপের বাইরে গিয়ে প্রোগ্রামের পরবর্তী স্টেটমেন্ট গুলো রান করা শুরু করবে।
এখন আমরা ১ থেকে ১০ পর্যন্ত উল্টা প্রিন্ট করতে চাই, তাহলে-
#include <stdio.h>int main(){int number=10;while(number>=1){printf("%d ",number);number--;}return 0;}
10 9 8 7 6 5 4 3 2 1
আমরা প্রথমে ইন্টিজার টাইপ number ভেরিয়েবলে 10 এসাইন করে দিয়েছি কারন আমরা চেয়েছি যাতে প্রথমে ১০ থেকে প্রিন্ট শুরু হোক। এরপর while কন্ডিশনের ভিতরে বলে দিয়েছি, যতক্ষন না পর্যন্ত number এর মান 1 এর সমান বা ছোট না হয় ততক্ষন পর্যন্ত while লুপের বডির স্টেটমেন্ট চলতে থাকবে। এরপর যখন printf ফাংশনের ভিতরে আসলো তখন দেখলো, তাকে %d দিয়ে ইন্টিজার নাম্বার প্রিন্ট করার জন্য বলা হয়েছে। তারপর number-- দিয়ে এক এক করে যাতে হ্রাস বা কমে সে জন্য বলা হয়েছে। আমরা প্রথমে number=10 দিয়েছি এর পর এটি এক এক করে কমতে কমতে 10 থেকে 1 এ আসবে।
আগের পর্বে আমরা for লুপ দিয়ে জোড়-বেজোড় বের করার প্রোগ্রাম করেছিলাম। একই প্রোগ্রাম যদি আমরা while লুপ দিয়ে করতে চাই, তাহলে আমাদের কোডের ধরণ এমন হবে-
জোড় সংখ্যার জন্য#include <stdio.h>int main(){int i = 0;while(i <= 100){printf("%d ", i);i = i+2; // i+=2;}return 0;}
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 4244 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 8284 86 88 90 92 94 96 98 100
বেজোড় সংখ্যার জন্য#include <stdio.h>int main(){int i = 1;while(i <= 100){printf("%d ", i);i = i+2; // i+=2;}return 0;}
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 4345 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 8385 87 89 91 93 95 97 99
এখন 1 থেকে 100 পর্যন্ত সব সংখ্যার যোগফল যদি while লুপ দিয়ে বের করতে চাই তাহলে-
#include <stdio.h>int main(){int i = 1, sum = 0;while(i<=100){sum = sum+i; // sum += i; same concepti++;}printf("Sum: %d \n",sum);return 0;}
Sum: 5050
ছোটবেলায় কমবেশি আমরা সবাই নামতা লিখেছি, আজ while লুপ দিয়ে কিভাবে নামতা লিখতে হয় তা দেখি-
#include <stdio.h>int main(){int i = 1, number;printf("আপনি কত নামতা প্রিন্ট করতে চানঃ ");scanf("%d", &number);while(i <= 10){printf("%d x %d = %d\n", number, i, number*i);i++;}return 0;}
আপনি কত নামতা প্রিন্ট করতে চানঃ 33 x 1 = 33 x 2 = 63 x 3 = 93 x 4 = 123 x 5 = 153 x 6 = 183 x 7 = 213 x 8 = 243 x 9 = 273 x 10 = 30
এখন আমরা while লুপ ব্যবহার করে uppercase alphabets (A to Z) and lowercase alphabets (a to z) প্রিন্ট করবো-
#include <stdio.h>int main(){char upperAlphabet = 'A';char lowerAlphabet = 'a';printf("Uppercase alphabets:\n");while(upperAlphabet <= 'Z'){printf("%c ", upperAlphabet);upperAlphabet++;}printf("\nLowercase alphabets:\n");while(lowerAlphabet <= 'z'){printf("%c ", lowerAlphabet);lowerAlphabet++;}return 0;}
Uppercase alphabets:A B C D E F G H I J K L M N O P Q R S T U V W X Y ZLowercase alphabets:a b c d e f g h i j k l m n o p q r s t u v w x y z
কোডটি দেখে ভয় পাওয়ার কিছু নাই, একদম সহজ কোড। শুধু কোডের লজিকটা বুঝার চেষ্টা করেন। প্রথমেই আমরা Uppercase আলফাবেটের জন্য char upperAlphabet = 'A' এসাইন করেছি। char মানে ক্যারেক্টার টাইপ ভেরিয়েবলের ভেতরে ক্যাপিটাল A এসাইন করেছি আবার char lowerAlphabet = 'a' এসাইন করেছি Lowercase অ্যালফাবেটের জন্য।
এরপর Uppercase এর জন্য while লুপে বলে দিয়েছি যতক্ষণ না পর্যন্ত upperAlphabet <= 'Z' না হয় ততক্ষণ পর্যন্ত এই স্টেটমেন্ট যাতে চলতে থাকে। আবার Lowercase এর জন্য while লুপে বলে দিয়েছি যতক্ষণ না পর্যন্ত lowerAlphabet <= 'z' না হয় ততক্ষণ পর্যন্ত এই স্টেটমেন্ট যাতে চলতে থাকে। এরপর উভয় আলফাবেট প্রিন্ট করেছি।