মঙ্গলবার, ২৭ ডিসেম্বর, ২০১৬

ফ্লো চার্ট (Flow Chart)

·   0

ফ্লো চার্ট (বাংলায় প্রবাহ চিত্র)-এর নাম আমরা সবাই কমে বেশি শুনে থাকি। এখন ফ্লো চার্ট জিনিসটা কী, এমন প্রশ্ন অনেকের মনেই আসে। ফ্লো চার্ট হচ্ছে এক ধরণের ডায়াগ্রাম বা চিত্র যা কোনো অ্যালগোরিদম, কাজের ধারা বা প্রসেস-কে চিত্রের মাধ্যমে বিভিন্ন জ্যামিতিক চিহ্ন বা symbol দ্বারা প্রকাশ করে এবং সেই জ্যামিতিক চিহ্ন বা symbol গুলো তীরচিহ্ন দ্বারা একে অপরের সাথে যুক্ত থাকে।
ফ্লো চার্টের মাধ্যমে একটি প্রোগ্রামের খুঁটিনাটি অংশগুলো খুব সহজেই বুঝানো যায়। যেমনঃ বাড়ি তৈরি করার সময় একজন আর্কিটেক্ট বাড়ির ডিজাইন করে আমাদের খুব সহজেই দেখাতে পারেন যে বাড়িটির কোথায় কী কী জিনিস থাকবে। ফ্লো চার্টের মাধ্যেমেই এই একই কাজই করা হয়। অর্থাৎ, একটি ফ্লো চার্ট বানানোর উদ্দেশ্য হলো একটি প্রোগ্রাম কীভাবে সমাধান করা হয়েছে, সেটি বিভিন্ন ডায়াগ্রাম বা চিহ্নের সাহায্যে অন্যকে বুঝানো।
ফ্লো চার্টের দুইটি প্রকারভেদ আছেঃ
  • ডাটা ফ্লো চার্ট ।
  • প্রসেস ফ্লো চার্ট।
প্রোগ্রামাররা ডাটা ফ্লো চার্ট ব্যবহার করে থাকে। কোন জায়গা থেকে ডাটা আসছে, ডাটা কিভাবে পরিবর্ধন হচ্ছে এবং কোথায় জমা হচ্ছে এসব চিহ্নিত করার জন্য প্রোগ্রামাররা ডাটা ফ্লো চার্ট ব্যবহার করে।
প্রসেস ফ্লো চার্ট কোন প্রসেস বা কাজকে ডকুমেন্ট আকারে দেখানোর জন্য, একটি কাজের কার্যকারিতা বা efficiency বুঝানোর জন্য, কোন প্রশিক্ষণ বা ট্রেনিং এর জন্য ব্যবহার করা হয়।
ফ্লো চার্ট ছোটখাট প্রসেস বা প্রোগ্রামের জন্য ব্যবহার করা হয়ে থাকে। ফ্লো চার্টে সাধারণত দুই ধরণের বাক্স ব্যবহার করা হয়ঃ
  • প্রসেসিং স্টেপঃ এই ধাপকে এ্যাকটিভিটি বা কার্যক্রম ধাপও বলা হয়ে থাকে। একে আয়তাকার বাক্স দ্বারা প্রকাশ করা হয়।
  • ডিসিশন স্টেপ বা সিদ্ধান্ত ধাপঃ এই ধাপকে ডায়মন্ড বা হীরক আকৃতি দ্বারা প্রকাশ করা হয়।
নিচের ছবিতে আমি একটি ফ্লো চার্টের বিভিন্ন আকৃতির পরিচয় দিয়েছিঃ

আমরা একটা ছোট্ট উদাহরণের মাধ্যমে ফ্লো চার্টের ব্যাপারটা বোঝার চেষ্টা করি। ধরা যাক, তুমি একজন সৌখিন মানুষ। তোমার শখ গলফ খেলা। তুমি মনে করলে শুক্রবার গলফ খেলতে বের হবে, যদি আবহাওয়া ভাল থাকে। বাংলাদেশে আজকাল আবার হুটহাট বৃষ্টি চলে আসে। তাই বের হওয়ার আগে তুমি আবহাওয়ার সর্বশেষ খোঁজ খবর নিয়ে বের হবে। এর জন্য তোমাকে প্রথমেই যে কাজটি করতে হবে সেটি হলো আবহাওয়ার চ্যানেলে গিয়ে বা মোবাইলের অ্যাপস থেকে weather forecast দেখতে হবে। তারপর সিদ্ধান্ত নিতে হবে, যদি বৃষ্টি হওয়ার সম্ভাবনা থাকে তাহলে তুমি কী করবে আর না থাকলেই বা কী করবে। বৃষ্টি থাকলে তুমি ঘর থেকে বের হবে না আর বৃষ্টি না থাকলে বের হবে। এখন এই পুরো বিষয়টা যদি আমরা ফ্লো চার্টের মাধ্যমে দেখি তাহলে চিত্রটা হবে এমনঃ

এই ফ্লো চার্টটিতে প্রথমেই আমরা ফ্লো চার্টের নিয়মানুযায়ী start দিয়ে শুরু করেছি , ওভাল বাক্স দিয়ে সেটিকে চিহ্নিত করেছি। তারপর আমরা ওয়েদার চ্যানেল দেখার কাজটি করেছি। এখানে আমরা প্রসেসিং এর জন্য আয়তাকার চিহ্ন ব্যবহার করেছি, কারণ এখান থেকেই আমরা আমাদের সিদ্ধান্ত বা ডিসিশন নেয়ার ধাপের দিকে যাবো। পরের ধাপে আছে ডিসিশন বা সিদ্ধান্ত ধাপ। সেখানে লেখা আছে “Rain Predicted?”, এখানে লক্ষ্য করে দেখো, ডিসিশন বা সিদ্ধান্ত ধাপে আমাদের অ্যারো বা তীর চিহ্ন আছে দুইটি; যা yes/no দিয়ে চিহ্নিত করা। যদি yes হয় তাহলে আমরা বলছি “Stay Home” এবং সেখান থেকে আরেকটি অ্যারো দিয়ে ফ্লো চার্টটি Stop করে দিচ্ছি। আবার যদি “Rain Predicted”-এ ডিসিশন হয় no, তাহলে আমরা “Play Golf” এর কাজ প্রসেসিং করে Stop ধাপে চলে যাচ্ছি। এখানে মনে রাখার বিষয় যে, ফ্লো চার্চের ডিসিশন সবসময় হয় ডান-বাম অথবা নিচের দিকে যাবে। কখনো উপরের দিকে যাবে না। কারণ, কোন কিছুর Flow সবসময় উপর থেকে নিচের দিকে আসে।
একটি সহজ প্রোগ্রামিং সমস্যার মাধ্যমে আমরা একটি ফ্লো চার্ট তৈরি করার চেষ্টা করি । ধরা যাক, আমরা দুইটি সংখ্যা যোগ করার জন্য একটি প্রোগ্রাম লিখবো। প্রোগ্রামটি হবে এমনঃ
#include
int main()
{
    int a,b,total;
    scanf("%d %d", &a, &b);
    total = a + b;
    printf("%d\n",total);
    return 0;
}
প্রোগ্রামটির জন্য আমরা যদি ফ্লো চার্ট লিখি তাহলে হবে এমনঃ

অন্যান্য ফ্লো চার্টের মতই এটা start দিয়ে শুরু হয়েছে। যেহেতু দুইটি নাম্বার ইনপুট নেয়ার দরকার আছে আমাদের, তাই আমরা এখানে Input A, Input B নিয়েছি এবং সেটিকে সামান্তরিক চিহ্নের মাধ্যমে দেখিয়েছি। তবে, আলাদা আলাদা ভাবে এভাবে ইনপুট না নিয়েও পাশাপাশি Input A,B অথবা Read A,B এভাবেও ফ্লো চার্টে ইনপুট নেয়ার কাজটি দেখানো যায়। তারপর আমরা a,b দুইটি যোগ করে একটি Total ভ্যারিয়েবলে রেখেছি এবং এর পরের ধাপে Total প্রিন্ট করেছি। সবশেষে আমরা stop দিয়ে ফ্লো চার্টটি শেষ করেছি।
এবার যদি আমরা লুপ সংক্রান্ত একটি কোডের কথা চিন্তা করি, যেখানে ১ থেকে ১০০ পর্যন্ত বিজোড় সংখ্যা বের করার প্রোগ্রাম লিখতে হবে। প্রোগ্রামটি হবে এমনঃ
#include
int main()
{
    int i=0;
    while(i<=100)
    {
        if(i%2 != 0)
        {
            printf("%d\n",i);
        }
        i++;
    }
    return 0;
}
এই প্রোগ্রামটিতে আমরা while লুপের সাহায্যে 100 পর্যন্ত লুপটি চালিয়েছি এবং লুপের ভিতরে বিজোড় সংখ্যা বের করার কন্ডিশন দিয়েছি। বিজোড় সংখ্যা বা odd numbers বের করার জন্য if কন্ডিশনটিতে i এর যেসকল মানকে 2 দ্বারা ভাগ করলে ভাগশেষ শূন্য হবে না সেই সংখ্যাগুলোকে আমরা প্রিন্ট করেছি। এই প্রোগ্রামটির ফ্লো চার্টে আমাদের ডিসিশন স্টেপ আসবে দুইটিঃ একটি while এর জন্য এবং একটি if এর জন্য। ফ্লো চার্টটি নিম্নরূপঃ



এখানে প্রথমেই আমরা i এর মান 0 এ্যাসাইন করে দিয়েছি, যেহেতু পরবর্তীতে আমরা i এর মান এক করে ইনক্রিমেন্ট করবো। তারপর আমরা while (i<=100) reached ডিসিশন ধাপে গিয়েছি। খেয়াল করে দেখো, এই ডিসিশন থেকে yes/no দিয়ে দুইটি তীর চিহ্ন বের হয়েছে। আমাদের প্রোগ্রামের লজিক আমাদের বলছে যতক্ষণ না i এর মান ১০০ এর সমান বা এর থেকে ছোট থাকছে , ততক্ষণ আমাদের if(i%2 !=0) কন্ডিশন তার কাজ করে যাচ্ছে এবং odd নাম্বার বা বিজোড় সংখ্যাগুলো প্রিন্ট করে যাচ্ছে। একই সাথে লুপটি সামনে এগিয়ে যাচ্ছে, i এর মান compute i= i+1 এ যেয়ে এক এক করে বৃদ্ধি পাচ্ছে। যখন i এর মান 100 এর বড় হয়ে যাবে, তখন ফ্লো চার্ট stop হয়ে যাবে।
প্রশ্ন আসতে পারে, ফ্লো চার্ট ব্যবহার করার সুবিধা কী? প্রবলেম সল্ভিং এর সময় ফ্লো চার্ট ব্যবহার করে আমরা একটি প্রবলেমকে ছোট ছোট অনেকগুলো সুস্পষ্ট ভাগে ভাগ করতে পারি। অনেক সময় দেখা যায়, প্রোগ্রামিং সমস্যা সমাধান করার সময় আমরা খুব গুরুত্বপূর্ণ কোন কিছু বাদ দিয়ে যাচ্ছি। কিন্তু যদি ফ্লো চার্টের মাধ্যমে আমরা আগে প্রবলেমটি analysis করি তাহলে আমাদের খুঁটিনাটি জিনিস বাদ যাওয়ার সম্ভাবনা কমে। সেইসাথে অতিরিক্ত জিনিস, যা আমাদের প্রোগ্রামের requirements এ নেই, সেগুলো বাদ দেয়ার মাধ্যমে একটি প্রোগ্রামকে আরো বেশি efficient করা যায়।