একটি হেক্সাডেসিমাল নম্বর স্ট্রিং আকারে দেওয়া থাকে; টাস্ক হলো তা অক্ট্যালে রূপান্তর করা। হেক্সাডেসিমাল থেকে অক্ট্যালে রূপান্তর করতে হলে −
- হেক্সাডেসিমাল নম্বরের বাইনারি সমতুল্য খুঁজে বের করতে হবে।
- বাইনারি নম্বরটিকে অক্ট্যালে রূপান্তর করতে হবে।
হেক্সাডেসিমাল নম্বর কী?
হেক্সাডেসিমাল নম্বর হলো বেস ১৬-এর নম্বর যেখানে নম্বরগুলো ০-৯ এবং ১০ থেকে আপরে A (১০), B (১১), C (১২), D (১৩), E (১৪), F (১৫) হিসেবে রিপ্রেজেন্ট করা হয়।
হেক্সাডেসিমাল নম্বরকে বাইনারি নম্বরে রূপান্তর করতে প্রতিটি নম্বরকে এর ৪ বিটের বাইনারি সমতুল্যে রূপান্তর করে সেগুলো একসাথে जोড়া দিয়ে একটি বাইনারি নম্বর তৈরি করা হয়।
অক্ট্যাল নম্বর কী?
কম্পিউটারে অক্ট্যাল নম্বর বেস ৮ দিয়ে রিপ্রেজেন্ট করা হয়, যা ০-৭ পর্যন্ত থাকে। অক্ট্যাল নম্বর তিনটি বাইনারি নম্বর বা তিনটি বাইনারি ডিজিটের গ্রুপিং দিয়ে তৈরি হয়।
আমাদের কী করতে হবে
যেমন হেক্সাডেসিমাল নম্বর 1A6 আছে মানে ১, ১০ এবং ৬। হেক্সাডেসিমাল থেকে অক্ট্যালে রূপান্তরের জন্য প্রথমে হেক্সাডেসিমাল নম্বরের বাইনারি সমতুল্য বের করতে হবে, অর্থাৎ

তাহলে 1A6-এর বাইনারি = 0001 1010 0110
এখন হেক্সাডেসিমাল নম্বরের বাইনারি পাওয়া গেলে পরবর্তী টাস্ক হলো বাইনারি নম্বরটির অক্ট্যাল বের করা।
এর আগে বাইনারি নম্বরকে তিন দিয়ে গ্রুপ করব। তিন দিয়ে গ্রুপ করলে পাব 000 110 100 110
যার অক্ট্যাল রিপ্রেজেন্টেশন হবে −

সুতরাং হেক্সাডেসিমাল নম্বর 1A6-এর অক্ট্যাল রিপ্রেজেন্টেশন হলো − 646
উদাহরণ
ইনপুট: 1A6 আউটপুট: Octal Value = 646 ব্যাখ্যা: ইনপুট: 1AA আউটপুট: 652
দেওয়া সমস্যা সমাধানের জন্য আমরা যে পদ্ধতি ব্যবহার করব −
- ইনপুট নেয়া এবং স্ট্রিং আকারে স্টোর করা।
- হেক্সাডেসিমাল নম্বর বা এক্সপ্রেশনকে বাইনারিতে রূপান্তর করা নিচের পদ্ধতিতে −
- হেক্সাডেসিমালের সব ১৬ কেস চেক করে তাদের বাইনারি রিপ্রেজেন্টেশন যোগ করা।
- রেজাল্ট রিটার্ন করা।
- বাইনারি নম্বরকে অক্ট্যাল নম্বরে রূপান্তর করা নিচের ধাপগুলোতে −
- ৩ দিয়ে গ্রুপ করে বাইনারি নম্বরের সব পসিবল কেস অক্ট্যালে তুলনা করা।
- octal = (val * place) + octal সেট করা।
- বাইনারি নম্বর ১০০০ দিয়ে ভাগ করা।
- place *= 10
- রেজাল্ট রিটার্ন করা।
অ্যালগরিদম
Start
ধাপ ১ → function long long int hexa_binary(char hex[]) এ
binary, place ভেরিয়েবল ডিক্লেয়ার
i = 0, rem, val ডিক্লেয়ার ও ইনিশিয়ালাইজ
n = strlen(hex) ইনিশিয়ালাইজ
binary = 0ll এবং place = 0ll ইনিশিয়ালাইজ
লুপ: i = 0; hex[i] != '\0'; i++ {
binary = binary * place;
switch (hex[i]) {
case '0': binary += 0
case '1': binary += 1
case '2': binary += 10
case '3': binary += 11
case '4': binary += 100
case '5': binary += 101
case '6': binary += 110
case '7': binary += 111
case '8': binary += 1000
case '9': binary += 1001
case 'a': case 'A': binary += 1010
case 'b': case 'B': binary += 1011
case 'c': case 'C': binary += 1100
case 'd': case 'D': binary += 1101; break;
case 'e': case 'E': binary += 1110; break;
case 'f': case 'F': binary += 1111; break;
default: printf("Invalid hexadecimal input.");
}
place = 10000;
}
return binary;
}
long long int binary_oct(long long binary) {
long long int octal, place;
int i = 0, rem, val;
octal = 0ll;
place = 0ll;
place = 1;
while (binary > 0) {
rem = binary % 1000;
switch (rem) {
case 0: val = 0; break;
case 1: val = 1; break;
case 10: val = 2; break;
case 11: val = 3; break;
case 100: val = 4; break;
case 101: val = 5; break;
case 110: val = 6; break;
case 111: val = 7; break;
}
octal = (val * place) + octal;
binary /= 1000;
place *= 10;
}
return octal;
}
long long int hexa_oct(char hex[]) {
long long int octal, binary;
// হেক্সাডেসিমালকে বাইনারিতে রূপান্তর
binary = hexa_binary(hex);
// বাইনারিকে অক্ট্যালে রূপান্তর
octal = binary_oct(binary);
return octal;
}
int main() {
char hex[20] = "1a99";
printf("Octal Value = %lld", hexa_oct(hex));
return 0;
}
উদাহরণ
#include <stdio.h>
#include <string.h>
#include <math.h>
// হেক্সকে বাইনারিতে রূপান্তর
long long int hexa_binary(char hex[]) {
long long int binary, place;
int i = 0, rem, val;
int n = strlen(hex);
binary = 0ll;
place = 0ll;
for (i = 0; hex[i] != '\0'; i++) {
binary = binary * place;
switch (hex[i]) {
case '0': binary += 0; break;
case '1': binary += 1; break;
case '2': binary += 10; break;
case '3': binary += 11; break;
case '4': binary += 100; break;
case '5': binary += 101; break;
case '6': binary += 110; break;
case '7': binary += 111; break;
case '8': binary += 1000; break;
case '9': binary += 1001; break;
case 'a': case 'A': binary += 1010; break;
case 'b': case 'B': binary += 1011; break;
case 'c': case 'C': binary += 1100; break;
case 'd': case 'D': binary += 1101; break;
case 'e': case 'E': binary += 1110; break;
case 'f': case 'F': binary += 1111; break;
default: printf("Invalid hexadecimal input.");
}
place = 10000;
}
return binary;
}
// বাইনারিকে অক্ট্যালে রূপান্তর
long long int binary_oct(long long binary) {
long long int octal, place;
int i = 0, rem, val;
octal = 0ll;
place = 0ll;
place = 1;
// অক্ট্যাল কনভার্সনের জন্য সব বাইনারি নম্বর
while (binary > 0) {
rem = binary % 1000;
switch (rem) {
case 0: val = 0; break;
case 1: val = 1; break;
case 10: val = 2; break;
case 11: val = 3; break;
case 100: val = 4; break;
case 101: val = 5; break;
case 110: val = 6; break;
case 111: val = 7; break;
}
octal = (val * place) + octal;
binary /= 1000;
place *= 10;
}
return octal;
}
// হেক্সাডেসিমাল নম্বরকে অক্ট্যালে রূপান্তর
long long int hexa_oct(char hex[]) {
long long int octal, binary;
// হেক্সাডেসিমালকে বাইনারিতে রূপান্তর
binary = hexa_binary(hex);
// বাইনারিকে অক্ট্যালে রূপান্তর
octal = binary_oct(binary);
return octal;
}
// main ফাংশন
int main() {
char hex[20] = "5CD";
printf("Octal Value = %lld", hexa_oct(hex));
return 0;
}
আউটপুট
Octal Value = 2715