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

أسئلة حول ...

مغلق
بدأه fafe0 في 10 سبتمبر 2005 · 6 رد · 4,310 مشاهدة · في أرشيف منتدى الدلفي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

بعد قراءتي لشرح أخي romanof حول الإجراءات والدوال والرابط الذي وضعه الأخ عروة ( لكتاب ماركو كانتو - أساسي باسكال )

على هذا الرابط

أصبح عندي بعض التساؤلات...

أريد أن أسأل عن مفهوم إرسال البارامترات في الاجراءات والدوال.

مثلاً هذه الإجرائية :

Procedure fafe(var i: integer);
begin
i := i + 5;
end;

عندما أريد أن أطبقها على برنامج مثلاً:

procedure Tform1.button1click( sender: Tobject);
var
s: integer;
begin
s:= 10;
fafe(s);
end;

عندما وضعت السطر

fafe(s);

[code/ ]

فهذا السطر سيجعل قيمة s = 15 هل هذا هو الإرسال ؟ يعني هل الإرسال هو وضع المتغير s في البرنامج بدل ( البارامتر ) أو المتغير i في الإجرائية الأصلية (fafe )، ثم تطبيق كل الأوامر التي في الإجرائية الأصلية ( التي كانت تطبق على المتغير i ) على المتغير الجديد s ؟

1 - هل هذا الفهم صحيح لمفهوم الإرسال ؟

2 - هل هناك فرق بين مفهوم الإرسال والتمرير Passing أم أنهما كلمتان لمعنى واحد ؟

3 - ما هو معنى التغليف ؟

## طلب : إذا كان عند بعض الإخوة بعض التمارين حول الإجراءات والدوال فأرجو أن يضعها هنا حتى أتمكن من فهم هذا الموضوع بشكل جيد، وإذا كان معها حلولها يكون أفضل.

مشكورين مقدماً...

وفقكم الله...

#2

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

أخي الكريم لكي تفهم الموضوع جيد:

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

في مثالك المتغير S موجود في مكان ما في الذاكرة و قيمته 10

يجب أنتفرق بين أمرين

Procedure fafe(var i: integer);

تبعث المكان الموجود به المتغير S و ليس قيمته

و هنا يصبح المتغير i و المتغير s في نفس المكان في الذاكرة

أي تغيير في i هو تغيير في S

لكن لو لإستخدمت

Procedure fafe(i: integer);

لا حظ من دون كتابة Var

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

أو بمعنى أخر يقوم المترجم بوضع قيمة هذا المتغير 10 في موضع أخر في الذاكرة

و بالتالي أي تغيير به لا يغير بقيمة المتغير الأصلي S

أمل أنك قد فهمت :blink:

d4baa0.gif
#3
DeltaAziz كتب:
وعليكم السلام و رحمة الله و بركاته

أخي الكريم لكي تفهم الموضوع جيد:

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

في مثالك المتغير S موجود في مكان ما في الذاكرة و قيمته 10

يجب أنتفرق بين أمرين

Procedure fafe(var i: integer);

تبعث المكان الموجود به المتغير S و ليس قيمته

و هنا يصبح المتغير i و المتغير s في نفس المكان في الذاكرة

أي تغيير في i هو تغيير في S

لكن لو لإستخدمت

Procedure fafe(i: integer);

لا حظ من دون كتابة Var

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

أو بمعنى أخر يقوم المترجم بوضع قيمة هذا المتغير 10 في موضع أخر في الذاكرة

و بالتالي أي تغيير به لا يغير بقيمة المتغير الأصلي S

أمل أنك قد فهمت :blink:

ممتاز والله ممتاز روعة والله يفتح عليك :)

{ربى زدنى علما}

#4

السلام عليكم

بارك الله فيك أخي DeltaAziz

لكن لا أدري ما الفائدة من استخدام الإجرائية fafe من دون وضع كلمة var قبل المتغير i ، لأني لو وضعتها من دون var قبل المتغير لن يحدث أي تغيير في البرنامج، مثلاً:

Procedure fafe( i: integer);
begin
i := i + 5;
end;

لو طبقتها على البرنامج :

procedure Tform1.button1click( sender: Tobject);
var
s: integer;
begin
s:= 10;
fafe(s);
label1.caption:= s;
end;

فهذا لن يحدث أي تغيير على المتغير s فما الفائدة إذاً من استخدام الإجرائية؟

ستبقى قيمة s = 10 ..

في حين لو وضعت كلمة var ستتغير القيمة إلى 15.

..

ومشكور مرة أخرى على شرحك.

بس ما جاوبني أحد على أسئلتي وطلبي :

1 - هل هذا الفهم صحيح لمفهوم الإرسال ؟

2 - هل هناك فرق بين مفهوم الإرسال والتمرير Passing أم أنهما كلمتان لمعنى واحد ؟

3 - ما هو معنى التغليف ؟

## طلب : إذا كان عند بعض الإخوة بعض التمارين حول الإجراءات والدوال فأرجو أن يضعها هنا حتى أتمكن من فهم هذا الموضوع بشكل جيد، وإذا كان معها حلولها يكون أفضل.

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

تحياتي !

#5

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

الارسال هو ان تقوم بنسخ البيانات من متغيرمعين الى متغير مؤقت يتولد عند استدعاء الروتين ( الدالة او الاجراء )

وينتهي بانتهائهما ( الدالة او الاجراء ) كما ان قيمة المتغير الاصلي تظل ثابتة

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

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

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

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

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

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

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

#6

1 - هل هذا الفهم صحيح لمفهوم الإرسال ؟

نعم . فهم جيد

2 - هل هناك فرق بين مفهوم الإرسال والتمرير Passing أم أنهما كلمتان لمعنى واحد ؟

التمرير له نوعان التمرير بالقيمة والتمرير بالمرجع , التمرير بالقيمة هو من دون VAr أما التمرير بالمرجع ((الكلمة الصحيحة)) هو نفس ماسميتة الإرسال

#7

الأخ رومانوف والأخ عروة، بارك الله فيكما وجزاكما خير الجزاء، فقط أفدتموني كثيراً.

أسأل الله لكما التوفيق في الدنيا والآخرة..

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

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

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