অধ্যায় - ৫: প্রোগ্রামিং ভাষা (C Programming)

এইচএসসি আইসিটি: ৫ম অধ্যায় (সম্পূর্ণ নোট ও প্রশ্নব্যাংক)

প্রোগ্রামিং ভাষা (C Programming) | HSC ICT Chapter 5 Lecture Notes & Code Guide

১. প্রোগ্রামিং ভাষা ও অনুবাদক প্রোগ্রাম

প্রোগ্রামিং ভাষার স্তর:

  • মেশিন ভাষা (১ম প্রজন্ম): শুধুমাত্র ০ এবং ১ দ্বারা লিখিত। কম্পিউটার সরাসরি বুঝতে পারে (কোনো অনুবাদক লাগে না)। এটি দ্রুততম।
  • অ্যাসেম্বলি ভাষা (২য় প্রজন্ম): নিউমোনিক কোড (যেমন: ADD, SUB, MUL) ব্যবহার করে লিখিত। অনুবাদক হিসেবে Assembler লাগে।
  • উচ্চতর ভাষা (High-Level Language): ইংরেজির মতো ভাষায় লিখিত (যেমন: C, C++, Python, Java)। মানুষের বোঝা সহজ।
অনুবাদক প্রোগ্রাম (Translator Programs):
  • কম্পাইলার (Compiler): সম্পূর্ণ সোর্স প্রোগ্রামকে একবারে অবজেক্ট প্রোগ্রামে রূপান্তর করে এবং সব ভুল একসাথে দেখায়। গতি দ্রুত।
  • ইন্টারপ্রেটার (Interpreter): প্রোগ্রামকে এক লাইন করে অনুবাদ করে ও এক্সিকিউট করে। ভুল দেখা দিলে সেখানেই পড়া থামিয়ে দেয়।
  • অ্যাসেম্বলার (Assembler): অ্যাসেম্বলি ভাষাকে মেশিন ভাষায় রূপান্তর করে।

অ্যালগরিদম ও ফ্লোচার্ট প্রতীক:

  • ডিম্বাকৃতি (Oval): শুরু (Start) ও শেষ (End) নির্দেশ করে।
  • সামান্তরিক (Parallelogram): ইনপুট (Input) ও আউটপুট (Output) নির্দেশ করে।
  • আয়তক্ষেত্র (Rectangle): প্রক্রিয়াকরণ (Processing/Formula) নির্দেশ করে।
  • হীরক/ডায়মন্ড (Diamond): সিদ্ধান্ত (Decision/If-Else) নির্দেশ করে।
  • বিত্ত (Circle): সংযোগ (Connector) নির্দেশ করে।

২. সি (C) প্রোগ্রামিং ভাষা

১৯৭২ সালে আমেরিকার AT&T বেল ল্যাবরেটরিতে **ডেনিস রিচি (Dennis Ritchie)** সি ভাষা তৈরি করেন। এটিকে "Mid-Level Language" বা "Structured Language" বলা হয়।

ডাটা টাইপ ও ফরম্যাট স্পেসিফায়ার:

Data Type মেমরি সাইজ Format Specifier উদাহরণ
int (পূর্ণসংখ্যা) 2 Byte / 4 Byte %d 10, 25, -100
float (ভগ্নাংশ) 4 Byte %f 3.1416, 5.5
double (দীর্ঘ ভগ্নাংশ) 8 Byte %lf 3.1415926535
char (বর্ণ/চিহ্ন) 1 Byte %c 'A', 'z', '+'
লুপ ও কন্ট্রোল স্টেটমেন্ট:
প্রোগ্রামে কোনো কাজ বারবার করার জন্য লুপ ব্যবহৃত হয়। সি ভাষায় প্রধান লুপ ৩টি:
  • for loop
  • while loop
  • do-while loop

৩. গুরুত্বপূর্ণ বহুনির্বাচনী প্রশ্নপত্র (MCQ)

১. সি (C) ভাষার জনক কে?
(ক) বিজানে স্ট্রাউস্ট্রুপ
(খ) ডেনিস রিচি
(গ) চার্লস ব্যাবেজ
(ঘ) টিম বার্নার্স লি
সঠিক উত্তর: (খ) ডেনিস রিচি
ব্যাখ্যা: ১৯৭২ সালে তিনি বেল ল্যাবসে C ভাষা তৈরি করেন।
২. ফ্লোচার্টে সিদ্ধান্ত (Decision) গ্রহণের জন্য কোন প্রতীক ব্যবহৃত হয়?
(ক) সামান্তরিক
(খ) আয়তক্ষেত্র
(গ) ডায়মন্ড / হীরক
(ঘ) বৃত্ত
সঠিক উত্তর: (গ) ডায়মন্ড / হীরক
ব্যাখ্যা: হীরক চিহ্নের মধ্যে শর্ত বা Decision দেওয়া হয়।
৩. পুরো প্রোগ্রাম একসাথে অনুবাদ করে কোনটি?
(ক) ইন্টারপ্রেটার
(খ) কম্পাইলার
(গ) অ্যাসেম্বলার
(ঘ) এডিটর
সঠিক উত্তর: (খ) কম্পাইলার
ব্যাখ্যা: কম্পাইলার একসাথে পুরো সোর্স কোড অনুবাদ করে, আর ইন্টারপ্রেটার লাইন বাই লাইন করে।
৪. C প্রোগ্রামে float ডাটা টাইপের জন্য কোনটি ফরম্যাট স্পেসিফায়ার?
(ক) %d
(খ) %c
(গ) %f
(ঘ) %s
সঠিক উত্তর: (গ) %f
ব্যাখ্যা: int এর জন্য %d, float এর জন্য %f, char এর জন্য %c ব্যবহৃত হয়।
৫. C ভাষার প্রতিটি স্টেটমেন্ট শেষ করতে কোন চিহ্নটি আবশ্যক?
(ক) কোলন (:)
(খ) সেমিকোলান (;)
(গ) কমা (,)
(ঘ) ফুলস্টপ (.)
সঠিক উত্তর: (খ) সেমিকোলান (;)
ব্যাখ্যা: C ভাষায় প্রতিটি স্টেটমেন্ট সেমিকোলান (;) দিয়ে শেষ করতে হয়।
৬. C ভাষায় মোডুলাস (ভাগশেষ নির্ণয়) অপারেটর কোনটি?
(ক) /
(খ) \
(গ) %
(ঘ) #
সঠিক উত্তর: (গ) %
ব্যাখ্যা: % অপারেটর দুটি সংখ্যার ভাগশেষ (Modulus) বের করতে ব্যবহৃত হয়।
৭. নিচের কোনটি চলক (Variable) হিসেবে ব্যবহার করা বৈধ নয়?
(ক) my_num
(খ) 123num
(গ) num1
(ঘ) total_sum
সঠিক উত্তর: (খ) 123num
ব্যাখ্যা: চলকের নাম কখনো সংখ্যা দিয়ে শুরু হতে পারে না।
৮. for(i=1; i<=5; i+=2) লুপটি কতবার ঘুরবে?
(ক) ৩ বার
(খ) ৪ বার
(গ) ৫ বার
(ঘ) ২ বার
সঠিক উত্তর: (ক) ৩ বার
ব্যাখ্যা: i এর মান হবে ১, ৩, এবং ৫ (মোট ৩ বার)।
৯. হেডার ফাইল #include <stdio.h> এর পূর্ণরূপ কী?
(ক) Standard Input Output Header
(খ) Studio Input Output
(গ) Standard Text Output
(ঘ) System Input Output
সঠিক উত্তর: (ক) Standard Input Output Header
ব্যাখ্যা: printf ও scanf ব্যবহারের জন্য stdio.h অন্তর্ভুক্ত করা হয়।
১০. অ্যাসেম্বলি ভাষায় লিখিত প্রোগ্রামকে কী বলা হয়?
(ক) অবজেক্ট প্রোগ্রাম
(খ) সোর্স প্রোগ্রাম
(গ) মেশিন প্রোগ্রাম
(ঘ) সিস্টেম কোড
সঠিক উত্তর: (খ) সোর্স প্রোগ্রাম
ব্যাখ্যা: মূল প্রোগ্রামকে সোর্স প্রোগ্রাম বলা হয়, অনূদিত রূপকে অবজেক্ট প্রোগ্রাম বলে।

৪. নমুনা সৃজনশীল প্রশ্নপত্র (CQ) ও সমাধান

সৃজনশীল প্রশ্ন ১:
আইসিটি ক্লাসে শিক্ষক শিক্ষার্থীদের দুটি ধনাত্মক পূর্ণসংখ্যা ইনপুট নিয়ে তাদের মধ্য থেকে বড় সংখ্যাটি নির্ণয়ের জন্য একটি অ্যালগরিদম ও ফ্লোচার্ট আঁকতে বললেন। পরবর্তীতে তিনি এই সমস্যার ওপর ভিত্তি করে একটি C প্রোগ্রাম লিখে দেখালেন।

(ক) কি-ওয়ার্ড (Keyword) কী? মান: ১

(খ) কম্পাইলার এবং ইন্টারপ্রেটারের মধ্যে ২টি প্রধান পার্থক্য লেখ। মান: ২

(গ) উদ্দীপকে উল্লেখিত সমস্যার জন্য ফ্লোচার্ট অঙ্কন করো। মান: ৩

(ঘ) উদ্দীপকের সমস্যাটির সমাধান C ভাষায় কোড করে বুঝিয়ে লেখ। মান: ৪

(ক) উত্তর: C ভাষায় যেসব সংরক্ষিত শব্দ (Reserved Words) নির্দিষ্ট কাজের জন্য নির্ধারিত থাকে এবং চলক হিসেবে ব্যবহার করা যায় না, সেগুলোকে কি-ওয়ার্ড বলে (যেমন: `int`, `if`, `else`, `return`)।
(খ) উত্তর:
১. কম্পাইলার পুরো সোর্স কোড এক সাথে অনুবাদ করে, কিন্তু ইন্টারপ্রেটার এক লাইন করে অনুবাদ করে।
২. কম্পাইলার দিয়ে প্রোগ্রাম দ্রুত চলে, কিন্তু ইন্টারপ্রেটারে ধীরগতিতে চলে।
(গ) উত্তর:
ফ্লোচার্টের ধাপসমূহ:
  1. Start: ডিম্বাকৃতি প্রতীকে শুরু করো।
  2. Input: সামান্তরিক প্রতীকে ২টি সংখ্যা $a$ ও $b$ ইনপুট নাও।
  3. Decision: হীরক চিহ্নে শর্ত পরীক্ষা করো: $a > b$ ?
    • যদি সত্য (Yes) হয়: Output $a$ is largest (সামান্তরিক)।
    • যদি মিথ্যা (No) হয়: Output $b$ is largest (সামান্তরিক)।
  4. End: ডিম্বাকৃতি প্রতীকে সমাপ্ত করো।
(ঘ) উত্তর: ২টি সংখ্যার মধ্যে বড় সংখ্যাটি বের করার C প্রোগ্রাম কোড নিচে দেওয়া হলো:
#include <stdio.h>

int main() {
    int a, b;
    printf("Enter two integer numbers: ");
    scanf("%d %d", &a, &b);

    if (a > b) {
        printf("%d is the largest number.\n", a);
    } else {
        printf("%d is the largest number.\n", b);
    }

    return 0;
}
ব্যাখ্যা: `scanf` দিয়ে ব্যবহারকারীর কাছ থেকে দুটি সংখ্যা $a$ ও $b$ নেওয়া হয়। `if-else` শর্ত দিয়ে তুলনা করা হয়। যদি $a$ এর মান $b$ এর চেয়ে বড় হয় তবে $a$ প্রিন্ট হবে, অন্যথায় $b$ প্রিন্ট হবে।
সৃজনশীল প্রশ্ন ২:
প্রোগ্রামিং ক্লাসে রাফি ১ থেকে N পর্যন্ত স্বাভাবিক সংখ্যার যোগফল ($1 + 2 + 3 + ... + N$) নির্ণয় করার একটি প্রোগ্রাম লিখলো। শিক্ষক তার কোড দেখে প্রশংসা করলেন এবং অন্য শিক্ষার্থীদের লুপ ব্যবহার করে এটি অনুশীলনের পরামর্শ দিলেন।

(ক) লুপ (Loop) কী? মান: ১

(খ) i++ এবং i = i + 1 এর মধ্যে সম্পর্ক বুজিয়ে লেখ। মান: ২

(গ) ১ থেকে N পর্যন্ত সংখ্যার যোগফল বের করার অ্যালগরিদম লেখ। মান: ৩

(ঘ) `for` লুপ ব্যবহার করে উদ্দীপকের ধারাটির যোগফল নির্ণয়ের C প্রোগ্রাম লেখ এবং ব্যাখ্যা করো। মান: ৪

(ক) উত্তর: কোনো নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত প্রোগ্রামের এক বা একাধিক স্টেটমেন্ট বারবার সম্পাদন করার প্রক্রিয়াকে লুপ বলে।
(খ) উত্তর: C ভাষায় `i++` হলো একটি ইনক্রিমেন্ট অপারেটর যা `i = i + 1` নির্দেশ করে। দুটির কাজই হলো $i$ এর মান বর্তমান মানের চেয়ে ১ বৃদ্ধি করা।
(গ) উত্তর:
অ্যালগরিদম:
  • ধাপ-১: কাজ শুরু করি।
  • ধাপ-২: $N$ এর মান ইনপুট নিই।
  • ধাপ-৩: $Sum = 0$ এবং $i = 1$ ধরি।
  • ধাপ-৪: $Sum = Sum + i$ এবং $i = i + 1$ হিসাব করি।
  • ধাপ-৫: যদি $i \le N$ হয়, তবে ধাপ-৪ এ ফিরে যাই।
  • ধাপ-৬: $Sum$ এর মান ছাপাই।
  • ধাপ-৭: কাজ শেষ করি।
(ঘ) উত্তর: C ভাষায় `for` লুপ ব্যবহার করে ধারার যোগফলের প্রোগ্রাম:
#include <stdio.h>

int main() {
    int n, i, sum = 0;

    printf("Enter the value of N: ");
    scanf("%d", &n);

    for (i = 1; i <= n; i++) {
        sum = sum + i;
    }

    printf("Sum = %d\n", sum);

    return 0;
}
ব্যাখ্যা: প্রোগ্রামে `sum` কে ০ দিয়ে ইনিশিয়ালাইজ করা হয়েছে। `for` লুপটি $i = 1$ থেকে শুরু হয়ে $N$ পর্যন্ত চলবে। প্রতিবার $i$ এর মান $1$ করে বাড়বে এবং বর্তমান `sum` এর সাথে $i$ যোগ হবে। লুপ শেষ হলে মোট যোগফল প্রিন্ট হবে।