View Full Version : کمک از مهندسین نرم افزار کامپیوتر
jalil_enrique
10 October 2007, 05:07 PM
در زبان c نتیجه این برنامه چی میشه ؟؟ اگه جایی ایراد داره لطفا راهنمایی کنین
(proc a(Var X:integer,j:integer
}
;if X<=j then exit
;X=X-1
;(a(X,j
(write(X
{
لطفا اگه ممکنه سریع تر جواب بدین ممنون میشم
shaahani
10 October 2007, 11:17 PM
من زبان C بلد نیستم اما این کد همچین معنی میدهد:
proc a(Var X:integer,j:integer
{
if X<=j then exit;
X=X-1;
a(X,j);
write(X)
}
در ابتدا پروسیجری به نام a تعریف شده که هر بار از داخل برنامه فراخوانی بشه مجموعه دستور داخل آن اجرا میشه
حالا دستورات داخل چی هست
ابتدا بررسی میشه که حتماً مقدار x بزرگتر از مقدار J باشد
اگر این چنین نباشد بلا فاصله از این پروسیجر خارج میشوید
حال اگر مقدار X از J بزرگتر باشد مقدار یک واحد از X کم میشود.
در قسمت بعد با قسمت تو در تو یی مواجه میشویم که پروسیجر را از داخل خودش فراخوانی میکند
و مجدداً فرامین از ابتدا شروع به کارکرد میکند
درنتیجه هیچ گاه دستور چاپ مقدار ایکس اجرا نمیشود
من نمیدانم برنامه نویس در این قسمت سعی در انجام چه کاری داشته است به همین دلیل نمیتوانم بیشتر از این نظر بدهم
بهتر است از نظر منطقی آن را بررسی کنیم :
بر فرض مثال مقدار ورودی x= 10 و j=8 است
در خط اول x بزرگتر از j است و کار ادامه پیدا میکند
در خط دوم بلافاصله مقدار یک واحد از x کم میشود بنابراین مقدار X = 9 میشود
درخط سوم مجداداً پروسیجر فراخوانی میشود این بار مقدار X = 9 و مقدار J=8 است
در خط اول x بزرگتر از j است و کار ادامه پیدا میکند
در خط دوم بلافاصله مقدار یک واحد از x کم میشود بنابراین مقدار X = 8 میشود
درخط سوم مجداداً پروسیجر فراخوانی میشود این بار مقدار X = 8 و مقدار J=8 است
درخط اول X برابر با j میشود و در همینجا کار این پروسیجر به پایان میرسد
اگر باز هم متوجه نشدید میتوانید همین مراحل را در جدول ترسیم کنید
jalil_enrique
11 October 2007, 12:42 AM
ممنون از توضیحات شما
شکست نفسی نفرمایید خوب جواب دادین
Orion
13 April 2008, 06:02 PM
يه كم تاپيك قديميه ولي برنامه يه تابع Recursive هست كه در صورتيكه X از j بزرگتر باشه، تمامي اعداد بين j و X را چاپ خواهد كرد.
vBulletin v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.