সি প্রোগ্রামিং এর পরিচিতি ও গঠন
এইচএসসি আইসিটি সি প্রোগ্রামিং: সি ভাষার ইতিহাস, ডেনিস রিচি, প্রোগ্রামের গঠন, হেডার ফাইল, মেইন ফাংশন এবং হ্যালো ওয়ার্ল্ড প্রোগ্রামের বিস্তারিত ব্যাখ্যা।
অধ্যায় ৫: প্রোগ্রামিং ভাষা - সি প্রোগ্রামিং এর পরিচিতি ও গঠন
- সি প্রোগ্রামিং এর পরিচিতি ও গঠন
- ৫০ বছরের পুরনো ভাষা কেন এখনও সেরা?
- সি ভাষার জন্মকথা (History of C)
- সি ভাষার প্রধান বৈশিষ্ট্যসমূহ
- সি প্রোগ্রামের গঠন (Structure)
- আমাদের প্রথম কোড: Hello World
- কোড বিশ্লেষণ - ১: #include <stdio.h>
- কোড বিশ্লেষণ - ২: int main()
- কোড বিশ্লেষণ - ৩: printf ও return
- সি প্রোগ্রাম রান করার ধাপসমূহ
- সারসংক্ষেপ (Summary)
লেকচার নোট ১: সি প্রোগ্রামিং এর পরিচিতি ও গঠন
আধুনিক প্রোগ্রামিং জগতের অন্যতম ভিত্তি হলো সি (C) প্রোগ্রামিং ভাষা। আজকের লেকচারে আমরা যেমন মার্স রোভার বা মহাকাশ অভিযানের জটিল প্রযুক্তির কথা শুনেছি, এই সবকিছুর মূলে রয়েছে প্রোগ্রামিং। সি ভাষাকে বলা হয় "প্রোগ্রামিংয়ের জননী" বা Mother of All Languages। কারণ, সি শিখলে পৃথিবীর যেকোনো প্রোগ্রামিং ভাষা শেখা সহজ হয়ে যায়। এইচএসসি আইসিটি পঞ্চম অধ্যায়ের প্রস্তুতির জন্য সি ভাষার ইতিহাস, গঠন এবং বেসিক সিনট্যাক্স বোঝা অত্যন্ত জরুরি। এখান থেকেই মূলত তোমাদের প্রোগ্রামিংয়ের হাতেখড়ি হবে।
সি ভাষার ইতিহাস ও বৈশিষ্ট্য
১৯৭২ সালে যুক্তরাষ্ট্রের বেল ল্যাবরেটরিতে (Bell Laboratories) ডেনিস রিচি (Dennis Ritchie) ইউনিক্স (UNIX) অপারেটিং সিস্টেম তৈরি করার জন্য সি ভাষা উদ্ভাবন করেন। এর আগে 'B' এবং 'BCPL' নামে দুটি ভাষা ছিল, সেগুলোর সীমাবদ্ধতা দূর করতেই 'C' এর জন্ম।
সি ভাষাকে "মিড লেভেল ল্যাঙ্গুয়েজ" (Mid-Level Language) বলা হয়। কারণ এটি মানুষের বোধগম্য হাই লেভেল ল্যাঙ্গুয়েজ (যেমন ইংরেজি শব্দের ব্যবহার) এবং মেশিনের বোধগম্য লো লেভেল ল্যাঙ্গুয়েজ (যেমন হার্ডওয়্যার নিয়ন্ত্রণ) - উভয়ের সুবিধাই প্রদান করে। অর্থাৎ, সি দিয়ে যেমন সফটওয়্যার তৈরি করা যায়, তেমনি সরাসরি হার্ডওয়্যার বা মেমোরি নিয়ন্ত্রণও করা যায়।
সংজ্ঞা (Definition): সি (C) হলো একটি স্ট্রাকচার্ড, প্রসিডিউরাল এবং মিড লেভেল প্রোগ্রামিং ভাষা যা ১৯৭২ সালে ডেনিস রিচি বেল ল্যাবরেটরিতে ইউনিক্স অপারেটিং সিস্টেম তৈরির উদ্দেশ্যে উদ্ভাবন করেন।
সি একটি স্ট্রাকচার্ড প্রোগ্রামিং ভাষা। এর মানে হলো, একটি বড় প্রোগ্রামকে ছোট ছোট অংশে বা ফাংশনে ভাগ করে সমাধান করা যায়। এতে ভুল নির্ণয় (Debug) করা এবং কোড পরিবর্তন করা সহজ হয়।
গুরুত্বপূর্ণ তথ্য (Important Facts):
- জনক: ডেনিস রিচি (Dennis Ritchie)
- উৎপত্তিস্থল: এটি অ্যান্ড টি বেল ল্যাবরেটরি (AT&T Bell Labs), যুক্তরাষ্ট্র
- সাল: ১৯৭২
- পূর্বসূরি ভাষা: B এবং BCPL
- প্রধান ব্যবহার: সিস্টেম সফটওয়্যার (যেমন: উইন্ডোজ, লিনাক্স কার্নেল) তৈরিতে।
সি প্রোগ্রামের আবশ্যিক গঠন (Structure of C Program)
মানুষের দেহের যেমন মাথা, হাত, পা ও হৃদপিণ্ড—এসব মিলিয়ে একটি পূর্ণাঙ্গ গঠন তৈরি হয়, তেমনি একটি সি প্রোগ্রামেরও সুনির্দিষ্ট গঠন বা কাঠামো রয়েছে। একটি আদর্শ সি প্রোগ্রামে সাধারণত ৬টি অংশ থাকে। নিচে চিত্রের মাধ্যমে এই গঠনটি দেখানো হলো:

এই ৬টি সেকশনের কাজ নিচে বিস্তারিত আলোচনা করা হলো:
-
ডকুমেন্টেশন সেকশন (Documentation Section): এখানে প্রোগ্রামের নাম, লেখকের নাম, তৈরির তারিখ বা প্রোগ্রামের উদ্দেশ্য কমেন্ট (Comment) হিসেবে লেখা হয়। এটি প্রোগ্রামের অংশ হলেও কম্পাইলার এটি পড়ে না বা এক্সিকিউট করে না।
-
লিংক সেকশন (Link Section): এই অংশে প্রয়োজনীয় হেডার ফাইলগুলো (Header Files) সংযুক্ত করা হয়। যেমন
printfবাscanfফাংশন ব্যবহার করতে হলে#include <stdio.h>লিখতে হয়। এটি মূলত লাইব্রেরি ফাংশনগুলোর সাথে আমাদের প্রোগ্রামের সংযোগ স্থাপন করে। -
ডেফিনিশন সেকশন (Definition Section): প্রোগ্রামে ব্যবহৃত বিভিন্ন কনস্ট্যান্ট (Constant) বা ধ্রুবক এখানে ডিফাইন করা হয়। যেমন:
#define PI 3.1416। -
গ্লোবাল ডিক্লারেশন সেকশন (Global Declaration Section): যেসব ভেরিয়েবল বা ফাংশন পুরো প্রোগ্রামের যেকোনো জায়গা থেকে ব্যবহার করা যায়, সেগুলোকে এখানে ঘোষণা করা হয়। এটি
main()ফাংশনের উপরে থাকে। -
মেইন ফাংশন সেকশন (Main Function Section): এটি সি প্রোগ্রামের আবশ্যিক অংশ। এখান থেকেই প্রোগ্রামের কাজ শুরু হয়। এর দুটি অংশ থাকে:
- Declaration Part: যেখানে ভেরিয়েবল ঘোষণা করা হয়।
- Executable Part: যেখানে মূল কাজ বা লজিক লেখা হয়। -
সাব-প্রোগ্রাম সেকশন (Sub-program Section): ব্যবহারকারী নিজের প্রয়োজনে কোনো ফাংশন তৈরি করলে (User-defined function) তা মেইন ফাংশনের পরে লেখা হয়।
পরীক্ষার টিপস (Exam Tip): পরীক্ষায় প্রায়ই 'সি প্রোগ্রামের গঠন চিত্রসহ বর্ণনা করো' (৩ বা ৪ মার্কস) প্রশ্নটি আসে। তখন উপরের ৬টি সেকশনের নাম এবং একটি নমুনা ডায়াগ্রাম আঁকা জরুরি। তবে মনে রাখবে, ছোট প্রোগ্রামে সব সেকশন থাকার প্রয়োজন নেই, কিন্তু Main Function Section থাকতেই হবে।
কোড বিশ্লেষণ: হেডার ফাইল ও মেইন ফাংশন
চলো একটি সাধারণ "Hello World" প্রোগ্রাম দেখে নিই এবং এর প্রতিটি অংশ বিশ্লেষণ করি। এটি সি প্রোগ্রামের বেসিক সিনট্যাক্স বুঝতে সাহায্য করবে।
#include <stdio.h> // Link Section
int main() { // Main Function Start
printf("Hello World"); // Executable Part
return 0; // End of program
}
১. #include <stdio.h>
এটি একটি প্রি-প্রসেসর ডিরেক্টিভ। এখানে stdio.h মানে হলো Standard Input Output header file। প্রোগ্রামে ইনপুট (যেমন scanf) এবং আউটপুট (যেমন printf) ফাংশন ব্যবহার করার জন্য এই ফাইলটি লিংক করতে হয়।
হেডার ফাইল (Header File): যে ফাইলে সি প্রোগ্রামের বিভিন্ন লাইব্রেরি ফাংশনের (যেমন printf, scanf, sqrt) প্রোটোটাইপ বা সংজ্ঞা সংরক্ষিত থাকে, তাকে হেডার ফাইল বলে। একে .h এক্সটেনশন দ্বারা প্রকাশ করা হয়।
২. int main()
এটি প্রোগ্রামের মূল ফাংশন। অপারেটিং সিস্টেম যখন প্রোগ্রামটি চালায়, তখন সবার আগে এই main() ফাংশনটি কল করে। int মানে হলো এই ফাংশনটি শেষে একটি পূর্ণসংখ্যা (Integer) রিটার্ন করবে।
৩. printf("Hello World");
printf একটি লাইব্রেরি ফাংশন যা আউটপুট স্ক্রিনে কোনো লেখা বা ফলাফল প্রদর্শন করে। এটি stdio.h ফাইলের অন্তর্গত। ডাবল কোটেশনের " " ভেতরের অংশটি হুবহু স্ক্রিনে দেখাবে।
৪. সেমিকোলন (;)
সি ভাষায় প্রতিটি স্টেটমেন্ট বা নির্দেশের শেষে সেমিকোলন দেওয়া বাধ্যতামূলক। এটি কম্পাইলারকে জানায় যে একটি লাইনের কাজ শেষ হয়েছে। এটি বাংলার 'দাড়ি' (।) বা ইংরেজির 'Full stop'-এর মতো।
৫. return 0;
এটি নির্দেশ করে যে প্রোগ্রামটি সফলভাবে শেষ হয়েছে। 0 অপারেটিং সিস্টেমকে সিগন্যাল দেয় যে কোনো এরর ছাড়াই কাজটি সম্পন্ন হয়েছে।
গুরুত্বপূর্ণ (Important): সি ভাষায় ব্যবহৃত প্রতিটি ক্ষুদ্রতম একককে (যেমন: main, printf, {, }, ;) টোকেন (Token) বলা হয়। সি ভাষায় প্রধানত ৬ ধরনের টোকেন আছে: Keywords, Identifiers, Constants, Strings, Special Symbols, এবং Operators।
গুরুত্বপূর্ণ সিনট্যাক্স: কমেন্ট এবং এসকেপ সিকুয়েন্স
কোড লেখার সময় প্রায়ই আমাদের নোট রাখা প্রয়োজন হয় বা আউটপুটকে সাজাতে হয়। এর জন্য কমেন্ট এবং এসকেপ সিকুয়েন্স ব্যবহৃত হয়।
কমেন্ট (Comments)
কোডের যে অংশ কম্পাইলার অনুবাদ করে না, তাকে কমেন্ট বলে। এটি মূলত প্রোগ্রামারদের বোঝার সুবিধার জন্য ব্যবহৃত হয়। সি ভাষায় দুই ধরণের কমেন্ট আছে:
১. সিংগেল লাইন কমেন্ট: // দিয়ে শুরু হয়।
২. মাল্টি লাইন কমেন্ট: /* দিয়ে শুরু এবং */ দিয়ে শেষ হয়।
এসকেপ সিকুয়েন্স (Escape Sequence)
আউটপুট সুন্দরভাবে সাজানোর জন্য কিছু বিশেষ ক্যারেক্টার ব্যবহার করা হয় যা ব্যাকস্ল্যাশ \ দিয়ে শুরু হয়। এদের এসকেপ সিকুয়েন্স বলে।
| সিকুয়েন্স | কাজ |
|---|---|
\n (New Line) |
কার্সরকে নতুন লাইনের শুরুতে নিয়ে যায়। |
\t (Tab) |
এক ট্যাপ বা নির্দিষ্ট পরিমাণ ফাঁকা জায়গা তৈরি করে। |
\" (Double Quote) |
আউটপুটে ডাবল কোটেশন প্রিন্ট করতে ব্যবহৃত হয়। |
\\ (Backslash) |
আউটপুটে একটি ব্যাকস্ল্যাশ প্রিন্ট করতে ব্যবহৃত হয়। |
উদাহরণ (Example):
printf("Name:\tRahim \nAge:\t18");
আউটপুট হবে:
Name: Rahim Age: 18
লক্ষ্য করো, \t এর কারণে নাম ও বয়সের আগে ফাঁকা জায়গা তৈরি হয়েছে এবং \n এর কারণে Age পরের লাইনে চলে গেছে।
প্রোগ্রাম এক্সিকিউশন বা রান করার ধাপ
আমরা যখন সি ভাষায় কোড লিখি (Source Code), কম্পিউটার কিন্তু তা সরাসরি বোঝে না। কম্পিউটার শুধু বোঝে ০ আর ১ (মেশিন ভাষা)। তাই আমাদের লেখা কোডকে মেশিনের ভাষায় রূপান্তর করতে হয়। এই প্রক্রিয়াটি কয়েকটি ধাপে সম্পন্ন হয়:

- সোর্স কোড তৈরি: এডিটর ব্যবহার করে প্রোগ্রামার কোড লেখে এবং
.cএক্সটেনশন দিয়ে সেভ করে (যেমন:test.c। - কম্পাইলিং (Compiling): কম্পাইলার সফটওয়্যার সোর্স কোডকে পড়ে এবং ভুল (Syntax Error) থাকলে তা জানায়। ভুল না থাকলে একে অবজেক্ট কোডে (.obj) রূপান্তর করে।
- লিংকিং (Linking): লিংকার সফটওয়্যার অবজেক্ট কোডের সাথে প্রয়োজনীয় লাইব্রেরি ফাইল (যেমন
stdio.hএর কোড) যুক্ত করে একটি এক্সিকিউটেবল ফাইল (.exe) তৈরি করে। - রানিং (Running): অবশেষে এই
.exeফাইলটি রান করা হয় এবং আমরা আউটপুট দেখতে পাই।
কম্পাইলার (Compiler): যে অনুবাদক প্রোগ্রাম সম্পূর্ণ সোর্স কোডকে একসাথে পড়ে, ভুল সনাক্ত করে এবং মেশিনের ভাষায় (Machine code) রূপান্তর করে, তাকে কম্পাইলার বলে।
সংক্ষিপ্ত সারাংশ (Quick Revision)
রিভিশন পয়েন্ট:
- সি একটি কেস সেনসিটিভ (Case Sensitive) ভাষা। অর্থাৎ main এবং Main এক নয়। সব কি-ওয়ার্ড ছোট হাতের অক্ষরে লিখতে হয়।
- প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন (;) দেওয়া বাধ্যতামূলক।
- main() ফাংশন ছাড়া সি প্রোগ্রাম রান করে না।
- হেডার ফাইল ছাড়া লাইব্রেরি ফাংশন (যেমন printf) কাজ করে না।
- সি ভাষাকে মিড লেভেল ল্যাঙ্গুয়েজ বলা হয় কারণ এটি হার্ডওয়্যার ও অ্যাপ্লিকেশন—উভয় স্তরেই কাজ করতে পারে।
সতর্কতা (Caution): কোড লেখার সময় অনেকেই void main() ব্যবহার করে, যা আধুনিক স্ট্যান্ডার্ড (ANSI C) অনুযায়ী সঠিক নয়। সবসময় int main() ব্যবহার করবে এবং শেষে return 0; লিখবে। এটি পরীক্ষকদের কাছে ভালো ইম্প্রেশন তৈরি করে।
পরিভাষা (Glossary)
| পরিভাষা (Term) | সংজ্ঞা (Definition) |
|---|---|
| Source Code | সি বা অন্য উচ্চস্তরের ভাষায় লেখা মূল প্রোগ্রাম যা মানুষ বুঝতে পারে। |
| Object Code | কম্পাইলার দ্বারা সোর্স কোডকে মেশিন ভাষায় রূপান্তর করার পর যা পাওয়া যায় (.obj ফাইল)। |
| Syntax | প্রোগ্রামিং ভাষায় কোড লেখার সুনির্দিষ্ট নিয়মকানুন বা ব্যাকরণ। |
| Linker | সিস্টেম সফটওয়্যার যা অবজেক্ট কোডের সাথে লাইব্রেরি ফাইল যুক্ত করে এক্সিকিউটেবল ফাইল (.exe) তৈরি করে। |
| IDE | Integrated Development Environment (যেমন Code::Blocks), যেখানে কোড লেখা, কম্পাইল এবং রান করা যায়। |