زمان کنونی: ۲۸ مرداد ۱۳۹۶, ۰۳:۲۶ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

سوال مفهومی : تفاوت فراخواتی با نام؛مقدار؛نتیجه و ...

ارسال:
  

zahra412 پرسیده:

سوال مفهومی : تفاوت فراخواتی با نام؛مقدار؛نتیجه و ...

سلام دوستان
من نمیتونم تفاوت فراخواتی با نام؛مقدار؛نتیجه و ... را بفهمم
جندبار هم این سوال پرسیده شده اما کسی جواب نداده
اکه ممکنه با مثال توضیح بدید
ممنون
نقل قول این ارسال در یک پاسخ

۳
ارسال:
  

variant20002000 پاسخ داده:

سوال مفهومی

اول call by value
تابع xyz دوبار پارامتر k رو با مقدار ۱۰۰ دریافت میکنه وارد تابع میشه شرط if برقرار نیست پس از تابع میاد بیرون و مقدار k که همون ۱۰۰ هست رو چاپ میکنه.

call by reference
توی این نوع فراخوانی اول تابع با مقدار متغییر k که همون ۱۰۰ هست فراخوانی میشه ولی چون آدرس متغیر ارسال میشه‌، هر تغییری توی تابع( روی پارامتر مجازی) باعث تغییر مقدارk (پارامتر واقعی) میشه. بنابر این مقدار k توی تابع به وسیله دستور i=300 تبدیل به ۳۰۰ میشه ... بنابر این مقدار پارامتر های مجازی i و j برابر هم میشه و شرط ارضاع میشه بنابر این مقدرا j برابر با ۳۰۰ * ۲ + ۳۰۰ میشه (درواقع چون J هم به k اشاره میکنه این تغییر باعث تغییر مقدار k یا همون پارامتر واقعی میشه) پس تا اینجا مقدار J و به دنبال اون مقدار k برابر با ۹۰۰ میشه

call by value result
توی این فراخوانی وقتی تابع xyz فراخوانی میشه مقدار که k قبل از فراخوانی ۱۰۰ هست توی متغیر های i , j کپی میشه پس تا اینجا i و j هر دو مقدار ۱۰۰ دارند. بعد توی تابع مقدار i تغییر میکنه و تبدیل به ۳۰۰ میشه بعد شرط i=j چک میشه چون i=300 و j=100 اون خط جلوی If اجرا نمیشه و تابع تموم میشه.. موقع خروج از تابع پارامتر های مجازی (i,j) توی پارامتر های واقعی (k) به ترتیب کپی میشند. یعنی اول ۳۰۰ کپی میشه و بعد ۱۰۰ .... پس آخرین مقدار k برابر با ۱۰۰ میشه و چاپ میشه

گزینه ۴ درسته...! Smile
نقل قول این ارسال در یک پاسخ

۱
ارسال:
  

variant20002000 پاسخ داده:

سوال مفهومی

فراخوانی یک تابع با مقدار همان فراخوانی عادی هست که توی همه‌ی زبان های برنامه سازی مینویسیم (پارامتر های مجازی در پارامتر های واقعی کپی می شوند)
فراخوانی با ارجاع در واقع در واق به جای خود متغیر‌ها آدرس متغیر‌ها رو به صورت آرگومان به تابع میفرستیم( چون آدرس رو میفرستیم هر تغییری که روی متغیر های واقعی اعمال بشه روی متغیر های مجازی یعنی همون هایی که به عنوان پارامتر ارسال کردیم هم اعمال میشه)
فراخوانی با مقدار-نتیجه در عمل و از دید برنامه نویس مثل فراخوانی با ارجاع هست با این تفاوت که در موقع ورود به تابع اول پارامتر های مجازی رو روی پارامتر های واقعی کپی میکنه و بعد از تغییرات رو پارامتر های واقعی موقع خروج از تابع اون هارو مجدداً روی پارامتر های مجازی کپی میکنه.
نقل قول این ارسال در یک پاسخ

۱
ارسال:
  

پشتکار پاسخ داده:

سوال مفهومی

در کتاب پرات نوشته در صورتیکه از متغیر های ساده ای مثل int, ... استفاده کنیم فراخوانی با نام همانند فراخوانی با ارجاع می شود.
نقل قول این ارسال در یک پاسخ

ارسال:
  

hoda ahmadi پاسخ داده:

RE: سوال مفهومی : تفاوت فراخواتی با نام؛مقدار؛نتیجه و ...

(۲۵ بهمن ۱۳۹۰ ۰۶:۱۳ ب.ظ)پشتکار نوشته شده توسط:  در کتاب پرات نوشته در صورتیکه از متغیر های ساده ای مثل int, ... استفاده کنیم فراخوانی با نام همانند فراخوانی با ارجاع می شود.

درسته هروقت که متغیر ساده باشه و یا عضو معین و مشخصی از یک آرایه باشد فراخوانی با نام و ارجاع نتایج یکسانی دارند اما اگر عضو نامعینی از آرایه باشد متفاوتند.
عضو معین مثل:B[5]5 و نامعین مثل:[B[I

(۳۰ دى ۱۳۹۰ ۱۰:۲۷ ب.ظ)zahra412 نوشته شده توسط:  خیلی ممنون از توضیحات خوبتون
حالا میشه بر اساس توضیحاتتون این تست را حل کنید؟ ممنون

سلام جواب گزینه ۴
تو این سوال i,jپارامترهای مجازی و kپارامتر واقعی
۱)فراخوانی با مقدار:مقدار پارامتر واقعی K که ۱۰۰ میباشد در پارامترهای مجازی i,j کپی میشود و هرگونه تغییری روی پارامترهای مجازی تاثیری در پارامتر واقعی نمیگذارد پس در انتها همان مقدار واقعی ۱۰۰ چاپ میشود.
۲)فراخوانی بامقدار-نتیجه: اولش مثل روش با مقدرا ر ، مقدار K در i,j کپی میشه بعد میبینیم که i مقدار ۳۰۰ میگیره اما چون در شرط if ، متغیرهای i,j برابر نیستن پس شرط اجرا نمیشه .اما در این روش در انتها مقادیر پارامتر مجازی در واقعی کپی میشوندو ودر(k,k) write مدار i در k اول , مقدار j در k دوم کپی میشود و مقدار نهایی یعنی k دوم: ۱۰۰/
۳)فراخوانی با ارجاع:آدرس پارامتر واقعی به پارامتر مجازی ارسال شده و هر تغییری روی پارامتر مجازی ،پارامتر واقعی را هم تغییر میدهدو
در اینجا ابتدا آدرس K به i,j ارسال میشود یعنی هر دو به یک آدرس اشاره میکنند پس در شرط if برقرار است و با اجرای حلقه j مقدار ۹۰۰ میگیرد.
۴)فراخوانی بانام:نام پارامتر واقعی kدر پارامترهای مجازی i,j کپی میشود و با هر تغییر پارامتر مجازی باید پارامتر واقعی هم ارزیابی شود.پس در اینجا وقتی i=300 یعنی k=300و باز یعنی j=300 پس شرط برقرار است و جواب=۹۰۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

zahra412 پاسخ داده:

RE: سوال مفهومی

خیلی ممنون از توضیحات خوبتون
حالا میشه بر اساس توضیحاتتون این تست را حل کنید؟ ممنون


فایل‌(های) پیوست شده

نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

- rasool - پاسخ داده:

سوال مفهومی

اگه اشتباه نکنم توی کتاب آقای مقسمی دیدم نوشته بود که اگه پارامتر (متغیر)مون ساده باشه اونوقت ارجاع و نام یک نتیجه می دهند. اما اگه مثلا پارامتر ما بصورت آرایه ای باشه اونوقت لزوما این دو تا نتیجه یکسانی نمی دهند.
و به نظر من هم درست گفته.

بازم خودتون تحقیق بفرمایید ...
نقل قول این ارسال در یک پاسخ



پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close