الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل يجب أن استخدم def فى برامجى ؟

بدأه mostafayasin في 31 أغسطس 2014 · 14 رد · 1,151 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته.


 


عندما أقوم بالتفكير فى طريقه لكتابة برنامج معين لا افكر فى استخدام def ولكن ادخل فى الأوامر مباشرة وانتهى من البرنامج ويعمل بصوره جيده بدونها .... لذلك أريد أن أعرف هل يجب علي استخدام def فى البرامج ... وهل استخدامها من عدمه له علاقه بثقل البرنامج .


 


شكرا.


 


−3
#2

اسف قمت بكتابة الموضوع مرتين ...

#3

هل قصدك هل يجب ان استعمل الدوال ام لا لان def امر بداية الدوال 

 

 

ممكن توضيح

salah.jpg

#4

أجل أنا أقصد هذا ... هل يجب أن استخدم الدوال ... وما الفوائد التى تعود علي من استخدامها ؟

−1
#5

سوف اجيبك جواب كمبتدئ  , اخي الكريم يمكنك ان تكتب اكوادك بدون استعمال الدوال لكن لايمكنك ان تستمر 

 

 

 الدوال  تشبه الحقيبة مليئة بالكود ويكون لهذه الحقيبة اسم  

 

اي عندما تريد تكتب الكود المكون من 5 اسطر في سكربت ثاني 

 

الدالة تغنيك عن هذا الشيء كيف !! عن طريق كتابة فقط اسمها في كود ثاني

 

هذه فائدتها

−1
#6

شكرا لك أخى ... أجل أنا أعلم بهذه الفائده ... ولكن هل استخدام الدوال يؤثر فى ثقل البرنامج أم ليس له علاقه ؟؟

−1
#7

والله يالغالي لا اعرف بهذه المعلومة عسى الله ان ينفعنا برد احدهم

#8
اقتباس

 

شكرا لك أخى ... أجل أنا أعلم بهذه الفائده ... ولكن هل استخدام الدوال يؤثر فى ثقل البرنامج أم ليس له علاقه ؟؟

 

إن كان هناك إستدعاء ذاتي فهذا يزيد من إستهلاك البرناج للذاكرة،مع العلم أن للإستدعاء الذاتي عمق لا يمكن تجاوزه

 

مثلا أنا قمت بعمل برنامج لل brute force بإستعمال العودية البرنامج يعمل بشكل جيد لكنه أقصى طول للنص هو 4

 

هذا هو السكربت

def brute_force(r):
    alpha='abcdefghihjklmnopqrstuvwxyz'
    essay=alpha[0:r]
    texte='a'*r
    T=[]
    h=r-1
    n=h
    for i in texte:
        T.append(i)

    def list2str(x):
        y=''
        for i in x:
            y+=i
        return y

    def change(T,h):

        if list2str(T)==essay[len(essay)-1]*r:
            return T
        if h==n:
            if T[h]==essay[n]:
                T[h]='a'
                change(T,h-1)
            else:
                T[h]=essay[essay.find(T[h])+1]
                print list2str(T)
                change(T,h)
        else:
            if T[h]==essay[n]:
                T[h]='a'
                change(T,h-1)
            else:
                T[h]=essay[essay.find(T[h])+1]
                print list2str(T)
                change(T,h+1)
        change(T,h)

    print list2str(T)
    change(T,h)
brute_force(5)
print T
print T

لو نفذت الكود كما هو يسنفذ البرنامج و يحدث خطأ بعد مدة من التنفيذ لتظهر الرسالة:maximum recursion depth exceeded

 

و معناها  تجاوز أقصى عمق للعودية

 

لكن لو نفذت البرنامج  بإستداع دالة ال brute_force مع البراماتر 4 سينفذ البررنامج بشكل عادي

 

كما قلت العودية تزيد من إستهلاك الذاكرة

 

أما مسألة تثقيل البرنامج فهذا يعتمد على عدد و نوع الأوامر بغض النضر إن كان هناك دوال أو عودية أو من دونهما

 

مع العلم أن أمر الطباعة على الشاشة يأخذ وقت طويل مقارنة مع الأوامر العادية الأخرى

 

في الحالات العادية أي من دون إستعمال العودية فإن الدوال لا تؤثر على ثقل البرنامج و لا على إستهلاك الذاكرة

 

بل لها فائدة كبيرة في تقليل جحم البرنامج من حيث عدد الأسطر و حجم البرنامج إن تم عمل ملف تنفيذي له إذا كانت الذالة تستعمل عدة مرات في البرنامج فبدل كتابة الدالة كاملة في كل مرة

 

نكتبها مرة واحدة فقط و كل ما نحتاجها في البرنامج نستدعيها

تم تعديل هذه المشاركة بواسطة kenham في 3 سبتمبر 2014 في 03:09

1
#9
kenham كتب:

إن كان هناك إستدعاء ذاتي فهذا يزيد من إستهلاك البرناج للذاكرة،مع العلم أن للإستدعاء الذاتي عمق لا يمكن تجاوزه

 

مثلا أنا قمت بعمل برنامج لل brute force بإستعمال العودية البرنامج يعمل بشكل جيد لكنه أقصى طول للنص هو 4

 

هذا هو السكربت

def brute_force(r):
    alpha='abcdefghihjklmnopqrstuvwxyz'
    essay=alpha[0:r]
    texte='a'*r
    T=[]
    h=r-1
    n=h
    for i in texte:
        T.append(i)

    def list2str(x):
        y=''
        for i in x:
            y+=i
        return y

    def change(T,h):

        if list2str(T)==essay[len(essay)-1]*r:
            return T
        if h==n:
            if T[h]==essay[n]:
                T[h]='a'
                change(T,h-1)
            else:
                T[h]=essay[essay.find(T[h])+1]
                print list2str(T)
                change(T,h)
        else:
            if T[h]==essay[n]:
                T[h]='a'
                change(T,h-1)
            else:
                T[h]=essay[essay.find(T[h])+1]
                print list2str(T)
                change(T,h+1)
        change(T,h)

    print list2str(T)
    change(T,h)
brute_force(5)
print T
print T

لو نفذت الكود كما هو يسنفذ البرنامج و يحدث خطأ بعد مدة من التنفيذ لتظهر الرسالة:maximum recursion depth exceeded

 

و معناها  تجاوز أقصى عمق للعودية

 

لكن لو نفذت البرنامج  بإستداع دالة ال brute_force مع البراماتر 4 سينفذ البررنامج بشكل عادي

 

كما قلت العودية تزيد من إستهلاك الذاكرة

 

أما مسألة تثقيل البرنامج فهذا يعتمد على عدد و نوع الأوامر بغض النضر إن كان هناك دوال أو عودية أو من دونهما

 

مع العلم أن أمر الطباعة على الشاشة يأخذ وقت طويل مقارنة مع الأوامر العادية الأخرى

 

في الحالات العادية أي من دون إستعمال العودية فإن الدوال لا تؤثر على ثقل البرنامج و لا على إستهلاك الذاكرة

 

بل لها فائدة كبيرة في تقليل جحم البرنامج من حيث عدد الأسطر و حجم البرنامج إن تم عمل ملف تنفيذي له إذا كانت الذالة تستعمل عدة مرات في البرنامج فبدل كتابة الدالة كاملة في كل مرة

 

نكتبها مرة واحدة فقط و كل ما نحتاجها في البرنامج نستدعيها

الاجابة في الصميم شكرا لك على هذا الشرح

#10

شكرا لك على هذه المعلومات وجزاك الله كل خير ..... ولكن هناك أمر لم أفهمه:

 

ماذا تقصد بالعوديه وأي نص الذى تقصده أن لا  يتجاوز ال 4 ؟؟

#11
اقتباس

 

أي نص الذى تقصده أن لا  يتجاوز ال 4 ؟؟

 

لو قرأت الكود و ملاحضاتي بتأني و جربته  ستعرف بالتأكيد

 

أما بالنسبة للعودية

 

العودية ببياطة تعني الإستدعاء الذاتي (أن تستدعى الدالة دالة تعريفها)

 

و هذا مثال

def fibonachi(x):
    if x==1:
        return 1
    elif x==2:
        return 2
    else:
        return fibonachi(x-2)+fibonachi(x-1)
#12

هل تقصد ال Recursion ولكن معقول !! د\إيهاب فى دروسه استخدمها اكثر من ذلك .. وقد نفذت برنامج الsqrt بها وجعلت البرنامج يستدعيها أكثر من مره لإيجاد الجزر التربيعى وكان الأمر يسير جيدا !!

#13
اقتباس

 

لكن معقول !! د\إيهاب فى دروسه استخدمها اكثر من ذلك .. وقد نفذت برنامج الsqrt بها وجعلت البرنامج يستدعيها أكثر من مره لإيجاد الجزر التربيعى وكان الأمر يسير جيدا !!

 

ماذا تقصد بكلامك هذا؟؟

#14

اقصد ان الدكتور ايهاب فى الدروس الموجوده فى المواضيع المثبته استخدم العوديه اكثر من 4 مرات .

#15

و هل قلت أنا أنه لا يجب إستعمال العودية أكثر من أربع مرات؟

مواضيع مشابهة