৫ম অধ্যায় খ দাগ

১. প্রোগ্রামের ধারণা

প্রশ্ন ১। ভোলাটাইল মেমোরি এবং নন-ভোলাটাইল মেমোরি এক নয়— ব্যাখ্যা কর।রা. বো. ’২৪

উত্তরঃ যে মেমোরিতে বিদ্যুৎ থাকা পর্যন্ত ডেটা থাকে এবং বিদ্যুৎ চলে গেলে সব ডেটা মুছে যায়, তাকে ভোলাটাইল (অস্থায়ী) মেমোরি বলে। যেমন: RAM।

আর যে মেমোরিতে বিদ্যুৎ চলে গেলেও ডেটা মুছে যায় না, তাকে নন-ভোলাটাইল (স্থায়ী) মেমোরি বলে। যেমন: ROM, হার্ডডিস্ক, পেনড্রাইভ।

প্রোগ্রাম চালানোর সময় তা RAM-এ এনে চালানো হয়, কিন্তু প্রোগ্রাম জমা করে রাখা হয় হার্ডডিস্কে। কম্পিউটার বন্ধ করলে RAM-এর ডেটা হারিয়ে যায়, কিন্তু হার্ডডিস্কের ডেটা থেকে যায়। তাই ভোলাটাইল ও নন-ভোলাটাইল মেমোরি এক নয়।

প্রশ্ন ২। স্থায়ী ও অস্থায়ী মেমোরির মধ্যে পার্থক্য লিখ।রা. বো. ’২৩

উত্তরঃ স্থায়ী ও অস্থায়ী মেমোরির পার্থক্য নিচে দেওয়া হলো:

স্থায়ী মেমোরিঅস্থায়ী মেমোরি
বিদ্যুৎ চলে গেলেও ডেটা মুছে যায় না।বিদ্যুৎ চলে গেলে ডেটা মুছে যায়।
একে নন-ভোলাটাইল মেমোরি বলে।একে ভোলাটাইল মেমোরি বলে।
ডেটা ও প্রোগ্রাম দীর্ঘ সময় জমা রাখতে ব্যবহৃত হয়।চলমান প্রোগ্রাম ও ডেটা সাময়িকভাবে রাখতে ব্যবহৃত হয়।
যেমন: ROM, হার্ডডিস্ক, SSD।যেমন: RAM, ক্যাশ মেমোরি।
প্রশ্ন ৩। প্রত্যেকটি প্রোগ্রামের তিনটি অংশ থাকে— ব্যাখ্যা কর।চ. বো. ’২৩

উত্তরঃ প্রতিটি পূর্ণাঙ্গ প্রোগ্রামের তিনটি অংশ থাকে: ইনপুট, প্রসেস (প্রক্রিয়াকরণ) ও আউটপুট।

  1. ইনপুট: কাজ করার জন্য প্রোগ্রাম ব্যবহারকারীর কাছ থেকে ডেটা নেয়।
  2. প্রসেস: নেওয়া ডেটার উপর হিসাব বা কাজ করে।
  3. আউটপুট: কাজ শেষে ফলাফল দেখায়।

যেমন: দুটি সংখ্যার যোগফল বের করার প্রোগ্রাম।

scanf("%d %d", &a, &b);   // ইনপুট
sum = a + b;              // প্রসেস
printf("%d", sum);        // আউটপুট

এই তিনটি অংশ মিলেই একটি প্রোগ্রাম পূর্ণ হয়।

প্রশ্ন ৪। প্রোগ্রামিং ভাষার প্রজন্ম কয়টি? সালসহ উল্লেখ কর।

উত্তরঃ প্রোগ্রামিং ভাষার প্রজন্ম ৫টি।

প্রজন্মভাষাসাল
১ম প্রজন্মমেশিন ভাষা১৯৪৫
২য় প্রজন্মঅ্যাসেম্বলি ভাষা১৯৫০
৩য় প্রজন্মউচ্চস্তরের ভাষা (যেমন: FORTRAN, COBOL, C)১৯৬০
৪র্থ প্রজন্মঅতি উচ্চস্তরের ভাষা (যেমন: SQL)১৯৭০
৫ম প্রজন্মস্বাভাবিক বা প্রাকৃতিক ভাষা (যেমন: PROLOG)১৯৮০
লক্ষ করো: সালগুলো প্রতিটি প্রজন্ম শুরুর আনুমানিক সময়, যা বইয়ে দেওয়া আছে। পরীক্ষায় এই সালগুলোই লিখবে।

২. প্রোগ্রামের ভাষা

প্রশ্ন ৫। অ্যাসেম্বলি ভাষা মেশিন ভাষার চেয়ে উন্নততর কেন?য. বো. ’১৭

উত্তরঃ মেশিন ভাষায় সব নির্দেশ 0 ও 1 দিয়ে লিখতে হয়, যা মনে রাখা ও লেখা খুব কঠিন। অ্যাসেম্বলি ভাষায় 0, 1 এর বদলে ADD, SUB, MOV, JMP এর মতো ছোট ইংরেজি সংকেত (নেমোনিক কোড) ব্যবহার করা হয়। ফলে:

  • প্রোগ্রাম লেখা ও মনে রাখা সহজ হয়।
  • ভুল খুঁজে বের করা ও সংশোধন করা সহজ হয়।
  • প্রোগ্রাম পরিবর্তন করাও সহজ হয়।

তাই অ্যাসেম্বলি ভাষা মেশিন ভাষার চেয়ে উন্নত। তবে এটি চালাতে অ্যাসেম্বলার নামের অনুবাদক লাগে।

প্রশ্ন ৬। ০, ১ দিয়ে লেখা ভাষা ব্যাখ্যা কর।য. বো. ’১৬চ. বো. ’১৬

উত্তরঃ ০ ও ১ দিয়ে লেখা ভাষা হলো মেশিন ভাষা। এটি প্রথম প্রজন্মের ভাষা। যেমন: 10110000 01100001

কম্পিউটার শুধু এই ভাষাই সরাসরি বুঝতে পারে। তাই এতে কোনো অনুবাদক লাগে না এবং প্রোগ্রাম খুব দ্রুত চলে। তবে এর কিছু অসুবিধা আছে:

  • এটি যন্ত্রনির্ভর, এক ধরনের কম্পিউটারের প্রোগ্রাম অন্য ধরনের কম্পিউটারে চলে না।
  • লেখা, মনে রাখা ও ভুল ধরা খুব কঠিন।
  • প্রোগ্রামারকে কম্পিউটারের হার্ডওয়্যার সম্পর্কে জানতে হয়।
প্রশ্ন ৭। “লো-লেভেল ল্যাংগুয়েজের দুর্বলতাই হাই-লেভেল ল্যাংগুয়েজের উৎপত্তির কারণ” — ব্যাখ্যা কর।দি. বো. ’১৭

উত্তরঃ মেশিন ভাষা ও অ্যাসেম্বলি ভাষাকে লো-লেভেল ভাষা বলে। এদের দুর্বলতা হলো:

  • যন্ত্রনির্ভর, এক মেশিনের প্রোগ্রাম অন্য মেশিনে চলে না।
  • শেখা, লেখা ও ভুল সংশোধন কঠিন।
  • প্রোগ্রামারকে হার্ডওয়্যারের গঠন জানতে হয়।
  • বড় প্রোগ্রাম লিখতে অনেক সময় লাগে।

এই সমস্যাগুলো দূর করতে ইংরেজি শব্দ ও গাণিতিক চিহ্ন দিয়ে লেখা যায় এমন হাই-লেভেল ভাষা (যেমন: C, Java, Python) তৈরি হয়। এটি যন্ত্রনিরপেক্ষ এবং শেখা ও লেখা সহজ। তাই বলা যায়, লো-লেভেল ভাষার দুর্বলতাই হাই-লেভেল ভাষার উৎপত্তির কারণ।

প্রশ্ন ৮। কোন প্রজন্মের ভাষায় প্রোগ্রাম তৈরি সব থেকে কঠিন? ব্যাখ্যা কর।

উত্তরঃ প্রথম প্রজন্মের ভাষা অর্থাৎ মেশিন ভাষায় প্রোগ্রাম তৈরি সবচেয়ে কঠিন। কারণ:

  • সব নির্দেশ শুধু 0 আর 1 দিয়ে লিখতে হয়, যা মনে রাখা কঠিন।
  • প্রতিটি কম্পিউটারের মেশিন ভাষা আলাদা হতে পারে, তাই ঐ কম্পিউটারের গঠন জানতে হয়।
  • একটি ভুল বিট খুঁজে বের করা খুব কঠিন।
  • ছোট একটি কাজের জন্যও অনেক লম্বা কোড লিখতে হয়, তাই সময় বেশি লাগে।
প্রশ্ন ৯। কোন ধরনের প্রোগ্রামিং ভুল নির্ণয় কঠিন এবং কেনো?

উত্তরঃ লজিক্যাল (যৌক্তিক) ভুল নির্ণয় করা সবচেয়ে কঠিন।

প্রোগ্রামে তিন ধরনের ভুল হতে পারে: সিনট্যাক্স ভুল, লজিক্যাল ভুল ও রানটাইম ভুল। সিনট্যাক্স ভুল (যেমন: সেমিকোলন না দেওয়া) হলে কম্পাইলার নিজেই ভুলের বার্তা দেখায়। কিন্তু লজিক্যাল ভুল হলে প্রোগ্রাম ঠিকমতো চলে, কোনো error বার্তাও আসে না, শুধু ফলাফল ভুল আসে।

sum = a - b;   // যোগ করার কথা ছিল, ভুল করে বিয়োগ লেখা হয়েছে

এখানে প্রোগ্রাম চলবে, কিন্তু উত্তর ভুল হবে। এই ভুল খুঁজতে পুরো যুক্তি নিজে পরীক্ষা করতে হয়। তাই লজিক্যাল ভুল নির্ণয় কঠিন।

প্রশ্ন ১০। মধ্যম স্তরের ভাষা কী? ব্যাখ্যা কর।

উত্তরঃ যে প্রোগ্রামিং ভাষায় লো-লেভেল ও হাই-লেভেল দুই ধরনের ভাষার সুবিধা আছে, তাকে মধ্যম স্তরের ভাষা বলে। যেমন: C।

  • হাই-লেভেল ভাষার মতো এতে ইংরেজি শব্দ (if, while, printf) দিয়ে সহজে প্রোগ্রাম লেখা যায়।
  • আবার লো-লেভেল ভাষার মতো পয়েন্টার ও বিটওয়াইজ অপারেটর দিয়ে সরাসরি মেমোরি ও হার্ডওয়্যার নিয়ে কাজ করা যায়।

এ কারণে C দিয়ে সাধারণ সফটওয়্যারের পাশাপাশি অপারেটিং সিস্টেম (যেমন: UNIX) ও ডিভাইস ড্রাইভারও তৈরি করা যায়।

প্রশ্ন ১১। অ্যাসেম্বলি এবং উচ্চতর ভাষার দুটি পার্থক্য লিখ।

উত্তরঃ অ্যাসেম্বলি ও উচ্চতর ভাষার দুটি পার্থক্য নিচে দেওয়া হলো:

অ্যাসেম্বলি ভাষাউচ্চতর ভাষা
নেমোনিক কোড (ADD, MOV, SUB) দিয়ে লেখা হয়।ইংরেজি শব্দ ও গাণিতিক চিহ্ন দিয়ে লেখা হয়।
যন্ত্রনির্ভর, এক ধরনের প্রসেসরের প্রোগ্রাম অন্যটিতে চলে না।যন্ত্রনিরপেক্ষ, বিভিন্ন ধরনের কম্পিউটারে চালানো যায়।

৩. অনুবাদক প্রোগ্রাম

প্রশ্ন ১২। কম্পাইলারের চেয়ে ইন্টারপ্রেটার বেশি বন্ধুভাবাপন্ন— ব্যাখ্যা কর।রা. বো. ’২৩

উত্তরঃ ইন্টারপ্রেটার প্রোগ্রামকে লাইন বাই লাইন অনুবাদ করে এবং সাথে সাথে চালায়। কোনো লাইনে ভুল পেলে সেখানেই থেমে যায় এবং ঐ লাইনের ভুল দেখায়। ফলে প্রোগ্রামার সহজেই বুঝতে পারে কোথায় ভুল হয়েছে এবং তখনই ঠিক করতে পারে।

অন্যদিকে কম্পাইলার পুরো প্রোগ্রাম একসাথে অনুবাদ করে সব ভুলের তালিকা একসাথে দেয়, যা নতুনদের জন্য বোঝা কঠিন। তাই ভুল খোঁজা ও প্রোগ্রামিং শেখার ক্ষেত্রে ইন্টারপ্রেটার কম্পাইলারের চেয়ে বেশি বন্ধুভাবাপন্ন।

প্রশ্ন ১৩। ইন্টারপ্রেটারের তুলনায় কম্পাইলার সুবিধাজনক— কথাটি ব্যাখ্যা কর।ঢা. বো. ’১৯

উত্তরঃ কম্পাইলার পুরো প্রোগ্রাম একবারে অনুবাদ করে একটি অবজেক্ট প্রোগ্রাম (মেশিন কোড) তৈরি করে। একবার কম্পাইল করলে পরে প্রতিবার চালানোর সময় আর অনুবাদ করতে হয় না। ফলে:

  • প্রোগ্রাম দ্রুত চলে।
  • চালানোর জন্য সোর্স কোড বা কম্পাইলার লাগে না।
  • সোর্স কোড গোপন রাখা যায়।

ইন্টারপ্রেটার কোনো অবজেক্ট প্রোগ্রাম তৈরি করে না, প্রতিবার চালানোর সময় লাইন বাই লাইন অনুবাদ করে, তাই ধীরে চলে। এজন্য ইন্টারপ্রেটারের তুলনায় কম্পাইলার সুবিধাজনক।

প্রশ্ন ১৪। অনুবাদক প্রোগ্রাম হিসেবে কম্পাইলার বেশি উপযোগী ব্যাখ্যা কর।দি. বো. ’১৯ব. বো. ’১৯

উত্তরঃ কম্পাইলার উচ্চস্তরের ভাষায় লেখা পুরো প্রোগ্রামকে একবারে মেশিন ভাষায় অনুবাদ করে। অনুবাদের পর একটি এক্সিকিউটেবল ফাইল তৈরি হয়, যা বারবার চালানো যায়, প্রতিবার অনুবাদ করতে হয় না। এতে সময় বাঁচে এবং প্রোগ্রাম দ্রুত চলে।

বড় প্রোগ্রাম ও সফটওয়্যার তৈরিতে এই সুবিধা খুব কাজে লাগে। এছাড়া কম্পাইলার পুরো প্রোগ্রামের ভুলগুলো একসাথে তালিকা আকারে দেখায়। তাই অনুবাদক প্রোগ্রাম হিসেবে কম্পাইলার বেশি উপযোগী।

প্রশ্ন ১৫। কম্পাইলার ও ইন্টারপ্রিটারের মধ্যে পার্থক্য লিখ।

উত্তরঃ কম্পাইলার ও ইন্টারপ্রেটারের পার্থক্য নিচে দেওয়া হলো:

কম্পাইলারইন্টারপ্রেটার
পুরো প্রোগ্রাম একসাথে অনুবাদ করে।এক লাইন করে অনুবাদ করে ও চালায়।
অবজেক্ট প্রোগ্রাম তৈরি করে।অবজেক্ট প্রোগ্রাম তৈরি করে না।
একবার অনুবাদের পর প্রোগ্রাম দ্রুত চলে।প্রতিবার অনুবাদ করতে হয়, তাই ধীরে চলে।
সব ভুল একসাথে দেখায়, ভুল খোঁজা তুলনামূলক কঠিন।ভুল পেলে ঐ লাইনেই থেমে যায়, ভুল খোঁজা সহজ।
যেমন: C, C++ এর কম্পাইলার।যেমন: Python, BASIC এর ইন্টারপ্রেটার।

৪. প্রোগ্রামের সংগঠন

প্রশ্ন ১৬। মাঝে মাঝেই কোনো কোনো প্রোগ্রামের সংগঠনকে ভালো এবং কোনো কোনো প্রোগ্রামের সংগঠনকে দুর্বল বলা হয় কেন? ব্যাখ্যা কর।

উত্তরঃ প্রোগ্রামের সংগঠন বলতে প্রোগ্রামের ইনপুট, প্রসেস ও আউটপুট অংশগুলো কীভাবে সাজানো থাকে তা বোঝায়।

যে প্রোগ্রামের অংশগুলো ধাপে ধাপে সুন্দরভাবে সাজানো, সহজে বোঝা যায়, কম সময় ও মেমোরিতে চলে, সহজে ভুল ধরা যায় এবং পরে সহজে পরিবর্তন বা বড় করা যায়, তার সংগঠনকে ভালো বলা হয়।

আর যে প্রোগ্রাম এলোমেলোভাবে লেখা, বোঝা কঠিন, ডিবাগিং ও রক্ষণাবেক্ষণ কঠিন, তার সংগঠনকে দুর্বল বলা হয়। অর্থাৎ আদর্শ প্রোগ্রামের বৈশিষ্ট্য মানা হয়েছে কিনা তার উপর ভিত্তি করেই সংগঠনকে ভালো বা দুর্বল বলা হয়।

৫. প্রোগ্রাম তৈরির ধাপসমূহ

প্রশ্ন ১৭। ডকুমেন্টেশন কেন করতে হয়?রা. বো. ’১৮কু. বো. ’১৮চ. বো. ’১৮ব. বো. ’১৮

উত্তরঃ প্রোগ্রামের উদ্দেশ্য, অ্যালগরিদম, ফ্লোচার্ট, ব্যবহারের নিয়ম ও বিভিন্ন অংশের বিবরণ লিখে রাখাকে ডকুমেন্টেশন বলে। ডকুমেন্টেশন করতে হয় কারণ:

  • পরে প্রোগ্রাম পরিবর্তন বা রক্ষণাবেক্ষণ করা সহজ হয়।
  • অন্য প্রোগ্রামাররা সহজে প্রোগ্রামটি বুঝতে পারে।
  • ব্যবহারকারী জানতে পারে প্রোগ্রামটি কীভাবে ব্যবহার করতে হবে।
  • ভুল খুঁজে বের করা সহজ হয়।

C প্রোগ্রামে /* ... */ বা // দিয়ে কমেন্ট লিখেও ডকুমেন্টেশন করা যায়।

প্রশ্ন ১৮। ডিবাগিং ব্যাখ্যা কর।চ. বো. ’২৪

উত্তরঃ প্রোগ্রামের ভুলকে বাগ (Bug) বলে। প্রোগ্রামের ভুল খুঁজে বের করে তা সংশোধন করার প্রক্রিয়াকে ডিবাগিং (Debugging) বলে।

প্রোগ্রামে সাধারণত তিন ধরনের ভুল হয়: সিনট্যাক্স ভুল, লজিক্যাল ভুল ও রানটাইম ভুল। সিনট্যাক্স ভুল কম্পাইলার দেখিয়ে দেয়, তাই এটি ঠিক করা সহজ। লজিক্যাল ও রানটাইম ভুল খুঁজতে প্রোগ্রামকে বিভিন্ন ইনপুট দিয়ে পরীক্ষা করতে হয়।

printf("Hello")    // ভুল: শেষে সেমিকোলন নেই
printf("Hello");   // ডিবাগিং করে ঠিক করা হলো

ডিবাগিং ছাড়া সঠিক ফলাফল দেয় এমন প্রোগ্রাম তৈরি করা যায় না।

প্রশ্ন ১৯। অ্যালগরিদম কোডিং-এর পূর্বশর্ত— ব্যাখ্যা কর।ঢা. বো. ’১৬

উত্তরঃ কোনো সমস্যা সমাধানের জন্য ধাপে ধাপে সাজানো নির্দেশনাকে অ্যালগরিদম বলে। কোড লেখার আগে কী কী ধাপে সমস্যার সমাধান হবে তা ঠিক করতে হয়। অ্যালগরিদম থাকলে প্রতিটি ধাপকে প্রোগ্রামিং ভাষায় রূপ দিলেই কোড তৈরি হয়ে যায়।

যেমন, দুটি সংখ্যা যোগের অ্যালগরিদম:

  1. শুরু।
  2. a ও b ইনপুট নাও।
  3. sum = a + b হিসাব কর।
  4. sum দেখাও।
  5. শেষ।

এই ধাপগুলো দেখে সহজেই C কোড লেখা যায়। অ্যালগরিদম ছাড়া কোড লিখলে যুক্তিতে ভুল হওয়ার সম্ভাবনা বেশি থাকে এবং সময়ও বেশি লাগে। তাই অ্যালগরিদম হলো কোডিং-এর পূর্বশর্ত।

প্রশ্ন ২০। ‘কোন বৈশিষ্ট্যগুলো মেনে প্রোগ্রাম তৈরি করা উচিত’? ব্যাখ্যা কর।

উত্তরঃ একটি আদর্শ প্রোগ্রাম তৈরির জন্য নিচের বৈশিষ্ট্যগুলো মানা উচিত:

  1. প্রোগ্রাম সহজ ও বোধগম্য হবে, যাতে অন্য প্রোগ্রামারও বুঝতে ও আপডেট করতে পারে।
  2. চালাতে কম সময় ও কম মেমোরি লাগবে।
  3. সহজে সম্প্রসারণ করা যাবে, অর্থাৎ নতুন সুবিধা যোগ করা যাবে।
  4. ডিবাগিং ও টেস্টিং সহজ হবে।
  5. সহজে রক্ষণাবেক্ষণ করা যাবে।
  6. সঠিক ইনপুট দিলে সবসময় সঠিক আউটপুট দেবে।
প্রশ্ন ২১। প্রোগ্রাম তৈরির ধাপসমূহ কয়টি ও কী কী?

উত্তরঃ প্রোগ্রাম তৈরির ধাপ ৭টি:

  1. সমস্যা নির্দিষ্টকরণ: সমস্যাটি আসলে কী তা ঠিক করা।
  2. সমস্যা বিশ্লেষণ: সমস্যাকে ছোট অংশে ভাগ করে ইনপুট, আউটপুট ও সমাধানের উপায় ঠিক করা।
  3. প্রোগ্রাম ডিজাইন: অ্যালগরিদম, ফ্লোচার্ট বা সুডোকোড তৈরি করা।
  4. প্রোগ্রাম উন্নয়ন (কোডিং): প্রোগ্রামিং ভাষায় কোড লেখা।
  5. প্রোগ্রাম বাস্তবায়ন: টেস্টিং ও ডিবাগিং করে প্রোগ্রাম চালু করা।
  6. ডকুমেন্টেশন: প্রোগ্রামের বিবরণ লিখে রাখা।
  7. প্রোগ্রাম রক্ষণাবেক্ষণ: প্রয়োজন অনুযায়ী প্রোগ্রাম পরিবর্তন ও হালনাগাদ করা।
প্রশ্ন ২২। ফ্লোচার্টের জন্য ব্যবহৃত প্রতীকসমূহ ব্যাখ্যা কর।

উত্তরঃ ফ্লোচার্ট হলো চিত্রের মাধ্যমে প্রোগ্রামের ধাপগুলো দেখানোর পদ্ধতি। এতে নির্দিষ্ট কিছু প্রতীক ব্যবহার করা হয়:

প্রতীকনামকাজ
টার্মিনাল (ডিম্বাকৃতি)প্রোগ্রামের শুরু ও শেষ বোঝায়।
ইনপুট/আউটপুট (সামান্তরিক)ডেটা ইনপুট নেওয়া বা ফলাফল দেখানো বোঝায়।
প্রসেস (আয়তক্ষেত্র)হিসাব বা কোনো কাজ বোঝায়, যেমন: sum = a + b।
সিদ্ধান্ত (ডায়মন্ড)শর্ত পরীক্ষা করে হ্যাঁ/না দুই পথে যাওয়া বোঝায়।
প্রবাহ রেখা (তীর)কোন ধাপের পর কোন ধাপ তা দেখায়।
সংযোগ (বৃত্ত)ফ্লোচার্টের এক অংশকে অন্য অংশের সাথে যুক্ত করে।

৬. ‘সি’ প্রোগ্রামিং ভাষা

প্রশ্ন ২৩। সি একটি কেস সেনসিটিভ ভাষা— ব্যাখ্যা কর।ঢা. বো. ’২৪, ’১৮রা. বো. ’২৪, ’১৯কু. বো. ’২৪দি. বো. ’২৪, ’১৮য. বো. ’১৮সি. বো. ’১৮, ’১৭

উত্তরঃ কেস সেনসিটিভ মানে বড় হাতের (Uppercase) ও ছোট হাতের (Lowercase) অক্ষরকে আলাদা ধরা।

C ভাষায় num, Num ও NUM তিনটি আলাদা চলক। আবার C-এর কি-ওয়ার্ড ও লাইব্রেরি ফাংশন ছোট হাতের অক্ষরে লিখতে হয়। যেমন: printf এর বদলে Printf লিখলে বা int এর বদলে INT লিখলে এরর হবে।

int age = 18;
int Age = 20;   // age ও Age দুটি আলাদা চলক

তাই C একটি কেস সেনসিটিভ ভাষা।

প্রশ্ন ২৪। ‘সি’ কে মধ্যম স্তরের ভাষা বলা হয় কেন? ব্যাখ্যা কর।চ. বো. ’২৪সি. বো. ’২৪

উত্তরঃ C ভাষায় হাই-লেভেল ও লো-লেভেল দুই ধরনের ভাষার বৈশিষ্ট্য আছে।

  • হাই-লেভেল বৈশিষ্ট্য: ইংরেজির মতো শব্দ (if, for, while) দিয়ে সহজে লেখা যায়, এটি যন্ত্রনিরপেক্ষ এবং ফাংশন দিয়ে সাজানো প্রোগ্রাম লেখা যায়।
  • লো-লেভেল বৈশিষ্ট্য: পয়েন্টার দিয়ে সরাসরি মেমোরির ঠিকানা নিয়ে কাজ করা যায় এবং বিটওয়াইজ অপারেটর দিয়ে বিট পর্যায়ে কাজ করা যায়।

তাই C দিয়ে অপারেটিং সিস্টেম, ড্রাইভারের মতো হার্ডওয়্যার ঘেঁষা প্রোগ্রাম এবং সাধারণ অ্যাপ্লিকেশন দুটোই লেখা যায়। এ কারণে C কে মধ্যম স্তরের ভাষা বলা হয়।

প্রশ্ন ২৫। C ও C++ এর মধ্যে ভিন্নতা কী? ব্যাখ্যা কর।য. বো. ’১৯

উত্তরঃ C++ হলো C ভাষার উন্নত রূপ। এতে C-এর প্রায় সব সুবিধা আছে, সাথে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং যোগ হয়েছে। দুটির ভিন্নতা:

CC++
প্রসিডিউরাল বা স্ট্রাকচার্ড ভাষা।অবজেক্ট ওরিয়েন্টেড ভাষা।
ক্লাস, অবজেক্ট, ইনহেরিটেন্স নেই।ক্লাস, অবজেক্ট, ইনহেরিটেন্স আছে।
ইনপুট ও আউটপুটে scanf(), printf() ব্যবহৃত হয়।সাধারণত cin, cout ব্যবহৃত হয়।
ডেনিস রিচি ১৯৭২ সালে বেল ল্যাবে তৈরি করেন।বিয়ার্নে স্ট্রুস্ট্রাপ তৈরি করেন; ১৯৮৩ সালে নাম হয় C++।
ফাইলের এক্সটেনশন .cফাইলের এক্সটেনশন .cpp

৭. ডেটা টাইপ

প্রশ্ন ২৬। Integer এর পরিবর্তে কখন long integer ব্যবহার করতে হয়— বুঝিয়ে লিখ।চ. বো. ’১৭

উত্তরঃ int টাইপের চলক ২ বাইট মেমোরি নেয় এবং −32768 থেকে +32767 পর্যন্ত মান রাখতে পারে। এর চেয়ে বড় মান রাখতে হলে long int ব্যবহার করতে হয়। long int ৪ বাইট নেয় এবং −2147483648 থেকে +2147483647 পর্যন্ত মান রাখতে পারে।

যেমন: কোনো জেলার জনসংখ্যা 2500000 রাখতে int যথেষ্ট নয়, তাই long int লাগবে।

long int population = 2500000;
printf("%ld", population);
লক্ষ করো: বইয়ে ১৬ বিট কম্পাইলার (Turbo C) ধরে int = ২ বাইট লেখা হয়। আধুনিক কম্পাইলারে (যেমন GCC) int সাধারণত ৪ বাইট হয়। পরীক্ষায় বইয়ের মান লিখবে।
প্রশ্ন ২৭। %d এবং %s ডাটা টাইপসহ ব্যাখ্যা কর।

উত্তরঃ %d ও %s হলো ফরম্যাট স্পেসিফায়ার। printf() ও scanf() ফাংশনে কোন ধরনের ডেটা দেখানো বা নেওয়া হবে তা এরা বলে দেয়।

  • %d: int (পূর্ণসংখ্যা) ডেটা টাইপের জন্য। যেমন: 25, −7।
  • %s: স্ট্রিং অর্থাৎ char টাইপের অ্যারের (কয়েকটি অক্ষরের সমষ্টি) জন্য। যেমন: "Dhaka"।
int roll = 25;
char name[20] = "Rahim";
printf("%d %s", roll, name);   // আউটপুট: 25 Rahim

৮. চলক

প্রশ্ন ২৮। “লোকাল ও গ্লোবাল ভেরিয়েবল এক নয়”— ব্যাখ্যা কর।য. বো. ’২৩

উত্তরঃ যে চলক কোনো ফাংশনের ভেতরে ঘোষণা করা হয় তাকে লোকাল চলক বলে। এটি শুধু ঐ ফাংশনের ভেতরে ব্যবহার করা যায় এবং ফাংশনের কাজ শেষ হলে মুছে যায়।

আর যে চলক সব ফাংশনের বাইরে (সাধারণত প্রোগ্রামের শুরুতে) ঘোষণা করা হয় তাকে গ্লোবাল চলক বলে। এটি প্রোগ্রামের যেকোনো ফাংশন থেকে ব্যবহার করা যায় এবং পুরো প্রোগ্রাম চলা পর্যন্ত থাকে।

int total = 0;          // গ্লোবাল চলক

int main()
{
    int a = 5;          // লোকাল চলক
    total = total + a;
    return 0;
}

এখানে a শুধু main() এর ভেতরে ব্যবহার করা যাবে, কিন্তু total যেকোনো ফাংশনে ব্যবহার করা যাবে। তাই লোকাল ও গ্লোবাল চলক এক নয়।

প্রশ্ন ২৯। ভেরিয়েবল ঘোষণার ক্ষেত্রে অনুসরণীয় পদক্ষেপ ব্যাখ্যা কর।দি. বো. ’২৩

উত্তরঃ C ভাষায় চলক ব্যবহারের আগে অবশ্যই ঘোষণা করতে হয়। ঘোষণার ধাপ:

  1. প্রথমে ডেটা টাইপ লিখতে হয় (int, float, char ইত্যাদি)।
  2. এরপর একটি স্পেস দিয়ে নামকরণের নিয়ম মেনে চলকের নাম লিখতে হয়।
  3. একাধিক চলক হলে কমা (,) দিয়ে আলাদা করতে হয়।
  4. চাইলে ঘোষণার সময়ই = দিয়ে প্রাথমিক মান দেওয়া যায়।
  5. শেষে সেমিকোলন (;) দিতে হয়।
int roll;
float gpa = 4.5;
int a, b, sum;
প্রশ্ন ৩০। নিচের চলকগুলো শুদ্ধ নয় কেন ব্যাখ্যা কর : ab – c, main, int, 2abc.কু. বো. ’১৯

উত্তরঃ চলকগুলো শুদ্ধ না হওয়ার কারণ:

  • ab – c: চলকের নামে স্পেস বা মাইনাস (−) চিহ্ন ব্যবহার করা যায় না।
  • main: main হলো C প্রোগ্রামের আবশ্যিক প্রধান ফাংশনের নাম। চলকের নাম main দিলে ঐ ফাংশনের নামের সাথে মিলে যায়, ফলে বিভ্রান্তি বা এরর হয়।
  • int: int একটি কি-ওয়ার্ড। কি-ওয়ার্ড চলকের নাম হতে পারে না।
  • 2abc: চলকের নাম অঙ্ক দিয়ে শুরু হতে পারে না।
লক্ষ করো: main আসলে ৩২টি কি-ওয়ার্ডের মধ্যে নেই, কিন্তু প্রধান ফাংশনের নাম হওয়ায় চলকের নাম হিসেবে ব্যবহার করা ঠিক নয়।
প্রশ্ন ৩১। সি-ভাষায় '1number' সঠিক চলক নয়— ব্যাখ্যা কর।চ. বো. ’১৯

উত্তরঃ C ভাষায় চলকের নাম অবশ্যই কোনো ইংরেজি অক্ষর (a–z, A–Z) বা আন্ডারস্কোর (_) দিয়ে শুরু করতে হয়, অঙ্ক দিয়ে শুরু করা যায় না।

'1number' নামটি অঙ্ক 1 দিয়ে শুরু হয়েছে, তাই কম্পাইলার এটিকে চলক হিসেবে নেবে না এবং এরর দেখাবে। তবে number1 বা _1number লিখলে সঠিক চলক হবে।

প্রশ্ন ৩২। চলকের নামে আন্ডারস্কোর ব্যবহার করা যাবে— বুঝিয়ে লেখ।সি. বো. ’১৯

উত্তরঃ C ভাষায় চলকের নামে ইংরেজি অক্ষর, অঙ্ক এবং বিশেষ চিহ্নের মধ্যে শুধু আন্ডারস্কোর (_) ব্যবহার করা যায়।

নামে স্পেস দেওয়া যায় না, তাই দুটি শব্দ যুক্ত করতে আন্ডারস্কোর খুব কাজে লাগে। যেমন: roll_no, total_mark। আন্ডারস্কোর দিয়ে নাম শুরুও করা যায়, যেমন: _sum। তাই চলকের নামে আন্ডারস্কোর ব্যবহার করা যাবে।

প্রশ্ন ৩৩। ‘চলকের নামকরণের সময় কিছু নিয়ম মেনে চলতে হয়।’— ব্যাখ্যা কর।কু. বো. ’১৭

উত্তরঃ চলকের নাম নিয়ম মেনে না দিলে কম্পাইলার এরর দেখায়। তাই নামকরণে কিছু নিয়ম মানতে হয়:

  1. নাম ইংরেজি অক্ষর বা আন্ডারস্কোর (_) দিয়ে শুরু হবে, অঙ্ক দিয়ে নয়।
  2. নামে অক্ষর, অঙ্ক ও আন্ডারস্কোর ছাড়া অন্য কোনো চিহ্ন (@, #, −, স্পেস ইত্যাদি) থাকবে না।
  3. কি-ওয়ার্ড (int, float, if ইত্যাদি) চলকের নাম হবে না।
  4. বড় ও ছোট হাতের অক্ষর আলাদা ধরা হয়, যেমন: sum ও Sum আলাদা।
  5. ANSI C অনুযায়ী নামের প্রথম ৩১টি অক্ষর পর্যন্ত গণ্য হয়।
  6. নাম অর্থবোধক হলে ভালো, যেমন: total, avg।
প্রশ্ন ৩৪। সি ভাষায় 'Roll@number' বৈধ চলক নয়— ব্যাখ্যা কর।

উত্তরঃ C ভাষায় চলকের নামে শুধু ইংরেজি অক্ষর, অঙ্ক ও আন্ডারস্কোর (_) ব্যবহার করা যায়। @ একটি বিশেষ চিহ্ন, যা চলকের নামে ব্যবহার করা যায় না।

'Roll@number' নামে @ আছে, তাই এটি বৈধ চলক নয়। এর বদলে Roll_number লিখলে বৈধ হবে।

প্রশ্ন ৩৫। &A বলতে কী বুঝ?

উত্তরঃ C ভাষায় & হলো অ্যাড্রেস অপারেটর। &A মানে চলক A মেমোরির যে ঠিকানায় (address) আছে সেই ঠিকানা।

scanf() ফাংশনে ইনপুট নেওয়া মান চলকের ঠিকানায় রাখতে & ব্যবহার করা হয়।

scanf("%d", &A);   // কীবোর্ড থেকে নেওয়া সংখ্যাটি A এর ঠিকানায় জমা হয়

৯. কী ওয়ার্ড

প্রশ্ন ৩৬। কি-ওয়ার্ডকে ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যায় না কেন?

উত্তরঃ কি-ওয়ার্ড হলো C ভাষার সংরক্ষিত শব্দ, যাদের অর্থ ও কাজ কম্পাইলারের কাছে আগে থেকেই ঠিক করা। যেমন: int, float, if, else, for, while, return। ANSI C তে ৩২টি কি-ওয়ার্ড আছে।

কোনো কি-ওয়ার্ডকে চলকের নাম দিলে কম্পাইলার বুঝতে পারে না এটি চলক নাকি নির্দেশ, তাই এরর দেখায়।

int float;   // এরর: float একটি কি-ওয়ার্ড
int marks;   // সঠিক

তাই কি-ওয়ার্ডকে ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যায় না।

১০. ইনপুট আউটপুট স্টেটমেন্ট

প্রশ্ন ৩৭। x = y + i; —ব্যাখ্যা কর।য. বো. ’২৪, ’২৩

উত্তরঃ এটি একটি অ্যাসাইনমেন্ট স্টেটমেন্ট। এখানে প্রথমে ডান পাশের y ও i চলকের মান যোগ হয়। তারপর যোগফলটি = (অ্যাসাইনমেন্ট অপারেটর) এর মাধ্যমে বাম পাশের চলক x এ জমা হয়। শেষের সেমিকোলন (;) দিয়ে স্টেটমেন্ট শেষ হয়েছে।

যেমন: y = 5 এবং i = 3 হলে x = 5 + 3 = 8 হবে।

লক্ষ করো: এখানে = মানে সমান নয়। এর মানে হলো ডান পাশের মান বাম পাশের চলকে রাখো।
প্রশ্ন ৩৮। Scanf("%d", &a); স্টেটমেন্টটি ব্যাখ্যা কর।সি. বো. ’২৩

উত্তরঃ এটি একটি ইনপুট স্টেটমেন্ট। এখানে:

  • scanf(): কীবোর্ড থেকে ইনপুট নেওয়ার লাইব্রেরি ফাংশন।
  • "%d": ফরম্যাট স্পেসিফায়ার, যা বলে ইনপুটটি int (পূর্ণসংখ্যা) হবে।
  • &a: চলক a এর ঠিকানা, ইনপুট নেওয়া মান এখানে জমা হবে।

অর্থাৎ স্টেটমেন্টটি কীবোর্ড থেকে একটি পূর্ণসংখ্যা নিয়ে a চলকে রাখে। যেমন: 15 টাইপ করলে a = 15 হবে।

লক্ষ করো: C কেস সেনসিটিভ, তাই ফাংশনের নাম ছোট হাতের অক্ষরে scanf লিখতে হবে। Scanf লিখলে এরর হবে।
প্রশ্ন ৩৯। scanf("%f", &a); স্টেটমেন্টটি ব্যাখ্যা কর।চ. বো. ’২৩কু. বো. ’১৯

উত্তরঃ এটি একটি ইনপুট স্টেটমেন্ট। এখানে:

  • scanf(): কীবোর্ড থেকে ইনপুট নেওয়ার লাইব্রেরি ফাংশন।
  • "%f": ফরম্যাট স্পেসিফায়ার, যা বলে ইনপুটটি float (দশমিক সংখ্যা) হবে।
  • &a: চলক a এর ঠিকানা, ইনপুট নেওয়া মান এখানে জমা হবে।

অর্থাৎ স্টেটমেন্টটি কীবোর্ড থেকে একটি দশমিক সংখ্যা নিয়ে a চলকে রাখে। যেমন: 3.75 টাইপ করলে a = 3.75 হবে। এজন্য a কে আগে float a; হিসেবে ঘোষণা করতে হয়।

প্রশ্ন ৪০। ফরমেটেড ইনপুট স্টেটমেন্টের গঠন উদাহরণসহ ব্যাখ্যা কর।

উত্তরঃ নির্দিষ্ট ধরন অনুযায়ী ইনপুট নেওয়ার জন্য scanf() ফাংশন ব্যবহার করা হয়। একে ফরমেটেড ইনপুট স্টেটমেন্ট বলে। এর গঠন:

scanf("format specifier", &variable1, &variable2, ...);

ডাবল কোটেশনের ভেতরে প্রতিটি চলকের জন্য একটি করে ফরম্যাট স্পেসিফায়ার (%d, %f, %c) দিতে হয় এবং চলকের নামের আগে & দিতে হয়।

int roll;
float gpa;
scanf("%d %f", &roll, &gpa);

এখানে roll এ একটি পূর্ণসংখ্যা এবং gpa তে একটি দশমিক সংখ্যা ইনপুট নেওয়া হবে।

প্রশ্ন ৪১। scanf("%d %f %c", &a, &b, &c); স্টেটমেন্টটিতে a, b ও c কোন ধরনের ডেটাটাইপ?

উত্তরঃ ফরম্যাট স্পেসিফায়ারগুলো ক্রম অনুযায়ী চলকগুলোর সাথে মিলে যায়:

ফরম্যাট স্পেসিফায়ারচলকডেটা টাইপ
%daint (পূর্ণসংখ্যা)
%fbfloat (দশমিক সংখ্যা)
%ccchar (একটি অক্ষর)

তাই ঘোষণা হবে: int a; float b; char c;

১১. অপারেটর

প্রশ্ন ৪২। লজিক্যাল অপারেটর বলতে কী বুঝ? ব্যাখ্যা কর।য. বো. ’২৪দি. বো. ’২৪

উত্তরঃ একাধিক শর্তকে যুক্ত করতে বা কোনো শর্তের বিপরীত বের করতে যে অপারেটর ব্যবহার করা হয়, তাকে লজিক্যাল অপারেটর বলে। এর ফলাফল সত্য (1) বা মিথ্যা (0) হয়। C ভাষায় লজিক্যাল অপারেটর ৩টি:

অপারেটরনামকাজ
&&ANDসব শর্ত সত্য হলে ফল সত্য।
||ORযেকোনো একটি শর্ত সত্য হলে ফল সত্য।
!NOTশর্তের বিপরীত ফল দেয়।
if (marks >= 33 && marks <= 100)
    printf("Pass");

এখানে দুটি শর্তই সত্য হলে Pass দেখাবে।

১২. কনডিশনাল স্টেটমেন্ট

প্রশ্ন ৪৩। K++ ও ++K ব্যাখ্যা কর।সি. বো. ’২৪রা. বো. ’১৯ম. বো. ’২৩

উত্তরঃ দুটিই ইনক্রিমেন্ট অপারেটর, দুটিই K এর মান 1 বাড়ায়। পার্থক্য হলো কখন বাড়ায়।

  • K++ (পোস্টফিক্স): আগে K এর বর্তমান মান ব্যবহার হয়, পরে K এর মান 1 বাড়ে।
  • ++K (প্রিফিক্স): আগে K এর মান 1 বাড়ে, পরে বাড়ানো মান ব্যবহার হয়।
int K = 5, x;
x = K++;   // x = 5, K = 6

K = 5;
x = ++K;   // x = 6, K = 6
প্রশ্ন ৪৪। ইনক্রিমেন্টাল অপারেটর ব্যাখ্যা কর।

উত্তরঃ যে অপারেটর কোনো চলকের মান 1 বাড়ায় তাকে ইনক্রিমেন্ট অপারেটর বলে। এর চিহ্ন ++। এটি একটি ইউনারি অপারেটর, অর্থাৎ একটি মাত্র চলকের উপর কাজ করে। i++ লেখা মানে i = i + 1।

এটি দুই প্রকার:

  • প্রিফিক্স (++i): আগে মান বাড়ে, পরে ব্যবহার হয়।
  • পোস্টফিক্স (i++): আগে ব্যবহার হয়, পরে মান বাড়ে।

লুপে কাউন্টারের মান বাড়াতে এটি বেশি ব্যবহৃত হয়।

for (i = 1; i <= 10; i++)
    printf("%d ", i);

১৩. লুপ স্টেটমেন্ট

প্রশ্ন ৪৫। for এবং do লুপের মধ্যে কোনটি ব্যবহার করা সহজ?কু. বো. ’২৩

উত্তরঃ for লুপ ব্যবহার করা সহজ। for লুপে চলকের প্রাথমিক মান, শর্ত এবং মান বাড়ানো বা কমানো এই তিনটি অংশ এক লাইনেই লেখা যায়। তাই লুপ কতবার চলবে তা এক নজরে বোঝা যায় এবং ভুল কম হয়।

do...while লুপে এই অংশগুলো আলাদা আলাদা জায়গায় লিখতে হয়, শর্ত থাকে লুপের শেষে এবং while() এর পর সেমিকোলন দিতে হয়।

/* for লুপ */
for (i = 1; i <= 5; i++)
    printf("%d ", i);

/* do...while লুপ */
i = 1;
do {
    printf("%d ", i);
    i++;
} while (i <= 5);

দুটিই 1 2 3 4 5 দেখায়, কিন্তু for লুপ ছোট ও সহজ। তবে লুপ অন্তত একবার চালাতেই হলে do...while সুবিধাজনক।

প্রশ্ন ৪৬। while এবং do-while লুপের মধ্যে পার্থক্য কী?

উত্তরঃ while ও do-while লুপের পার্থক্য নিচে দেওয়া হলো:

while লুপdo-while লুপ
লুপের শুরুতে শর্ত পরীক্ষা হয়।লুপের শেষে শর্ত পরীক্ষা হয়।
শুরুতেই শর্ত মিথ্যা হলে লুপ একবারও চলে না।শর্ত মিথ্যা হলেও লুপ অন্তত একবার চলে।
while() এর পরে সেমিকোলন হয় না।while() এর পরে সেমিকোলন (;) দিতে হয়।
while (condition) { ... }do { ... } while (condition);
প্রশ্ন ৪৭। do....while লুপ স্টেটমেন্ট এর সাধারণ ফরম্যাট লিখ।

উত্তরঃ do...while লুপের সাধারণ ফরম্যাট:

do
{
    statement(s);
    increment/decrement;
} while (condition);

প্রথমে do ব্লকের স্টেটমেন্টগুলো একবার চলে, তারপর শর্ত পরীক্ষা হয়। শর্ত সত্য হলে আবার চলে, মিথ্যা হলে লুপ শেষ হয়। while (condition) এর পরে অবশ্যই সেমিকোলন দিতে হয়।

int i = 1;
do
{
    printf("%d ", i);
    i++;
} while (i <= 5);      // আউটপুট: 1 2 3 4 5

১৪. অ্যারে

প্রশ্ন ৪৮। int mark [3] [4] —ব্যাখ্যা কর।ম. বো. ’২৪

উত্তরঃ এটি একটি দ্বিমাত্রিক (2D) ইন্টিজার অ্যারে ঘোষণা।

  • int: অ্যারের সব উপাদান পূর্ণসংখ্যা।
  • mark: অ্যারের নাম।
  • [3]: সারি ৩টি (ইনডেক্স 0, 1, 2)।
  • [4]: কলাম ৪টি (ইনডেক্স 0, 1, 2, 3)।
কলাম 0কলাম 1কলাম 2কলাম 3
সারি 0mark[0][0]mark[0][1]mark[0][2]mark[0][3]
সারি 1mark[1][0]mark[1][1]mark[1][2]mark[1][3]
সারি 2mark[2][0]mark[2][1]mark[2][2]mark[2][3]

মোট উপাদান = 3 × 4 = 12টি। প্রথম উপাদান mark[0][0] এবং শেষ উপাদান mark[2][3]। প্রতিটি int ২ বাইট ধরলে মোট মেমোরি লাগবে 12 × 2 = 24 বাইট।

প্রশ্ন ৪৯। Mark [5] [4] ব্যাখ্যা কর।ম. বো. ’২৩

উত্তরঃ Mark[5][4] হলো Mark নামের একটি দ্বিমাত্রিক অ্যারে, যাতে ৫টি সারি ও ৪টি কলাম আছে।

  • মোট উপাদান = 5 × 4 = 20টি।
  • সারির ইনডেক্স 0 থেকে 4 এবং কলামের ইনডেক্স 0 থেকে 3।
  • প্রথম উপাদান Mark[0][0], শেষ উপাদান Mark[4][3]।

যেমন: ৫ জন ছাত্রের ৪টি বিষয়ের নম্বর রাখতে এই অ্যারে ব্যবহার করা যায়। int টাইপ হলে ঘোষণা হবে int Mark[5][4]; এবং মেমোরি লাগবে 20 × 2 = 40 বাইট।

প্রশ্ন ৫০। “অ্যারে ও চলক এক নয়”— ব্যাখ্যা কর।ঢা. বো. ’২৪

উত্তরঃ সাধারণ চলক একবারে একটি মাত্র মান রাখতে পারে। কিন্তু অ্যারে একই নামে একই ধরনের একাধিক মান রাখতে পারে, আর প্রতিটি মান আলাদা ইনডেক্স দিয়ে চেনা যায়।

int a = 10;                        // চলক: শুধু একটি মান
int b[5] = {10, 20, 30, 40, 50};   // অ্যারে: ৫টি মান, b[0] = 10, b[4] = 50

৫০ জন ছাত্রের নম্বর রাখতে ৫০টি আলাদা চলক লাগবে, কিন্তু একটি অ্যারে int mark[50]; দিয়েই কাজ হয়। তাই অ্যারে ও চলক এক নয়।

প্রশ্ন ৫১। int mark [5] ; এক্সপ্রেশনটি ব্যাখ্যা কর।

উত্তরঃ এটি একটি একমাত্রিক ইন্টিজার অ্যারে ঘোষণা। mark হলো অ্যারের নাম, এতে ৫টি পূর্ণসংখ্যা রাখা যাবে।

mark[0]
mark[1]
mark[2]
mark[3]
mark[4]

অ্যারের ইনডেক্স 0 থেকে শুরু হয়, তাই উপাদানগুলো mark[0] থেকে mark[4] পর্যন্ত। mark[5] বলে কোনো উপাদান নেই। প্রতিটি int ২ বাইট ধরলে মোট 5 × 2 = 10 বাইট মেমোরি লাগবে।

১৫. ফাংশন

প্রশ্ন ৫২। সি প্রোগ্রামে কোন ফাংশন আবশ্যিক? ব্যাখ্যা কর।কু. বো. ’২৪

উত্তরঃ C প্রোগ্রামে main() ফাংশন আবশ্যিক। প্রোগ্রাম চালু হলে কম্পিউটার সবসময় main() ফাংশন থেকেই কাজ শুরু করে। অন্য ফাংশনগুলোও main() থেকে সরাসরি বা পরোক্ষভাবে ডাকা হয়।

main() না থাকলে প্রোগ্রাম কোথা থেকে শুরু হবে তা ঠিক হয় না, তাই এরর দেখায় এবং প্রোগ্রাম চলে না। একটি প্রোগ্রামে main() ফাংশন একটিই থাকে।

#include <stdio.h>
int main()
{
    printf("Hello");
    return 0;
}
প্রশ্ন ৫৩। ‘সি’ ভাষায় পূর্ব থেকে তৈরিকৃত ফাংশন ব্যাখ্যা কর।ঢা. বো. ’২৩

উত্তরঃ যে ফাংশনগুলো আগে থেকেই তৈরি করে C-এর লাইব্রেরিতে রাখা থাকে, তাদের লাইব্রেরি ফাংশন বা বিল্ট-ইন ফাংশন বলে। প্রোগ্রামারকে এদের কোড লিখতে হয় না, শুধু সংশ্লিষ্ট হেডার ফাইল যুক্ত করে ফাংশনের নাম লিখলেই ব্যবহার করা যায়।

ফাংশনহেডার ফাইলকাজ
printf()stdio.hআউটপুট দেখায়
scanf()stdio.hইনপুট নেয়
sqrt()math.hবর্গমূল বের করে
pow()math.hঘাত বের করে
strlen()string.hস্ট্রিংয়ের দৈর্ঘ্য বের করে

এতে সময় বাঁচে এবং প্রোগ্রাম ছোট ও সহজ হয়।

প্রশ্ন ৫৪। সি প্রোগ্রাম এর শেষ লাইনে return 0; লেখার যৌক্তিকতা ব্যাখ্যা কর।ব. বো. ’২৪সি. বো. ’২৩

উত্তরঃ সাধারণত main() ফাংশনকে int main() হিসেবে লেখা হয়, অর্থাৎ main() কাজ শেষে একটি পূর্ণসংখ্যা ফেরত দেয়।

return 0; লিখে main() ফাংশন অপারেটিং সিস্টেমকে 0 মান ফেরত দেয়, যার অর্থ প্রোগ্রামটি সফলভাবে শেষ হয়েছে। 0 ছাড়া অন্য মান (যেমন: 1) ফেরত দিলে বোঝায় কোনো সমস্যা হয়েছে। return স্টেটমেন্টে পৌঁছালেই main() ফাংশন তথা প্রোগ্রাম শেষ হয়। তাই প্রোগ্রামের শেষে return 0; লেখা হয়।

প্রশ্ন ৫৫। C ভাষায় কেন Header file ব্যবহার করা হয়?ব. বো. ’২৩

উত্তরঃ হেডার ফাইল হলো .h এক্সটেনশনের ফাইল, যেখানে লাইব্রেরি ফাংশনগুলোর ঘোষণা (প্রোটোটাইপ), ম্যাক্রো ইত্যাদি থাকে। কোনো লাইব্রেরি ফাংশন ব্যবহার করতে হলে প্রোগ্রামের শুরুতে #include দিয়ে সংশ্লিষ্ট হেডার ফাইল যুক্ত করতে হয়, তাহলে কম্পাইলার ফাংশনটি চিনতে পারে।

#include <stdio.h>   // printf(), scanf() এর জন্য
#include <math.h>    // sqrt(), pow() এর জন্য

হেডার ফাইল ব্যবহার করলে একই ঘোষণা বারবার লিখতে হয় না, তাই প্রোগ্রাম লেখা সহজ হয়।

প্রশ্ন ৫৬। আউটপুট ফাংশন বলতে কী বুঝ?

উত্তরঃ যে ফাংশন প্রোগ্রামের ফলাফল বা কোনো তথ্য মনিটরে (আউটপুট ডিভাইসে) দেখায়, তাকে আউটপুট ফাংশন বলে।

  • printf(): সব ধরনের ডেটা নির্দিষ্ট ফরম্যাটে দেখায়।
  • putchar(): একটি অক্ষর দেখায়।
  • puts(): একটি স্ট্রিং দেখায়।

এগুলো stdio.h হেডার ফাইলে ঘোষিত থাকে।

int sum = 15;
printf("Sum = %d", sum);   // আউটপুট: Sum = 15
প্রশ্ন ৫৭। sqrt ফাংশনটির প্যারামিটার ও আর্গুমেন্ট ব্যাখ্যা কর।

উত্তরঃ sqrt() হলো math.h হেডার ফাইলের একটি লাইব্রেরি ফাংশন, যা কোনো সংখ্যার বর্গমূল বের করে। এর ঘোষণা: double sqrt(double x);

  • প্যারামিটার: ফাংশন ঘোষণা বা সংজ্ঞায় যে চলক দিয়ে মান গ্রহণ করা হয়। এখানে x হলো sqrt() এর প্যারামিটার, যার টাইপ double।
  • আর্গুমেন্ট: ফাংশন কল করার সময় যে আসল মান পাঠানো হয়। যেমন: sqrt(25) লিখলে 25 হলো আর্গুমেন্ট।
double r = sqrt(25);   // আর্গুমেন্ট 25, ফলাফল r = 5.0

অর্থাৎ প্যারামিটার হলো মান গ্রহণের জায়গা, আর আর্গুমেন্ট হলো পাঠানো মান।