সি প্রোগ্রামিং ভাষার শেখার ধারণা নিন বিস্তারিত সহ

 প্রোগ্রামিং ভাষার ধারণাঃ

কম্পিউটার একটি বোকা যন্ত্র, ইহা প্রদত্ত নির্দেশ বহির্ভূত কোন কাজ নিজ সিদ্ধান্তে করতে পারে না। তাই কম্পিউটারকে দিয়ে কোন কার্য সমাধা করতে নির্দিষ্ট নিয়মে লিখিত কিছু ইন্সট্রাকশন দিতে হয়। কম্পিউটার ইনপুট ডিভাইসের মাধ্যমে উক্ত নির্দেশ এবং ডাটা গ্রহন করে প্রধান মেমোরীতে সংরক্ষিত প্রোগ্রামের নির্দেশ অনুযায়ী কেন্দ্রীয় প্রকৃয়াকরণ অংশে (CPU) ডাটা প্রকৃয়া করে প্রাপ্ত ফলাফল আউটপুট ডিভাইসের মাধ্যমে প্রদর্শণ করে। এছাড়া প্রকৃয়াকৃত ফলাফল এবং ডাটা কম্পিউটারের স্থায়ী মেমোরীতে (Hard Drive, DVD) সংরক্ষণ এবং প্রয়োজনানুযায়ী উত্তোলন করতে পারে। একটি কম্পিউটার যে সকল মৌলিক কাজ করতে পারে সেই সকল কাজের নির্দেশ প্রদানের জন্য নির্ধারিত বাইনারী সংখ্যাকে ইন্সট্রাকশন বলা হয়। কম্পিউটারকে দিয়ে একটি কাজ করানোর জন্য নির্দিষ্ট নিয়মে সজ্জিত এরূপ একসেট প্রয়োজনীয় ইন্সট্রাকশনের সমষ্টিকে প্রোগ্রাম বলা হয়। যে ভাষায় কম্পিউটারকে নির্দেশ প্রদান করা হয় বা প্রোগ্রাম রচনা করা হয় তাকে প্রোগ্রামিং ভাষা বলা হয়।
কম্পিউটার উন্নয়নের প্রাথমিক যুগ হতে আজ পর্যন্ত প্রোগ্রামিং ভাষার বিভিন্ন উন্নয়ন হয়েছে এবং আজও হচ্ছে। কম্পিউটারের প্রাথমিক যুগে প্রোগ্রাম রচনায় ব্যবহৃত হতো মেসিন ভাষা। মেসিন ভাষার প্রতিটি নির্দেশ কিছু সংখ্যক 1 এবং 0 এর সমষ্টি। মেসিন ভাষায় লিখিত প্রোগ্রাম কম্পিউটার সরাসরি বুঝতে পারে ও সম্পাদন করতে পারে কিন্তু মানুষের পক্ষে এই ভাষা বুঝা ও ব্যবহার করা বেশ কঠিন। তাছাড়া মেসিন ভাষায় লিখিত কোন প্রোগ্রামে ত্রুটি হলে তা খুজে বের করা বেশ পরিশ্রমের কাজ এবং এত সময় সাপেক্ষ ব্যপার যে উক্ত সময়ে নতুন করে প্রোগ্রাম লেখাই সহজ। এ সকল সমূহ অসুবিধা দুর করতে পরবর্তী সময়ের গবেষকগণ উদ্ভাবন করলেন এ্যসেম্বলি ভাষা, যাতে মেসিন ভাষার ইন্সট্রাকশনসমূহকে মানুষের বোধগম্য সংক্ষিপ্ত প্রতিকী নাম দেয়া হলো যাকে নিমোনিকস (Nmemonics) বলা হয়। যে প্রোগ্রামিং ভাষায় ইন্সট্রাকশন, কম্পিউটারের মেমোরী লোকেশন ইত্যাদিকে সংক্ষিপ্ত প্রতীকি নামে প্রকাশ করা হয় তাকে এ্যসেম্বলী ভাষা বলা হয়। এ্যসেম্বলী ভাষায় লিখিত প্রোগ্রাম মানুষ সরাসরি বুঝতে সক্ষম হলেও কম্পিউটার তা বুঝতে পারে না, তাই একে মেসিন ভাষায় রূপান্তরের প্রয়োজন হয়। যে প্রোগ্রামের সাহায্যে এ্যসেম্বলী ভাষায় লিখিত প্রোগ্রামকে মেসিন ভাষায় রূপান্তর করা হয় তাকে এ্যসেম্বলার প্রোগ্রাম বলা হয়। এ্যসেম্বলী ভাষায় লিখিত প্রোগ্রাম মেসিন ভাষার তুলনায় কিছুটা সহজবোধ্য হলেও তা ছিল মেসিন ভিত্তিক ইউনিক, তাই এক মাইক্রোপ্রসেসরের জন্য লিখিত এ্যসেম্বলী প্রোগ্রাম অন্য মেসিনে ব্যবহার উপযোগী ছিলনা, তাছাড়া এ্যসেম্বলী ভাষায় ভেরিয়েবল, ফাংশন, এ্যারে ইত্যাদি ব্যবহারের সুবিধা না থাকায় তা প্রগতিশীল প্রোগ্রামিং এর জন্য সহায়ক ছিল না। এ সকল সীমাবদ্ধতা দুর করতে সময়ের বিবর্তনের সাথে সাথে গবেষকগণ উদ্ভাবন করলেন হাই লেভেল ভাষা BASIC, COBOL, C ইত্যাদি। হাই লেভেল ভাষায় ব্যবহৃত হয় মানুষের ব্যবহৃত বিভিন্ন শব্দ এবং বাক্য। হাই লেভেল ভাষায় লিখিত প্রোগ্রামও কম্পিউটার বুঝতে পারে না, তাই এ ভাষায় লিখিত প্রোগ্রামকে মেসিন ভাষায় রূপান্তরের প্রয়োজন হয়। সাধারনতঃ কম্পাইলার নামক একটি জটিল প্রোগ্রামের সাহায্যে এই রূপান্তরের কাজ করা হয়।
learn c programming
Learn C Programming


C ভাষা উন্নয়নের ইতিহাসঃ

হাই লেভেল ল্যাংগুয়েজের ইতিহাসে সর্বপ্রথম যে ভাষা উন্নয়ন হয় তার নাম FORTRAN, এর অর্থ Formula Translation। ১৯৫৪ সাল থেকে ১৯৫৭ সাল পর্যন্ত তিন বছর সময়ের মধ্যে মার্কিন যুক্তরাষ্ট্রের কম্পিউটার বিজ্ঞানী John Bakus এবং তার ওয়ার্কিং টিম IBM কোম্পানীতে FORTRAN ভাষা উন্নয়ন করেন। প্রাথমিক সময়ে এই ভাষা শুধুমাত্র সংখ্যা ভিত্তিক জটিল গাণিতিক সমস্যা সমাধান ও বৈজ্ঞানিক গবেষণায় ব্যবহৃত হলেও বর্তমানে তা প্রায় সকল কাজে ব্যবহৃত একটি হাই লেভেল ভাষা যা এখনো পৃথিবীর অনেক দেশের বিভিন্ন শিক্ষা প্রতিষ্ঠানের পাঠ্যক্রমে অন্তর্ভূক্ত আছে।
FORTRAN ভাষা উদ্ভাবনের পর ১৯৬০ সালে হাই লেভেল ল্যাংগুয়েজ হিসাবে ALGOL 60 ভাষার উদ্ভাবন হয়। ALGOL 60 পরবর্তী সি সহ অন্যান্য ভাষার উন্নয়নে প্রভাব ফেলে। এ ভাষাতে মড্যূলার স্ট্রাকচার অন্তর্ভূক্ত হয়। এ ভাষা শিক্ষা ও চর্চা খুব কঠিন হওয়ায় এ ভাষার উচ্চ মানকে নিয়ে ১৯৬৩ সালে ক্যামব্রিজ ও লন্ডন ইউনিভার্সিটিতে উদ্ধাবন ঘটে CPL (Combined Programming Language) ভাষার। CPL ভাষার উত্তম বৈশিষ্ট্যসমূহ নিয়ে ১৯৬৭ সালে Martin Richards কেমব্রিজে উদ্ভাবন করেন BCPL (Basic Combined Programming Language) ভাষা। ১৯৭০ সালে বেল ল্যাবরেটরীর Ken Thompson, CPL ভাষাকে সহজ করে B ভাষা উদ্ভাবন করেন। B ভাষার অসুবিধা হলো, এটা অত্যন্ত ধীর গতি সম্পন্ন এবং শব্দ ভিত্তিক। কিন্তু সে সময়ে কম্পিটারসমূহ ছিল বাইট ভিত্তিক। এজন্য UNIX অপারেটিং সিস্টেম পূনঃলিখনের সময় ১৯৭১ সালে BCPL এবং B ভাষা থকে C ভাষা উদ্ভাবনের কাজ শুরু হয়।
RITCHIE_300Sir Dennis Ritchie বেল টেলিফোন ল্যাবরেটরীতে (বর্তমান AT&T Bell Laboratory) UNIX অপারেটিং সিস্টেমের সাথে সি ভাষা উদ্ভাবনের কাজ করেন এবং ১৯৭২ সালে তা সম্পন্ন করেন। প্রথম দিকে সি ভাষার ব্যবহার বেল ল্যাবরেটরীতেই সীমাবদ্ধ ছিল ১৯৭৮ সালে যখন Denis Ritchie এবং তার সঙ্গী Brian Kernighan সি ভাষার বিবরণ একটি বইয়ে প্রকাশ করেন তখন থেকেই কম্পিউটার পেশাজীবিরা বিভিন্ন উত্তম বৈশিষ্ট্যের কারনে সি ভাষার ব্যবহার শুরু করেন। ১৯৮০ সালের মাঝামাঝিতে সি ভাষার জনপ্রিয়তা ব্যপকভাবে বৃদ্ধি পাইতে থাকে ফলে এ ভাষার জন্য বিভিন্ন রকম কম্পাইলার এবং ইন্টারপ্রিটার তৈরী হয়। এতে বিভিন্ন সি-কম্পাইলার ও ইন্টারপ্রিটারের মাঝে ভিন্নতা সৃষ্টি হয়। সি ভাষাকে বিভিন্ন কম্পাইলার এবং ইন্টারপ্রিটারের মাঝে সমন্বয় ও অভিন্ন স্ট্যান্ডার্ডে ব্যবহারের জন্য American National Standard Institute একটি স্ট্যান্ডার্ড নির্ধারণ করে। এই স্ট্যান্ডার্ড সম্পন্ন সি ভাষা ANSI C নামে পরিচিত। বর্তমানে সি ভাষা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর সুবিধা সম্বলিত ল্যাংগুয়েজে রূপান্তরিত হয়ে C++ নাম ধারন করেছে। GUI (Graphical User Interface) সম্বলিত ভিজ্যুয়্যাল C++ সিস্টেম সফট্ওয়্যার ও এ্যাপলিকেশন সফটওয়্যার তৈরীতে ব্যপকভাবে ব্যবহৃত হচ্ছে।

প্রোগ্রাম এক্সিকিউশনের ধাপসমূহঃ

একটি প্রোগ্রাম তৈরী করতে হলে বিভিন্ন ধাপ অতিক্রম করতে হয়, যেমনঃ সমস্যা বিশ্লেষণ, এলগরিদম উদ্ভাবন, প্রোগ্রাম কোডিং ইত্যাদি। একটি প্রোগ্রামকে কিভাবে কম্পিউটারে এন্ট্রি করে তা কিভাবে মেশিন ভাষায় রূপান্তর করে এক্সিকিউট করা যায় তা নিম্নের ফ্লো-চার্টে দেখানো হয়েছে। একটি সমস্যা বিশ্লেষণ করে এলগরিদম উন্নয়ন হয়ে গেলে এলগরিদমের প্রতিটি ধাপকে হাই লেভেল ভাষায় রূপান্তর করাকে প্রোগ্রাম কোডিং বলা হয়। একটি প্রোগ্রামকে কম্পিউটারে এন্ট্রি করার কাজ এডিটর নামের একটি এপলিকেশন সফটওয়্যারের মাধ্যমে করতে হয়। এডিটর এমন একটি এপলিকেশন সফটওয়্যার যার সাহায্যে কম্পিউটারে টেক্সট টাইপ করে ডিস্কে সংরক্ষণ, সংরক্ষিত টেক্সট প্রদর্শণ করে পুরাতন টেক্সট সংশোধন এবং পুরাতন টেক্সটের সাথে নতুন টেক্সট সংযোজন করা যায়। একটি নতুন প্রোগ্রাম কম্পিউটারে এন্ট্রি করতে হলে এডিটর প্রোগ্রাম চালু করে উদ্ভাবিত প্রোগ্রামটি টাইপ করে ডিস্কে একটি নাম দিয়ে সংরক্ষণ করতে হবে, তখন উহাকে সোর্স ফাইল বলা হবে, অর্থাত হাই লেভেল ভাষায় লিখিত প্রোগ্রামকে সোর্স প্রোগ্রাম এবং সংরক্ষিত সোর্স প্রোগ্রামকে সোর্স ফাইল বলা হয়। সংরক্ষণ করার কাজটি কম্পিউটারের পরিভাষায় ফাইল সেভ করা বলা হয়। ফাইল সেভ করার জন্য যে নাম দেয়া হয় তার দুটি অংশ থাকে প্রথম অংশটি ফাইলের প্রকৃত নাম যা প্রোগ্রামের কাজের উপর ভিত্তি করে প্রোগ্রামার নির্বাচন করে থাকে, দ্বিতীয় অংশটিকে বলা হয় এক্সটেনসন এ অংশ ফাইলের প্রকৃতি নির্দেশ করে। সি ভাষার ফাইলের এক্সটেনসন সাধারণতঃ C হয়ে থাকে। ফাইলের নাম এবং এক্সটেনশনের মাঝে একটি ডট চিহ্ন দ্বারা পৃথক করা হয়, যেমনঃ area.c এখানে area ফাইলের নাম এবং c এক্সটেনসন।
একটি প্রোগ্রাম কম্পিউটারে এন্ট্রি করা হলে যে সোর্স প্রোগ্রাম পাওয়া যায় তাকে মেশিন ভাষায় রূপান্তর করতে হয়। হাই লেভেল ভাষায় লিখিত প্রোগ্রামকে মেসিন ভাষায় রূপান্তর করাকে কম্পাইলিং বলা হয়। কম্পাইলার এমন একটি জটিল সিস্টেম সফটওয়্যার যা হাই লেভেল ভাষায় লিখিত প্রোগ্রাম, প্রোগ্রামিং ভাষার নিয়ম, শব্দ এবং চিহ্ন সঠিকভাবে ব্যবহার করা হয়েছে কি-না তা পরীক্ষা করে ভুল নির্নয় করে জানিয়ে দেয় এবং কোনো ভুল না থাকলে প্রোগ্রামটিকে মেসিন ভাষায় রূপান্তর করে। প্রোগ্রামে ভুল থাকলে তা এডিটর প্রোগ্রামের সাহায্যে সংশোধন করে পূনরায় কম্পাইল করতে হয়। যতক্ষণ পর্যন্ত প্রোগ্রামটি সম্পূর্ণ ত্রুটিমুক্ত না হয় ততক্ষণ পর্যন্ত এ কাজ চলতে থাকে। কম্পাইলিং কাজ শেষ হলে কম্পাইলার মেসিন ভাষার প্রোগ্রামের একটি ফাইল তৈরী করে যাকে কম্পাইলোর নিজে নিজে সোর্স ফাইলের নামে সেভ করে কিন্তু উহার এক্সটেনসন পরিবর্তন করে OBJ প্রদান করে। কম্পাইলার কর্তৃক মেসিন ভাষায় রূপান্তরিত প্রোগ্রামকে অবজেক্ট প্রোগ্রাম এবং অবজেক্ট প্রোগ্রাম যে ফাইলে সংরক্ষণ করে তাকে অবজেক্ট ফাইল বলা হয়।
কম্পাইলিং এর পরবর্তি কাজ হলো লিংকিং। প্রোগ্রামে পূর্বে কম্পাইলকৃত অবজেক্ট ফাইল বা সিস্টেম লাইব্রেরী ব্যবহার করা হলে সেই ফাইল বা লাইব্রেরী ফাংশনের অবজেক্ট কোড প্রোগ্রামের সাথে সংযুক্ত করাকে লিংকিং বলা হয়। যে প্রোগ্রামের সাহায্যে লিংকিং করা হয় তাকে লিংকার বলা হয়। সঠিক অবজেক্ট ফাইল বা লাইব্রেরী ফাংশন ব্যবহার করা না হলে লিংকিং এর সময় তা লিংকার তা নির্ণয় করে এবং এক্ষেত্রে আবার এডিটর প্রোগ্রামের সাহায্যে ভুলসমূহ সংশোধন করে আবার কম্পাইল এবং লিংকিং করতে হয়। লিংকিং কাজের ত্রুটি সংশোধন হলে লিংকার প্রোগ্রাম মূল প্রোগ্রামের অবজেক্ট কোডের সাথে সংযুক্ত করে এক্সিকিউটেবল প্রোগ্রামের ফাইল তৈরী করে যাকে লিংকার নিজে নিজে সের্স ফাইলের নামে সেভ করে কিন্তু উহার এক্সটেনসন পরিবর্তন করে EXE প্রদান করে।
এক্সিকিউটেবল ফাইলকে রান করিয়ে প্রোগ্রামে প্রয়োজনীয় ডাটা ইনপুট ডিভাইসের মাধ্যমে প্ররণ করা হলে কম্পিউটার প্রোগ্রাম অনুসারে উক্ত ডাটাকে প্রকৃয়া করে আউটপুট ডিভাইসের মাধ্যমে ফলাফল প্রদর্শন করে। প্রোগ্রাম রান করার সময় কিছু নমুনা ডাটা নিয়ে তাদের ফলাফল প্রচলিত পদ্ধতিতে নির্নয় করা হয় অতপর উহা নমুনা ডাটা ইনপুট হিসাবে দিয়ে দেখা হয় কম্পিউটার কর্তৃক প্রদত্ত ফলাফল ও হিসাবকৃত ফলাফল এক হয় কি-না। এই দুই ফলাফল এক না হলে বুঝতে হবে প্রোগ্রামে লজিক্যাল ত্রুটি আছে, এক্ষেত্রে আবার এডিটর প্রোগ্রামের সাহায্যে ত্রুটি সংশোধন করে কম্পাইল, লিংক এবং রান করতে হয়।
P_S_E

আইডিই [Integrated Development Environment]

হাই লেভেল ভাষায় লিখিত প্রোগ্রামকে এক্সিকিউটেবল প্রোগ্রামে রূপান্তর করার কাজটি চারটি ধাপে সম্পন্ন করতে হতো। প্রথমে কমান্ড উইন্ডোতে কমান্ড প্রয়োগ করে এডিটর প্রোগ্রাম চালু করে সোর্স প্রোগ্রাম কম্পিউটারে এন্ট্রি করে তা এডিটর কমান্ডের সাহায্যে সেভ করে এডিটর বন্ধ করতে হতো। দ্বিতীয় ধাপে কম্পাইলার প্রোগ্রাম চালু করে সেভকৃত ফাইলটিকে মেশিন ভাষায় রূপান্তর করা হতো। কম্পাইলার মেসিন ভাষায় রূপান্তরিত প্রোগ্রামটিকে .OBJ এক্সটেনসন সম্পন্ন অন্য একটি ফাইলে সেভ করতো। তৃতীয় ধাপে লিংকার প্রোগ্রাম চালু করে সোর্স প্রোগ্রামে ব্যবহৃত পূর্ব হতে কম্পাইলকৃত অবজেক্ট ফাইল বা সিস্টেম লাইব্রেরী অবজেক্ট কোড সংযুক্ত করতে হতো। লিংকার .EXE এক্সটেনসন যুক্ত এক্সিকিউটেবল ফাইল তৈরী করে। সবশেষে এক্সিকিউটেবল ফাইলের নাম কমান্ড প্রম্পটে টাইপ করে এন্টার করলে প্রোগ্রামটি রান হতো। এভাবে কম্পাইলার, এডিটর ও লিংকার এ তিনটি আলাদা প্রোগ্রামকে আলাদাভাবে চালু করে এডিটিং, কম্পাইলিং ও লিংকিং এর কাজ করতে হতো। যে কোনো ধাপে কোন ভুল থাকলে সংশ্লিষ্ট প্রোগ্রাম তা জানিয়ে দিত, এক্ষেত্রে আবার এডিটর চালু করে সোর্স প্রোগ্রাম সংশোধন করে ধারাবাহিকভাবে একই পদ্ধতিতে চারটি ধাপ সম্পন্ন করতে হতো।
বর্তমানে প্রায় সকল কোম্পানী এডিটর, কম্পাইলার ও লিংকারকে একত্র করে ইন্টিগ্রেটেড প্রোগ্রাম আকারে বাজারে ছেড়েছে। এই প্রোগ্রামগুলিকে আইডিই বলা হয়। কম্পিউটারে আইডিই চালু করলেই এডিটরসহ চালু হয়। এই এডিটরে টাইপ করে সোর্স প্রোগ্রাম এন্ট্রি এবং সেভ করা যায়। আবার এখান থেকেই কমান্ড প্রয়োগ করে যথাক্রমে কম্পাইলার, লিংকার চালু করা ও প্রোগ্রাম রান করা যায়। সোর্স প্রোগ্রামে কোন ভুল থাকলে কম্পাইলার ও লিংকার তা নির্নয় করে জানিয়ে দেয় ও স্বয়ংক্রিয়ভাবে এডিটর প্রোগ্রামে ফিরে যায়। বর্তমান সময়ে সি ভাষার জন্য বহুল ব্যবহৃত এডিটর ও কম্পাইলার প্রোগ্রামগুলি হলো Turbo C++, CodeBlocks, Borland C ইত্যাদি।

সি ভাষায় ব্যবহৃত ক্যারেকটারসমূহঃ

কম্পিউটারের পরিভাষায় ইংরেজী বর্ণমালার সকল বর্ণ, চিহ্ন, নিউমেরিক্যাল ডিজিটসমূহ এবং কিবোর্ডের অতিরিক্ত কিছু বিশেষ চিহ্নসমূহকে ক্যারেকটার বলা হয়। এই সকল ক্যারেকটারসমূহ হতে সি ভাষায় ব্যবহৃত ক্যারেকটারসমূহের তালিকা নিম্নে দেয়া হলোঃ
এছাড়াও স্ট্রিং কনস্ট্যান্টের ক্ষেত্রে পর্দায় প্রদর্শণ বা প্রিন্টারে প্রিন্ট করা যায় সে সকল ক্যারেকটারসমূহও ব্যবহৃত হয়।

আইডেন্টিফায়ারঃ [Identifier]

প্রোগ্রামের বিভিন্ন উপাদান যেমনঃ ভেরিয়েবল, ফাংশন, এ্যারে ইত্যাদির প্রোগ্রামার কর্তৃক প্রদত্ত নামকে আইডেন্টিফায়ার বলা হয়। আইডেন্টিফায়ার একটি বর্ণ, একাধিক বর্ণ অথবা একাধিক বর্ণ ও অংকের সমন্বয়ে গঠিত হয়। তবে প্রথম ক্যারেকটার অবশ্যই বর্ণ হতে হবে।

আইডেন্টিফায়ার ঘোষণার নিয়মাবলীঃ

  1. আডেন্টিফায়ারে a হতে z পর্যন্ত ছোট হাতের বর্ণ অথবা A হতে Z পর্যন্ত বড় হাতের বর্ণ, 0 থেকে 9 পর্যন্ত অংক এবং আন্ডার স্কোর ( _ ) ব্যবহার করা যাবে।
  2. অবশ্যই নামের প্রথম ক্যারেকটার a হতে z পর্যন্ত ছোট হাতের বর্ণ অথবা A হতে Z পর্যন্ত বড় হাতের বর্ণ এর মধ্যে হতে হবে।
  3. আইডেন্টিফায়ার শব্দের অন্তর্গত ক্যারেকটারমূহের মাঝে কোন স্পেস বা ফাঁকা রাখা যাবেনা, প্রয়োজনে আন্ডারস্কোর ব্যবহার করা যাবে।
  4. বড় হাতের বর্ণ ও ছোট হাতের বর্ণ ভিন্ন ক্যারেকটার হিসাবে কাজ করে। সুতরাং Total, total এবং TOTAL শব্দ তিনটি আলাদা আইডেন্টিফায়ার হিসাবে বিবেচিত হবে।
  5. সি ভাষার সংরক্ষিত শব্দসমূহ (Keywords) আইডেন্টিফায়ার হিসাবে ব্যবহার করা যাবেনা।
  6. আইডেন্টিফায়ার শব্দের মোট ক্যারেকটার সংখ্যার সীমাবদ্ধতা নাই তবে কম্পাইলার প্রথম ৩১ বর্ণকে বিবেচনা করে।
  7. আইডেন্টিফায়ার শব্দে কোন বিশেষ চিহ্ন যেমনঃ (+, -, !, @, #, $, %, ^, &, *) ইত্যাদি ব্যবহার করা যাবেনা।
*** উপরোক্ত নিয়মানুযায়ী ভেরিয়েবল, ফাংশন, এ্যারে ইত্যাদির নাম ঘোষনা করা যাবে।

কি-ওয়ার্ডঃ [Keyword]

প্রত্যেক প্রোগ্রামিং ভাষার কিছু নিজস্ব সংরক্ষিত শব্দ থাকে যার সুনির্দিষ্ট অর্থ আছে এবং এই অর্থ প্রোগ্রামার পরিবর্তন করতে পারেনা এগুলিকে কি-ওয়ার্ড বলা হয়। কি-ওয়ার্ডসমূহ প্রোগ্রামার তার ইচ্ছানুযায়ী ব্যবহার করতে পারেনা, যথাযথ নিয়ম পদ্ধতি অনুযায়ী কি-ওয়ার্ড ব্যবহার করতে হয়।
সি ভাষার কিছু কি-ওয়ার্ড নিম্নে দেয়া হলোঃ
kwd
** তবে এই কি-ওয়ার্ডের সংখ্যা কম্পাইলার ভেদে বিভিন্ন হয়ে থাকে।

সি প্রোগ্রামের গঠনঃ [Structure of a C program]

সি প্রোগ্রাম হলো কতকগুলি ফাংশনের সমষ্টি। ফাংশন হলো এক বা একাধিক স্টেমেন্টের সমষ্টি যা একটি নির্দিষ্ট কাজ সম্পন্ন করে। একটি সি প্রোগ্রাম লিখতে প্রথমে প্রয়োজনীয় সংখ্যক ফাংশন লিখতে হয়, অতপর উহাদের মধ্যে যোগাযোগ স্থাপন করতে হয়। একটি সি প্রোগ্রাম এক বা একাধিক সেকশন নিয়ে গঠিত যা চিত্রে দেখানো হয়েছে।
ডকুমেন্টেশন সেকশনঃ ডকুমেন্টেশন সেকশনে এক বাএকাধিক মন্তব্য (Comment) থাকে। মন্তব্য প্রোগ্রামের কোন অংশ নয়। এতে প্রোগ্রামের নাম, প্রোগ্রামারের নাম, গ্রোগ্রামের সংক্ষিপ্ত বিবরণ থাকে। সি প্রোগ্রামের মন্তব্য ‘/*’ দিয়ে শুরু এবং ‘*/’ দিয়ে শেষ করতে হয়। গ্রোগ্রামের যে কোন যায়গায় মন্তব্য লিখা যায়। প্রোগ্রামের মাঝখানে কোন অংশে লিখিত মন্তব্যে সাধারণতঃ উক্ত অংশের কাজ ও সংক্ষিপ্ত বিবরণ থাকে। এই সকল মন্তব্য পরবর্তি সময়ে প্রোগ্রাম বুঝতে ও বিশ্লেষণে সহায়তা করে।
লিংক সেকশনঃ লিংক সেকশনে সিস্টেম লাইব্রেরী হতে প্রোগ্রামে ব্যবহৃত ফাংশন এর সোর্স কোড বা অবজেক্ট কোড প্রোগ্রামের সাথে অন্তর্ভূক্ত করার জন্য প্রয়েজনীয় নির্দেশ দেয়া হয়। মেইন main () ফাংশন ছাড়া যে সকল লাইব্রেরী ফাংশন প্রোগ্রামে ব্যবহার করা হয় তাদের কোড সাধারণতঃ কতকগুলি বিশেষ ফাইলে লিখা থাকে এই ফাইলমূহকে হেডার ফাইল বলা হয়। এক এক ধরণের ফাংশনের কোড এক একটি হেডার ফাইলের মধ্যে থাকে। কোন ফাংশন ব্যবহার করতে হলে তা যে হেডার ফাইলের অন্তর্ভূক্ত তার নাম সি প্রোগ্রামের লিংক সেকশনে উল্লেখ করতে হয়। এ কাজটি #include স্টেমেন্টের সাহায্যে করা হয়। একে প্রিপ্রসেসর (Preprocessor) স্টেমেন্ট বলা হয়। প্রিপ্রসেসর স্টেমেন্ট পূর্বলিখিত সোর্সকোড বা অবজেক্ট কোডকে প্রোগ্রামের সাথে অন্তর্ভূক্ত করে নেয়। প্রায় সকল হেডার ফাইলের নামের এক্সটেনশন h হয়ে থাকে। যেমন stdio.h যেমনঃ stdio.h ফাইলের কোড অন্তর্ভূক্ত করার স্টেটমেন্ট হবে #include। হেডার ফাইল উল্লেখ ছাড়াও বিভিন্ন কাজে প্রিপ্রসেসর স্টেটমেন্ট ব্যবহৃত হয়।
ডেফিনিশন সেকশনঃ ডেফিনিশন সেকশনে সকল সিম্বলিক কনস্ট্যান্ট ঘোষণা করা হয়।
গ্লোবাল ডিকলারেশন সেকশনঃ ভেরিয়েবল হলো ডাটা সংরক্ষণের উদ্দেশ্যে নির্ধারিত মেমোরী লোকেশনের নাম যার মান প্রোগ্রাম এক্সিকিউশনের সময় পরিবর্তন হতে পারে। যে সকল ভেরিয়েবল একাধিক ফাংশনে ব্যবহৃত হয় তাদের গ্লোবাল ভেরিয়েবল বলা হয়। সকল ফাংশনের বাহিরে গ্লোবাল ডিকলারেশন সেকশনে এই ভেরিয়েবলসমূহ ঘোষণা করা হয়। এছাড়া ডিক্লারেশন সেকশনে প্রোগ্রামার কর্তৃক সৃষ্ট ফাংশনের নাম, রিটার্ন টাইপ এবং আরগুমেন্ট টাইপ ঘোষণা করা হয়, একে ফাংশন প্রোটোটাইপ বলা হয়।
মেইন main() ফাংশন সেকশনঃ ফাংশন হলো একটি স্বয়ংসম্পূর্ণ প্রোগ্রাম ইউনিট যা একটি নির্দিষ্ট কাজ সম্পন্ন করে। একটি সি প্রোগ্রামে অনেকগুলি ফাংশন থাকতে পারে তবে উহাদের মধ্যে মেইন main() নামক একটি ফাংশন অবশ্যই থাকতে হবে। মেইন ফাংশন হতেই সি প্রোগ্রামের এক্সিকিউশন শুরু হয় এবং এ ফাংশন অন্যান্য ফাংশনকে কার্যকরী করে। মেইন ফাংশনে ডিক্লারেশন এবং এক্সিকিউশন নামক দুটি অংশ থাকে। এক্সিকিউশন অংশে ব্যবহৃত বিভিন্ন ভেরিয়েবল ডিক্লারেশন অংশে ঘোষণা করা হয়। এক্সিকিউশন অংশে কমপক্ষে একটি স্টেটমেন্ট থাকতে হবে। ডিক্লারেশন এবং এক্সিকিউশন অংশ দুটি একজোড়া ব্রেইস (Brace – {}) এর মধ্যে আবদ্ধ থাকে। ওপেনিং ব্রেইস ({) হতে প্রোগ্রামের এক্সিকিউশন শুরু এবং ক্লোজিং ব্রেইস (}) এ শেষ হয়। ডিক্লারেশন এবং এক্সিকিউশন অংশের সকল স্টেটমেন্ট অবশ্যই (;) দিয়ে শেষ হবে।
সাবপ্রোগ্রাম সেকশনঃ সাবপ্রোগ্রাম সেকশনে এক বা একাধিক ইউজার ডিফাইন্ড ফাংশন ঘোষণা এবং উক্ত ফাংশন কি কাজ করবে তা বিভিন্ন স্টেটমেন্টের সাহায্যে নির্ধারণ করে দেয়া হয়। একে ফাংশন ডেফিনিশন বলা হয়। সাধারণতঃ মেইন ফাংশনের পর পরই ফাংশন ডেফিনিশন করা হয় তবে মেইন ফাংশনের বাইরে যে কোন স্থানে ফাংশন ডেফিনিশন করা যায় আবার ভিন্ন ফাইলেও করা যায়। ভিন্ন ফাইলের ক্ষেত্রে লিংক সেকশনে ঐ ফাইলকে #include স্টেটমেন্টের সাহায্যে লিংক করে নিতে হয়। একটি সি প্রোগ্রামে মেইন ফাংশন ব্যতিত অন্য সকল সেকশন অনুপস্থিত থাকতে পারে।

স্টেটমেন্ট [Statement]

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

ইনপুট আউটপুট ফাংশন [I/O Function]

কম্পিউটার প্রোগ্রামে যে ফাংশনের সাহায্যে কম্পিউটার উহার ইনপুট ডিভাইস হতে প্রয়েজনীয় ডাটা গ্রহন করে তাকে বলা হয় ইনপুট ফাংশন এবং যে ফাংশনের সাহায্যে ফলাফল উহার আউটপুট ডিভাইসের মাধ্যমে প্রদর্শন করে তাকে বলা হয় আউটপুট ফাংশন। উল্লেখ্য যে, সি ভাষা ইনপুট আউটপুট ফাংশনের দিক থেকে অত্যন্ত সমৃদ্ধ। সি ভাষায় প্রায় ২০টির মত I/O ফাংশন আছে। এর মধ্যে দুটি গুরুত্ত্বপূর্ণ ফাংশন হলো printf() ফাংশন এবং scanf() ফাংশন।
printf() ফাংশনঃ এটি একটি আউটপুট ফাংশন। এ ফাংশন কম্পিউটারের আউটপুট ডিভাইসে ডাটা প্রেরণ করে। সি ভাষায় মনিটরে আউটপুট প্রদর্শনের জন্য এ ফাংশন সবচে বেশী ব্যবহৃত হয়।
গঠনঃ
printf(“Control string”, exp_1, exp_2 …………. exp_n);
Control String: স্ট্রিং কনস্ট্যান্ট অথবা ফরম্যাট ক্যারেকটার অথবা ব্যকস্লাস ক্যারেকটার অথবা উহাদের সমষ্টি হতে পারে। শুধু স্ট্রিং কনস্ট্যান্ট থাকলে exp_1, exp_2 …………. exp_n থাকবেনা, সেক্ষেত্রে ঐ স্ট্রিং কনস্ট্যান্ট পর্দায় প্রদর্শিত হবে। স্ট্রিং কনস্ট্যান্ট এর সাথে ফরম্যাট ক্যারেকটার থাকলে প্রতিটি ক্যারেকটারের জন্য একটি করে এক্সপ্রেশন থাকবে, এবং স্ট্রিং এর সাথে প্রতিটি ফরম্যাট ক্যারেকটারের জায়গায় ধারাবাহিকভাবে এক্সপ্রেশনের মান প্রদর্শিত হবে অর্থাত প্রথম ফরম্যাট ক্যারেকটারের জায়গায় প্রথম এক্সপ্রেশনের মান দ্বিতীয় ফরম্যাট ক্যারেকটারের জায়গায় দ্বিতীয় এক্সপ্রেশনের মান প্রদর্শিত হবে। প্রতিটি ফরম্যাট ক্যারেকটার % চিহ্নসহ দুটি ক্যারেকটার নিয়ে গঠিত তবুও সি ভাষায় উহারা একক ক্যারেকটার হিসাবে বিবেচিত। ফরম্যাট ক্যারেকটার % চিহ্ন দিয়ে শুরু হয় এবং কোন ধরনের ডাটা প্রদর্শিত হবে তা কম্পাইলারকে জানিয়ে দেয়। নিচের টেবিলে আউটপুট ফরম্যাট ক্যারেকটারসমূহ এবং উহাদের অর্থ সম্বলিত একটি তালিকা দেয়া হলোঃ
fc
উদাহরণ-১.১:
/* Example-1.1:
Use of printf() function
Follow the program below */
#include
int main(){
printf(“This is a simple C program”);
}
প্রোগ্রামের আউটপুটঃ
This is a simple C program
বিশ্লেষণঃ
উপরোক্ত উদাহরণের প্রোগ্রামটিতে পর পর তিনটি লাইন ‘/*’ এবং ‘*/’ এর মধ্যে আছে, সুতরাং ঐ লাইন তিনটি প্রোগ্রামের মন্তব্য। এ অংশটুকু প্রোগ্রামের অংশ নয় এবং কম্পাইলার এ তিনটি লাইনকে অগ্রাহ্য করবে। চতুর্থ লাইনে রয়েছে #include যা একটি প্রিপ্রসেসর স্টেটমেন্ট। এ স্টেটমেন্ট stdio.h হেডার ফাইলকে প্রোগ্রামের সাথে সংযুক্ত করবে। ৫ম লাইনে মেইন main() ফাংশনকে কল করা হয়েছে। মেইন ফাংশন থেকেই প্রোগ্রামের এক্সিকিউশন শুরু হবে এবং মেইন main()ফাংশনের মধ্যে printf()ফাংশনকে কল করা হয়েছে। এ প্রোগ্রামে একমাত্র কার্যকরী ফাংশন হলো printf()ফাংশন। প্রোগ্রামের printf()ফাংশনটিতে “ ” এর মধ্যে শুধুমাত্র স্ট্রিং This is a simple C program আছে কোন ফরম্যাট ক্যারেকটার নাই সুতরাং কোন এক্সপ্রেশনও নাই। সুতরাং এই স্টেটমেন্ট This is a simple C program এই স্ট্রিং মনিটরে প্রদর্শণ করবে। এখানে একটি বিষয় লক্ষ্য রাখতে হবে যে, main()এর পর একটি ‘{’ রয়েছে এবং সকল স্টেটমেন্টের শেষে আবার একটি ‘}’ রয়েছে এদের যথাক্রমে ওপেনিং এবং ক্লোজিং Brace বলা হয়। একাধিক স্টেটমেন্ট নিয়ে একটি গ্রুপ এবং ফাশনের শুরু এবং শেষ নির্দেশের জন্য Brace ব্রেইস ব্যবহৃত হয়। ব্লক অথবা ফাংশনের শুরু বুঝাতে ‘{’ এবং শেষ বুঝাতে ‘}’ ব্যবহৃত হয়।
উদাহরণ ১.২:
/* Example-1.2:
Use of printf() function
Follow the program below */
#include
int main(){
printf(“This is a simple C program.”);
printf(“C is very interesting.”);
}
প্রোগ্রামের আউটপুটঃ
This is a simple C program.C is very interesting
বিশ্লেষণঃ
কোটেশনের মধ্যে কোন ফাকা দেয়া হলে যদি উহার কোন বিশেষ অর্থ না থাকে তা হলে ঐ ফাকা Text এর অংশ হিসাবে পর্দায় প্রদর্শিত হবে। উদাহরণ-১.২ এর আউটপুট দুটি লাইনের মধ্যে ফাকা প্রদর্শণের জন্য প্রথম printf স্টেটমেন্টের স্ট্রিং এর শেষে অথবা দ্বিতীয় স্টেটমেন্টের স্ট্রিং এর প্রথমে ফাকা দিতে হবে। উদাহরণ-১.৩ এ ইহা দেখানো হলো।
উদাহরণ ১.৩:
/* Example-1.3:
Use of printf() function
Follow the program below */
#include<stdio.h>
int main(){
printf(“This is a simple C program.”);
printf(“ C is very interesting.”);
}
প্রোগ্রামের আউটপুটঃ
This is a simple C program. C is very interesting.
উদাহরণ-১.২ ও উদাহরণ-১.৩ এর প্রোগ্রামে দুই লাইনে দুটি printf ফাংশনের সাহায্যে দুটি স্ট্রিংকে প্রদর্শনের ব্যবস্থা থাকলেও স্ট্রিং দুটি একই লাইনে প্রদর্শিত হয়। স্ট্রিং দুটিকে আলাদা লাইনে প্রদর্শন করতে চাইলে প্রথম স্ট্রিং এর শেষে অথবা দ্বিতীয় স্ট্রিং এর প্রথমে New line character (\n) ।
উদাহরণ ১.৪:
/* Example-1.4:
Use of printf() function
Follow the program below */
#include<stdio.h>
int main(){
printf(“This is a simple C program. ”);
printf(“\nC is very interesting.”);
}
প্রোগ্রামের আউটপুটঃ
This is a simple C program.
C is very interesting.
নোটঃ (\n) ক্যারেকটারকে অবশ্যই কোটেশনের এর মধ্যে স্ট্রিং এর প্রথমে অথবা শেষে রাখতে হবে। প্রতিটি (\n) ক্যারেকটার আউটপুট স্ক্রিনে একটি করে নতুন লাইন সৃষ্টি করে। যেমন উদাহরণ-১.৪ এ \n এর পরিবর্তে \n\n ব্যবহার করা হলে প্রথম লাইন প্রদর্শন করার পর একটি লাইন ফাকা দিয়ে পরবর্তী লাইন প্রদর্শন করবে। এছাড়া \n সহ একটি printf স্টেটমেন্ট ব্যবহার করেও উদাহরণ-১.৪ এর মত দুই লাইনে স্ট্রিং প্রদর্শণ করা যাবে।
উদাহরণ ১.৫:
/* Example-1.5:
Use of printf() function
Follow the program below */
#include<stdio.h>
int main(){
printf(“This is a simple C program. \nC is very interesting. ”);
}
প্রোগ্রামের আউটপুটঃ
This is a simple C program.
C is very interesting.
এভাবে \n এবং ফাঁকা (Space) ব্যবহার করে প্রোগ্রামের সাহায্যে প্রয়োজনমত লেবেল প্রদর্শণ করানো যায়। উদাহরণ-১.৬ এ পদ্ধতি দেখানো হলো।
উদাহরণ ১.৬:
/* Example-1.6:
Use of printf() function
Follow the program below */
#include<stdio.h>
int main(){
printf(“This is a simple C program.\n”);
printf(“C is very interesting.\n”);
printf(“Electronic Technology.\n”);
printf(“Electronics in Bengoli.\n”);
}
প্রোগ্রামের আউটপুট
This is a simple C program.
C is very interesting.
Electronic Technology.
Electronics in Bengali.
আউটপুট নিয়ন্ত্রনের জন্য \n এর মত আরো কতকগুলি ‘\’ সম্পন্ন ক্যারেকটার আছে এদেরকে ব্যাকস্লাস ক্যারেকটার বলা হয়।

সূত্রঃ

[1] Programming in ANSI C – E Balagurusamy
[2] Notes on C – Engr. N. Rahman


EmoticonEmoticon