الدوال المكتبية في C++
الدوال المكتبية في C++
تجري العديد من أنشطة اللغة بواسطة الدوال المكتبية , فهي تقوم بتداول الملفات ,وإجراء العمليات الرياضية , والرسومات , وتنظيم الذاكرة , من بين أنشطة أخري عديدة . ولسنا نريد أن نخوض في موضوع الدوال المكتبية بعمق قبل دراسة موضوع الدوال عموما في الفصل السادس , ولكننا يمكن أن نستخدم دالة مكتبية بسيطة دون الفهم العميق لما تقوم به , وإليك أولية لذلك :
المثال التالي يستخدم دالة مكتبية تسمي sqrt() لتنفيذ عملية استخراج الجذر التربيعي للأعداد المدخلة :
Sqrt.cpp
sqrt.cpp
// sqrt.cpp
// demonstrates sqrt() library function
#include <iostream.h> // for cout, etc.
#include <math.h> // for sqrt()
void main()
{
double number, answer; // sqrt() requires type double
cout << "Enter a number: ";
cin >> number; // get the number
answer = sqrt(number); // find square root
cout << "Square root is "
<< answer << endl; // display it
}
يحصل البرنامج علي العدد المدخل من المستخدم , ثم يستخدم كـــ "معامل argumrnt " للدالة في العبارة
Answer = sqrt(numper);
فالمعامل إذن هو ما يدخل إلي الدالة , ويوضح بين القوسين التابعين لها . وتقوم الدالة بإجراء العملية المكلفة بها علي معاملها , وتكون النتيجة هي خرج الدالة , وهي القيمة التي تعيدها returns للدالة التي استدعتها , وهو في حالتنا الدالة الأصلية للبرنامج main() , فالدالة المذكورة تعيد الجذر التربيعي .
ولكل دالة نوعية المتغيرات التي تتعامل معها , ويمكن الاستدلال علي ذلك من كتيبات الشركة الموزعة لنظام البرمجة , ففي مثل ذلك الكتيب ستري أن الدالة sqrt() لا تتعامل إلا مع النوع double كمعاملات وقيم تعيدها , ولذا فقد عرفنا المتغيرات المدخلة علي هذا النوع .
الملفات التصديرية
عليك كما قلنا أن تضمن برنامجك الملفات التي تحتوي علي تعاريف بالكائنات والدوال المعرفة في اللغة , مثل cout , وهذه الملفات لابد أن توجد في مقدمة البرنامج . فلو أنك راجعت مستندات اللغة لوجدت أن الدالة sqrt() معرفة في الملف math.h , ولذا فقد استخدمنا الموجه #include ليعطي المترجم التعليمات بأن يضمن البرنامج هذا الملف . أما لو سهوت عن ذلك , فإنك سوف تحصل علي رسالة بهذا الشكل :Function sqrt() must have a prototype in function main() .
الملفات المكتبية
ذكرنا فيما سبق أن ملفا يحتوي علي الكائنات والدوال المكتبية سوف يربط ببرنامجك لإنتاج الملف التنفيذي , ولو أنك تستخدم نمط الذاكرة الصغير small , فسوف تستخدم الملف المكتبي المسمي cs.lip . هذا الملف يحتوي علي الدالة sqrt() , والتي تجد تعريفها في الملف التصديري math.h . فالملفات التصديرية تحتوي علي تعريفات الدوال بحسب تصنيفها , فمثلا , الملف iostream.h يحتوي علي الدوال الرياضية , ومنها الدالة sqrt() , ويريد البرنامج أن يمد بهذه التعريفات ليتعامل مع الدوال أو الكائنات , أما الدوال ذاتها , والتي يربطها الرابط , فموجودة في الملف المكتبي .
ويبين الشكل العلاقة بين الملفات بأنواعها المختلفة في عمليتي الترجمة والربط .
شكل ملفات المقدمة والملفات المكتبية
طريقتان لاستخدام الموجه #include
يمكنك استخدام الموجة #include بطريقتين , الأولي هي المعتادة :
#include <iostream.h>
حيث يوضع الملف المطلوب البحث عنه بين القوسين المبينين , والثانية علي النحو التالي :
#include “ myheade.h”
حيث يوجد الملف المطلوب البحث عنه بين علامتي تنصيص . والفرق أن الطريقة الأولي تستخدم للملفات التي تتضمنها اللغة , أي المكتبية , والثانية تستخدم للملفات المكتبية التي يضعها المستخدم لنفسه .
وحين تستخدم الصورة الأولي يبدأ المترجم في البحث عن الملف المقصود تحت الدليل المعتاد للملفات المكتبية كما وضعت في النظام , وفي الحالة الثانية يبدأ البحث في الدليل الخاص بالمستخدم , وهو المحتوي علي الملف المصدري .
والخلط بين الصورتين لن يعيق عمليتي الترجمة أو الربط , ولكنه سوف يبطئ منهما .
تلخيص
تعلمنا في هذا الفصل أن أهم وحدة بنائية في برامج لغة السي++ هي الدوال , وأن الدالة الرئيسية في البرنامج هي المسماة main() , وهي أول ما يبتدأ به تنفيذ البرنامج .
وتحتوي الدالة منقوطة . وقد تحتوي العبارات مع علي " تعابير " , وهي بعض المتغيرات والمؤثرات التي يجري تقييمها إلي قيمة معينة .
ويتم الإخراج بواسطة الكائن cout والمؤثر << , وعن طريقهما ينتقل ما يراد إخراجه إلي الشاشة , والتي تعتبر جهاز الإخراج القياسي . أما إدخال البيانات فيتم بواسطة الكائن cin مع المؤثر >> , ويتقبلان البيانات من لوحة المفاتيح , والتي تعتبر جهاز الإدخال القياسي .
والمتغيرات الأساسية للغة السي ++ هي ستة . ثلاثة منها أعداد صحيحة , وهي : char, int, long وثلاثة أعداد كسرية وهي : float, double, long double . وهذه جميعا تكون ذات إشارة (موجبة أو سالبة ) . ويمكن استخدام متغيرات الأعداد الصحيحة لتكون بلا إشارة (موجبة دائما ) فيزداد مداها للضعف . أما القيمة التي تعرف بالمميز const فتكون ثابتة طوال البرنامج .
وفي التعابير المختلطة الأنواع , يجري تحويل النوع الأدنى إلي الأعلى , وهو يكون إما تلقائيا أو بواسطة المبرمج (قسريا) .
وتستخدم لغة السي++ المؤثرات الحسابية المعتادة , لعمليات الجمع والطرح والضرب والقسمة , ويضاف إليها باقي القسمة . كما توجد مؤثرات حسابية تخصيصية , مثل += , وهي تجري حسابية وتحصصها للمتغير في أن واحد . كما يوجد مؤثر للتزايد , وأخر للتناقض , لتغيير قيمة المتغير بمقدار الوحدة .
وتوجد من الأوامر ما يوجه للمترجم وليس للحاسوب , وهذه تسمي "موجهات المترجم , أم ما قبل المعالج " , وتتميز بالمميز # . ومن ذلك الموجه #include الذي يأمر المترجم بإلحاق ملفات معينة بالبرنامج , قد تكون مكتبية , أو من وضع المبرمج . كما يوجد الموجه #define والذي يعطي قيما ثابتة لبعض الرموز المستخدمة .
تعليقات
إرسال تعليق