لغة البرمجة bc
bc هو برنامج حاسبة رياضية بدقة عشوائية مع لغة إدخال مشابهة للغة C. وهو يدعم كلاً من واجهة المستخدم التفاعلية عبر سطر الأوامر ومعالجة النصوص البرمجية.
ملخص
يتمثل الاستخدام التفاعلي النموذجي في كتابة الأمر bcفي موجه أوامر يونكس وإدخال تعبير رياضي، مثل ، حيث(1 + 3) * 28سيتم إخراجها.
على الرغم من أن الدالة bc يمكنها العمل بدقة عشوائية، إلا أنها تستخدم افتراضيًا صفرًا من الأرقام بعد الفاصلة العشرية، لذا فإن التعبير 2/3ينتج0(النتائج مختصرة وليست مقربة). قد يُفاجئ هذا مستخدمي bc الجدد. -lيُحدد خيار bc المقياس الافتراضي (الأرقام بعد الفاصلة العشرية) إلى 20، ويُضيف عدة دوال رياضية إضافية إلى اللغة.
تاريخ
ظهرت bc لأول مرة في الإصدار السادس من نظام يونكس عام 1975. كتبتها لوريندا تشيري من مختبرات بيل كواجهة أمامية لبرنامج dc ، وهو آلة حاسبة ذات دقة عشوائية كتبها روبرت موريس وتشيري. كان برنامج dc يُجري عمليات حسابية بدقة عشوائية مُحددة باستخدام تدوين بولندي معكوس . وفرت bc واجهة برمجة تقليدية لنفس الإمكانية عبر مُترجم بسيط (ملف مصدر yacc واحد يتألف من بضع مئات من أسطر التعليمات البرمجية)، والذي حوّل صيغة شبيهة بلغة C إلى تدوين dc، ثم مرر النتائج عبر برنامج dc.
في عام ١٩٩١، حددت POSIX معيار bc بشكل دقيق. ولا تزال أربعة تطبيقات لهذا المعيار مستخدمة حتى اليوم: الأول هو تطبيق Unix التقليدي، وهو واجهة أمامية لـ dc، ولا يزال موجودًا في أنظمة Unix و Plan 9. والثاني هو برنامج GNU bc المجاني، الذي أصدره فيليب أ. نيلسون لأول مرة عام ١٩٩١. يتميز تطبيق GNU بالعديد من الإضافات التي تتجاوز معيار POSIX، ولم يعد واجهة أمامية لـ dc (بل أصبح مترجمًا للغة البايت كود ). أما الثالث فهو إعادة تطبيق من OpenBSD عام ٢٠٠٣. والرابع هو تطبيق مستقل من غافين هوارد [ ١ ] ، وهو مُضمّن في نظام التشغيل Android [ ٢ ] [ ٣ ]، ونظام FreeBSD بدءًا من الإصدار ١٣.٣ [ ٤ ] [ ٥ ] [ ٦ ] ، ونظام macOS بدءًا من الإصدار ١٣.٠ [ ٧ ] [ ٨ ] [ ٩ ] .
أصل الكلمة
لا يشرح دليل نظام يونكس الإصدار السادس الأصلي [ 10 ] معنى اختصار "bc". وقد أشارت إليه مصادر مختلفة على مر السنين بأسماء مختلفة، منها "الآلة الحاسبة الأساسية" [ 11 ] ، و "الآلة الحاسبة المكتبية" [ 12 ] ، و"الآلة الحاسبة الثنائية" [ 13 ] .
التطبيقات
بوسيكس قبل الميلاد
تُكتب لغة bc القياسية POSIX تقليديًا كبرنامج بلغة البرمجة dc لتوفير مستوى أعلى من الوصول إلى ميزات لغة dc دون تعقيدات بناء الجملة المختصر للغة dc.
في هذا الشكل، تحتوي لغة bc على أسماء متغيرات ومصفوفات ودوال مكونة من حرف واحد ، ومعظم عوامل التشغيل الحسابية القياسية، بالإضافة إلى بنيات التحكم في التدفق المألوفة ( ، و ) من لغة C. على عكس لغة C، لا يجوز أن تتبع عبارة شرطية بـ .if(cond)...while(cond)...for(init;cond;inc)...ifelse
تُعرَّف الدوال باستخدام defineكلمة مفتاحية، وتُعاد القيم منها باستخدام ` returnreturn value` متبوعةً بقيمة الإرجاع بين قوسين. autoتُستخدم الكلمة المفتاحية `return` (اختيارية في لغة C) لتعريف متغير كمتغير محلي للدالة.
جميع الأرقام والمحتويات المتغيرة هي أرقام ذات دقة عشوائية يتم تحديد دقتها (بالمنازل العشرية) بواسطة scaleالمتغير العام.
يمكن تحديد الأساس العددي للإدخال (في الوضع التفاعلي) والإخراج وثوابت البرنامج عن طريق تعيين المتغيرات المحجوزة ibase(أساس الإدخال) و obase(أساس الإخراج).
يتم توليد المخرجات عن طريق عدم إسناد نتيجة عملية حسابية إلى متغير بشكل متعمد.
يمكن إضافة التعليقات إلى كود bc باستخدام الرموز C /*و */(بداية ونهاية التعليق).
المؤثرات الرياضية
تمامًا مثل C
تتصرف عوامل التشغيل التالية في نظام POSIX bc تمامًا مثل نظيراتها في لغة C:
+ - * / += -= *= /= ++ -- < > == != <= >= ( ) [ ] { }على غرار C
تتصرف معاملات القسمة تمامًا مثل نظيراتها في لغة C فقط عندما تكون قيمة المتغير العام تساوي صفرًا، أي %عندما تكون جميع العمليات الحسابية على الأعداد الصحيحة فقط. وإلا، يتم إجراء الحساب بالمقياس المناسب. يُعرَّف على النحو التالي : . أمثلة:%=scalea%ba-(a/b)*b
$ bc bc 1.06 حقوق الطبع والنشر 1991-1994، 1997، 1998، 2000 لمؤسسة البرمجيات الحرة. هذا برنامج مجاني بدون أي ضمان على الإطلاق. لمزيد من التفاصيل، اكتب `warranty`. scale=0; 5%3 2 scale=1; 5%3 .2 scale=20; 5%3 .00000000000000000002يتعارض مع ج
المشغلون
^ ^=
تبدو ظاهرياً مشابهة لمعاملات C الثنائية الحصرية ، ولكنها في الواقع معاملات bc للأس الصحيح.
تجدر الإشارة إلى أن استخدام المعامل ^مع الأعداد السالبة لا يتبع أسبقية المعاملات في لغة C. -2^2يعطي الناتج 4 تحت bc بدلاً من -4.
عوامل التشغيل "المفقودة" بالنسبة إلى لغة C
عوامل التشغيل الثنائية ، والبوليانية ، والشرطية :
& | ^ && || &= |= ^= &&= ||= << >> <<= >>= ؟:
غير متوفرة في POSIX bc.
الوظائف المدمجة
تُعدّ دالة sqrt()حساب الجذور التربيعية الدالة الرياضية المدمجة الوحيدة في نظام POSIX bc. أما الدوال الأخرى، فتتوفر في مكتبة قياسية خارجية.
كما أن وظيفة scale()تحديد الدقة (كما هو الحال مع scaleالمتغير) لوسيطها ووظيفة length()تحديد عدد الأرقام العشرية المهمة في وسيطها مضمنة أيضًا.
وظائف المكتبة القياسية
تحتوي مكتبة الرياضيات القياسية في bc (المُعرّفة باستخدام الخيار -l ) على دوال لحساب الجيب ، وجيب التمام ، وظل الزاوية العكسي ، واللوغاريتم الطبيعي ، والدالة الأسية ، ودالة بيسل ذات المعاملين J. ويمكن إنشاء معظم الدوال الرياضية القياسية (بما في ذلك الدوال المثلثية العكسية الأخرى) باستخدام هذه الدوال. راجع الروابط الخارجية للاطلاع على تطبيقات العديد من الدوال الأخرى.
| أمر bc | وظيفة | وصف |
|---|---|---|
s(x) | جيب | تأخذ x ، وهي زاوية بالراديان |
c(x) | جيب التمام | تأخذ x ، وهي زاوية بالراديان |
a(x) | أركتانجنت | إرجاع بالراديان |
l(x) | اللوغاريتم الطبيعي | |
e(x) | الدالة الأسية | |
j(n,x) | دالة بيسل | تُرجع دالة بيسل من الرتبة n للمتغير x . |
يُغيّر الخيار -l المقياس إلى 20، [ 14 ] لذا قد تعمل عمليات مثل باقي القسمة بشكل غير متوقع. على سبيل المثال، كتابة الأمر bc -lثم تنفيذه print 3%2يُخرج 0. لكن كتابة الأمر scale=0بعد ذلك bc -lثم تنفيذه print 3%2يُخرج 1.
الخطة 9 قبل الميلاد
الخطة 9 bc مطابقة لـ POSIX bc باستثناء printعبارة إضافية.
جنو بي سي
يستمد برنامج GNU bc من معيار POSIX ويتضمن العديد من الإضافات. وهو منفصل تمامًا عن تطبيقات معيار POSIX القائمة على dc، ومكتوب بلغة C. ومع ذلك، فهو متوافق تمامًا مع الإصدارات السابقة، حيث ستعمل جميع برامج POSIX bc دون تعديل كبرامج GNU bc.
قد تحتوي متغيرات GNU bc والمصفوفات وأسماء الدوال على أكثر من حرف واحد، وتم تضمين بعض المعاملات الإضافية من لغة C، والجدير بالذكر ifأنه يمكن أن تتبع العبارة بـ else.
يتم الحصول على المخرجات إما عن طريق عدم تعيين نتيجة عملية حسابية لمتغير بشكل متعمد (طريقة POSIX) أو عن طريق استخدام printالعبارة المضافة.
علاوة على ذلك، readيسمح البيان بإدخال رقم بشكل تفاعلي في عملية حسابية جارية.
بالإضافة إلى التعليقات على نمط لغة C، فإن #وجود حرف معين سيؤدي إلى تجاهل كل شيء بعده حتى السطر الجديد التالي.
يتم دائمًا تخزين قيمة الحساب الأخير داخل lastالمتغير المدمج الإضافي.
مشغلون إضافيون
تُضاف عوامل التشغيل المنطقية التالية إلى تلك الموجودة في POSIX bc:
&& || !
وهي متاحة للاستخدام في العبارات الشرطية (مثل داخل ifعبارة شرطية). مع ذلك، تجدر الإشارة إلى أنه لا توجد حتى الآن عمليات مكافئة على مستوى البت أو عمليات إسناد.
الوظائف
جميع الوظائف المتوفرة في GNU bc موروثة من POSIX. ولا يتم توفير أي وظائف إضافية بشكل قياسي مع توزيعة GNU.
مثال على التعليمات البرمجية
بما أن عامل bc ^لا يسمح إلا بقوى صحيحة على يمينه، فإن إحدى الدوال الأولى التي قد يكتبها مستخدم bc هي دالة أسية ذات أس عشري. يفترض كلا المثالين أدناه تضمين المكتبة القياسية:
دالة "القوة" في POSIX bc
/* دالة لإرجاع الجزء الصحيح من x */ define i ( x ) { auto s s = scale scale = 0 x /= 1 /* تقريب x إلى أقرب عدد صحيح أصغر */ scale = s return ( x ) }/* استخدم حقيقة أن x^y == e^(y*log(x)) */ define p ( x , y ) { if ( y == i ( y )) { return ( x ^ y ) } return ( e ( y * l ( x ) ) ) }حساب قيمة π حتى 10000 رقم
احسب قيمة باي باستخدام دالة الظل العكسي المدمجة ، a() :
$ bc -lq scale=10000 4*a(1) # ظل الزاوية a للعدد 1 يساوي 45 درجة، وهو ما يعادل π/4 بالراديان. # قد تستغرق هذه العملية عدة دقائق . دالة C مترجمة
نظرًا لتشابه بنية لغة bc مع لغة C ، فإنه غالبًا ما يمكن ترجمة الدوال العددية المنشورة المكتوبة بلغة C إلى لغة bc بسهولة تامة، مما يوفر مباشرةً الدقة المطلوبة التي تتميز بها لغة bc. على سبيل المثال، في مجلة البرمجيات الإحصائية (يوليو 2004، المجلد 11، العدد 5)، نشر جورج مارساجليا الكود التالي المكتوب بلغة C لحساب التوزيع الطبيعي التراكمي :
دالة مزدوجة فاي ( مزدوجة مزدوجة x ) { عدد صحيح طويل مزدوج s = x ، t = 0 ، b = x ، q = x * x ، i = 1 ؛ بينما ( s != t ) s = ( t = s ) + ( b *= q / ( i += 2 ))؛ إرجاع 0.5 + s * exp ( -0.5 * q -0.91893853320467274178L )؛ }مع إجراء بعض التغييرات الضرورية لاستيعاب الصيغة المختلفة لـ bc، وملاحظة أن الثابت "0.9189..." هو في الواقع ln(2*PI)/2، يمكن ترجمة ذلك إلى كود GNU bc التالي:
تعريف دالة φ ( x ) { تلقائي s ، t ، b ، q ، i ، ثابت s = x ; t = 0 ; b = x ; q = x * x ; i = 1 while ( s != t ) s = ( t = s ) + ( b *= q / ( i += 2 )) const = 0.5 * l ( 8 * a ( 1 )) # 0.91893 ... return .5 + s * e ( - .5 * q - const ) }استخدام bc في البرامج النصية shell
يمكن استخدام bc بشكل غير تفاعلي، مع إدخال البيانات عبر قناة . وهذا مفيد داخل البرامج النصية . على سبيل المثال:
$ result = $( echo "scale=2; 5 * 7 /3;" | bc ) $ echo $result 11.66في المقابل، لاحظ أن واجهة سطر الأوامر bash لا تُجري سوى العمليات الحسابية على الأعداد الصحيحة، على سبيل المثال:
$ result = $(( 5 * 7 / 3 )) $ echo $result 11يمكن أيضًا استخدام أسلوب السلسلة النصية المضمنة (في bash و ksh و csh):
$ قبل الميلاد -ل <<< "5*7/3" 11.6666666666666666666انظر أيضاً
مراجع
- ↑ "تطبيق لـ Unix dc و POSIX bc مع امتدادات GNU و BSD" . مؤرشف من الأصل بتاريخ 16-06-2024 . تم الاطلاع عليه بتاريخ 16-06-2024 .
- ↑ "واجهة مستخدم أندرويد وأدواتها المساعدة" . android.googlesource.com . مؤرشف من الأصل بتاريخ 16-06-2024 . تم الاطلاع عليه بتاريخ 16-06-2024 .
- ↑ "Platform/External/Bc - Git at Google" . مؤرشف من الأصل بتاريخ 16-06-2024 . تم الاطلاع عليه بتاريخ 16-06-2024 .
- ↑ "FreeBSD 13.3: ما الجديد، وكيف وصلنا إلى هنا؟" . منتديات FreeBSD . 5 مارس 2024. مؤرشف من الأصل في 16 يونيو 2024. تم الاطلاع عليه في 16 يونيو 2024 .
- ↑ "bc(1)" . man.freebsd.org . مؤرشف من الأصل بتاريخ 16-06-2024 . تم الاطلاع عليه بتاريخ 16-06-2024 .
- ↑ "bc « contrib - src - FreeBSD source tree" . cgit.freebsd.org .
- ↑ "Apple Open Source" . opensource.apple.com .
- ↑ "bc/bc at main · apple-oss-distributions/bc" . GitHub .
- ↑ "شفرتي البرمجية انتصرت على نظام تشغيل آخر! | غافين د. هوارد" . مؤرشف من الأصل بتاريخ 15 يوليو 2024. تم الاطلاع عليه بتاريخ 16 يونيو 2024 .
- ↑ تومسون، كين ؛ ريتشي، دينيس (مايو 1975). دليل مبرمج يونكس (الطبعة السادسة ) . الصفحات 17-18 .
- ↑ "آلة حاسبة أساسية" . hy17-bc.spb.ctf.su . مؤرشف من الأصل بتاريخ 19-07-2024 . تم الاطلاع عليه بتاريخ 06-10-2025 .
- ↑ "BC - حاسبة المقاعد" . enlighttheworld.altervista.org . تم الاطلاع عليه بتاريخ 2025-10-06 .
- ↑ وينسور، جانيس (أغسطس 1999). مرجع سولاريس™ 7. بيرسون. ص. الفصل 2، المستوى 1، القسم 4. ISBN 978-0-13-020048-8أُرشف من المصدر الأصلي بتاريخ 31 أغسطس 2025. تم الاطلاع عليه بتاريخ 6 أكتوبر 2025 .
- 1 2 : لغة حسابية ذات دقة عشوائية – مرجع الصدفة والأدوات المساعدة، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group
- لغة حسابية ذات دقة عشوائية - مرجع الصدفة والأدوات المساعدة، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group
- صفحة من دليل GNU bc، مؤرشفة بتاريخ 4 أكتوبر 2018 على موقع Wayback Machine.
- صفحة دليل POSIX bc
- – دليل مبرمج الخطة 9 ، المجلد 1
- صفحة من دليل يونكس بي سي، الإصدار السابع. مؤرشفة بتاريخ 8 أكتوبر 2006 على موقع Wayback Machine.
- مقال من موقع comp.compilers حول تصميم وتنفيذ لغة C-bc، مؤرشف بتاريخ 16 مايو 2006 على موقع Wayback Machine.
- شفرة المصدر لنظام يونكس bc، الإصدار السادس ، وهو الإصدار الأول من bc، الصادر في مايو 1975، والذي يقوم بتجميع صيغة bc إلى صيغة dc.
- تمت أرشفة شفرة المصدر لبرنامج GNU bc بتاريخ 29 يوليو 2019 على موقع Wayback Machine.
روابط خارجية
- ديتمر، آي. 1993. خطأ في أوامر يونكس dc و bc للحساب متعدد الدقة. نشرة سيغنوم 28، 2 (أبريل 1993)، 8-11 .
- مجموعة من وظائف GNU bc المفيدة
- GNU bc ( وإصدار تجريبي ) من مؤسسة البرمجيات الحرة
- bc لنظام التشغيل Windows من GnuWin32
- Gavin Howard bc - تطبيق آخر مفتوح المصدر لـ bc من تطوير Gavin Howard مع إضافات GNU و BSD
- X-bc - واجهة مستخدم رسومية لـ bc
- extensions.bc - يحتوي على دوال حساب المثلثات، والدوال الأسية، ودوال نظرية الأعداد، وبعض الثوابت الرياضية
- ملف scientific_constants.bc - يحتوي على كتل الجسيمات، والثوابت الأساسية، مثل سرعة الضوء في الفراغ وثابت الجاذبية
- برامج حاسبة
- برامج مجانية متعددة المنصات
- برنامج رياضيات مجاني
- لغات البرمجة العددية
- برامج يونكس القياسية
- أدوات يونكس SUS2008
- أوامر الخطة 9
