صفحه 1:
صفحه 2:
الگوریتم و برنامه ای بنویسید که ابتدا یک
عدد صحیح مثبت را, که فرض می شود
1<ه , از ورودي بخواند. سپس درایه هاي
سه ماتریس به اسامي 8 ¥ مر و رار كه
» معکوسپذیر فرض می شود, a طور
جداگانه خوانده و مقدار det (AB+C*) را
محاسبه. و جاب كتد.
صفحه 3:
زیرالگوریتم ها: 1) ضرب کننده دو ماتریس؛ 2) جمع
کننده دو ماتریس؛ 3) وارون کننده یک ماتریس؛ 4۸)
مجاستبه کنندح دفزفیبان؟ 5) خواننده:درانه:هاي یک
ماتریس.
کابرالگوزتلی
بکار گرفته شده
)5(
)5(
آنچه که به
زیرالگوریتم
Spiga, S15
A
۸و8
C15 AB
روم
كاري كه زيرالكوريتم انجام مى
دهد
خواندن ۸ و ذخیره کردن آن در
حافظه
خواندن 8 و ذخیره کردن آن در
حافظه
خواندن © و ذخيره كردن آن در
حافظه
محاسبه و برگرداندن ۸8
محاسبه و برگرداندن 2)
محاسبه و برگرداندن -۸8+6
ل ما
صفحه 4:
1 نوشین الخوریتم ساده تر مین و33 جرا كةء كان
Masala بزرگ بین زیرالگو pis هايي کوچک, به
انضمام یک الگوریتم اصلي کوچک تقسیم می گردد.
اکنون نوشتن زیرالگوریتمها به خاطر حجم آنها و
محدودیت کارشان ساده خواهد بود.
2( آزمایش درستي الگوریتم به آزمایش یک به یک
زیرالگوریتم ها خلاصه شده و در نتیجه مشکل
آزمايش الگوریتم نیز حل می گردد. بویژه, اگر
اشتباهات احتمالي وجود داشته باشند, اصلاح آنها در
هر زیرالگوریتم مستقل راحتتر و سریعتر انجام مى
يرد.
3) از تكرار برخي بخشها در قسمتهاي مختلف
برنامه, و در نتیجه از اتلاف وقت, جلوگيري می
شود.
4) هر زیرالگوریتم را می توان بطور مستقل براي
صفحه 5:
۶ یت زیرالجوریتم هی حاري, انجام نمی
دهد مگر اینکه یک زیرالگوریتم دیگر با
الگوریتم اصلي, که بعد از اين آن را
الگوریتم (واحد) فراخوان خواهیم گفت, آن
silos ily
در ایتصورت, هي , تک و یا جتد مقداز به
زیرالگوریتم داده شده و زیرالگوریتم شروع
به اغا مى كند. در نتبجه. آين اجرا..ما
كاري انجام مى شود (مثل خواندن و در
حافظه ذخیره کردن, چاپ کردن, و يا یک
پردازش دیگر) و با یک یا چند مقدار به
الگوریتم فراخوان باز می گردد.
صفحه 6:
قاعده. در شروع یک زیرالگوریتم, نام
آن به انضمام متغيرهاي ورودي به
زیرالگوریتم و خروجي از آن را در داخل
یک بيضي ب قرار مى دهیم. مثلا .
2 ماه a Reader (a, b, 9 اس e ره ا
اتمام الگوریتم را نیز با یک بیضی با نوشته
ععلام خواهیم کرد.
صفحه 7:
متغیر هاي داخل پرانتز را آركومانهاي
صوری زیرالگوریتم می نامیم. اين آرگومانها
بر دو دسته تقسیم می شوند. دسته اول, که
آنها را پارامترهاي مقدار می ناميم,
آرگومانهاي صوري ورودي به زیرالگوریتم
مى باشند؛ يعني مقادير را از الگوریتم
فراخوان به زیربرنامه می آورند. دسته دوم,
به نام پارامترهاي perio , آرگومانهاي
صوري خروجي از زيرا الكوريتم مى باشند؛
يعني مقاديري را كه از اجراي زيرالكوريتم
حاصل شده اند از آن خارج كرده و به
الگم, رتم ف اخوان GL مه yl if
صفحه 8:
قاعده. وقتي اجراي یک زیرالگوریتم
تمام شد, کنترل اجراي برنامه به
موقعیت بعد از نقطه ای که از انجا
زیرالگوریتم فراخواني شده بود منتقل
مى شود.
صفحه 9:
در ادامه خواهیم دید که نوع
زیرالگوریتمها, و همچنین نوع
قراخواني انها ناوت اسحه ولي نگ
نکته در تمام اين فراخواني ها
مشترک است و ان اینکه,
!! در لحظه فراخواني یک
زيرا الگوریتم توسط الگوریتم فراخوان
نام آن زیرالگوریتم به انضمام برخي
متغیرها یا عبارتهايي ذکر می شود.
Dnwar/y ۱و ۱۶
صفحه 10:
آرگومانواي فعال م می نامیم. آرگومانهاي
فعال نيز به دو دسته ورودي به الگوریتم
فراخوان و خروجي از أن تقسيم مى شوند.
أركومانهاي ورودي به الكوريتم و میج
Stayt + متغير (آرگومانهاي" صوري خروجي
از زیرالگوریتم) متناظر هستند.
آرگومانهاي خروجي از الگوریتم فراخوان
wo توانند یک مقدار (متغیر. ثابت, يا یک
عبارت چبري) باشند. اين آرگومانها با
,پارامترهاي مقدا ر (آرگومانهای صوري ورودي
صفحه 11:
قاعده. تعداد, ترتیب» و نوع آرگومانهاي
صوري بايد با تعداد. ترتیب و نوع
آرگومانهاي فعال متناظر با آنها کاملا
سازگار باشند.
8 آرگومانهای فعال و صوري متناظر می توانند همنام
و یا غیر همنام باشند.
11
صفحه 12:
مثلا اگر در دستور معرف
| ۳ لسحصووسی>
نوع آرگومانهاي « و « بصورتي که هست مشخص شده
باشند, آنگاه به منظور فراخواني زیرالگوریتم براي
مقدان كاي اكه ترص مت شود از قبل :دن ره
ذخيره شده ) متناظر با آركومان صوري * , و مقدار
صحیح 8 متناظر با آرگومان صوري ۰ , می توان
فراخواني به صورت (8 1۳۹ را انجام داد ولي
ز فراخواني درست نمی , >
power (y) (,8] 16۲ ( 2۵,0 ۷) ۲کبیرو۲
12
صفحه 13:
RES)
صفحه 14:
در برنامه نویسی برگردان
زیرالگوریتم را زیربرنامه (-طاو
30 و بركردان الكوريتم
اصلي را برنامه اصلي main)
(program
یک زیربرنامه در برنامه نویسی
پاسکال در نمودار (الف) صفحه بعد
مشخص شده است. رز ررء کب
14
صفحه 15:
ازاين به بعد pm
از زیربرنامه ها را یک واحد خواهيم
گفت. به برنامه اصلي به عنوان واحد
اصلي و به هر یک از زیربرنامه ها با
نام آن واحد ارجاع خواهیم نمود. یک
برنامه قابل اجراء شامل برنامه اصلی
و زیربرنامه هایش, را یک برنامه
کامل می نامیم.
چند واحد تودرتو را نشان می دهد.
صفحه 16:
لا دستور معرف برنامه اصلي, همان
دستور
اسم برنامه Program
است و دستورهاي معرف زيربرنامه ها
16
صفحه 17:
شوند BEES, |
یک زیربرنامه تعریف می شوند
می نامند.
قاعده حوزه عمل پارامترهاي
پارامترهاي مقدار و متفيرهاي موضعي
فقط در خود آن واحد و واحدهاي
lo خلی ان قابل دسترسي (استفاده)
هستند. اينها در هيج واحد خارجی
دیربرنامه نمی توانند استفاده شوند.
صفحه 18:
واجدي که پارامتر مقدار با متغیر موضعي
در آن تعریف شده
واحدي که پارامتر مقدار یا متغیر موضعي
فقط در آن قابل دسترسي (استفاده)
است
صفحه 19:
اگر متغیر موضعي یک زیربرنامه در "
حوزه عمل خود در يكي از زیربرنامه ها
نوعش عوض شود آنگاه در آن زیربرنامه
.با همان نوع کار خواهد کرد
صفحه 20:
لا اکر متغیری هم رونت سس *
یک واحر فراخوان خارجی آن استفاده شده
باشد, آنگاه در صورتیکه استفاده آنها با هم
تداخل نداشته باشند می توان به تعریف آن
در واحد فراخوان (خارجی) اکتفا کرده و در
زیربرنامه از تعریف مجدد آن
صرفنظرنمود؛ ِ
ولی در صورتیکه استفاده آنها با هم تداخل
داشته باشند باید هم در زیربرنامه و هم در
آن واحد فراخوان آن متفیر را تعریف کرد؛
در غير اينصورت اثرات مخربی در نتایج
خواهيم داشت كه تشخيص و اصلاح آن
ترا oil (ati,
صفحه 21:
قاعده فراعو
براي اينكه حوزه سل Sole) cles
ها را همواره به خاطر داشته باشيم, يى
شيوه بسيار ساده را ارائه می دهیم. فرض
wo کنیم که هر واحد با یک کادر مرز بندي
شده باشد (مثل نمودار (ب)).
واحدي را مى توان در واحدي دیگر
فراخواني کرد که مرزهاي آن دو را بتوان,
بدون برخورد با هیچ مرزي دیگر, تواسط یک
داخلی فراخوانی کرد.
صفحه 22:
0 | B | A | واحد (زیربرنامه) |
است
واحدي که اين واحد فقط در آن قابل فراخواني |۳۳ A | اصلي: و ۸
صفحه 23:
صفحه 24:
اين زیرالگوریتم را زماني بكار مى بریم
كه بخواهيم تابعي بسازيم (تعريف كنيم)
كه اين تابع در فهرست توابع مترجم زبان
صفحه 25:
ST eee ee te OOS LS
آرگومان صوري داشته ودقيقا یک
wo مقدار به الگوریتم فراخوان با
گرداند. اين مقدار بازگشتي توسط
اسم خود تابع انجام می گیرد. به همین
علت. براي تعریف مقدار تایم. مق
تابع بايد حداقل يى بار در سمت
جب يى دستور انتساب ظاهر
شود تا مقدار تابع را در خود بكيرد. به
علاوه, نوع نتيجه تابع نيز بايد
quae كرود
صفحه 26:
O در اینجا آرگومانهاي صوري همه از
دسته پارامترهاي مقدار (ورودي به
زیرالگوریتم) می باشند و هیچ پارامتر
متغير (خروجی از زیرالگوریتم) نداربم
چون اسم تابع است که ami را به واحد
صفحه 27:
قاعده. هیچیک از آرگومانهاي sh
تایع را دیگر نباید در زیرالگوریتم تابع
توسط دستورهاي خواندن بخوانیم
مقادیر اين آرگومانها از طریق واحد
فراخوان به زیرالگوریتم می ایند.
همجنين مقدار تابع را نباید در
زیرالگوریتم جاب كنيم. اين مقدار
قرار است به واحد فراخوان بازگردد.
صفحه 28:
el علامت «وذء برای یک عدد حقیقی ؛ با
ضابطه زیر تعریف می شود:
tt x<0 SI
اگر 20 0= sign(x)
اك ر0<” 1
صفحه 29:
صفحه 30:
قاعده. فراخواني توایع درست مثل
استفاده از توابع تعریف شده براي
مترجم هر زبان می باشد.
همانطوریکه sly یک مقدار تعریف شده ۲ در
برنامه از تابع سینوس (*)510 استفاده می
کنیم, از wl (5190)۷ نیز به همان شکل
استفاده می نماییم.
صفحه 31:
s+sign(sin(y))
tesin(sign(y))
صفحه 32:
قاعده. در برنامه نويسي, دستور معرف
زیربرنامه های تابع بصورت زير نوشته می
شود:
: نوع مقدار تابع ): آركومانهاي صوري (اسم نابع
Function
صفحه 33:
ممكن است هيج آرگومان صوري نداشته
باشيم. جنين وضعيتى امكان دارد زمانى رخ
دهد كه بخواهيم مقدارى را براى يى متغير
بخصوصی تعریف کنیم. Wo در زیربرنامه el
زیر مقدار عدد نیری » تعریف می گردد:
Function e:real;
Begin
e:=exp(1.0)
End;
صفحه 34:
اماء در صورت وجود آرگومانهای صور و :
آنها به شکل زير (از چپ به راست) ظاهر
خواهند شد.
نوع دسته آخر:دسته آخر ۰ .۰ . : نوع دسته 2:دسته 2: نوع دسته
1 :دسته 1
صفحه 35:
مثلا در دستور معرف
;Function Pad(x,y:real;i,j,k:integer):char
دسته y 9 x Sle prio از نوع حقیقی,
و متغیرهای ز , :, و) از نوع
صحیح بوده, و نوع تأبع ۶۵۵ نیز
کاراکتری می باشد.
صفحه 36:
قاعده. هیچیک از آرگومانهاي صوري در
یک زیربرنامه را دیگر نباید در بلوک ۵۳
آن زیربرنامه تعریف کرد. به عبارت دیگر
یک آرگومان صوري نمی تواند در عین
حال یک متغیر موضعي نیز باشد.
صفحه 37:
لا با توجه به اینکه اسم تابع مقدار تابع
رابا خود به واحد فراخوان باز مى
كرداند, يس نوع مقدار تابع نيز بايد
مشخص باشد. زيرالكوريتم «هذه و
الگوریتم (اصلي) فراخوان آن در برنامه
1 ۲4 امده است.
صفحه 38:
و
{A program containing two units: A function sub-program
called sign, and 2 main program}
Program P41;
Uses wincrt;
Var
y,tireal;
stinteger;
عمسي يي ييه عو مجع ع
Function sign(x:real):
Begin
Tf x<0 then
sign
End; {sign}
|
Begin
Write(‘Enter a real number:
Readin(y);
sr=sign(sin(y));
tresin(sign(y));
If set then
begin
iriteLn(‘sign(sin(*,y,")=
Writeln(‘sin(sign(*1y,")=
end
End.
صفحه 39:
Sul به چگونگی اجرای برنامه دو واحدی
بالا می پردازیم. ولی قبلا لازم است
مطالبی در مورد حافظه زیربرنامه و برنامه
Oly lol کنیم.
صفحه 40:
pone براق هن حاار بارا مدن هدي
مقدار (آرگومانهاي صوري) تایع. و
همجنین برای هر یک از متغیرهای
موضعى, ٠ یک حافظه موقت در
هنكام اجراي زيربرنامه رزرو مى شود
كه با يايان اجراي أن (با اجراي دستور
G End اين حافظه هاي موقت نيز بطور
سراسرى در حافظه اى به نام حافظ
دائم ذخيره مى كردند. اين حافظه تا
يإيان اجراى برنامه باقى wo ماند.
صفحه 41:
کامپیوتر کاملا از همدیگر جدا هستند.
بنابراین ن اگر یک متغیر همنام در دو
حافظه ظاهر شده باشد, آنگاه حافظه
هاى اين دو متغير همنام هيخ برخوردي
با هم نخواهند داشت زیرا وقتي یک
زیربرنامه اجرایش تمام می شود
حافظه موقت مربوط , به آن از حافظه
کامپیوتر پاک می شود. پس برخوردي
صفحه 42:
Program P4 1;
Uses winert;
Var
y,trreal;
s:integer;
عدج ربص
Function _sign(x:real) : integer;
begin? No
If x<0 then
sign:=-1 —— *
else if x=0 then
sign
else
sign:=1 :همه -
End; {sign} 5
دورو و
Begin
Write('Enter a real number:
Readin(y);
s:=sign(sin(y)); #۳
tr=sin(sign(y));
If set then
begin تا
Writetn('sign(sin(',y,') 1
Writetn('sin(sign(',y,")=",t:8:
: فك
End.
9
صفحه 43:
6م
Program P4 1;
Uses winert;
Var
y,trreal;
s:integer;
تم بو
Function sign(x:real):integer
Begin
If x<0 then
sign:=-1
else if x=0 then
sign
else
sign:=1
End; {sign}
0
Begin
Write(‘Enter a real number
Readin(y);
s:=sign(sin(y));
tr=sin(sign(y));
If set then
begin
Writeln('sign(sin(',y,'
Writeln('sin(sign(',y,'
end
End.
صفحه 44:
Program P4 1;
Uses winert;
Var
y,trreal;
s:integer;
رعس كوو سمو سمو
Function sign(
Begin
If x<0 then
sign
9 then
1
(0
End; {sign}
ممعم معو مع عع عه معو
Begin
Write('Enter a real number
Readin(y);
s:=sign(sin(y)); #۳
tr=sin(sign(y));
If set then
begin 8
Writeln('sign(sin(',y,") :
Writetn('sin(sign(",y,')=",t:8:
End.
ee
صفحه 45:
eo
Program P4 1;
Uses winert;
Var
y,trreal;
s:integer;
تم بو
Function sign(x:real):integer
Begin
If x<0 then
sign:=-1
else if x=0 then
sign
else
sign:=1
End; {sign}
0
Begin
Write(‘Enter a real number
Readin(y);
s:=sign(sin(y));
tr=sin(sign(y));
If set then
begin
Writeln('sign(sin(',y,'
Writeln('sin(sign(',y,'
end
End.
صفحه 46:
اسم تابع به تنهايي (بدون ذکر
آركومانهايش) نبايد در سمت
راست هيج دستور انتسابي ظاهر
مثلا در بدنه تابعي كه با دستور معرف
Function Power(x:real;n:integer):real
تعریف شده است, نوشتن دستوري مثل دستور زیر
غير مجاز است: تا
oe Sy
بخ سر
:Power :=Power*x
صفحه 47:
22
ee
A
لإدسسم ig 0p 1010101010101001 تا بع
۸
آارچیه
صفحه 48:
هنگامي که بخواهیم در زیرالگوریتم
كاري مثل جابء, خواندن داده ها و
ذخيره كردن انها در حافظه, ويا هر
پردازش دیگر انجام كيرد, ويا زماني
كه لازم باشد بيش از يك مقدار از
زیرالگوریتم به الگوریتم فراخوان باز
گردد, از زیرالگوریتم رویه
-puiS cno odlaiwl (procedure)
صفحه 49:
طریقه تنظیم این زیرالگوریتم مثل
زیرالگوریتم تابع است ولي با توجه به
اينكه اينجاء اسم زيرالكّوريتم هيج
دابا وميه !| الهو
فراخوان باز نمی گرداند؛ پس
قاعده. در طول زیرالگوریتم رویه
اسم ان نبايد ظاهر شود.
صفحه 50:
Procedure Heading;
Begin
عم یبای مام زعا )
Writeln('* Sub-program to investigate the roots *');
Writeln('* of the equation a*x*2+b*x+c=0 ۳
یماد ) مآم رما )
End; {Heading}
صفحه 51:
قاعده. در برنامه نويسي, دستور معرف
زیربرنامه هاي رویه بصورت زیر نوشته می
شود:
ز اسم زیربرنامه (آرگومانهاعصوری) ۴۳۵6۵۵۷۲6
صفحه 52:
eu ful ae A) es
نوع دسته آخر: دسته آخر [م]ز ۰۰ ۰ : نوع دسته 22 tLe] 2 aims نوع
دنننته 1: دسته 1 [م:
که در آن [م] برای دسته پارامترهاي متفیر
۲ و برای دسته پارامتر هاي مقدار خالي
صفحه 53:
متلا در دستور معرف
;Procedure Pol_Cart(ro,theta:real;var x,y:real)
پارامتر مقدار بوده و 2066۵ 9 ro دو متغیر حقیقی
قبل از آنها خالي است, در حالیکه متغیرهای
* و با پارامترهاي متفیر بوده و قبل از آنها ۷۵۶ نوشته
شده است.
صفحه 54:
| ‘Two roots
a
(2*۵)/ ۵۷۷۵۱ - )سر
x2+(-b-¥d)/(2*a)
[= wear |f درت
ee
debtb-4tatc
2)
Procedure Roots(=,b,c: real);
var [No real roots”
,x,x1,x2: real;
Begin
d:=b*b-4tatc;
If d>0 then
-besqrt(d) )/(2*a);
=b-sqrt(d))/(2*a);
Wiritetn(*Two roots: *,x1:
end
else if d=0 then
begin
xz=-b/ (24a);
Wiriteln(‘One root: ',x:4:
end
else
iriteln( ‘No real roots’)
End; {Roots}
صفحه 55:
قاعده. هیچیک از پارامترهای مقدار را
دیگر نباید در آن زیرالگوریتم توسط
دستورهاي خواندن بخوانیم. مقادیر اين
آرگومانها از طریق واحد فراخوان به
زیرالگورنتم سین ایند همچنین هیچیک از
پارامترهای متغیر را نباید در زیرالگوریتم
طانه گنف اين مقادير قرار است به
واحد فراخوان باز گردند.
ee ee eee) ee ee > اه
صفحه 56:
قاعده. هیچیک از آرگومانهاي صوري در یک
زیربرنامه را دیگر نباید در بلوک ۷۵۲ آن
زیربرنامه تعریف کرد. به عبارت دیگر یک
آرگومان صوري نمی تواند در عین حال یک
متغیر موضعي نیز باشد.
در زیربرنامه بالاء آوردن : 5 , يا » در فهرست ۷3۲ کاملا مضحک
خواهد بو
صفحه 57:
قاعده. در الگوریتم نويسي, یک
زیرالگوریتم رویه به صورت زير
و در برنامه نويسي, براي فراخواني یک زیربرنامه
رویه دستور زیر بکار برده می شود:
ارگومانهاي فعال (اسم رویه
صفحه 58:
Pol_Cart(r,t,u,v
1
Pol_Cart(r,t,u,v);
صفحه 59:
777
ده
debtb-atatc
‘Two roots:’,
0-)۰۵+۷/۵۱/)2*۵(
x2-(-b-Vd) /(2¢a)
>) xe -b/(2*a)
‘No real roots’
| | rootsiu.viw) | |
وه
صفحه 60:
Progras Pa 2;
Uses winert;
var
uv wereal;
Provedure Heading
Begin
ی
to investigate the roots *"); |
Writeln('* of the equation atx~2ebrxyc=8 ۳
HrLtsln{ ‘seishesonendectathnctonestnantcontnssteiins)|
End; (Heading)
Procedure Roots(a,b,c: real);
var
4,x,20, x2: real;
Begin
disbrb-a*are;
If do then
begin
cdis(-besgrt(d))/(2%a);
۳
0
end
else if dea then
begin
xi=-b/(2"@)
Weiteln( ‘aust one root: *,x:6:2)
end
else
Weiteln('No real roots")
End; (Roots)
Begin
Reading
Writeln;
Write( ‘Enter the coefficients: *
Readln(u,¥ i);
Roots(u,,¥);
End.
صفحه 61:
ت قطبي ان؛ , بصورت زیر
(0,0)
یک زیرالگوونتم»رونههفوجسید که
مختصات قطبي یک نقطه را گرفته و
مختصات کارترین آن را محاسبه و
بازگرداند. سپس زیرالگوریتم
(زیربرنامه) اخیر را براي مقادیری از و
که از ورودم خوانده می شود فراخواني
ونتيجه را جاب كنيد. 9
صفحه 62:
Pol_Cart(ro, theta,x,y) 50
et
xero*cos (theta)
yero*sin(theta)
Pol _Cart(r,t,u,v)
fet [ow]
Program P4 3;
Uses winert;
Var
ry tyu,vereal;
مکش
| x,y:real);
Begin
End; {Pol_Cart}
|
Begin
Write('Enter the polar coordinates Ro and Theta: ');
Readin(r,t);
Pol_Cart(r,t,u,v);
Write('The Cart. coordinates are (',u:4:2,",',v:4:2,")')
End
وه
صفحه 63:
Ur WI Wo dD sould alos \li
متغیرهای سراسری (متغيرهاي برنامه
اصلي) بوده و تا اتمام اجراي برنامه
پارامتر هاي مقدار و متغیرهای موضعی
اختصاص دارد و اين حافظه پس از اتمام
اجراي زیربرنامه مربوطه, بطور کامل پاک
گردد: pe
3( حافظه مشترک (بین واحد فراخوان و
زیربرنامه), که مخصوص پارامترهاي متغیر
بوده و با آرگومانهاي فعال متناظر با آنها به
wel اكوك التق هن Sei آنته نع صافصاه
صفحه 64:
64
3
abst
ro
theta
صفحه 65:
Program P4_3;
Uses wincrt;
Var
r,t,u,vireal;
Procedure Pol_Cart(ro, theta:
Begin
ro*cos(theta) ;
ro*sin(theta)
End; {Pol_Cart}
(FERRER SSE)
Begin
Readltn(r,t);
Pol_Cant(\),!,u,v);
Write(u\v
End.
صفحه 66:
Program P4_3;
Uses wincrt;
Var
r,t,u,vireal;
FRB SHS rb يدي يدي يدي يدج دي يد ع لدع ددع د مدع ا م د م م د د IIA )
Procedure Pol_Cart(ro,theta:real;var x,y:real);
Begin
ro*cos(theta) ;
ro*sin(theta)
End; {Pol_Cart}
(FERRER SSE)
Begin
Readtn(r,t);
Pol_Cart(r,t,u,v);
Write(u,v)
End.
صفحه 67:
سوال. اگر ۷۵۳ قبل از آرگومانهاي
و ۷ را برداریم خروجی چه مى شود؟
9
صفحه 68:
Program P4 3;
Uses wincrt;
Var
Pt aera.
Begin
ro*cos(theta) ;
ro*sin(theta)
End; {Pol_Cart}
(FERRER SSE)
Begin
Readtn(r,t);
Pol_Cant(r,t,u,v);
Write(u\v
End.
صفحه 69:
Program P4_3;
Uses wincrt;
Var
r,t,u,vireal;
FRB HS Sb SS SFE H يدي يدي يدي يدج دي يد ع لدع ددع د لدع IIA )
Procedure Pol Cart(ro,theta,x,y:real) ;
Begin
ro*cos (theta) ;
ro*sin(theta)
End; {Pol_Cart}
(FERRER SSE)
Begin
Readln(r,t);
Pol_Cart(r,t,u,v);
Write(u,v)
End.
صفحه 70:
ممکن است یک آرگومان صوري, هم نقش یک |
پارامتر مشدار را بازي کند و هم نقش بک
پارامتر متغیر.
در اينصورت بايد قاعده زیر رعایت گردد.
قاعده. یک آرگومان صوري اگر هم پارامتر
مقدار و هم پارامتر متغیر باشد, حتما بايد با
۳ (قبل از آن) همراه باشد.
صفحه 71:
زیرالگوریتم بعدي کار الگوریتم ماهي طلايي را
انجام مى دهد؛ يعني دو مقدار " و 0 را گرفته و
مقادير آنها را تعويض كرده و به همان اسامي أنها را
باز می گرداند.
Program P4 4;
Uses winert;
m,
0 Swap(m,n)
Procedure Swap(var m,n:intege
جمممممم مممممم
Bey
Write('Enter two integers: ');
Readtn(m,n
‘Swap(m,n) ;
',n) ره
End.
Writeln('The interchanged values:
20
صفحه 72:
ارتباط بین زیرالگوریتم های تایع و رویه را
قاعده زیر مشخص می کند
قاعده. هر زیرالگوریتم eb را می توان
همواره بصورت یک زیرالگوریتم cre در آورد
ولی برعکس, در حالتیکه بازگشتی از
زیربرنامه بیش از یکی باشد, ممکن نیست.
صفحه 73:
SS signe -1
<—> sign-o
signel
Return
چه چیز تغییر کرد؟ چون قبلا متغیر 190و (اسم تایع) نتیجه
خواسته شده را به واحد فراخوان بازمی گرداند. پس برای
اينكه 5190 همان نقش قبلى را ايفا كند نام زيرالكوريتم
كن باهر
HW توجه كنيد كه اينجا 5190 يك پارامتر متغير است!
صفحه 74:
oe
Chee 5 star >
23
P_sign(sin(y),s)
s+sign(sin(y)) -
tesin(sign(y))
oN P_sign(y,w)
1
a tesin(w)
رس
بر
End 0
!! مجدداً تاكيد مى كنيم هنكامى كه یک مقدار بازگشتی داريد
از زيرا
از زیرالگوریتم تابع استفاده کنید چون هم آن را
است و هم فراخوانی آن. nd
صفحه 75:
Oy lado pI (lL مورد باز تشتی به واحد
قراخوآن داریم از تابع استقاده می كنيم:
وگرنه رویه را بکار می گیریم.
2 آرگومانهاي ورودي به زیرالگوریتم
(پارامترهاي مقدار) را دیگر نباید در آن
زیرالگوریتم توسط دستورهاي خواندن
بخوانیم
3) هیچیک از آرگومانهاي صوري در یک
زیربرنامه را دیگر نباید در Ul var Sol
زیربرنامه تعریف کرد. به عبارت دیگر یک
آرگومان صوري نمی تواند در عین حال یک
متغیر موضعي نیز باشد.
صفحه 76:
4 1) به در الگوریتم. و نوشتن
در برنامه دقت می کنیم.
4 بازگشت نتیجه اجرای زیرالگوریتم
(زیربرنامه) توسط اسم زیربرنامه انجام می
گیرد. در نتيجه اسم تابع بايد حداقل يك بار در
سمت چپ یک دستورعمل (دستور) انتساب
ظاهر شود. ِ
4 3) اسم تایع (بدون آرگومان) نباید در سمت
راست هیچ دستورعمل (دستور) انتساب ظاهر
شود.
4 5) به فراخوانی درست دقت می کنیم
(«فراخواني در دستور مستقل انجام نمی گیرد).
صفحه 77:
eS See a *« ae SS a
زير را درنظر بگیریم. . .
5 1) به معرفی رویه در الگوریتم» و
نوشتن د ستور معرف در برنامه دقت می
۱ ips
در نیس کل ادها مه ae
نوشته می شود.
5. 3) اسم رویه نباید درطول زیرالگوریتم
(زیربرنامه) ظاهر شود.
5 4( فراخوانی در یک دستور مستقل
Sak ltl
صفحه 78:
خودفراخوانی
صفحه 79:
خودفراخواني (Recursion) فني |
که در آن یک زیربرنامه, در رود 7
, یک يا چند بار خودش را
فراخواني مى كند. در اينصورت, در
زیر انجام می گيرند که توجه به آنها
موجب فراگيري بهتر مفهوم
خودفراخواني خواهد شد.
صفحه 80:
رت و ی وت سوت
كيرد, زیربرنامه شروع به اجرا کرده و
ابتدا ۱ موقت لايه لايه
ای به نام حافظه پشننه Stack)
2017م حم ) توليدء و در هر لايه
بارامترهاي مقدار و متغيرهاي موضعي
جديد را ذخيره مى كند بطوريكه هر
لايه از لايه قبلي خود متمايز بوده و مى
توان تصور نمود كه روي أن قرار مى
گیرد.
صفحه 81:
2) اين خودفراخواني هاي مكرر تا
نفقطه برگشت پیش می روند. نة
برگشت به اولین اجراي کامل
زیربرنامه در آخرین فراخواني می
گوییم که در vl دیگر خودفراخواني
انجام نمی گیرد و زیربرنامه به طور
کامل اجرا می شود.
صفحه 82:
با ورور
كه هر يى مربوط به يى فراخواني است,
روي هم به ترتیب فراخواني چیده شده اند,
در نقطه برگشت, لایه مربوط به آخرین
فراخواني بالاي تمام لایه ها قرار می گیرد.
حال با اتمام اجراي کامل این زیربرنامه.
لایه بالايي از حافظه موقت و می شود.
ب رود
زيربرنامه كال مى ردد.
82
صفحه 83:
با نماك ”وو سوسس"
ماقبل آخر از حافظه پشته پاک می گردد.
اين روند تا اتمام آخرين اجراي كامل
زيربرنامه در اثر اولين فراخواني (صورت
كرفته از واحد فراخوان), ر و به دنبال آن پاک
ادامه پیدا ما مى كند. بدين ترتيب اجرای"
زیربرنامه تمام شده و کنترل اجرا به
موقعيتي بلافاصله بعد از جايي كه اولين
فراخواني توسط واحد فراخوان صورت
گرفته بود منتقل مى شود.
83
صفحه 84:
0 ۳۲۲۲۲۲۲۲ ۲
يكي از مهمترین كاربردهاي خودفراخواني
در محاسبه روابط تراجعي. ۳ توابع
تراجعي, می باشد. متداولترين مثال در اين
yas رآنطه (نایه) فاكتوريل مى باشد كه با
رابطه تراجعي
1=!0 ۱-11 ۲۱۱<0,
و یا با تابع تراجعي اگ ۵ fact(fy j=
“Infact(n -1)
صفحه 85:
(تابع) براي یک مقدار ۰ , مثلا 3 , اين
است که بلافاصله به سراغ ۱۵ می رود.
آن را برداشته و کار محاسبه را با
استفاده از قاعده رابطه (تایع) تا
رسیدن به 3! تکرار می کند.
اين واكنش سریع را با بياني ساده تجزیه و
85
صفحه 86:
تصور کنید که در پشت بام یک ۰ -
(به انضمام یک طبقه همکف) قرار
گرفته اید. فرض کنید که از محاسبه
قاکتوریل یک عدد هیچ اطلاع قبلی ندارید و
براي محاسبه 3! از شما خواسته شده که
کارهای زیز زا انجام دهيد:
(منطور از
امکان تذیز
86
صفحه 87:
کی eS ee
طبقه که وارد
می شوید پردازش زیر صورت می گیرد:
عده:حاضل از بزدارتن سلبقه پایین شمان این طتفه <
عدد حاصل از پردازش این طبقه
در یک جاي اين پردازش, محاسبه ناتمام
باقي مانده و رفتن به طبقه پایین
درخواست می گردد. این کار تا رسیدن به
طبقه همكف تكرار مى شود. در اين طبقه
يردازش زير انجام مى شود:
< 1 عدد حاصل از يردازش اين طبقه
ايفجا نقطه بركشت است.
صفحه 88:
از اين به بعد. مسيري یکطرفه رو به طبقه
بالا را بايد طي كنيد. در اين مسيرء به
طبقه که وازدهمی
ناتمام باقي مانده oy أكنون: باهر دست
داشتن عدد حاصل از پردازش طبقه پایین
تكميل كه وجي حاضل به ظيعة بالا
برده مى شود.
مى كند. وقتي به يشت بام رسيديد عددي
كه در دست داريد 3! است.
صفحه 89:
حال به نوشتن الگوریتم می پردازيم. ابتدا یک
راکرس بلق ساچن نع وبا سایظه
بالا می نویسیم. این زیرالگوریتم
صفحه 90:
Program P4 5;
Uses winert;
Var
m:integer;
f:longint;
رم و
Function fact(n:integer) :Longint
Begin
If n=@ then
fact
else
fact:=n*fact (n-1)
End; {fact}
عمجم مه و (
Begin
Write(‘Enter an integer: ')
Readtn(m) ;
If m<@ then
Writeln(m,' is negative’
else
begin
fact (m);
Writeln(m,'
end
End.
<>
<x
a
<->
rf)
صفحه 91:
صفحه 92:
در الگوریتم قبلی یک زیرالگوریتم تابع داشتیم
که در محاسبه مقدار ان, و در لابلاي محاسبه,
خود زیرالگوریتم را فراخواني می کرد.
در مثال زیر یک زیرالگوریتم رویه
صفحه 93:
<<
>
[ | countineay | ]
Count (1)
Program P4 6;
Uses wincrt;
) عع عو ووه وو عع عع (
Procedure Count(n:integer) ;
Begin
If n<3 then
Count (n+1) ;
Writeln(n)
End; {Count}
عمجم (
Begin
Count (1)
End.
صفحه 94:
fegin
end
0 ۰(تحت ورس
begin
Tene then
Procedure Countinsinteger): مسب
begin
Tene then
begin
] then
count(ael)
Wwestetniay
te 3
كت
or
صفحه 95:
A AI و سرت وال ON PY) I” a
uw L برگشت وجود داشته
براي اينكه ببينيم در غير اینصورت چه
اتفاق می افتد, فرض كنيد كه به جاي
دستور
If
n<3 then
Count (n+1)
gus فقط
Count (n+1)
را داشته باشیم.
صفحه 96:
Program P4 6;
Uses wincrt;
( عع عو ووه وو عع عع )
Procedure Count(n:integer) ;
Begin
[ | countinsay [ [
Count (n+1) ;
Writeln(n)
End; {Count}
عمجم (
Begin
Count (1)
End.
Count (1)
هه
صفحه 97:
در ابنصورتء بعك ور سو سس ٠
نخواهد داشت و زيربرنامه بطور بي
oll خودش را فرا خواهد خواند. ولي
از آنجا که در هر بار فراخواني یک لایه
در حافظه پشته نشکیل می شود, و با
ae به محدود بودن ظرفیت حافظه
, پس از مدتي این حافظه سرریز
شده و در نتیجه اعلام خطاي سرریز
"Stack over flow" باعث از دست
رفتن برنامه, بدون هیچ نتیجه ای خواهد
97
صفحه 98:
بيني دیدر ار مالهاي نلاسیت براي ود کر اوابی
زیربرنامه های رویه, معماي تاريخي برجهاي
هانوي است. این مسئله در شکل زیر نشان داده
شده است.
در این معما باید دیسکها را از ستون ۸ به ستون C
منتقل کنیم مشروط بر اینکه:
1- اگر ديسكي برداشته شد باید در یک ستون دیگر
قرار داده شود؛
2- در هر حرکت فقط یک دیسک و آنهم بالاترین دیسک
را می توان حایجا کرد؛
3- یک دیسک زرگ را نمی*وان روي یک یسک کوچک
قرار داد.
همه
صفحه 99:
داشته باشد, آنگاه بسادكي مى توان Lal با
یک حرکت به ستون © منتقل نمود, وگرنه
(اكر تعداد ديسكها, 5, بيش از يكى باشد)
راه حل مسئله به صورت تراجعي انجام
مى كيرد:
الف) تعداد 0-1 ديسك از بالاي ستون ۸ را
به کمک ستون ) به ستون 8 منتقل مى
کنیم
ب) تنها دیسک باقي مانده در ستون ۸ را با
یک حرکت به ستون ) منتقل می نماییم.
ج) تعداد ۰-1 دیسک را از ستون 8 به کمک
تون ۸ به ستون ) حرکت می دهیم.
صفحه 100:
YL که در ) a> L
تو
tna Lan lve as a
گردشی آر:
‘
صفحه 101:
و مود و وم << موه
e
to
to
to
to
to
to
to
to
to
to
to
to
to
to
4
A
A
B
A
6
3
۸
A
B
B
58
8
۸
۸
to
of disks:
from
from
from
from
from
from
from
from
from
from
from
from
from
from
isk from B
disk
disk
disk
disk
disk
disk
disk
disk
disk
disk
disk
disk
disk
disk
Number
Move
Move
Move
Move
Move
Move
Move
Move
Move
Move
Move
Move
Move
Move
Move
۵ ۵ ۵ ۵ و ۵ ۵ نه ۵ ۵ وه و وه وه
همانطوریکه می بینیم؛ هقفت
حرکت اول سه دیسک را به
کمک به 8 منتقل می کنند.
حرکت هشتم بزرگترین دیسک
را از ۸ به > حرکت می دهد.
بالاخره هفت حرکت آخر سه
دیسک موجود در ة را به کمک «
به » منتقل می سازند.
aoa
Program 4 7
Uses wine
Const
pegl='A';
peg2="'B';
peg3='C';
Var
nzinteger; {Number of disks}
لمعيه عه جاه عو ع عع مو جل جو
Procedure Move(n: integer; pegA, pegB, pegC: char);
Begin
If n=l then
Writeln('Move a disk from ',pegA,' to ',pegC)
else
begin
Move(n-1, peg, pegC, pegB)
Move(1,pegA,pegB, pegC) ;
Move(n-1,pegB, peg, pegC)
end
End; {Move}
۲
Begin
Write('Number of disks: ');
Readtn(n) ;
Move(n, pegl, peg2, peg3)
End.
صفحه 102:
-خروح- و دستو رالات
اجراي دستور
Exit
باعث می شود که خروج از زیربرنامه انجام
گرفته و کنترل اجراي برنامه به بعد از
صفحه 103:
ee at coli! ۲
خروج از آن زیربرنامه را سبب می
0355 ولي اگر از +5 3 برنامه
اصلي استفاده شود رفتاري مانند ۲۷۵۱۴
سازد.
در برنامه 18 ۲3 به جاي :۱۵1 می
توانستیم 6 را نیز بنویسیم.
8 برای اینکه ابهامی پیش نیاید به
جای Halt از ۲ استفاده نکنید.
103
صفحه 104:
Program 4م 8:
Uses winert;
var
a:real;
10 اا
Procedure Test (a:real);
Begin
If a>0 then
begin
Writeln('We are in the range of ''then''
Exit
end
else
begin
Writeln('We are in the range of ''else''')
Halt
end
End; {Test}
عمسم سس ما
Begin
Write(‘Enter a number
Readtn(a) ;
Test(a);
Writeln('We are in the main program’)
End.
i
0