۰
subtitle
ارسال: #۱
  
فراخوانی با نام
سلام
در زیر تابع فراخوانی با نام دارد:
B[0]=2;
B[1]=3
I=0;
f(B[I])//call by name
در تابع f مقدار I تغییر بکنه روی I تاثیر نمیزاره نه؟
و اینکه تنها تغییرات بر روی B[0] صورت میگیره؟درسته؟
در زیر تابع فراخوانی با نام دارد:
B[0]=2;
B[1]=3
I=0;
f(B[I])//call by name
در تابع f مقدار I تغییر بکنه روی I تاثیر نمیزاره نه؟
و اینکه تنها تغییرات بر روی B[0] صورت میگیره؟درسته؟
۲
ارسال: #۲
  
RE: فراخوانی با نام
سلام .
شما باید توجه کنی که اینجا تنها آرایه B رو به صورت "فراخونی با نام" به زیر برنامه میفرستی و داخل زیر برنامه هم شما با یه متغیر مثل x که به جای آرایه میشینه میتونی به آرایه اصلی دسترسی داشه باشی . ولی در مورد متغیر i باید بگیم که این متغیر رو که شما به زیر برنامه نفرستادی چطور تابع F باید بهش دسترسی داشته باشه؟
پس برای رجوع به i داخل زیر برنامه باید حتما اونو به صورت سراسری تعریف کنی. مثال زیر رو ببین :
توی این مثال ما فقط آرایه B رو به صورت "فراخونی با نام" به زیر برنامه F فرستادیم و متغیر i رو هم برای ارتباط این دو تابع به صورت سراسری تعریف کرده ایم . اگر ما متغیر i رو به صورت سراسری تعریف نمیکردیم قطعا خطا وجود داشت چون داخل تابع F متغیر i تعریف نشده است . پس اونو به صورت سراسری تعریف میکنیم و به دلیل اینکه متغیر سراسری هستش پس داخل تابع F یا هر جای دیگه ای که مقدارش رو تغییر بدیم روش تاثیر میگذاره و مقدارش عوض میشه . یعنی بعد از اجرای این برنامه متغیر i هم مقدارش با ۳ تغییر میکنه فقط به خاطر اینکه به صورت سراسری تعریف شده است.
در واقع اگه بخوایم خیلی خلاصه بگیم متغیر i کلید ارتباط این دو تابع است که میخوان به صورت "فراخوانی با نام" و به کمک آرایه B با هم ارتباط داشته باشن و میدونیم برای ایجاد همچین ارتباطی باید i رو به صورت سراسری تعریف کنیم.
شما باید توجه کنی که اینجا تنها آرایه B رو به صورت "فراخونی با نام" به زیر برنامه میفرستی و داخل زیر برنامه هم شما با یه متغیر مثل x که به جای آرایه میشینه میتونی به آرایه اصلی دسترسی داشه باشی . ولی در مورد متغیر i باید بگیم که این متغیر رو که شما به زیر برنامه نفرستادی چطور تابع F باید بهش دسترسی داشته باشه؟
پس برای رجوع به i داخل زیر برنامه باید حتما اونو به صورت سراسری تعریف کنی. مثال زیر رو ببین :
[tex]Var $ i : integer[/tex]
[tex]function $ f(x:integer):interger;[/tex]
[tex] i=1;[/tex]
[tex] x=1;[/tex]
[tex] i=3;[/tex]
[tex] x=3;[/tex]
[tex] end[/tex]
[tex] begin[/tex]
[tex] B:array[1..10] of integer[/tex]
[tex] i=1;[/tex]
[tex] f(B[i]);[/tex]
[tex] End.[/tex]
[tex]function $ f(x:integer):interger;[/tex]
[tex] i=1;[/tex]
[tex] x=1;[/tex]
[tex] i=3;[/tex]
[tex] x=3;[/tex]
[tex] end[/tex]
[tex] begin[/tex]
[tex] B:array[1..10] of integer[/tex]
[tex] i=1;[/tex]
[tex] f(B[i]);[/tex]
[tex] End.[/tex]
توی این مثال ما فقط آرایه B رو به صورت "فراخونی با نام" به زیر برنامه F فرستادیم و متغیر i رو هم برای ارتباط این دو تابع به صورت سراسری تعریف کرده ایم . اگر ما متغیر i رو به صورت سراسری تعریف نمیکردیم قطعا خطا وجود داشت چون داخل تابع F متغیر i تعریف نشده است . پس اونو به صورت سراسری تعریف میکنیم و به دلیل اینکه متغیر سراسری هستش پس داخل تابع F یا هر جای دیگه ای که مقدارش رو تغییر بدیم روش تاثیر میگذاره و مقدارش عوض میشه . یعنی بعد از اجرای این برنامه متغیر i هم مقدارش با ۳ تغییر میکنه فقط به خاطر اینکه به صورت سراسری تعریف شده است.
در واقع اگه بخوایم خیلی خلاصه بگیم متغیر i کلید ارتباط این دو تابع است که میخوان به صورت "فراخوانی با نام" و به کمک آرایه B با هم ارتباط داشته باشن و میدونیم برای ایجاد همچین ارتباطی باید i رو به صورت سراسری تعریف کنیم.
ارسال: #۳
  
RE: فراخوانی با نام
(۲۰ آذر ۱۳۹۱ ۱۰:۴۱ ق.ظ)mp1368 نوشته شده توسط: سلام .
شما باید توجه کنی که اینجا تنها آرایه B رو به صورت "فراخونی با نام" به زیر برنامه میفرستی و داخل زیر برنامه هم شما با یه متغیر مثل x که به جای آرایه میشینه میتونی به آرایه اصلی دسترسی داشه باشی . ولی در مورد متغیر i باید بگیم که این متغیر رو که شما به زیر برنامه نفرستادی چطور تابع F باید بهش دسترسی داشته باشه؟
پس برای رجوع به i داخل زیر برنامه باید حتما اونو به صورت سراسری تعریف کنی. مثال زیر رو ببین :
[tex]Var $ i : integer[/tex]
[tex]function $ f(x:integer):interger;[/tex]
[tex] i=1;[/tex]
[tex] x=1;[/tex]
[tex] i=3;[/tex]
[tex] x=3;[/tex]
[tex] end[/tex]
[tex] begin[/tex]
[tex] B:array[1..10] of integer[/tex]
[tex] i=1;[/tex]
[tex] f(B[i]);[/tex]
[tex] End.[/tex]
توی این مثال ما فقط آرایه B رو به صورت "فراخونی با نام" به زیر برنامه F فرستادیم و متغیر i رو هم برای ارتباط این دو تابع به صورت سراسری تعریف کرده ایم . اگر ما متغیر i رو به صورت سراسری تعریف نمیکردیم قطعا خطا وجود داشت چون داخل تابع F متغیر i تعریف نشده است . پس اونو به صورت سراسری تعریف میکنیم و به دلیل اینکه متغیر سراسری هستش پس داخل تابع F یا هر جای دیگه ای که مقدارش رو تغییر بدیم روش تاثیر میگذاره و مقدارش عوض میشه . یعنی بعد از اجرای این برنامه متغیر i هم مقدارش با ۳ تغییر میکنه فقط به خاطر اینکه به صورت سراسری تعریف شده است.
در واقع اگه بخوایم خیلی خلاصه بگیم متغیر i کلید ارتباط این دو تابع است که میخوان به صورت "فراخوانی با نام" و به کمک آرایه B با هم ارتباط داشته باشن و میدونیم برای ایجاد همچین ارتباطی باید i رو به صورت سراسری تعریف کنیم.
ببخشید که خیلی دیر تشکر میکنم توضیحتون خیلی خوب بودممنون
۰
ارسال: #۴
  
فراخوانی با نام
اولا باید مشخص کنی توی تابع دقیقا چه چیزهایی داریم.
چون ممکنه I متغیری سراسری بیرون تابع باشه.ممکن هست یه I دیگه داخل خودشم تعریف کرده باشیم.
به نظر میاد سراسری هست و توی تابع تعریف نشده.پس اگه از توی تابع بیایم دستکاریش کنیم باید دستکاری اعمال بشه.
ضمنا فراخوانی با نام به جای ورودی تابع شما عبارت [۰]B دقیقا ابتدا جایگزین تمام متغیرهای منتسب میشه. و در نهایت روی خود [۰]B هم تغییرات اعمال میشه(زیرا شبیه فراخوانی ارجاعی هست)
---
مثال اگه میخواید :
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
چون ممکنه I متغیری سراسری بیرون تابع باشه.ممکن هست یه I دیگه داخل خودشم تعریف کرده باشیم.
به نظر میاد سراسری هست و توی تابع تعریف نشده.پس اگه از توی تابع بیایم دستکاریش کنیم باید دستکاری اعمال بشه.
ضمنا فراخوانی با نام به جای ورودی تابع شما عبارت [۰]B دقیقا ابتدا جایگزین تمام متغیرهای منتسب میشه. و در نهایت روی خود [۰]B هم تغییرات اعمال میشه(زیرا شبیه فراخوانی ارجاعی هست)
---
مثال اگه میخواید :
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
۰
ارسال: #۵
  
فراخوانی با نام
(۲۰ آذر ۱۳۹۱ ۱۰:۴۱ ق.ظ)mp1368 نوشته شده توسط:ببخشید آخرش اگه فراخوانی با نام بشه جوابش چی میشه؟[tex]Var $ i : integer[/tex]
[tex]function $ f(x:integer):interger;[/tex]
[tex] i=1;[/tex]
[tex] x=1;[/tex]
[tex] i=3;[/tex]
[tex] x=3;[/tex]
[tex] end[/tex]
[tex] begin[/tex]
[tex] B:array[1..10] of integer[/tex]
[tex] i=1;[/tex]
[tex] f(B[i]);[/tex]
[tex] End.[/tex]
توی این مثال ما فقط آرایه B رو به صورت "فراخونی با نام" به زیر برنامه F فرستادیم و متغیر i رو هم برای ارتباط این دو تابع به صورت سراسری تعریف کرده ایم . اگر ما متغیر i رو به صورت سراسری تعریف نمیکردیم قطعا خطا وجود داشت چون داخل تابع F متغیر i تعریف نشده است . پس اونو به صورت سراسری تعریف میکنیم و به دلیل اینکه متغیر سراسری هستش پس داخل تابع F یا هر جای دیگه ای که مقدارش رو تغییر بدیم روش تاثیر میگذاره و مقدارش عوض میشه . یعنی بعد از اجرای این برنامه متغیر i هم مقدارش با ۳ تغییر میکنه فقط به خاطر اینکه به صورت سراسری تعریف شده است.
در واقع اگه بخوایم خیلی خلاصه بگیم متغیر i کلید ارتباط این دو تابع است که میخوان به صورت "فراخوانی با نام" و به کمک آرایه B با هم ارتباط داشته باشن و میدونیم برای ایجاد همچین ارتباطی باید i رو به صورت سراسری تعریف کنیم.
۰
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close