تحويل الأعداد من النظام العشري إلى النظام الثماني
تحوّل هذه الخوارزمية العدد المعطى من النظام العشري (الأساس 10) إلى النظام الثماني (الأساس 8). تمثّل القيمة الرقمية في النظام الثماني باستخدام 8 رموز هي: {0, 1, 2, 3, 4, 5, 6, 7}
.
مثال:
Input : 16
Output : 20
Input : 10
Output : 12
Input: 33
Output: 41
خطوات الخوارزمية
تتبع خوارزمية تحويل الأعداد من النظام العشري إلى النظام الثماني الخطوات التالية:
- تخزين باقي قسم العدد على
8
في مصفوفة. - تقسيم العدد على
8
. - إعادة الخطوتين السابقتين ما دام العدد لم يصل إلى الصفر بعد.
- طباعة المصفوفة الناتجة بترتيب عكسي.
فعلى سبيل المثال لتحويل العدد 16
من النظام العشري إلى النظام الثماني:
- باقي قسمة العدد
16
على8
هو0
؛ لذا فإنّ العنصر الأول في المصفوفة هوarr[0] = 0
. - يقسّم العدد
16
على8
، وبهذا يصبح الرقم الجديد هو ناتج القسمة16/8 = 2
. - باقي قسمة العدد
2
على8
هو2
؛ لذا فإنّ العنصر الثاني في المصفوفة هوarr[1] = 2
. - يقسّم العدد
2
على8
، وبهذا يصبح الرقم الجديد هو ناتج القسمة2/8 = 0
. - لمّا أصبح العدد مساويًأ للصفر، تتوقف الخوارزمية وتطبع المصفوفة الناتجة بترتيب معكوس، وبهذا يكون ناتج عملية التحويل هو
20
.
تنفيذ الخوارزمية
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
- C++:
#include <iostream>
using namespace std;
void decToOctal(int n)
{
// تستخدم هذه المصفوفة لتخزين العدد الثماني
int octalNum[100];
// عداد لمصفوفة العدد الثماني
int i = 0;
while (n != 0) {
// تخزين باقي القسمة في مصفوفة العدد الثماني
octalNum[i] = n % 8;
n = n / 8;
i++;
}
// طباعة مصفوفة العدد الثماني بترتيب معكوس
for (int j = i - 1; j >= 0; j--)
cout << octalNum[j];
}
// اختبار الدالة السابقة
int main()
{
int n = 33;
decToOctal(n);
return 0;
}
- بايثون:
def decToOctal(n):
# تستخدم هذه المصفوفة لتخزين العدد الثماني
octalNum = [0] * 100;
# عداد لمصفوفة العدد الثماني
i = 0;
while (n != 0):
# تخزين باقي القسمة في مصفوفة العدد الثماني
octalNum[i] = n % 8;
n = int(n / 8);
i += 1;
# طباعة مصفوفة العدد الثماني بترتيب معكوس
for j in range(i - 1, -1, -1):
print(octalNum[j], end = "");
# اختبار الدالة السابقة
n = 33;
decToOctal(n);
- جافا:
import java.io.*;
class GFG
{
static void decToOctal(int n)
{
// تستخدم هذه المصفوفة لتخزين العدد الثماني
int[] octalNum = new int[100];
// عداد لمصفوفة العدد الثماني
int i = 0;
while (n != 0)
{
// تخزين باقي القسمة في مصفوفة العدد الثماني
octalNum[i] = n % 8;
n = n / 8;
i++;
}
// طباعة مصفوفة العدد الثماني بترتيب معكوس
for (int j = i - 1; j >= 0; j--)
System.out.print(octalNum[j]);
}
// اختبار التابع السابق
public static void main (String[] args)
{
int n = 33;
decToOctal(n);
}
}
مصادر
- صفحة Program for Decimal to Octal Conversion في توثيق الخوارزميات في موقع GeeksforGeeks.