উত্তরঃ
প্রদত্ত প্রোগ্রামটি একটি সংখ্যার অংকগুলোকে উল্টো ক্ৰমে (যেমন: 123456789 এর জন্য 987654321) আউটপুট হিসেবে প্রদর্শন করে। প্রশ্ন হলো, প্রোগ্রামটি কীভাবে পরিবর্তন করলে n-এর অংকগুলো সঠিক ক্ৰমে (যেমন: 123456789 এর জন্য 123456789) আসবে, তা যুক্তিসহ প্রমাণ করতে হবে।
বর্তমান প্রোগ্রামটির কার্যকারিতা লক্ষ্য করলে দেখা যায়, while (n) লুপের মধ্যে d = n % 10; এর মাধ্যমে সংখ্যার সর্বডানের অংকটি (least significant digit) বের করা হয়। এরপর n = n / 10; এর মাধ্যমে সেই অংকটি বাদ দিয়ে সংখ্যাটিকে ছোট করা হয়। এই প্রক্রিয়াটি চলতে থাকে এবং বের হওয়া অংকগুলো digits অ্যারেতে digits[i] = d + '0'; এর মাধ্যমে ক্রমানুসারে বাম থেকে ডানে (digits[0], digits[1]...) সঞ্চিত হয়। ফলে, 123456789 সংখ্যাটির জন্য digits[0] এ '9', digits[1] এ '8' এভাবে digits[8] এ '1' সঞ্চিত হয়, যা উল্টো ক্ৰম। এছাড়াও, স্ট্রিং হিসেবে প্রিন্ট করার জন্য অ্যারের শেষে একটি নাল ক্যারেক্টার (\0) যোগ করা অপরিহার্য, যা প্রদত্ত প্রোগ্রামে অনুপস্থিত।
অংকগুলোকে সঠিক ক্ৰমে পাওয়ার জন্য, digits অ্যারেতে সঞ্চিত অংকগুলোকে শেষ থেকে শুরু পর্যন্ত প্রিন্ট করতে হবে। যেহেতু লুপ শেষ হওয়ার পর i ভেরিয়েবলটি অ্যারেতে মোট কতগুলো অংক সঞ্চিত হয়েছে তার সংখ্যা নির্দেশ করে, তাই i-1 তম ইনডেক্সে সবচেয়ে বামের অংকটি (যেমন: '1') এবং 0 তম ইনডেক্সে সবচেয়ে ডানের অংকটি (যেমন: '9') থাকে। নিচের পরিবর্তিত প্রোগ্রামটি প্রথমে অংকগুলোকে পূর্বের মতোই অ্যারেতে সঞ্চয় করে এবং একটি নাল ক্যারেক্টার যোগ করে। এরপর একটি for লুপের মাধ্যমে digits[i-1] থেকে digits[0] পর্যন্ত ক্রমানুসারে প্রিন্ট করে সঠিক আউটপুট নিশ্চিত করে।
পরিবর্তিত প্রোগ্রাম:
#include
int main () {
int i = 0, d;
int n = 123456789;
char digits [10];
// Extract digits and store them in reverse order
while (n) {
d = n % 10;
n = n / 10;
digits[i] = d + '0';
i++;
}
digits[i] = '\0'; // Add null terminator for proper string handling
// Print digits in correct order by iterating backwards
printf("সঠিক ক্রমে অংকগুলো: ");
for (int j = i - 1; j >= 0; j--) {
printf("%c", digits[j]);
}
printf("\n");
return 0;
}
এই পরিবর্তিত প্রোগ্রামে, while লুপ শেষ হওয়ার পর i-এর মান হবে 9। digits[i] = '\0'; লাইনটি স্ট্রিংটিকে নাল-টার্মিনেট করে। এরপর নতুন for লুপটি j = i - 1 অর্থাৎ j = 8 থেকে শুরু করে j = 0 পর্যন্ত চলে। digits[8]-এ '1' সঞ্চিত ছিল, যা প্রথমে প্রিন্ট হবে। এরপর digits[7]-এ থাকা '2' প্রিন্ট হবে এবং এই প্রক্রিয়াটি চলতে চলতে digits[0]-এ থাকা '9' প্রিন্ট হবে। ফলস্বরূপ, আউটপুট হবে 123456789, যা n-এর অংকগুলোর সঠিক ক্ৰম।