تحويل الأعداد من النظام العشري إلى النظام الثماني

من موسوعة حسوب

تحوّل هذه الخوارزمية العدد المعطى من النظام العشري (الأساس 10) إلى النظام الثماني (الأساس 8). تمثّل القيمة الرقمية في النظام الثماني باستخدام 8 رموز هي: ‎{0, 1, 2, 3, 4, 5, 6, 7}‎.

مثال:

Input : 16
Output : 20

Input : 10
Output : 12

Input: 33
Output: 41

خطوات الخوارزمية

تتبع خوارزمية تحويل الأعداد من النظام العشري إلى النظام الثماني الخطوات التالية:

  1. تخزين باقي قسم العدد على 8 في مصفوفة.
  2. تقسيم العدد على 8.
  3. إعادة الخطوتين السابقتين ما دام العدد لم يصل إلى الصفر بعد.
  4. طباعة المصفوفة الناتجة بترتيب عكسي.

فعلى سبيل المثال لتحويل العدد 16 من النظام العشري إلى النظام الثماني:

  1. باقي قسمة العدد 16 على 8 هو 0؛ لذا فإنّ العنصر الأول في المصفوفة هو arr[0] = 0.
  2. يقسّم العدد 16 على 8، وبهذا يصبح الرقم الجديد هو ناتج القسمة ‎16/8 = 2.
  3. باقي قسمة العدد 2 على 8 هو 2؛ لذا فإنّ العنصر الثاني في المصفوفة هو arr[1] = 2.
  4. يقسّم العدد 2 على 8، وبهذا يصبح الرقم الجديد هو ناتج القسمة ‎2/8 = 0.
  5. لمّا أصبح العدد مساويًأ للصفر، تتوقف الخوارزمية وتطبع المصفوفة الناتجة بترتيب معكوس، وبهذا يكون ناتج عملية التحويل هو 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); 
	} 
}

مصادر