الفرق بين المراجعتين لصفحة: «Algorithms/binary to decimal»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التحويل من النظام الثنائي إلى النظام العشري}}</noinclude> يمكن تحويل الأعداد من النظ...' |
لا ملخص تعديل |
||
سطر 13: | سطر 13: | ||
== تنفيذ الخوارزمية == | == تنفيذ الخوارزمية == | ||
يمكن تحويل الأعداد من النظام الثنائي إلى النظام العشري بطريقتين هما التكرارية والتعاودية. | يمكن تحويل الأعداد من النظام الثنائي إلى النظام العشري بطريقتين هما التكرارية [[Algorithms/Recursion|والتعاودية]]. | ||
=== الطريقة | === الطريقة التكرارية === | ||
* C++: | * C++: |
مراجعة 18:24، 21 ديسمبر 2019
يمكن تحويل الأعداد من النظام الثنائي Binary System إلى النظام العشري Decimal System عن طريق استخراج الأرقام من العدد الثنائي المعطى بدءًا من جهة اليمين وضرب كل رقم بالعدد 2
مرفوعًا للأسّ المناسب لكل مرتبة، وتخزين النتيجة في متغير.
فعلى سبيل المثال:
لو أردنا تحويل العدد الثنائي 111
إلى النظام العشري، فإنّ النتيجة ستكون:
dec_value = 1*(2^2) + 1*(2^1) + 1*(2^0) = 7
يوضّح المخطط التالي طريقة تحويل العدد (1010
) إلى النظام العشري:
تنفيذ الخوارزمية
يمكن تحويل الأعداد من النظام الثنائي إلى النظام العشري بطريقتين هما التكرارية والتعاودية.
الطريقة التكرارية
- C++:
#include <iostream>
using namespace std;
int binaryToDecimal(int n)
{
int num = n;
int dec_value = 0;
// تهيئة القيمة الأساسية لتكون 1 والتي تساوي 2^0
int base = 1;
int temp = num;
while (temp) {
int last_digit = temp % 10;
temp = temp / 10;
dec_value += last_digit * base;
base = base * 2;
}
return dec_value;
}
// اختبار الدالة السابقة
int main()
{
int num = 10101001;
cout << binaryToDecimal(num) << endl;
}
- بايثون:
def binaryToDecimal(n):
num = n;
dec_value = 0;
# تهيئة القيمة الأساسية لتكون 1 والتي تساوي 2^0
base = 1;
temp = num;
while(temp):
last_digit = temp % 10;
temp = int(temp / 10);
dec_value += last_digit * base;
base = base * 2;
return dec_value;
# اختبار الدالة السابقة
num = 10101001;
print(binaryToDecimal(num));
- جافا:
class GFG {
static int binaryToDecimal(int n)
{
int num = n;
int dec_value = 0;
// تهيئة القيمة الأساسية لتكون 1 والتي تساوي 2^0
int base = 1;
int temp = num;
while (temp > 0) {
int last_digit = temp % 10;
temp = temp / 10;
dec_value += last_digit * base;
base = base * 2;
}
return dec_value;
}
// اختبار الدالة السابقة
public static void main(String[] args)
{
int num = 10101001;
System.out.println(binaryToDecimal(num));
}
}
تعمل الشيفرة السابقة مع الأعداد الثنائي ضمن نطاق الأعداد الصحيحة integers. إن كان المطلوب تحويل أعداد كبيرة جدًّا من نوع long
مثل 20 bit
أو 30 bit
فيمكن استخدام متغير نصّي لتخزين الأعداد الثنائية.
- C++:
#include <iostream>
#include <string>
using namespace std;
int binaryToDecimal(string n)
{
string num = n;
int dec_value = 0;
int base = 1;
int len = num.length();
for (int i = len - 1; i >= 0; i--) {
if (num[i] == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
int main()
{
string num = "10101001";
cout << binaryToDecimal(num) << endl;
}
- بايثون:
def binaryToDecimal(n):
num = n;
dec_value = 0;
base1 = 1;
len1 = len(num);
for i in range(len1 - 1, -1, -1):
if (num[i] == '1'):
dec_value += base1;
base1 = base1 * 2;
return dec_value;
num = "10101001";
print(binaryToDecimal(num));
- جافا:
import java.io.*;
class GFG {
static int binaryToDecimal(String n)
{
String num = n;
int dec_value = 0;
int base = 1;
int len = num.length();
for (int i = len - 1; i >= 0; i--) {
if (num.charAt(i) == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
public static void main(String[] args)
{
String num = new String("10101001");
System.out.println(binaryToDecimal(num));
}
}
تعطي الشيفرات السابقة المعطيات التالية:
169
ملاحظة: يمكن الحصول على نفس النتيجة في لغة جافا باستخدام الدالة Integer.parseInt()
:
public class GFG {
public static void main(String args[])
{
String binaryNumber = "1001";
System.out.println(Integer.parseInt(binaryNumber, 2));
}
}
الطريقة التعاودية
يمكن تحويل الطريقة التكرارية إلى طريقة تعاودية وتوضّح الأمثلة التالية ذلك:
- C++:
#include<bits/stdc++.h>
using namespace std;
int toDecimal(string binary, int i=0)
{
// إن وصلنا إلى الحرف الأخير
int n = binary.length();
if (i == n-1)
return binary[i] - '0';
// إضافة العنصر الحالي ثم استدعاء الدالة لنفسها مرة أخرى
return ((binary[i] - '0') << (n-i-1)) +
toDecimal(binary, i+1);
}
// اختبار الشيفرة السابقة
int main()
{
string binary = "1010";
cout << toDecimal(binary) << endl;
return 0;
}
- بايثون:
def toDecimal(binary, i = 0):
# إن وصلنا إلى الحرف الأخير
n = len(binary)
if (i == n - 1) :
return int(binary[i]) - 0
# إضافة العنصر الحالي واستدعاء الدالة لنفسها مرة أخرى
return (((int(binary[i]) - 0) << (n - i - 1)) +
toDecimal(binary, i + 1))
# اختبار الدالة السابقة
if __name__ == "__main__" :
binary = "1010"
print(toDecimal(binary))
- جافا:
class GFG
{
static int toDecimal(String binary,int i)
{
// إن وصلنا إلى الحرف الأخير
int n = binary.length();
if (i == n-1)
return binary.charAt(i) - '0';
// إضافة العنصر الحالي واستدعاء الدالة لنفسها مرة أخرى
return ((binary.charAt(i) - '0') << (n-i-1)) +
toDecimal(binary, i+1);
}
// اختبار الدالة السابقة
public static void main(String []args)
{
String binary = "1010";
int i=0;
System.out.println(toDecimal(binary,i));
}
}
مصادر
- صفحة Program for Binary To Decimal Conversion في توثيق الخوارزميات في موقع GeeksforGeeks.
- صفحة Recursive Program for Binary to Decimal في توثيق الخوارزميات في موقع GeeksforGeeks.