تالار گفتمان مانشت
سوال قابل تامل در باره اثرات - نسخه‌ی قابل چاپ

سوال قابل تامل در باره اثرات - لهمشد - ۱۶ دى ۱۳۸۹ ۰۲:۰۹ ب.ظ

با سلام:
لطفا با ذکر دلیل بفر مایید کدام گزینه درست است:
قطعه برنامه زیر نشان دهنده وجود کدامیک از عوامل زیر می باشد
کد:
int func(){
static int i=0;
i++;
return i;
}
int main()
{
for(int i=0;i<=10;i++)
cout<<func();
return 0;}
۱-وجود اثرات جانبی
۲-وجود ارگومان های منی
۳-وجود سر ریز
۴-وجود خود اصلاحی

RE: سوال قابل تامل در باره اثرات - ۵۴m4n3h - 21 دى ۱۳۸۹ ۰۹:۵۳ ب.ظ

خود اصلاحی که نیست چون توی خود اصلاحی کد خودش رو تغییر میده که این جا همچین چیزی نیست و در ضمن زبان های دستوری مثل ++C اصلاً خود اصلاحی ندارند
سرریز هم نداره چون یه for ده تایی هست که هیچ جوری امکان سرریزی توش وجود نداره
به نظرم اثر جانبی هم نداره
فکر میکنم جواب گزینه‌ی ۲ باشه، یعنی آرگومان ضمنی، اونم به خاطر این که توی تابع func متغیر i فقط یک بار declare میشه و مقدار صفر میگیره، اما دفعات بعدی که فراخوانی بشه مقدار قبلی خودش رو حفظ میکنه

(اما کلاً توی جوابی که دادم مطمئن نیستم)


پس نوشت‌: پس از بحثی که با خانم/آقای sepid داشتیم به این نتیجه رسیدیم که جواب گزینه‌ی ۴ هست.

سوال قابل تامل در باره اثرات - sepid - 22 دى ۱۳۸۹ ۰۷:۲۵ ب.ظ

به نظر من جواب خود اصلاحی هست.
یکی از راههای خود اصلاحی تغییر در کد هست.
راه دیگش داده های محلی هست که در اجراهای مختلف نگه داری میشن که متغیر static اینجوریه.

RE: سوال قابل تامل در باره اثرات - ۵۴m4n3h - 22 دى ۱۳۸۹ ۰۷:۴۸ ب.ظ

(۲۲ دى ۱۳۸۹ ۰۷:۲۵ ب.ظ)sepid نوشته شده توسط:  یکی از راههای خود اصلاحی تغییر در کد هست.
راه دیگش داده های محلی هست که در اجراهای مختلف نگه داری میشن که متغیر static اینجوریه.

جداً؟! من تا حالا این موضوع رو ندیده بودم! ممکنه آدرس جایی که این موضوع رو نوشته بگید منم برم بخونم؟ من قبلاً فکر میکردم فقط همون اولیه!

RE: سوال قابل تامل در باره اثرات - ۵۴m4n3h - 22 دى ۱۳۸۹ ۰۸:۴۸ ب.ظ

احتمالاً به این خاطر که متغیرهای استاتیک هم مثل کد توی حافظه‌ی ایستا هستند این موضوع گفته شده؟
اما تو کتاب pratt برای زبان هایی که خوداصلاحی ندارند این رو نوشته:
نقل قول: During execution the static part of the subprogram definition is both inaccessible and
invisible
نگفته کل حافظه‌ی ایستا، فقط گفته تعریف زیربرنامه غیرقابل دسترس هست!

از طرفی یه جای دیگه گفته که C و پاسکال خوداصلاحی ندارند، در حالی که میدونم C متغیرهای استاتیک رو پشتیبانی میکنه!

و برای خوداصلاحی گفته:
نقل قول: Facilities allow subprogram definitions to be treated as run-time data objects in themselves


سوال قابل تامل در باره اثرات - sepid - 23 دى ۱۳۸۹ ۰۸:۴۸ ق.ظ

غیر قابل دسترس بودن ربطش به خوداصلاحی چیه؟

من از روی جزوه قبایی اینو خوندم.
نمی دونم اون منبعش چه کتابیه .

آرگومان ضمنی نمیتونه جواب باشه چون آرگومان ضمنی وقتی مطرح میشه که ما دقیقا نتونیم ورودیهای تابع رو مشخص کنیم و یک عنصر به صورت ضمنی به عنوان ورودی باشه، ولی اینجا ما میدونیم i جزو ورودیهاست.

RE: سوال قابل تامل در باره اثرات - ۵۴m4n3h - 23 دى ۱۳۸۹ ۰۱:۱۹ ب.ظ

(۲۳ دى ۱۳۸۹ ۰۸:۴۸ ق.ظ)sepid نوشته شده توسط:  غیر قابل دسترس بودن ربطش به خوداصلاحی چیه؟
زبان هایی که در زمان اجرا به تعریف زیربرنامه دسترسی ندارند، خوداصلاحی ندارند.
توی کتاب پرت فقط همین یه مورد رو دیدم که برای خوداصلاحی گفته!

جزوه‌ی قبایی رو دیدم، قانع شدم که کاربرد خاصی از متغیرهای استاتیک میتونه خوداصلاحی تلقی بشه.
حق با شماست، گزینه‌ی ۴ درسته Smile

سوال قابل تامل در باره اثرات - samanium - 23 دى ۱۳۸۹ ۰۲:۳۲ ب.ظ

غیر قابل دسترس بودن به خود اصلاحی ربط داره
چون اگه کدی قابل دسترسی نباشه نمی تونیم توش تغییر بدیم