زیر برنامه ها و برنامه نویسی پیمانه ای
بسیاری از برنامه ها ممکن است از چند بخش منطقی تشکیل شده باشند و هر بخش، کار خاصی را انجام دهند.
زیربرنامه: برنامه ای که برای حل بخشی از مسئله نوشته می شود.
*** امتیازات استفاده از زیر برنامه:
1. همکاری افراد را در برنامه نویسی امکان پذیر می سازد.
2. زیر برنامه هایک بار نوشته می شوند و چندین بار مورد استفاده قرار می گیرند. از زیر برنامه می توان چندین بار در همان برنامه یا برنامه ای دیگر استفاده کرد.
3. رفع خطاهای احتمالی برنامه سریعتر انجام می شود.
4. طراحی و پیاده سازی زیر برنامه ساده تر است.
جنبه های مختلف زیر برنامه
هر زیر برنامه دارای دو جنبه است: جنبه تعریف و جنبه فراخوانی
جنبه تعریف: دستورالعملهایی است که هر زیر برنامه را مشخص می کند.
جنبه فراخوانی: دستوری است که آن را اجرا می کند.
برنامه فراخوان: برنامه ای که زیر برنامه ای را فراخوانی می کند.
زیر برنامه فراخوانی شده: زیر برنامه ای که فراخوانی می شود.
انواع زیر برنامه
هر برنامه ای که زیر برنامه را فراخوانی می کند انتظار دارد بخشی از مسئله را حل کند و نتایجی را تولید نماید.
زیر برنامه می تواند تمام یا بخشی از محاسبات را به برنامه فراخوان تحویل دهد و یا اصلا چیزی را به برنامه تحویل ندهد و بلکه نتایج محاسبات خود را به خروجی(صفحه نمایش) منتقل کند.
زیر برنامه در پاسکال به دو دسته تقسیم می شود: زیر برنامه زیرروال و زیر برنامه تابع
زیر برنامه زیرروال می توانند چندین مقدار را به برنامه ی فراخوان تحویل دهند(برگردانند).
زیر برنامه تابع حداکثر می توانند یک مقدار را به برنامه فراخوان برگردانند.
توجه: هر دو نوع زیر برنامه، ممکن است هیچ مقداری را به برنامه فراخوان تحویل ندهند، بلکه خروجیهای لازم را خودشان تولید کنند.
شکل کلی برنامه پاسکال با زیر برنامه
زیر برنامه ها در پاسکال، در داخل برنامه اصلی و پس از تعریف برچسبها،ثوابت،انواع جدید و متغیرها تعریف می شوند.
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
program نام برنامه
تعريف برچسبها
تعريف ثوابت
تعريف انواع جديد
تعريف متغيرها
تعريف زير برنامه ها
begin
دستورات برنامه
end.
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
زیر برنامه های زیرروال (procedure)
زیر برنامه ها زیرروال قابلیت آن را دارند که چندین مقدار را به برنامه فراخوان تحویل دهند.
به کارگیری زیر روال به این صورت است:
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
precedure نام زيرروال;
تعاريف
begin
دستورات زيرروال
end;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
همانطور که می بینید،تعریف زیرروال با کلمه کلیدی procedure شروع می شود.
هر زیرروال باید دارای نامی باشد که بتوان به آن مراجعه کرد. (نامگذاری زیرروالها از قانون نامگذاری شناسه ها تبعیت می کند.)
پس از تعریف نام زیرروال،برچسبها،ثوابت،انواع جدید، متغیرها زیرروال تعریف می شوند و سپس دستورات اجرای آن، با begin شروع شده، به end ختم می شوند.
فراخوانی زیرروال با نام آن انجام می شود. یعنی برای اینکه زیرروال فراخوانی شود،کافی است نام آن را ذکر کنیم.
مثال: برنامه ای که با استفاده از زیر برنامه ای، شعاع دایره را خوانده،مساحت آن را محاسبه کند و به خروجی ببرد.
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
program iuss;
uses crt;
procedure area;
const p=3.14;
var radius,s : real;
{**************************************}
begin
clrscr;
write('Enter radius: ');
readln(radius);
s:=p*radius*radius;
writeln('Radius= ',radius: 4 :1,',area= ',s: 4 :1);
end; {area}
{**************************************}
begin{test}
area;
end.
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در این مثال، زیر برنامه ای به نام area نوشته شدهو توسط برنامه اصلی فراخوانی گردید.این زیربرنامه، مساحت دایره ای را محاسبه می کند.
برای این کار، ثابت p و متغیرهای radius (شعاع) و s (مساحت) را تعریف می کند. و سپس مقدار شعاع را از ورودی خوانده، مساحت دایره را محاسبه می کند و در s قرار می دهد و سپس آنرا در خروجی چاپ می کند و چیزی را تحویل برنامه اصلی نمی دهد.
برنامه اصلی از یک دستور تشکیل شده است و آن دستور، فراخوانی زیر برنامه area است.
وقتی این دستور اجرا می شود، دستورات زیربرنامه یکی یکی اجرا می شوند و خروجی لام را تولید میکنند و سپسپ کنترل برنامه، به اولین دستور بهپعد از دستور فراخوانی زیر برنامه بر می گردد.
پارامترهای زیرروال
پارامتر: هر برنامه می تواند هنگام فراخوانی زیر برنامه، اطلاعاتی را به آنها تحویل دهد که به آنها پارامتر می گویند.
بنابراین، هنگام تعریف زیر برنامه باید پارامترهای آنرا ذکر کرد و هنگام فراخوانی زیر برنامه باید پارامترها را به زیر برنامه منتقل کرد.
پارامترهای مجازی: پارامترهایی که در بخش تعریف زیر برنامه می آیند.
پارامترهای واقعی: پارامترهایی که در فراخوانی زیر برنامه می آیند.
اگر زیر برنامه ها دارای پارامتر باشند، به اسن صورت تعریف می شوند:
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
procedure نام زيرروال (پارامترهاي مجازي و نوع آنها)
تعاريف
begin
دستورات زير برنامه
end;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نکات:
*تعداد پارامترهای مجازی و پارامترهای واقعی باید یکسان باشد.
*نوع پارامترهای مجازی باید با نوع پارامترهای واقعی یکسان باشند.
*پارامترهای مجازی و واقعی لازم نیست همنام باشند.
*پارامترها با کاما از هم جدا می شوند.
انواع پارامترهای زیرروال
پارامترهای زیرروال به دو دسته تقسیم می شوند: پارامترهای مقدار(value) و پارامترهای متغیر(variable)
پارامترهای مقدار: پارامترهایی هستند که هنگام فراخوانی، از پارامترهای مجازی کپی می شوند و از آنجا به بعد هیچ ارتباطی با پارامترهای مجازی ندارند. بدین ترتیب، هر تغییری در پارامترهای مجازی، تاثیری در پارامترهای واقعی ندارد.
مثال: نمونه ای از کاربرد پارامترهای مقدار.
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
program iuss;
uses crt;
var m,n:integer;
{****************************}
procedure pvalue (m,n:integer);
begin{sumsq}
m:=m*m;
n:=n*n;
writeln('In procedure : m=',m, ',n=',n);
end;{sumsq}
{****************************}
begin {iuss}
clrscr;
write('Enter two integer number:');
readln(m,n);
writeln(' In main program before call: m=',m, ',n=',n);
pvalue(m,n);
writeln('In main program after call: m=',m, ',n=',n);
end.{iuss}
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در این مثال، زیر برنامه pvalue دو پارامتر دارد. پارامتر مجازی و واقعی. همنوع هستند(m,n). برنامه اصلی، m,n را از ورودی می خواند و آنها را چاپ می کند. سپس زیر برنامه pvalue فراخوانی می شود و مقدار پارامتر واقعی m در پارامتر مجازی m کپی می شود و مقدار پارامتر واقعی n در پارامتر مجازی n در پارامتر مجازی n کپی می شود.
سپس مربع n در n قرار می گیرد و مربع m در m و در خروجی چاپ می شود و زیر برنامه خاتمه می یابد.
در پارامترهای مقدار، تبادل اطلاعات یک طرفه است. یعنی هنگام فراخوانی، مقادیر پارامترهای واقعی در پارامتر های مجازی قرار می گیرد ولی پس از اجرای تابع، مقدار پارامترهای مجازی در پارامترهای واقعی قرار نمی گیرند.
در پارامترهای متغیر، تبادل اطلاعات دو طرفه است. علتش اینست که هنگام فراخوانی به آدرس حافظه پارامترهای واقعی دسترسی داریم، بدین ترتیب، هر تغییری در پارامترهای مجازی داده می شود، در پارامترهای واقعی اعمال می گردد.
برای اینکه کامپایلر متوجه شود چه پارامترهایی از نوع مقدار و چه پارامترهایی از نوع متغیراند، باید در جلوی پارامترهای متغیر، از کلمه کلیدی var استفاده کرد.
انتقال آرایه ها به زیر برنامه ها
آرایه ها را نیز می توان مثل متغیرهای معمولی، به زیر برنامه ها ارسال کرد. ارسال آرایه نیز می تواند به صورت مقدار یا متغیر باشد.
وقتی آرایه به صورت مقدار به زیر برنامه فرستاده می شود، یک کپی از تمام ناصر آرایه در زیر برنامه ایجاد می شود و چنانچه در زیر برنامه، تغییراتی در عناصر آرایه داده شود، عناصر آرایه موجود در برنامه ی فراخوان، تغییر نمی کند. ولی اگر آرایه به ص.رت پارامتر متغیر به زیر برنامه فرستاده شود، آدرس آرایه به زیر برنامه فرستاده می شود و در زیر برنامه، از طریق آدرس آرایه، به تمام عناصر آن در برنامه فراخوان دسترسی داریم و می توانیم یکی از عناصر آنرا نیز تغییر دهیم.
برای انتقال آرایه به زیر برنامه، نام آرایه باید به عنوان پارامتر واقعی ذکر شود و پارامتر مجازی متناظر آن، باید متغیری از نوع آرایه باشد.
نکته: برای صرفه جویی در مزان حافظه، بهتر است آرایه به صورت پارامتر متغیر منتقل شود.
حوزه عمل شناسه ها
یادآوری: زیر برنامه ها در پاسکال در داخل برنامه اصلی تعریف می شوند و حتی در داخل زیر برنامه ها می توان زیر برنامه های دیگری تعریف کرد؛ یعنی تعریف زیر برنامه به صورت تو در تو امکان پذیر است. به همین دلیل، پاسکال یک زبان ساخت یافته بلاکی است.
منظور از بلاک، مجموعه ای از دستورات است که عمل خاصی را انجام می دهد.
حوزه عمل هر شناسه، در بلاکی است که در آن تعریف می شود.
حوزه عمل شناسه ای که در برنامه اصلی تعریف می شود، عمومی (global) و در هر جایی از برنامه قابل دستیابی است.
حوزه عمل شناسه ای که در داخل زیر برنامه تعریف می شود، محلی (local) است و فقط در آن زیر برنامه و زیر برنامه های دیگری که در آن تعریف می شود قابل دستیابی اند.
نکته: بنابراین، زیر برنامه ای که در بخش تعاریف برنامه اصلی تعریف می شود، حوزه عمل عمومی دارد ولی پارامترهای مجازی آن، جزء بلاک زیر برنامه محسوب می شود و حوزه عمل محلی دارد.
نکته:هر زیربرنامه می تواند به متغیرهای تعریف شده درسطوح بالاتر از خود دسترسی داشته باشد و متغیرهای تعریف شده در یک زیر برنامه، توسط زیر برنامه ای که در سطح بالاتر از آن قرار دارند قال دستیابی نیستند.
نکته: انچه که در مورد حوزه عمل متغیرها گفته شد، در مورد ثوابت و تعریف انواع جدید(مثل تعریف نوع آرایه، تعریف نوع زیر بازه و...) نیز صادق است.
نکته: هر زیر برنامه می تواند زیر برنامه هم سطح یا زیر برنامه یک سطح پایین تر از خودش را فراخوانی کند.
نکته: اگر شناسه ای در بلاکهای مختلفی تعریف شده باشد، هر بار که به آن مراجعه می شود، از محلی ترین تعریف آن استفاده خواهد شد.
مثال: برنامه برای آشنایی با حوزه عمل متغیرها و استفاده از شناسه هایی که چندین بار تعریف شده اند.
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
program iuss;
uses crt;
var x,y:integer;
{****************}
procedure proc1;
var m,n,x:integer;
begin{proc1}
m:=5;
n:=10;
x:=15;
writeln('In proc1: m=' ,m,',n=',n,',x=',x,',y=',y);
end;{proc1}
{****************}
procedure proc2;
var y:integer;
{****************}
procedure proc3;
var p,q:integer;
begin{proc3}
p:=20;
q:=30;
writeln('In proc3: p=',p,',q=',q,'x=',x,'y=',y);
end;{proc3}
{****************}
begin{proc2}
y:=30;
x:=60;
proc3;
writeln('In proc2: ','x=',x,',y=',y);
end;{proc2}
{****************}
begin{iuss}
clrscr;
x:=40;
y:=50;
proc1;
proc2;
writeln('In IUSS: ','x=',x,',y=',y);
end.
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code --> in proc1:m=5,n=10,x=15,y=50
in proc3:p=20,q=30,x=60,y=30
in proc2:x=60,y=30
in iuss:x=60,y=50
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در این مثال، با اجرای برنامهiuss ، ابتدا زیر برنامه proc1 و سپس زیر برنامه proc2 فراخوانی می شود و زیر برنامه proc2 در داخل خودش، زیر برنامه proc3 را فراخوانی میکند. سطر اول خروجی مربوط به زیر برنامه proc1 است. در این زیر برنامه سه متغیر m,n,x تعریف شده اند ولی متغیر y در این زیر برنامه تعریف نشده است. مقادیر m,n,x در این زیر برنامه تععین شدند ولی مقدار y در این برنامه تعیین نشد، چون این زیر برنامه می تواند از متغیر های عمومی برنامه iuss استفاده کند،مقدار y که در این زیر برنامه چاپ شد، مربوط به برنامه iuss است.
سطر دوم خروجی مربوط به زیر برنامه proc3 است. زیرا زیر برنامه proc2 قبل از تولید خروجی خودش، proc3 را فراخوانی می کند. در زیر برنامه proc3 از متغیرهای محلی p,q,y ستفاده می شود. توجه داشته باشید که، در این زیر برنامه، متغیر x تعریف نشده است. لذا متغیر عمومی x که در برنامه اصلی تعریف شد، استفاده می شود ولی متغیر در اینجا y ، یک متغیر محلی است.
سطر سوم خروجی، مربوط به زیر برنامه proc2 است. در این زیر برنامه متغیر محلی y تعریف شد و مقدار آن نیز 30 تعیین گردید. در این زیر برنامه نیز از متغیر عمومی x استفاده شد. چون مقدار متغیر x برابر ا 60 تعیین شد، این مقدار در x موجود در برنامه اصلی نیز تاثیر می گذارد.
سطر چهارم خروجی، مروبط به برنامه iuss است و متغیرهای عمومی x,y در اینجا چاپ می شوند.
نکته: مقدار متغیر عمومی x در این برنامه 40 تعیین شد، ولی زیر برنامه proc2 آنرا به 60 تغییر داد. لذا در این برنامه مقدار 60 برای آن چاپ شده است. ( شما عزیزان فعلا از این کارا نکنین)
اثر جانبی (Side Effect): هر چندکه متغیرهای عمومی را می توان در هر جایی از برنامه مورد استفاده قرار داد، نباید از آنها در داخل زیر برنامه استفاده کرد و آنها را تغییر داد. تغییر متغیر های عمومی در زیر برنامه را اثر جانبی می گیند. حتی الامکان باید از اثرات جانبی جلوگیری کرد. اگر برنامه چندین زیر برنامه داشته باشد، پیدا کردن دستوری که موج اثرات جانبی شده است کار بسیار دشواری است. بنابراین، برای برقراری ارتباط بین زیر برنامه ها، همیشه از پارامتر ها استفاد کنید.
توصیه می کنم، که هیچ وقت از متغیرهای عمومی در زیر برنامه ها استفاده نکنید و فرش را بر این بگیرید که در داخل زیر برنامه ها فقط می توانید از آرگومانها و متغیرهای محلی استفاده کنید.
زیر برنامه های تابع
توابع، زیر برنامه هایی هستند که فقط یک مقدار را می توانند به بلاک فراخوان برگردانند.
وقتی که انتظار داریم زیر برنامه ای فقط یک مقدار را برگرداند، بهتر است به جای زیرروال، از تابع استفاده کنیم، چون پیاده سازی توابع ساده تر از پیاده سازی زیر برنامه های زیر روال است.
زیر برنامه های تابع هم، مانند زیر برنامه های زیرروال، در بخش تعاریف برنامه تعریف می شوند.
توبع نیز دو جنبه دارند: جنبه تعریف و جنبه فراخوانی.
جنبه تعریف: دستورالعملهایی است که عملکرد تابع را مشخص می کند.
جنبه فراخوانی: دستوری است که تابع را اجرا می کند.
توابع به این صورت تعریف می شوند:
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
function نام تابع (آرگومانهاي مجازي و نوع آنها) : نوع نتيجه آنها ;
begin
دستورات اجرايي
end.
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
نکته: نامگذاری توابع مانند نامگذاری متغیرهاست.
نکته: بدنه تابع با begin شروع و به end خاتمه می یابد.
آرگومانهای مجازی: اطلاعاتی هستند که از برنامه فراخوان به تابع منتقل می شوند
نکته: چون تابع، مقداری را بر می گرداند، نوع آن مقدار نیز باید مشخص باشد. برای این کار، نوع مورد نظر را در قسمت " نوع نتیجه تابع " می نویسیم.
*** نکاتی در مورد تعریف توابع ***
- نوع نتیجه ای که تابع بر می گرداند، باید هعنگام تعریف تابع مشخص شود.
- چون مقداری که توسط تابع برگردانده می شود در نام تابع قرار می گیرد، نام تابع در بدنه تابع حداقل یکبار باید مقدار بگیرد. اگر نام تابع چند بار مقدار بگیرد، آخرین مقداری که در آن قرار دارد، هنگام خروج از تابع، به برنامه فراخوان برگردانده می شود.
- بهتر است پارامترهای تابع، همگی به صورت مقدار باشند، زیرا در غیر اینصورت ممکن است غیر از مقداری که در نام تابع قرار می گیرد، مقادیر دیگری را تغغیر دهد و موجب اثرات جانبی منفی شود.
توابع و زیرروالها به عنوان پارامتر
توابع و زیرروالها می توانند به عنوان پارامتر توابع با زیرروالهای دیگر انتخاب شوند.
مثلا، در زیربرنامه proc1 که در زیر آمده است، تابع arg به عنوان پارامتر مجازی آن است که خودش پارامتری به نام x دارد که از نوع اعشاری می باشد . نتیجه آن هم اعشاری است. پارامتر دیگر زیرروال proc1 ، متغیرy است.
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
procedure proc1 (function arg (x:integer) : real ; y : real ;
...
begin
...
end;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در این حالت، هنگامی که تابع proc1 فراخوانی می شود، اولین پارامتر واقعی آن باید نام تابعی باشد که دارای پارامتری از نوع صحیح باشد و دومین پارامتر واقعی آن، باید متغیری از نوع اعشاری باشد.
نکته: توابعی که به عنوان پارامتر واقعی ارسال می شوند، فقط می توانند پارامترهای مقداری داشته باشند.
استفاده از پارامترهای تابع با زیرروال، در مواردی خوب است که بخواهیم در داخل زیر برنامه، از زیر برنامه دیگری استفاده کنیم که در این زیر برنامه تعریف نشده باشد، بلکه در خارج از آن تعریف شده باشد.
زیر برنامه های کتابخانه ای
در پاسکال، تعدادی از زیر برنامه ها از قبل نوشته شده و برنامه نویس می تواند از آنها استفاده کند.
زیر برنامه های کتابخانه دو دسته اند: زیر برنامه های کتابخانه ای زیرروال و زیر برنامه های کتابخانه ای تابعی
نکته: تاکنون از چند زیر روال کتابخانه ای استفاده کردیم . اگر یادتان باشد داشتیم: readln,read,writeln,write
اما تعدادی از زیر برنامه های کتابخانه ای به صورت تابع هستند که کاربرد بسیار زیادی دارند. این توابع را توابع کتابخانه ای می نامیم.
نکته: هر تابع کتابخانه ای می تواند یک یا چند پارامتر داشته باشد ولی فقط یک مقدار را بر می گرداند.
چند تابع کتابخانه ای :
|
نام تابع
|
عملکرد
|
نوع پارامتر
|
نوع نتیجه
|
|
Abs(x)
|
قدر مطلق x را محسبه می کند.
|
اعشاری یا صحیح
|
همنوع با پارامتر
|
|
ArcTan(x)
|
زاویه ای مثل y را بر حسب رادیان بر میگرداند به طوری که:
x=Tan(y)
|
اعشاری یا صحیح
|
اعشلری(رادیان)
|
|
Cos(x)
|
کسینوس زاویه x را محاسبه می کند.
|
اعشاری یا صحیح بر حسب رادیان
|
اعشاری
|
|
Sin(x)
|
سینوس زاویه x را محاسبه می کند.
|
اعشاری یا صحیح بر حسب رادیان
|
اعشاری
|
|
Sqr(x)
|
مربع x را محاسبه می کند.
|
اعشاری یا صحیح
|
همنوع با پارامتر
|
|
Sqrt(x)
|
ریشه دوم مثبت x را به ازای x>=0 محاسبه می کند. اگر x<0 باشد پیغام خطایی صادر می کند.
|
اعشاری یا صحیح
|
اعشاری
|
|
Trunc(x)
|
قسمت صحیح x را بر میگرداند.
|
اعشاری
|
صحیح
|
|
Exp(x)
|
ex را محاسبه می کند. (e=2.71...)
|
اعشاری یا صحیح
|
اعشاری
|
|
Ln(x)
|
لگاریتم طبیعی x را محاسبه می کند.
(x>=0)
|
اعشاری یا صحیح
|
اعشاری
|
|
Round(x)
|
نزدیکترین مقدار صحیح به x را بر می گرداند.
|
اعشاری
|
صحیح
|
|
Frac(x)
|
قسمت اعشاری آرگومان را بر می گرداند.
|
اعشاری
|
اعشاری
|
|
Int(x)
|
قسمت صحیح آرگومان را بر می گرداند
|
اعشاری
|
اعشاری
|
|
Pi
|
مقدار تقریبی Π را برمی گرداند.
|
ندارد
|
اعشاری
|
|
Random
|
یک عدد تصادفی بین 0و1 را بر می گرداند.
|
ندارد
|
اعشاری
|
|
Random(x)
|
یک عدد تصادفی صحیح بین 0وx را برمی گرداند.
|
صحیح
|
صحیح
|
زیر برنامه هایی که بعدا تعریف می شوند
<-- Iran Universities Software Students [iuss.ir] -->
<-- Start Code -->
procedure نام زير برنامه (پارامترها);forward;
function نام تابع (پارامترها) : نوع نتيجه تابع ; forward;
<-- End Code -->
<-- Birjand University Software Students [buss.ir] -->
در اینگونه موارد باید به اطلاع کامپایلر برسانیم که این زیر برنامه، بعدا تعریف خواهد شد. برای این منظور از دستور forward استفاده می کنیم.
*** نکات برنامه نویسی در مورد پارامترها ***
- پارامتر واقعی با پارامتر مجازی متغیر، باید یک متغیر باشد (ثابت نباشد)
- اگر به نظر شما، زیر برنامه به درستی عمل می کند ولی نتیجه ی مورد انتظار شما را بر نمی گرداند، ممکن است یادتان رفته باشد که پارامتر های ورودی و خروجی را به صورت متغیر تغریف کرده باشید.
- هنگام استفاده از توابع، از پارامتر متغیر استفاده نکنید. چون اثر جانبی محسوب می شود و از نظر برنامه نویسی، مردود است. مقداری که توسط تابع برگردانده می شود، حتما باید در نام تابع قرار گیرد.
- در زیر برنامه ها هیچگاه متغیرهای عمومی را تغییر ندهیدف چون این کار نیز موج اثرات جانبی می شود.
- شناسه ها را خارج از محدوده اثر آنها استفاده نکنید، در غیر این صورت، با پیام خطایی موجه خواهید شد.
*********************
خوب. آنچه که خواندید قستهای مهم و کلیدی از کتاب "برنامه نویسی به زبان پاسکال" نوشته "مهندس عین الله جعفر نژاد قمی" بود که به طور خلاصه تقدیم گردید.
ما از ارائه این متن ، تنها قصدی که داریم، آموزش مطالب بود و هیچ قصد خاص دیگری نداشتیم و نخواهیم داشت.
با تشکر