প্রোগ্রামের ধারণা ও বিভিন্ন প্রজন্মের ভাষা
উত্তরঃ মেশিন ভাষা হচ্ছে কম্পিউটার প্রোগ্রামের নিজস্ব ভাষা। অ্যাসেম্বলি ভাষা সাংকেতিক ভাষা। এ ভাষায় লিখিত প্রোগ্রাম অনুবাদক মেশিন ভাষায় রূপান্তর করার পর কম্পিউটার বুঝতে পারে। মেশিন ভাষায় প্রোগ্রাম লেখা অত্যন্ত ক্লান্তিকর ও সময় সাপেক্ষ। এ প্রোগ্রাম কইপ্তর এবং দক্ষ প্রোগ্রামারের প্রয়োজন। অন্যদিকে অ্যাসেম্বলি ভাষায় খুব সংক্ষেপে প্রোগ্রাম লেখা যায়। এ প্রোগ্রামের ভুলের পরিমাণ ডিবাগ করা সহজ। তাই বলা যায় অ্যাসেম্বলি ভাষ্য মেশিনভাষার চেয়ে উন্নততর।
উত্তরঃ লো লেভেল ল্যাংগুয়েজ হল মেশিন ভাষা। মেশিন ভাষায় কেবল 0 ও 1 ব্যবহৃত হয়। এ ভাষায় প্রেগ্রাম লেখা অত্যন্ত ক্লান্তিকর ও সময় সাপেক্ষ। প্রোগ্রাম ডিবাগ করাও কষ্টকর। এ ভাষায় প্রোগ্রাম লিখতে দক্ষ প্রোগ্রামার দরকার। লো লেভেল ল্যাংগুয়েজের এইসব সমস্যার কারণে মানুষ সহজে প্রেগ্রাম করতে পারত না। এসব সমস্যা কাটিয়ে হাইলেভেল ল্যাংগুয়েজের উৎপত্তি। তাই বলা যায় লো লেভেল ল্যাংগুয়েজের দূর্বলতাই হাই লেভেল ল্যাংগুয়েজের উৎপত্তির কারণ।
উত্তরঃ ভাষার সর্বনিম্ন স্তর হল মেশিনভাষা যা কম্পিউটারের মৌলিক ভাষা। মেশিনভাষায় 0 ও 1 ব্যবহৃত হয়। এই দুই বাইনারি অঙ্ক ব্যবহার করে সবকিছু লেখা হয়। কম্পিউটার একমাত্র মেশিনভাষাই বুঝতে পারে, অন্যভাষায় প্রোগ্রাম করলে কম্পিউটার আগে উপযুক্ত অনুবাদকের সাহায্যে তাকে মেশিনভাষায় পরিণত করে নেয়।
উত্তরঃ কম্পিউটারকে সর্বজন ব্যবহার উপযোগী করে তুলতে যে ভাষা তৈরি হয় তাই হাই লেভেল ল্যাংগুয়েজ। অন্যদিকে কম্পিউটার যে ভাষা সরাসরি বুঝতে পারে তাকে মেশিন ল্যাংগুয়েজ বলা হয়। উচ্চস্তরের ভাষা মেশিননির্ভর নয়। তাই এ ভাষায় লিখিত প্রোগ্রাম কম্পিউটারকে বুঝানোর জন্য মেশিনের ভাষায় অনুবাদ করে দিতে হয়।
উত্তরঃ স্থায়ী ও অস্থায়ী মেমোরির মধ্যে পার্থক্য নিম্নরূপ:
 ৫ম অধ্যায় প্রোগ্রামিং ভাষা; স্থায়ী ও অস্থায়ী মেমোরির মধ্যে পার্থক্য
উত্তরঃ মানুষ মনের ভাব প্রকাশের জন্য বিভিন্ন শব্দ ব্যবহার করে। কম্পিউটারকে বিভিন্ন আদেশ-নির্দেশ প্রদানের জন্য কম্পিউটার বুঝতে পারে এমন কিছু সংকেত ব্যবহার করা হয়। কম্পিউটার কেবল 0 ও 1 বুঝতে পারে। অন্যভাষায় লেখা হলেও কম্পিউটার আগে উপযুক্ত অনুবাদকের সাহায্যে তাকে 0 ও 1 এ পরিণত করে নেয়। কম্পিউটারের ভাষায় কোনো শব্দ নেই। কেবলমাত্র দুইটি সংখ্যা 0 ও 1 রয়েছে। তাই বলা যায় শব্দ ছাড়াও শুধুমাত্র সংখ্যার মাধ্যমে ভাষা প্রকাশ সম্ভব।
উত্তরঃ হাই লেভেল ল্যাংগুয়েজের কতিপয় বৈশিষ্ট্য বা সুবিধা:
১. হাই লেভেল ভাষায় লিখিত প্রোগ্রাম যে কোনো কম্পিউটারে ব্যবহার করা যায়।
২. মানুষের পক্ষে নিম্নস্তরের চেয়ে উচ্চস্তরের ভাষা শেখা 'সহজ।
৩. হাই লেভেল ভাষায় তাড়াতাড়ি প্রোগ্রাম লেখা যায়।
৪. নিম্নস্তরের ভাষায় চার/পাঁচটি নির্দেশের জায়গায় উচ্চস্তরের ভাষায় মাত্র একটি বাক্য লিখলেই চলে।
৫. হাই লেভেল ল্যাংগুয়েজ লেখা প্রোগ্রামে ভুল হবার সম্ভাবনা কম ও সংশোধন করা সহজ।
৬. লাইব্রেরি ফাংশন সুবিধা পাওয়া যায়।
৭. প্রেগ্রাম লেখার সময় হার্ডওয়্যার নিয়ে ভাবতে হয় না।
৮. প্রোগ্রাম তুলনামূলকভাবে ছোট হয়।।

হাই লেভেল ল্যাংগুয়েজের অসুবিধা।
১. এ ভাষার প্রোগ্রাম কম্পিউটার সরাসরি বুঝতে পারে না।
২. প্রোগ্রাম লেখার পূর্বে স্ট্রাকচার জানতে হয়।
৩. কমান্ডের সিনটেক্স জানতে হয়।
৪. এ ল্যাংগুয়েজে লিখিত প্রেগ্রাম মেশিন ল্যাংগুয়েজে রূপান্তরের জন্য অনুবাদক প্রোগ্রাম প্রয়োজন হয়।
৫. লো-লেভেল ভাষার তুলনায় দক্ষতা কম।
৬. লো-লেভেল ভাষার তুলনায় বেশি মেমোরি প্রয়োজন পড়ে।
৭. লো-লেভেল ভাষার তুলনায় Flexibility কম।

অনুবাদক সফটওয়্যার
উত্তরঃ কম্পাইলার সম্পূর্ণ প্রোগ্রামটি একসাথে অনুবাদ করে এবং সবগুলো ভুল একসাথে প্রদর্শন করে। অপরপক্ষে ইন্টারপ্রেটার এক লাইন করে পড়ে ও অনুবাদ করে এবং প্রতিটি লাইনের ভুল প্রদর্শন করে অনুবাদ কার্য বন্ধ করে দেয়। কম্পাইলারের মাধ্যমে প্রোগ্রাম রূপান্তরের পর পুনঃরূপান্তরের প্রয়োজন হয় না কিন্তু ইন্টারপ্রেটারের ক্ষেত্রে প্রতিবার কাজের পূর্বে পুনঃরূপান্তরের প্রয়োজন পড়ে। কম্পাইলারের মাধ্যমে রূপান্তরিত প্রোগ্রাম পূর্ণাংগ যান্ত্রিক প্রেগ্রামে রূপান্তরিত হয় কিন্তু ইন্টারপ্রেটারের মাধ্যমে পূর্ণাঙ্গ যান্ত্রিক প্রোগ্রামে রূপান্তরিত হয় না। কম্পাইলার প্রোগ্রাম নির্বাহে অপেক্ষাকৃত সময় নেয়। তাই ইন্টারপ্রেটারের তুলনায় কম্পাইলার সুবিধাজনক।
উত্তরঃ প্রত্যেক বার প্রোগ্রাম নির্বাহের সময় কম্পাইল করার প্রয়োজন হয়। অনুবাদক প্রোগ্রাম হিসেবে কম্পাইলার বেশি উপযোগী। কম্পাইলার ভাষার উৎস প্রোগ্রামকে বস্তু প্রোগ্রামে অনুবাদ করে। কম্পাইলার সম্পূর্ণ প্রোগ্রামটিকে এক সাথে পড়ে এবং এক সাথে অনুবাদ করে। কম্পাইলার সহায়ক মেমোরিতে থাকে। প্রয়োজনের সময় তাদের র‍্যামে আনা হয়। ভিন্ন ভিন্ন উচ্চস্তরের ভাষার জন্য ভিন্ন ভিন্ন কম্পাইলার ব্যবহৃত হয়। কোনো নির্দিষ্ট কম্পাইলার একটি মাত্র উচ্চস্তর ভাষাকে যান্ত্রিক ভাষায় রূপান্তর করতে পারে। কম্পাইলার দ্বারা একবার প্রোগ্রাম কম্পাইল করা হলে পরবর্তীতে আর কম্পাইলারের প্রয়োজন হয় না। প্রোগ্রামে কোনো ভুল থাকলে তা মনিটরে প্রদর্শন করে।
উত্তরঃ কম্পাইলার ও ইন্টারপ্রেটার এর মধ্যে সুনির্দিষ্ট পার্থক্য বিদ্যমান। নিম্নে তা দেয়া হলোঃ
 ৫ম অধ্যায় প্রোগ্রামিং ভাষা; কম্পাইলার ও ইন্টারপ্রেটারের মধ্যে পার্থক্য
উত্তরঃ ইন্টারপ্রেটার প্রোগ্রামের এক লাইন করে পড়ে ও অনুবাদ করে এবং প্রতিটি লাইনের ভুল প্রদর্শন করে। অপরপক্ষে কম্পাইলার সম্পূর্ণ প্রোগ্রামটি একসাথে অনুবাদ করে এবং সবগুলো ভুল একসাথে প্রদর্শন করে। এ কারণে কম্পাইলার চালনার জন্য বেশি পরিমাণ মেমোরির প্রয়োজন হয় এবং তা টেস্টিং ও ডিবাগিং এর ক্ষেত্রে সময় বেশি প্রয়োজন হয়। ইন্টারপ্রেটার এক লাইন করে ভুল প্রদর্শন করায় টেস্টিং ও ডিবাগিং সহজ এবং গতিসম্পন্ন হয়। তাই কম্পাইলারের চেয়ে ইন্টারপ্রেটার বেশি বন্ধুভাবাপন্ন।

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

অতপর সামগ্রীকভাবে চিন্তা করে প্রোগ্রামের বিভিন্ন অংশ কার্যকরী করার জন্য নিম্নলিখিত বিষয়গুলো তৈরি করতে হয়।
• অ্যালগোরিদম
• ফ্লোচার্ট ও
• সুভোকোড।

অ্যালগরিদম-ফ্লোচার্ট
উত্তরঃ সমস্যা সমাধানের যুক্তিসম্মত ও পর্যায়ক্রমিক ধারা বর্ণনাকে অ্যালগরিদম বলা হয়। An algorithm is a step by step procedure for solving a problem, সহজ ও যথার্থ উপায় নির্ধারণের জন্য অ্যালগরিদম অপরিহার্য। সমস্যাকে পর্যায়ক্রমিক ছোট ছোট ভাগ করে তা সমাধানের উদ্দেশ্যে একজন প্রোগ্রামার অ্যালগরিদম রচনা করে থাকেন। তাই অ্যালগরিদম কোডিং এর পূর্বশর্ত।
উত্তরঃ একটি কম্পিউটার প্রোগ্রামের ধারাবাহিক কার্যপ্রণালি একটি চিত্রের মাধ্যমে প্রকাশ করলে তাকে প্রোগ্রাম ফ্লোচার্ট বলে। প্রোগ্রাম ফ্লোচার্টের সকল কার্যধারা পুরোপুরিই কম্পিউটার দ্বারা নিয়ন্ত্রিত। তাছাড়া প্রোগ্রাম ফ্লোচার্ট ব্যবহার করার কারণ হলো-প্রোগ্রাম লিখতে সুবিধা এবং প্রোগ্রামের ভুল সহজে নির্ণয় করা যায়। জটিল বিষয় সহজে চিত্রের মাধ্যমে উপস্থাপন করা যায়।
উত্তরঃ অ্যালগরিদম ও ফ্লোচার্টের মধ্যে পার্থক্য (Difference Between Algorithm and Flowchart):
 ৫ম অধ্যায় প্রোগ্রামিং ভাষা; প্রোগ্রামের অংশ তিনটি হলো  ইনপুট, প্রসেসিং ও আউটপুট।
উত্তরঃ সুডো (Pseudo) একটি গ্রিক শব্দ যার অর্থ হচ্ছে ছদ্ম বা সত্য নয়। প্রোগ্রাম রচনার জন্য অনেকেই প্রোগ্রামের সুডোকোড প্রণয়ন করে থাকেন। প্রোগ্রাম রচনার প্রস্তুতিমূলক পূর্ব-ধাপ হিসেবে সুডোকোড প্রণয়ন করে নেওয়া যায়। সুডোকোড আসলে অ্যালগরিদমের পূর্ব-প্রস্তুতি বা অনেকক্ষেত্রে অ্যালগরিদমের বিকল্পও বলা যেতে পারে। প্রোগ্রামের ধরন এবং কার্যপ্রণালী সংবলিত কিছু সংখ্যক নির্দেশ বা স্টেটমেন্টের সমাহারকেই সুডোকোড বলা হয়। সুডোকোড দিয়ে একটি প্রোগ্রামকে এমনভাবে উপস্থাপন করা হয় যা কোনো নির্দিষ্ট কম্পিউটার বা প্রোগ্রামিং ভাষার উপর নির্ভরশীল নয়। এটা সুন্দর ও সহজ ইংরেজী ভাষায় সমস্যা সমাধানের প্রতিটি ধাপ বর্ণনা করে।

সি প্রোগ্রামের ধারণা
উত্তরঃ math.h হলো একটি হেডার ফাইল। এটি #include প্রিপ্রসেসর ডাইরেক্টিভ ব্যবহার করে লিংক সেকশনে সংযুক্ত করা হয়। এই হেডার ফাইলে সাধারণত গাণিতিক কাজের জন্য যে ফাংশনগুলো প্রয়োজন সেগুলো থাকে।
উত্তরঃ সি প্রোগ্রামে কীওয়ার্ডগুলো ছোট হাতের অক্ষরে লিখতে হয়। বড় হাতের অক্ষরে লিখলে কম্পাইলার ভুল প্রদর্শন করবে। যেমনঃ for, while, int, float ইত্যাদির পরিবর্তে, FOR, WHILE, INT, FLOAT টাইপ করলে কম্পাইলার তার কাজ সম্পাদন করতে পারবে না। C ভাষা Upper case ও lower case এ সেনসেটিভ হওয়ায় সি একটি কেস সেনসেটিভ ভাষা।
উত্তরঃ প্রত্যেক স্ট্যান্ডার্ড লাইব্রেরির যে ফাইলসমূহ ঐ লাইব্রেরির সকল ফাংশনের জন্য ফাংশন প্রোটোটাইপ ধারণ করে সেই ফাইলসমূহকে হেডার ফাইল বলা হয়। সি প্রোগ্রামে কম্পাইলারের সাথে সরবরাহকৃত বিভিন্ন ফাইলে স্ট্যান্ডার্ড লাইব্রেরি ফাংশনের তথ্যসমূহ পাওয়া যায়। এ সকল ফাইল .h এক্সটেনশনযুক্ত (extetision)। # include প্রিপ্রসেসর ডাইরেক্টিভ বাবহার করে এ সকল ফাইল প্রোগ্রামে অন্তর্ভুক্ত করা হয়। লাইব্রেরি ফাংশন যথাযথভাবে পরিচালনা করতে সি কম্পাইলার ফাইলসমূহে এ সকল তথ্য ব্যবহার করে।
উত্তরঃ main () ফাংশন C প্রোগ্রামের অপরিহার্য অংশ। একে ঘিরে C প্রোগ্রাম আবর্তিত হয়। যে উদ্দেশ্যে প্রোগ্রামটি লেখা হয়েছে সে বিষয়ক নির্দেশনা main ( ) ফাংশনের ভিতর থাকে। যাবতীয় কাজের (যেমন- যোগ, বিয়োগ, গুণ, ভাগ) নির্দেশ কম্পিউটার main ( ) function থেকেই পায়। অর্থাৎ, main ( ) ফাংশন C প্রোগ্রামের মূল অংশ।
উত্তরঃ যেসব ভাষায় একই সাথে বিট পর্যায়ের প্রোগ্রামিং-এর মাধ্যমে হার্ডওয়্যার নিয়ন্ত্রণ ও সিস্টেম প্রেগ্রাম রচনা করা যায় এবং ব্যবহারকারীর জন্য উচ্চস্তরের প্রোগ্রাম রচনা করা যায় তাকে মিড লেভেল ভাষা বা মধ্যস্তরের ভাষা বলে। সি দিয়ে সহজে উচ্চস্তরের এবং নিম্নস্তরের ভাষার মধ্যে সমন্বয় সাধন করা যায়। যেহেতু সি ভাষায় একই সাথে বিট পর্যায়ের প্রোগ্রামিং-এর মাধ্যমে হার্ডওয়্যার নিয়ন্ত্রণ ও সিস্টেম প্রোগ্রাম এবং ব্যবহারকারীর জন্য উচ্চস্তরের প্রোগ্রাম রচনা করা যায় তাই সি কে মধ্যস্তরের ভাষা বলে।
উত্তরঃ সি প্রোগ্রামের ভাষায় কমেন্ট স্টেটমেন্ট /* দিয়ে শুরু হয় এবং পরবর্তী */ না পাওয়া পর্যন্ত মর্ধবর্তী লাইন বা লাইনসমূহ কমেন্ট হিসাবে ধরা হয়। এরূপ কমেন্টকে মাল্টিলাইন কমেন্ট বলা হয়। আর সিঙ্গেল লাইন কমেন্ট ন্যূনতম দুইটি শ্ল্যাশ (//) দিয়ে শুরু হয়ে ঐ লাইনের শেষ পর্যন্ত বলবৎ থাকে।
উত্তরঃ scanf("%f",&a); একটি ইনপুট স্টেটমেন্ট যা প্রোগ্রাম নির্বাহের সময় কী-বোর্ড থেকে মান নিয়ে 'a' ভেরিয়েবলে রাখবে। %f একটি ফরমেট স্পেসিফায়ার যা float টাইপের ডেটা ইনপুট বা আউটপুট করার জন্য ব্যবহৃত হয়। ইনভার্টেড কমার পর & চিহ্নের ডানপাশে ভেরিয়েবল a বাখা হয়েছে। এটি দিয়ে ইনপুট করা সংখ্যাটি a ভেরিয়েবল ঠিকানায় রাখা হয়েছে বুঝাচ্ছে। সবশেষে সেমিকোলন (;) দ্বারা স্টেটমেন্ট শেষ বুঝাচ্ছে।
উত্তরঃ scanf("%d", &a); একটি ইনপুট স্টেটমেন্ট যা প্রোগ্রাম নির্বাহের সময় কী-বোর্ড থেকে মান নিয়ে 'a' ভেরিয়েবলে রাখবে। %d একটি ফরমেট স্পেসিফায়ার যা integer টাইপের ডেটা ইনপুট বা আউটপুট করার জন্য ব্যবহৃত হয়। ইনভার্টেড কমার পর & চিহ্নের ডানপাশে a ভেরিয়েবল রাখা হয়েছে। এটি দিয়ে ইনপুট করা সংখ্যাটি a ভেরিয়েবল ঠিকানায় রাখা হয়েছে বুঝাচ্ছে। সবশেষে সেমিকোলন (;) দ্বারা স্টেটমেন্ট শেষ বুঝাচ্ছে।
উত্তরঃ printf( ) একটি আউটপুট স্টেটমেন্ট যেখানে বিভিন্ন টাইপের ডেটা মনিটরে প্রদর্শিত হয়। অন্যদিকে %d %f হলো যথাক্রমে integer ও float ডেটা টাইপের ফরম্যাট স্পেসিফায়ার। সুতরাং a. b হলো ভেরিয়েবল অ্যাড্রেস যা integer ও float টাইপের ডেটা স্ক্রীনে প্রদর্শন করবে।
উত্তরঃ x = y+i; একটি স্টেটমেন্ট। এটি দ্বারা বোঝানো হচ্ছে y ভেরিয়েবলের সঙ্গে i ভেরিয়েবলের যোগ করে x ভেরিয়েবলে রাখা। y এবং i ভেরিয়েবল যোগ করার জন্য অ্যারিথমেটিক অপারেটর এরং যোগফল x ভেরিয়েবলে রাখতে অ্যাসাইমেন্ট অপারেটর ব্যবহার করা হয়েছে। সবশেষে সেমিকলন (;) দ্বারা স্টেটমেন্ট শেষ বুঝাচ্ছে।
উত্তরঃ সি ভাষায় লেখা সব প্রোগ্রাম রান করলে কোডের ভেতরে main() ফাংশন থেকে প্রোগ্রামটি চলা শুরু হয়। int main() হিসাবে main( ফাংশন ডিক্লেয়ার করা হলে কম্পাইলার ধরে নেয় ফাংশটি যখন এক্সিকিউশন শেষ হবে তখন সে একটি ইন্টিজার রিটার্ন করবে। তাই ফাংশন যে ইন্টিজার রিটার্ন করতে প্রচলিত নিয়মে return 0; স্টেটমেন্টটি লেখা হয়।

চলক, ধ্রুবক ও ডেটা-টাইপ
উত্তরঃ সি ভাষায় '1number' সঠিক চলক নয় কারণ চলকের প্রথম অক্ষর অবশ্যই আলফাবেটিক ক্যারেক্টার (a....z, A….Z) হবে। চলকের নাম ডিজিট বা অংক দিয়ে শুরু হতে পারে না। '1 number' চলকটি সংখ্যা দিয়ে শুরু হওয়ায় এটি বৈধ চলক নয়।
উত্তরঃ চলকের ব্যবহার বা লেখার সুনির্দিষ্ট কিছু নিয়মাবলী আছে। উদাহরণসরূপ চলকের নামের প্রথম অক্ষর অবশ্যই আলফাবেটিক ক্যারেক্টার (a....z, A….Z) হবে কিন্তু digit হতে পারবে না। চলকের নামের মধ্যে স্পেশাল ক্যারেক্টার আন্ডারস্কোর (_) ও ডলার চিহ্ন ($) ব্যবহার করা যাবে। তবে এগুলো ব্যতীত অন্য কোনো স্পেশাল ক্যারেক্টার যেমন (!, @, #, %, *,-) ইত্যাদি ব্যবহার করা যাবেনা।
বৈধ চলক: my_roll, money$
অবৈধ চলক: my@var, 4cricket
উত্তরঃ চলকের নামকরণের কিছু সুনির্দিষ্ট নিয়ম আছে। এই নিয়মের বহির্ভূত কোনো চলক কম্পাইলার গ্রহণ করে না। নিয়মগুলো নিম্নরূপ:

(i) ভেরিয়েবল নামকরণে আলফাবেটিক ক্যারেক্টার, ডিজিট ও আন্ডারস্কোর (_) ব্যতীত অন্য কোনো স্পেশাল ক্যারেক্টার ব্যবহার করা যায় না।
(ii) নামের মাঝে কোনো ফাঁকা স্থান থাকতে পারে না।
(ⅲ) ডিজিট বা অংক দিয়ে কোন ভেরিয়েবল নাম শুরু হতে পারে না।
(iv) কীওয়ার্ড ভেরিয়েবল হিসাবে ব্যবহার করা যায় না।
উত্তরঃ যে ভেরিয়েবলকে কোনো ফাংশনের মধ্যে ঘোষণা করা হয় তাকে লোকাল ভেরিয়েবল বলে। অপরদিকে গ্লোবাল ভেরিয়েবলকে প্রোগ্রামের শুরুতে অর্থাৎ মেইন ফাংশনের পূর্বে ঘোষণা করা হয়। লোকাল ভেরিয়েবলের মান ও অস্তিত্ব কেবলমাত্র সংশ্লিষ্ট ফাংশনের মধ্যে সীমাবদ্ধ থাকে এবং অন্য ফাংশনে সরাসরি ব্যবহার করা যায় না। কিন্তু গ্লোবাল ভেরিয়েবল প্রোগ্রামের শুরুতে ঘোষণা করায় এর মান ও অস্তিত্ব সম্পূর্ণ প্রোগ্রামে বিদ্যমান থাকে। ফলে গ্লোবাল ভেরিয়েবল প্রোগ্রামে ব্যবহৃত সকল ফাংশনে ব্যবহার করা যায়।
উত্তরঃ প্রোগ্রাম নির্বাহের সময় কোনো অবস্থাতেই যার মান পরিবর্তন করা যায় না তাকে কন্সট্যান্ট বা ধ্রুবক বলা হয়। প্রোগ্রামে কোনো স্থির বা অপরিবর্তনশীল মান ব্যবহার করার জন্য কন্সট্যান্ট ঘোষণা করা হয়। কন্সট্যান্ট প্রধানত দু'ধরনের; যথা-
১. সংখ্যা বা সংখ্যাসূচক ধ্রুবক (Numeric Constant)
২. অক্ষরমালা ধ্রুবক (Character Constant)
উত্তরঃ যেকোনো ধরনের সমস্যা সমাধানের জন্য কম্পিউটারকে অবশ্যই কিছু ডেটা দিতে হয় যা প্রক্রিয়াকরণ করে কম্পিউটার ফলাফল প্রদর্শন করে। এই ডেটা বিভিন্ন ধরনের হয়ে থাকে। ডেটার এই ধরনকেই ডেটা টাইপ বলা হয়। যেমন: ইন্টিজার, ফ্লোট, ক্যারেক্টার ইত্যাদি।
উত্তরঃ সমস্ত ধনাত্মক ও ঋণাত্মক পূর্ণসংখ্যাকে integer বলা হয়। এদেরকে int নামে অভিহিত করা হয়। মেমোরিতে integer সংরক্ষণের জন্য ১৬ বিট জায়গা প্রয়োজন। যদি মেমোরি পরিসর বাড়ানোর প্রয়োজন হয় তখন long integer ব্যবহৃত হয়। মেমোরিতে long integer সংরক্ষরণের জন্য ৩২ বিট জায়গা প্রয়োজন।
উত্তরঃ %f হলো ফরম্যাট স্পেসিফায়ার, যা ফ্লোটিং টাইপের ডেটা আউটপুট করার জন্য ব্যবহৃত হয়। %.2f দ্বারা বোঝানো হয় একটি দশমিক মান প্রদর্শনে দশমিক চিহ্নের পর সর্বোচ্চ ২ ঘর বা ২ অংক দেখাবে।
উত্তরঃ প্রোগ্রামে বিভিন্ন Data Type ব্যবহার করা হয়। এর মধ্যে এক ধরনের Data Type হলো User Defined Data Type-এর অর্থ হলো একজন ব্যবহারকারী তার পছন্দ, প্রয়োজন কিংবা ইচ্ছা অনুযায়ী ডেটা টাইপ তৈরি করতে পারে। এ ধরনের Data Type কে কাস্টম ডেটা টাইপ বা ডিফাইন্ড ডেটা টাইপ বলা হয়।

লুপ, অ্যারে ও ফাংশন
উত্তরঃ সি ভাষায় কম্পাইলারে কতগুলো বিল্ট-ইন ফাংশন আছে সেগুলোকে লাইব্রেরি ফাংশন বা পূর্ব থেকে তৈরিকৃত ফাংশন বলে। সি ভাষায় লাইব্রেরি ফাংশনগুলো তাদের নিজস্ব ফরমেট অনুযায়ী main ( ) ফাংশনের মধ্যে ব্যবহার করা হয়। বিল্ট-ইন বা পূর্ব থেকে তৈরিকৃত ফাংশনগুলো ব্যবহার করার জন্য কেবল ঐ ফাংশনের ব্যবহারবিধি এবং ফরম্যাট জানলেই হয়। অর্থাৎ বিল্ট-ইন ফাংশনগুলো ব্যবহার সহজ। বহুল ব্যবহৃত কতকগুলো লাইব্রেরি বা বিল্ট-ইন ফাংশন হলো: printf ( ), scanf ( ), getch ( ), sqrt ( ), clock ( ) ইত্যাদি।
উত্তরঃ for এবং do লুপের মধ্যে for লুপ ব্যবহার করা সহজ। কারণ for লুপের ক্ষেত্রে লুপ স্টেটমেন্ট কার্যকর হওয়ার পূর্বে শর্ত চেক করা হয় এবং শর্ত সত্য হলে লুপ স্টেটমেন্ট কার্যকর হয়। অপরপক্ষে do লুপের ক্ষেত্রে শর্তের মান লুপ স্টেটমেন্ট কার্যকর হওয়ার পর নির্ধারিত হয়। অর্থাৎ লুপ শর্ত পূরণ হোক বা না হোক ১ বার স্টেটমেন্ট কার্যকর হয়।
উত্তরঃ যে সকল ফাংশন বা স্টেটমেন্টের সাহায্যে প্রোগ্রামের ফলাফল মনিটরে প্রদর্শন করা হয় তাদেরকে আউটপুট ফাংশন বলা হয়। আউটপুট স্টেটমেন্ট বা ফাংশনগুলো হলো: printf ( ), puts ( ), putchar ( ) ।
উত্তরঃ Recursive Function হলো সেই ফাংশন যা নিজেই নিজেকে কল করে। এ ফাংশন একটি নির্দিষ্ট অবস্থা পর্যন্ত নিজেকে নিজে call করতে পারে এবং এর ফলে একটি শিকলের সৃষ্টি হয়। রিকার্সিভ ফাংশনের একটি অন্যতম উদাহরণ হলো Factorial Function.
Factorial n=n(n-1)(n-2)……
অর্থাৎ, 4! = 4×3×2×1=4×3!
উত্তরঃ যখন একটি ফাংশন অপর কোনো ফাংশনকে ব্যবহার করে, তখন তাকে ব্যবহারকারী বা মূল ফাংশন এবং যে ফাংশন ব্যবহার করা হয় তাকে ব্যবহৃত বা কল্ড ফাংশন বলা হয়। ফাংশন কল এ একাধিক ফাংশন সংযুক্ত করা হয়। ফাংশন কল এর শেষে সেমিকোলন (;) থাকে যা দেখে বোঝা যায় যে এটি ফাংশন কল। main ( ) ফাংশনের সাহায্যে অপর এক বা একাধিক লাইব্রেরি কিংবা ইউজার-ডিফাইন্ড ফাংশন কল করা যায় যা আবার এক বা একাধিক লাইব্রেরি কিংবা ইউজার-ডিফাইন্ড ফাংশন কল করতে পারে। কোনো ফাংশন (লাইব্রেরি বা ইউজার-ডিফাইন্ড) কল করার ফরম্যাটটি হলো FunctionName (Parameter or Argument List);
উত্তরঃ অ্যারের কতিপয় ব্যবহার নিম্নরূপ:
১. সমজাতীয় ডেটার জন্য একই অ্যারে ব্যবহার করা হয়।
২. অ্যারের উপাদানের সংখ্যাকে যেকোনো ইনডেক্স দিয়ে উপস্থাপন করা যায়।
৩. প্রত্যেকটা অ্যারের উপাদানকে আলাদাভাবে প্রোগ্রামের যেকোনো স্থানে সাধারণ চলকের মতো ব্যবহার করা যায়।
উত্তরঃ দ্বিমাত্রিক অ্যারের সুবিধাগুলো হলো:
১. একাধিক কলাম ও একাধিক স্যারির সমন্বয়ে ডেটা উপস্থাপন করা যায়।
২. চলকের নামের সাথে দুটি ইনডেক্স ব্যবহার করা হয়।
উত্তরঃ Mark [5, 4] অ্যারেটির ডিক্লেয়ারেশন সঠিক নয়। কারণ একমাত্রিক অ্যারের অন্তর্ভূক্ত ডেটাগুলো একটি মাত্র কলাম বা সারি আকারে উপস্থাপন করতে Mark [i] [j] ব্যবহার করা হয়। একটি দবি-মাত্রিক অ্যারের গঠন হলো, Data_type Array_name [rowsize] [columnsize];
অর্থাৎ integer type অ্যারের গঠন হবে, int Mark [5] [4]। অ্যারেতে একসঙ্গে দুই সাইজের রো বা কলাম সম্ভব নয় এবং এখানে ডেটা টাইপের ডিক্লেয়ারেশনও না থাকায় এটি সঠিক নয়।
উত্তরঃ চলক ও অ্যারের মধ্যে পার্থক্য নিম্নরূপ:
 ৫ম অধ্যায় প্রোগ্রামিং ভাষা; চলক ও অ্যারের মধ্যে দুটি পার্থক্য

অন্যান্য
উত্তরঃ সি প্রোগ্রামে শর্ত সাপেক্ষে কোনো ভেরিয়েবল বা এক্সপ্রেশনের মান অন্য ভেরিয়েবল বা এক্সপ্রেশনের মান হিসেবে নির্ধারণ করার জন্য কন্ডিশনাল অপারেটর (?:) ব্যবহৃত হয়। কন্ডিশনাল অপারেটর ব্যবহারের ফরম্যাট হলো-
Exp1? Exp2: Exp3
উপরের স্টেটমেন্টে প্রথমে Exp1 সম্পাদিত হবে, অতঃপর এই মান শূন্য না হলে অর্থাৎ সত্য হলে Exp 2 সম্পাদিত হয় এবং এক্সপ্রেশনের মান হিসাবে নির্ধারিত হয়। আর এই মান শূন্য বা মিথ্যা হলে Exp3 সম্পাদিত হয় এবং এক্সপ্রেশনের মান রূপে নির্ধারিত হয়। উল্লেখ্য এরূপ কন্ডিশনাল অপারেটরের ক্ষেত্রে কেবল Exp2 অথবা Exp3 সম্পাদিত হয়; Exp2 এবং Exp3 উভয় সম্পাদিত হয় না।
উত্তরঃ বিশেষ কয়েকটি ক্যারেক্টার ছাড়া (যেমন:, \, ", n\, \i ইত্যাদি) printf ( ) ফাংশন দ্বারা কীবোর্ডের সকল ক্যারেক্টার সরাসরি প্রদর্শন করা যায়। এই বিশেষ ক্যারেক্টারগুলোকে ব্যাকশ্লাশ কনস্ট্যান্ট ক্যারেক্টার বলা হয়। ব্যাকশ্লাশ কনস্ট্যান্ট ক্যারেক্টারগুলো ব্যাকপ্লাশ ক্যারেক্টার ছাড়া প্রদর্শন করা যায় না। যেমন-printf ( ) ফাংশন দ্বারা একটি ব্যাকশ্লাশ প্রদর্শন করতে চাইলে পরপর দুই অথবা তিনটি ব্যাকশ্লাশ দিতে হয়, পরপর দুটো ব্যাকশ্লাশ প্রদর্শন করতে চাইলে পরপর চার অথবা পাঁচটি ব্যাকশ্লাশ দিতে হয়, ইত্যাদি। ‘\n’ নতুন লাইনে শুরুতে প্রদর্শনের জন্য ব্যবহৃত হয়। এবং'\r' আউটপুট পরবর্তী লাইনের একই কলাম বরাবর প্রদর্শনের জন্য ব্যবহৃত হয়।
উত্তরঃ ++i হচ্ছে প্রিফিক্স ইনক্রিমেন্টাল অপারেটর যেক্ষেত্রে কম্পাইলার প্রথমে ভেরিয়েবলের প্রারম্ভিক মানের সাথে এক যোগ করে অতপর প্রোগ্রামের একই স্টেটমেন্টে এই বর্ধিত মান ব্যবহার করে। অন্যদিকে i++ পোস্টফিক্স ইনক্রিমেন্টাল অপারেটর যেক্ষেত্রে কম্পাইলার প্রথমে ভেরিয়েবলের পুরাতন মান ব্যবহার করে, অতপর ভেরিয়বলের মানের সাথে এক যোগ করে। এই নতুন মান পরবর্তী ধাপে কার্যকর হয়।

পঞ্চম অধ্যায়ঃ- এর সৃজনশীল প্রশ্ন ও উত্তর

Comments