الدوال …Functions
…
النقاط الأساسية :
1 – مقدمة .
قبل البدء
تكلمنا فى المقال السابق عن المتغيرات و الثوابت و أدوات الإدخال و العمليات الحسابية و فى هذا المقال سنتكلم عن الدوال و كيفية إستخدامها و الإستفادة منها و أهميتها مع ضرب الأمثلة المتعددة فالبمثال يتضح المقال .
ترجمة كلمة Functions يعنى وظيفة أو دالة ؛ الدالة فى الرياضيات هى علاقة بين متغير تابع و متغير مستقل مثلا دالة تدرس العلاقة بين س المتغير المستقل و ص المتغير التابع .
يعنى عند تغيير قيمة س تتغير قيمة ص تبعا لهذا التغير فنقول ؛ د(5)= 5 – 1 إذا د(5) = 4 يعنى قيمة ص عندما نضع قيمة س بخمسة . الرقم الذى بين القوسين يسمى مدخل argument و النتيجة تسمى القيمة المرجوعة أو العائدة return value إذا الدالة تأخذ قيمة مدخلة و تعطيك نتيجةو هناك دالة تأخذ قيمتين مثلا :
دالة ج = د(س , ص ) = 6س + 7 ص د(5 ,3) = 6 * 5 + 7 * 3و قد تتعدد المدخلات و تكون دالة ج دالة فى (س و ص ) و هذا تبسيط جدا لمفهوم الدوال فهى مجال واسع فى علم الرياضيات .
الدوال فى بايثون
لكل دالة إسم معين تستدعيها به فمثلا دالة تحديد النوع type
# لاحظ أنه حدد النوع كنص لإنها بين علامتى تنصيص
كتبنا إسم الدالة و بعدها قوسين و بينهم المدخل المراد تطبيق الوظيفة المعينة عليه و هى تحديد نوع المتغير .
هنا حدد المتغير 32.01 كرقم عشرى float .
دالة int تحول الرقم العشرى float أو الرقم الذى بين علامات تنصيص و تحوله إلى رقم صحيح integer و لا تقبل النصوص
0.98333333333333328
أو كتابة المقسوم عليه 60 هكذا 60.0 فيعرف المفسر أن نوع هذا المتغير رقم عشرى .
>>> minute / 60.0
0.983333333333
هذه بعض دوال البايثون و هى كثيرة جدا .
الوحدة …. Module
الوحدة هى ملف يحتوى على مجموعة دوال لغرض معين و الوحدة يجب عمل إستيراد لها مثلا يوجد فى البايثون وحدة الرياضيات بها مجموعة دوال للعمليات الرياضية مثل حساب الزوايا المثلثية ” جا و جتا و ظا و .. “ و كيفية إستيراد الوحدة باﻷمر import و لابد من عمل إستيراد قبل تنفيذ أى دالة منها .
لإستخدام دوال الوحدة تكتب إسم الوحدة متبوعا بنقطة و بعدها إسم الدالة ” و القوسين لإدخال المدخلات ”
هذاالدالة لحساب لوغاريتم 30.0 للأساس 10 و لو لم نكتب الرقم 10 تصبح دالة اللوغاريتم للأساس الطبيعى e
أفتح محرر النصوص المفضل لديك و أكتب هذا البرنامج البسيط
angle=input(” Enter your angle ..” ) print “the result sin(your angle is ” , math.sin(angle) print “the result cos(your angle is ” , math.cos(angle) print “the result tan(your angle is ” , math.tan(angle)
السطر الأول هو إستيراد للوحدة التى نريدها و السطر الثانى هو متغير إسمه angle بدالة الإدخال input و هى دالة إدخال لا تقبل إلا الأرقام فقط .
و السطر الثانى هو الأمر print و به دالة جيب الزاوية sin و هكذا إستخدمنا cos و tan . كما يمكن وضع مصطلح أو تعبير ( expression) كمدخل( argument ) للدوال و الدالة ما هى إلا تعبير فمثلا :
قمت بإدخال دالة آخرى داخل الدالة الأصلية فالدالة الأصلية () math.sqrt هى لحساب الجذر التربيعى للمدخل و المدخل عبارة عن دالة تحسب قيمة اللوغاريتم .
كيفية تعريف دالة جديدة
تستطيع بلغة البايثون أن تقوم بتعريف دالة “وظيفة ” جديدة لإستخدامها و الفائدة من عمل دالة هى توفير للخطوات فتقوم بعمل دالة تنجز وظيفة معينة فيما بعد فهى تقلل أسطر البرنامج و تسهل عمل مراجعة و تطوير للبرنامج و تفوق بايثون فى هذا المجال بشكل ملحوظ فهى لغة مفضلة عند علماء الرياضيات و الباحثين و المهندسين و مصممى الرسوم ثلاثية الأبعاد و برمجة الألعاب فهى أشهر اللغات فى برمجة الألعاب فهى قوية و سهلة .. تعالى نتعرف عن كيفية تعريف دالة جديدة داخل البايثون . لماذا تسمى بتعريف ؟ لإنك بكل ببساطة تقوم بتعريف المفسر أن هذه دالة سيستخدمها و تعريف الدالة يبدأ بكلمة def ثم إسم الدالة ثم قوسين ثم تنهيها بـ : و هذا يسمى رأس الدالة و الجزء الثانى يبدأ فى السطر التالى للرأس بعد أربعة مسافات من أول السطر و يكون فيه الأوامر و البيانات المختلفة (STATEMENTS) فلنضرب مثال لتعريف دالة ..
أسماء الدول تتبع نفس قوانين تسمية المتغيرات التى ذكرتها فى المقال السابق و لا تسمى دالة بإسم متغير قمت بتسميته أو دالة آخرى بنفس الإسم و بين القوسين يكون المدخل و فى السطر الثانى بعد أربع مسافات يبدأ جسم الدالة و يمكن وضع عدد غير محدود من البيانات .
هذه دالة تقوم بطباعة إسم Your name إسمها your_name و الأقواس الفارغة () تشير إلى أن هذه الدالة لا تأخذ مدخلات و السطر الثانى يحوى بيان (STATEMENT ) للطباعة .
ثم تقوم بتنفيذها فى سطر جديد () my_your_name
سيكون شكل الملف النصى هكذا
و الناتج سيكون هكذا” نكتب بايثون متبوعة بإسم الملف my_your_name.py “
لاحظ أنه عندما تستدعى دالة فمن المنطقى أن تكون معرفة مسبقا فالمفسر يبدأ البرنامج من السطر الأول ثم الثانى و هكذا فلابد من الترتيب فى تعريف الدوال و إستدعائها .
دوال بمدخلات argument
لتعريف دالة بمدخلات لابد بوضع بارمتر داخل القوسين و البارمترات هى كالمتغيرات لكنها قاصرة على الدالة فقط فمثلا
لإستدعاء الدالة ضع مدخلات مكان البارمتر man نكتب الدلة و بين القوسين أى قيمة بدلا من كلمة man و هذه الكلمة يمكن تغييرها لأى إسم
سيكون الناتج بطبع المتغير مرتين .
cat = part1 + part2
print cat
cat_twice(“me “,” you”)
cat_twice(5,10)
لاحظ هنا أن هناك متغير داخل الدالة إسمه cat حاول عمل أمر طباعة له print cat ستجد أن المفسر يعطيك خطأ معناه أن هذا المتغير لم يتم التعرف عليه .. لماذا ؟ لإن المتغيرات داخل الدوال محلية و قاصرة على داخل الدالة فقط و ليس لها أى علاقة بباقى البرنامج .
الدوال المنتجة و الغير منتجة
إستكمالا على البرنامج السابق قم بعمل متغير يساوى الدالة (cat_twice(5,10 و سمه مثلا result
ستجد أن قيمة result هى None لكـن لماذا ؟ و لماذا الدوال الآخرى كدوال وحدة math تقوم بحفظ القيمة ؟
هناك نوعين من الدوال دالة منتجة و دالة غير منتجة فالدالة قاصرة على تنفيذها و لا تقوم بإرجاع قيمة معينة فى الذاكرة و لكن كى تقوم بإرجاع أو حفظ قيمة المخرجات تحتاج إلى وضع أمر return و سنرى بالمثال كيف نستخدمه و الدوال التى كتبنها لا تحتوى على return . سنكتب دالة تقوم بحساب مساحة الدائرة و قانون المساحة هو حاصل ضرب ط فى تربيع نصف القطر
return math.pi * radius**2
و لكن السابقة أفضل عند مراجعة البرنامج و إكتشاف الأخطاء . و دالة math.pi هى قيمة باى أو ط 22/7 أو 3.14 .
إسطوانة
نريد كتابة برنامج يقوم بحساب حجم الإسطوانة .قانون حجم الإسطوانة هو عبارة عن حاصل ضرب مساحة القاعدة فى الإرتفاع و القاعدة هى دائرة . إذا المدخلات هى إرتفاع الإسطوانة و نصف قطر قاعدتها و أفضل طريقة لكتابة البرنامج هى التدرج مع البرنامج فلنبدأ بكتابة شكل الدالة . هى دالة ستحتاج إلى مدخلين الإرتفاع h و نصف القطر r و بما إن القاعدة دئرة فسنستخدم دالة حساب مساحة الدائرة و نبدأ بكتابة شكل الدالة
و قم بتجربة البرنامج أولا و تأكد من عدم وجود أخطاء و بعد ذلك سنبدأ بحساب مساحة القاعدة و هى بإستدعاء الدالة الأولى لحساب مساحة الدائرة و أعلم أنه أى سطر برمجى بعد جملة return ليس له أى قيمة فالإضافة ستكون قبلها فستصبح الدالة هكذا
تأكدت أن البرنامج صحيح ؟ قم بعمل return للحجم و بعد ذلك نريد عمل مدخلات و تطبيق للدالة و إنهاء البرنامج
و يصبح شكل البرنامج النهائى هكذا
H = input(” Enter the height of cylender ” ) valume = cylender_valume(R,H)
print valume
و لنا لقاء بمشيئة الله تعالى فى العدد القادم .