• 0
mostafayasin

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

سؤال

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


 


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


 


شكرا.


 


-3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

14 إجابة على هذا السؤال .

  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

 

ممكن توضيح

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

-1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

 

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

 

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

 

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

 

هذه فائدتها

-1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

-1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 

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

 

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

 

مثلا أنا قمت بعمل برنامج لل 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 Tprint T

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

تم تعديل بواسطه kenham
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

مثلا أنا قمت بعمل برنامج لل 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 Tprint T

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 

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

 

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

 

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

 

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

 

و هذا مثال

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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 

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

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

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



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .