তথ্য ও যোগাযোগ প্রযুক্তি • প্রোগ্রামিং ভাষা
তথ্য ও যোগাযোগ প্রযুক্তি প্রশ্ন
একটি কলেজে মেধা ও আর্থিক অবস্থার ভিত্তিতে বেতন মওকুফ দেওয়া হয়। প্রোগ্রামার সাদিয়া এর জন্য নিচের সি প্রোগ্রামটি লিখেছে।
#include <stdio.h>
int main()
{
int marks, income;
scanf("%d %d", &marks, &income);
if (marks >= 80 && income <= 20000) {
printf("Full waiver");
}
else if (marks >= 80 || income <= 20000) {
printf("Half waiver");
}
else {
printf("No waiver");
}
return 0;
}
- ক)(1)
লজিক্যাল অপারেটর কাকে বলে?
- খ)(2)
&& ও || অপারেটরের মধ্যে পার্থক্য কী? ব্যাখ্যা কর।
- গ)(3)
উদ্দীপকের প্রোগ্রামে marks = 76 এবং income = 18000 ইনপুট দিলে কী আউটপুট পাওয়া যাবে? ধাপসহ দেখাও।
- ঘ)(4)
শেষ else ব্লকের পরিবর্তে else if (!(marks >= 80 || income <= 20000)) ব্যবহার করলে প্রোগ্রামটি একই কাজ করবে কি না? মার্কস ও আয়ের ক্ষেত্রে শর্তটি কোন কোন মানের জন্য সত্য হবে তা বিশ্লেষণসহ মতামত দাও।
উত্তর ও ব্যাখ্যা
- ক)
AI-তৈরি নমুনা উত্তর একাধিক শর্তকে যুক্ত করে নতুন শর্ত বা লজিক্যাল এক্সপ্রেশন তৈরি করার জন্য যে অপারেটর ব্যবহার করা হয়, তাকে লজিক্যাল অপারেটর বলে। সি ভাষায় এরা হলো && (and), || (or) ও ! (not)।
- খ)
AI-তৈরি নমুনা উত্তর && (অ্যান্ড) অপারেটরে বাম ও ডান পক্ষের দুটি শর্তই সত্য হলে তবেই পুরো এক্সপ্রেশন সত্য হয়; যেকোনো একটি মিথ্যা হলে পুরোটা মিথ্যা হয়। অপরদিকে || (অর) অপারেটরে দুটি শর্তের অন্তত একটি সত্য হলেই পুরো এক্সপ্রেশন সত্য হয়; কেবল দুটি শর্তই মিথ্যা হলে পুরোটা মিথ্যা হয়। যেমন, True && False এর ফল False, কিন্তু True || False এর ফল True।
- গ)
AI-তৈরি নমুনা উত্তর ইনপুট: marks = 76, income = 18000।
প্রথম শর্ত: marks >= 80 && income <= 20000। এখানে marks >= 80 মিথ্যা (76 < 80), income <= 20000 সত্য। && অপারেটরে একটি শর্ত মিথ্যা হওয়ায় পুরো শর্ত মিথ্যা। তাই if ব্লক এক্সিকিউট হবে না।
দ্বিতীয় শর্ত (else if): marks >= 80 || income <= 20000। এখানে প্রথম শর্ত মিথ্যা হলেও দ্বিতীয় শর্ত সত্য। || অপারেটরে একটি শর্ত সত্য হলেই পুরোটা সত্য হয়। তাই এই ব্লক এক্সিকিউট হবে এবং শর্ত সত্য হওয়ায় বাকি else ব্লক আর পরীক্ষা করা হবে না।
অতএব আউটপুট হবে: Half waiver - ঘ)
AI-তৈরি নমুনা উত্তর শেষ else ব্লক তখনই এক্সিকিউট হয় যখন উপরের দুটি শর্তই মিথ্যা হয়। দ্বিতীয় শর্ত marks >= 80 || income <= 20000 মিথ্যা হওয়ার অর্থ marks >= 80 মিথ্যা এবং income <= 20000 মিথ্যা। এ অবস্থায় প্রথম শর্তও স্বাভাবিকভাবেই মিথ্যা। অতএব else ব্লক চালু হওয়ার মানে হলো ঠিক এই অবস্থাটি।
প্রস্তাবিত শর্ত: !(marks >= 80 || income <= 20000)। || এর ফল সত্য হলে ! অপারেটর সেটিকে মিথ্যা করে, আর || এর ফল মিথ্যা হলে ! অপারেটর সেটিকে সত্য করে। সুতরাং এই শর্ত সত্য হবে কেবল তখনই, যখন marks >= 80 মিথ্যা এবং income <= 20000 মিথ্যা, অর্থাৎ marks < 80 এবং income > 20000। এটি হুবহু else ব্লকের অবস্থা।
যেমন marks = 70, income = 30000 হলে marks >= 80 মিথ্যা, income <= 20000 মিথ্যা, || এর ফল মিথ্যা, ! এর ফল সত্য; ফলে No waiver ছাপা হবে। আবার marks = 85, income = 30000 হলে || এর ফল সত্য, তাই ! এর ফল মিথ্যা; ব্লকটি চলবে না। এই ইনপুটে আগের else if ই আগে সত্য হয়ে যায়।
উপরের বিশ্লেষণ থেকে দেখা যায়, সকল ইনপুটের ক্ষেত্রে নতুন শর্তটি আগের else ব্লকের সমান ফল দেয়। তাই প্রোগ্রামটি একই কাজ করবে। তবে else ব্যবহার করলে কোড সংক্ষিপ্ত হয় এবং শর্ত পুনরায় পরীক্ষা করতে হয় না, ফলে else ব্যবহারই উত্তম।
আরও প্রশ্ন অনুশীলন করতে অ্যাপে যাও