۲-۴ آشنایی با ساختارهای تکرار و تصمیم
۲۸ دی ۱۳۹۷رمز گشایی پالسهای انکودر
۲۸ دی ۱۳۹۷هنگام استفاده از زبان برنامهنویسی C، گاهی ممکن است در یک برنامه عمل خاصی باشد که شما بخواهید بارها و بارها آن عمل را انجام دهید.
مثلا فرض کنید میخواهید چندینبار در برنامهی خود میانگین یک سری عدد را محاسبه کنید. در این حالت اگر بخواهید هر بار که نیاز به گرفتن میانگین دارید دستورات میانگینگیری را دوباره بنویسید، با حجم زیادی از کد مواجه خواهید شد. اما با تعریف یک تابع به راحتی این کار امکان پذیر است که با تعریف یک بار عمل میانگینگیری در دفعات بعدی نیاز به تعریف مجدد آن دستورات و تعاریف نباشد و شما از همان تعریف اولیه استفاده کنید.
در زبان برنامهنویسی C نحوهی تعریف توابع به شکل مقابل است:
[php] Return value Type Function Name (Parameters) { Function body Statements; Return some value; } [/php]
در تعریف بالا در قسمت Type Return value باید نوع متغیری که قرار است از تابع بازگشت داده شود را بیاوریم. مثلا اگر تابع ما قرار است در نهایت یک مقدار int را برگردانند، باید به جای این عبارت، عبارت int را بیاوریم. اگر تابع ما هیچ مقداری را قرار نیست که برگرداند، در اینجا از عبارت void استفاده میکنیم.
در بخش Function Name نام تابع مورد نظر را میآوریم. مثلا میتوانیم نام Average را برای تابع میانگینگیر خود تعریف کنیم. در قسمت Parameters باید پارامترها یا در واقع متغیرهایی را که میخواهیم تابع روی آنها اعمالی را انجام دهد را بیاوریم. در این قسمت باید نوع متغیرها نیز ذکر شوند.
در بخش Function body دستورات لازم را مینویسیم. مثلا اگر میخواهیم از پارامترهای ورودی میانگین بگیریم باید دستورات میانگینگیری را در این جا بنویسیم.
حال در بخش Return some value باید اگر مقداری داریم که میخواهیم تابع پس از انجام اعمال مورد نظر برگرداند را در اصطلاح return کنیم. اگر تابع را در ابتدا void تعریف کردهایم نیاز به این کار یعنی برگردادندن مقدار نیست.
مثلا به تعریف مقابل نگاه کنید:
[php] float Average( int a, int b, int c){ float avg=0; avg=(a+b+c)/3; return (avg); } [/php]
در تعریف بالا یک تابع با نام Average تعریف کردهایم که با دریافت سه پارامتر ورودی میانگین هرسه را محاسبه کرده و نتیجه را برمیگرداند.
نحوهی فراخوانی این تابع به شکل زیر است:
[php] float avg = Average(amount1, amount2, amount3); [/php]
در فراخوانی بالا فرض شده است که مقادیر amount3 ،amount2 ،amount1 قبلا تعریف و مقداردهی شدهاند.
در روبرو تابع به توان رساندن یک متغیر آورده شده است:
[php] double power(double val, unsigned pow) { double ret_val = 1.0; unsigned i; for(i = 0; i<pow; i++) ret_val *= val; return (ret_val); } [/php]
نحوهی فراخوانی تابع توان:
[php] result = power(val, pow); [/php]
با این فراخوانی مقدار val به توان pow میرسد و نهایتا جواب در متغیر result قرار داده میشود.
در زیر پیادهسازی تابع factorial را میبینید:
[php] int fact( int amount){ int i, factorial=1; if(amount ==0) return 1; for(i=1; i<=amount; i++) factorial*=i; return factorial; } [/php]
در تابع factorial مقدار فاکتوریل یک عدد صحیح محاسبه شده است. اما توابع میتوانند به صورت بازگشتی نیز پیادهسازی شوند. مثلا همین تابع factorial نیز میتواند به صورت بازگشتی پیادهسازی شود.
به تعریف زیر دقت کنید:
[php] double fact( double n) { if ( n == 1) return 1; return n*(fact(n-1)); } [/php]
در تعریف بالا با استفاده از فراخوانی مجدد تابع factorial در درون خود مقدار فاکتوریل یک عدد در نهایت محاسبه میشود.
در واقع در هر بار فراخوانی تابع factorial یکی از مقدار ورودیاش کاسته میشود تا ورودی به عدد یک برسد. در اینجا با رسیدن به شرط بازگشت عمل، بازگشت شروع شده و با ضرب شدن تک تک مقادیر قبلی محاسبه شده در هم مقدار فاکتوریل عدد محاسبه میشود.
سعی کنید با تابع بالا یک بار در ذهن خود فاکتوریل یک عدد کوچک را محاسبه کنید تا با سازوکار آن بیشتر آشنا شوید. توابع بازگشتی گاه پیاده سازی را برای ما بسیار آسان میکنند.