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

مطلوب شرح ل ...

مغلق
بدأه fafe0 في 13 يوليو 2005 · 9 رد · 1,502 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخوتي في الله.

قبل أيام حملت كتاب ( علم نفسك دلفي في 21 يوم ) والكتاب إنجليزي، لكن المشكلة أني عندما وصلت لموضوع الـ procedure و الـ

functions وجد هناك قطعاً في الكتاب ! فقمت بتحميله من هذا الموقع الممتاز، ووجدت نفس المشكلة.

فهل من أحد يفهم في لغة الدلفي هنا يستطيع أن يشرح لي ما هي الـ procedure وما هي الـ function وأجره على الله ؟

بس ملاحظة: * إذا ما كان عند الشخص الذي يرغب في الشرح مانع أن يضع الكثير من الأمثلة أكون شاكر له، لأن فهمي بطيء نوعاً ما .

أريد أن أفهم ما هي الـ procedure وما هي الـ function وما هو الفرق بينهما ومتى يستعملوا ؟

جزاكم الله خيراً.

بس أرجوكم لا تنسوا لو سمحتو، الكثير من الأمثلة.

بارك الله فيكم. وفي جهودكم.

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

#2

انا انصحك اخي الكريم ان تقرأ هذا الكتاب الذي يعلمك كل ما تريد

عن لغة باسكال و دلفي

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

عفواً الكتاب اسمه

DelphiLanguageGuide

موجود حالياً في العناوين المثبتة "كتب و مراجع " و موضوع له رابط هناك

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4
waeldalol كتب:
عفواً الكتاب اسمه

DelphiLanguageGuide

موجود حالياً في العناوين المثبتة "كتب و مراجع " و موضوع له رابط هناك

السلام عليكم

جزاك الله خيراً أخي

بس الرابط في الموضوع لا يعمل، أرجو أن تضع رابط آخر إن كان عندك وجزاك الله خيراً.

وأرجو من الإخوة المشرفين تعديل الرابط في صفحة المراجع.

بارك الله فيكم.

#5

وإذا الإخوة عروة أو romanof أو غيرهم من الخبراء عندهم الوقت للمساعدة، أكون شاكر لهم.

لأن الشرح بالعربي قد يكون أسهل في الفهم.

وإذا كان هناك شرح إنجليزي ما فيه مشكلة.

المهم أريد أن أفهم.

مشكورين مقدماً. وبارك الله فيكم وفي جهودكم لخدمة الأعضاء.

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

#6
اقتباس
بس الرابط في الموضوع لا يعمل، أرجو أن تضع رابط آخر إن كان عندك وجزاك الله خيراً.

ربما بسبب مشاكل المنتدى في الفترة الاخيرة

اقتباس
وإذا الإخوة عروة أو romanof أو غيرهم من الخبراء عندهم الوقت للمساعدة، أكون شاكر لهم.

اصبر علي شوي :rolleyes:

ملاحظة :يرجى عدم ذكر اسماء لان هذا قد يمنع البقية من الاجابة اولا :wacko: وممنوع في المنتدى وقد تغلق المشاركة بسبب هذا :wacko: :wacko:

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#7

صحيح كلام الأخ رومانوف ... لايجب ذكر أسماء

بالنسبة للغة العربية . يمكن أن تجدي هذا الكتيب باللغة العربية ,

رابط

http://www.marcocantu.com/epascal/arabic/ch02code.htm

سؤالك عن التوابع والإجراءات (المناهج) هنا :

http://www.marcocantu.com/epascal/arabic/ch06proc.htm

ولكنه غامض قليلا وغير واضح ...

أبدأ من هنا , وكل شيء غامض أسئلة بسؤال منفصل في المنتدى وبالتأكيد ستحصل على إجابات مفصلة مع الأمثلة لكل سؤال ...

مشكلته أن ترجمته غير قياسية أحيانا , ولكن يمكن الاستفادة منه بشكل أو بآخر

#8

بسم الله الرحمن الرحيم

أخي العزيز

ان الاجراء والدالة (procedure and function ) عبارة عن مجموعة من الاوامر التي يمكن إستدعاؤها من اماكن مختلفة من البرنامج عند استدعاء كل منهما (قد ) نرسل متغيرات أو ثوابت أوعبارات كبارامترت (كعوامل ) بحيث

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

قيمة معينة

الاعلان عنهما

Procedure  <Name >(< parameter list  >)
   < local var. declaration >
    Begin
    End;

//=======================================
Function <Name >(< parameter list  >) : <type of returned vlaue>;
< local var. declaration >
  Begin
  End;
//=====================

الدالة تعيد قيمة معينة ما معني هذا وكيف استخدمه ؟؟

معناها انك تستطيع ارسال القيمة التي تعيدها الدالة الى متغير من نفس النوع كيف ؟؟

مثال لنفترض ان لدينا دالة نرسل اليها عددا فتعيد النا ضعف مربعه

سيتم الاعلان عن هذه الدالة كالتالي

Function  mySqr( x:real) :real;

Begin
  Result:=*2x*x;
End;

ان اسم الدالة هو mySqr والقيمة التي ارسلناها هي x عدد حقيقي لاحظ ان الدالة ستعيد القيمة الممنوحة للمتغير Result

المعرف تلقائيا من قبل دلفي ليدل على قيمة التي ستعيدها الدالة في الحقيقة اثناء تعريفك لنوع القيمة التي ستعيدها الدالة فانك تضع تعريفا لنوع المتغير Result .

في الحقيقة كان بإمكانك الإستغناء عن المتغير Result ووضع بدلا منه اسم الدالة تماما كما في باسكال سابقا مثال

Function  mySqr( x:real) :real;

Begin
mySqr:=*2x*x;
End;

في هذه اللحظة تسال نفسك كان بالامكان عمل ذلك من البداية فما الفائدة من هذا المتغير الذي لا فائدة سوى اضافة كلمة الى مفردات اللغة ولكن مهلا صديقي العزيز هناك فرق جذري : ان اسم الدالة في ليس متغيرا وبالتالي لن يتمتع يمرونة المتغيرات مثال

Function  mySqr( x:real) :real;

Begin
  Result:=x*x;
  Result:= Result*2;
End;

يعني ان الدالة سوف تعيد اخر قيمة للمتغير Result وتصور مدى المرونة التس ستحصل عليه عند وجود قيم افتراضية للدالة إن الكود السابق لا يمكن تكراره بإستبدال اسم( التابع) الدالة بالمتغير .

ولكن اخي رومانوف انت تقول منذ البداية ان الدالة تعيد قيمة معينة وانك تستطيع منح القيمة المعادة لمتغير من نفس النوع

كيف يتم هذا الامر انظر الي المثال التالي

 Var  A,B:real;
.   .    .

A:=3;
B:= A*A*2+5;
.   .    .
انظر الى العبارة  الثانية   كان من الممكن كتابتها بالشكل التالي 

B:= mySqr(A)+5;


لاحظ ان المتغير B يقع على الجانب  الايسر من المساواه (من إشارة  المنح في الحقيقة  )    مما يدل على انه سيحصل على قيمة  اي  mySqr  اعادت قيمة  ولاحظ ان المتغير B  من النوع rael    ولاحظ ان الدالة mySqr تعيد النوع real    .
كما ان انك تستطيع ارسال الدالة كبارامتر الى داله اخري   او اجراء اخر 
هناك ايضا دوال لا تاخذ متغيرات ومع ذلك تعيد قيما   اشهر مثال للعبارتين السايقتين عي  الدالةهي   العدد المشهور Π
    B:=mySqr(pi)+5;


في الاجراء يتم ارسال  المتغير بنفس الطريقة  ولكن  الاجراء لا يعيد   اي قيمة بمعنى انه لايمكن ان يكون جزءا  من عبارو كالعبارة السابقة  انظر مثالا 


Procedure  MyMessage (s:string)
    Begin
     ShowMessage(s);
    End;

لاحظ خلو جسم الاجراء من المتغير Result  مما يعني عدم اعادته لاي قيمة  دائما  كما انك لاتستطيع منح قيمة لاسم الاجراء 
كما ان هناك ايضا اجراءت  لاتحوي  على بارمترات  اشهر مثال على  هذا هو الإجرا ء هو الإجراء  Beep  

المثال القادم يعطي مثالا واضحا 

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyMessage(‘hi’);
  Beep;
end;
  لاحظ عدم وجود متغير يستقبل قيمة الاجراء  كما انك لاترسل الاجراء كبارامتر  لإجراء اخر او داله اخري اي هناك فاصلة منقوطة بعد اسم الاجراء دائما; اما بالنسبة للدوال فالامر ليس ضروريا قد يكون وقد لا يكون 

فيما عدا هذا الامر فالاجراء والدالة متماثلان 

اريد ان اقف على نقطة اخري مهمة 
 قد تجد في جسم الدالة  او الاجراء العبارة القياسية  exit  والتي تعني لنها عمل عمل هذه الوحدة فورا 
فاذا كانت دالة فانها ستعيد اخر قيمة للمتغير result  عند الوصول اليها  وبالتالي اكمال عمل البرنامج
وإذاكان إجراء فسيخرج اليرنامج ايضا منه وسيواصل عمله

بالمناسبة هناك ايضا  نقطة هامة لارسال البارمترات  الى الاجراء  فإذا كان  يسبق اسم البارمتر var   فمعناه انك ارسلت المتغير الى الدالة او الاجراء وانت تسمح لهما بتغيير قبمة البارمتر وهذه التغييرات ستبقى حتى بعد انتهاء عمل الدالة او الاجراء  (يعني reference )

Procedure MyPr(var  i:integer);
Begin
 i:=i+10;
End;

procedure TForm1.Button1Click(Sender: TObject);
var m:integer;
begin
 m:=10;
 Label1.Caption:=IntToStr(m);
MyPr(m);
 Label2.Caption:=IntToStr(m);
end;


إذا   كان الاجراء(الدالة )من النوع المذكور  فلن تستطيع ارسال قيمة ثابتة 

.    .   .

MyPr(10);  {  خطأ}

….   .

           هناك طريقة اخرى لارسال  البارمترات   وهي  إذا لم يسبق اسم المتغير اي شئ  وفي هذه الحالة تستطيع ان تفعل 
أي شىء لأن الارسال يتم عن طريق نسخة من البارمتر (وليس المتغير نفسه بعني متغير مؤقت )  ولكن التغييرات تنتهي بعد الخروج من جسم الدالة وبهذا تعود القيمة الى  ماكنت عليه قبل إستدعاء الدالة او الاجراء 


Procedure MyPr(  i:integer);
Begin
 i:=i+10;
End;

procedure TForm1.Button1Click(Sender: TObject);
var m:integer;
begin
 m:=10;
 Label1.Caption:=IntToStr(m);
MyPr(m);
 Label2.Caption:=IntToStr(m);
end;







هناك طريقة اخرى وهي الارسال  عن طريق متغير لقيمة ثابتة و لايسمح فيها بتغيير قيمة البارامتر  (لانك ترسل ثابت وايس متغير )
مثال 

Procedure MyPr(const  i:integer);
Begin
 i:=i+10;{ سيسبب خطأ}
End;

procedure TForm1.Button1Click(Sender: TObject);
var m:integer;
begin
 m:=10;
 Label1.Caption:=IntToStr(m);
MyPr(m);
 Label2.Caption:=IntToStr(m);
end;




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

هناك  نقط هامة لم اتطرق اليها ولكن اعتقدأن هذا يكفي اليوم

procedure.rar

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#9

اخي هنا ك نقطة اخرى هي الارسال بواسطة ال out والتحميل الزائد عفوا على المعلومات الناقصة

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#10

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

مشكور أخي romanof وأخي عروة.

اقتباس
اصبر علي شوي 

ملاحظة :يرجى عدم ذكر اسماء لان هذا قد يمنع البقية من الاجابة اولا  وممنوع في المنتدى وقد تغلق المشاركة بسبب هذا 

آسف أخي جداً، لم أكن أعلم أن ذكر الأسماء ممنوع، وإلا لتوقفت عند قوانين المنتدى. وأنا عندما ذكرت الأسماء قلت بعدها أو غيرهم من الخبراء . وكان ذكر الأسماء فقط لأن هذه الأسماء هي الأبرز في منتدى الدلفي ( على الأقل بالنسبة لي ) فأنا جديد في المنتدى.

وجزاك الله خيراً على هذا الشرح المفصل والطويل. ( حقيقةً أنا لم أقرأ الشرح بعد، فقد دخلت للتو للموضوع، وقررت ان أشكرك على مجهودك قبل أن أتمعن في الشرح. )

جزاك الله خيراً، ووفقك في الدنيا والآخرة.

====================================

اقتباس
صحيح كلام الأخ رومانوف ... لايجب ذكر أسماء

بالنسبة للغة العربية . يمكن أن تجدي هذا الكتيب باللغة العربية ,

رابط

http://www.marcocantu.com/epascal/arabic/ch02code.htm

سؤالك عن التوابع والإجراءات (المناهج) هنا :

http://www.marcocantu.com/epascal/arabic/ch06proc.htm

ولكنه غامض قليلا وغير واضح ...

أبدأ من هنا , وكل شيء غامض أسئلة بسؤال منفصل في المنتدى وبالتأكيد ستحصل على إجابات مفصلة مع الأمثلة لكل سؤال ...

مشكلته أن ترجمته غير قياسية أحيانا , ولكن يمكن الاستفادة منه بشكل أو بآخر

شكراً لك أخي عروة وجزاك الله خيراً. أنا قرأت كتاب ماركو كانتو المترجم. ( أساسي باسكال ) ولكنه كما قلت أنت، معقد وأحياناً أشعر أن الترجمة غير موفقة.

مشكور مرة أخرى.

هذا الموضوع مغلق.

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