ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

توابع function

 
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Mon Nov 29, 2004 11:27 pm    Post subject: توابع function Reply with quote

تعریف برنامه :
به مجموعه دستوراتی که یک هدف کلی را پیاده سازی می نماید برنامه اطلاق می شود .

تعریف زیر برنامه :
وظایف یک برنامه عموما بین زیر برنامه ها تقسیم می شود . به چنین روشی در برنامهنویسی که وظایف ببین پیمانه های زیر برنامه ای تقسیم می شود به چنین روشی در برنامه نویسی که وظایف بین پیمانه های زیر برنامه ای تقسیم شده اند برنامه نویسی ماژولار می گویند .

انواع زیر برنامه نویسی :
زیر برنامه هابر دو نوع اند:
الف) زیر برنامه تابع که لزوما یک مقدار را به عنوان حاصل عملیات در نام خود بر می گرداند
ب) زیر برنامه پروسیجر(procedure) که مقداری به عنوان حاصل عملیات در نام خود بر نمی گرداند

مزایای برنامه نویسی ماژولار (ساخت یافته) نسبت به روش غیر ماژولار :
1) خطا یابی آسانتر
2) اصلاح و توسعه آسانتر
3) امکان پیاده سازی یک برنامه توسط یک تیم
4) کوتاهتر شدن source برنامه
5) خواناتر شدن برنامه و آسانتر شدن پیگیری منطق اجرایی یک برنامه


نکته Exclamation :
در زبان C زیر برنامه procedure به صورت تابعی با خروجی بدون نوع ( خروجی void) تعریف می شود . هر تابعی را از دو جنبه مورد برسی قرار می دهیم .
الف) از لحاظ نحوه تعریف که خود در زبان C شامل دو بخش است :
1) تعریف اعلان یا الگو یا مبتدای تابع : که بایستی برای کلیه توابع یک برنامه لحاظ شود.وجای آن قبل از تعریف تابع main انجام می باشد .
2) تعریف بدنه تابع : این بخش برای یک تابع پس از بدنه تابع main در زبان C پیاده سازی می گردد .
در تعریف بدنه تابع ابتدا اگوی تابع آورده می شود سپس بدنه برنامه در یک بلاک ({ }) نظیر تابع main لحاظ می گردد .
یادآوری :
حوضه تعریف متغییرها عموما بر دو نوع محلی وسراسری است . متغییرهای محلی را در یک تابع تعریف می کنیم و فقط در همان تابع می توانید از آنها استفاده کنیم
ب) فراخوانی تابع در زبان C نیز با آوردن نام تابع و اسامی آرگمانهای که به جای پارامترهای تعریف شده در بخش تعریف تابع قرار می گیرند تابع را فراخوانی می کنیم .


اعلان ها در زبان C به صورت زیر مورد استفاده قرار می گیرند :
نوع[نام متغیر]پارامترها )نام تابع  نوع);

مثال:تعریف اعلان یک تابع را بنویسید با نام f1 که یک ورودی صحیح و یک خروجی صحیح داشته باشد ؟
int f1(int x);

مثال:تعریف اعلان یک تابع را بنویسید با نام f2 که یک ورودی صحیح ، یک ورودی اعشار ، یک ورودی خروجی از نوع اعشار و یک خروجی اعشار از نوع double داشته باشد ؟
double f2 (int,flout,flout*);

مثال:تعریف اعلان یک تابع را بنویسید که یک ورودی ویک ورودی خروجی داشه بدون اینکه مقداری را باز گرداند ؟
void p1(int,int*);



بدنه توابع نیز به صورت زیر مورد استفاده قرار می گیرند :
معرفی نوع و نام پارامترها)نام تابع  نوع )
{
معرفی متغییر های محلی
}


مثال:برنامه ای بنویسید که عدد 100 را گرفته و مجموع اعداد 1 تا 100 را با استفاده از یک تابع محاسبه کند ؟
#inclode <stdio.h>
#inclode <conio.h>
int sigma(int);
main(){
int x=100,y;
y=sigma(x);
printf("sigma of 1 to %d is %d",x,y);
getch();
return 0;
}
int sigma(int n)
{
int sum=0;
for(;n>0;n--)
sum+=n;
return (sum);
}


مثال:برنامه ای بنیویسید که سه عدد صحیح را از ورودی دریافت نموده بزرگترین کوچکترین ومیانگین آنها را محاسبه نموده سپس این نتایج را در خروجی چاپ کند ؟ (راهنمایی از پنج زیر برنامه برای عملیات فوق استفاده کنید . آنها به ترتیب : تابع Getvalues برای خواندن اطلاعات ، تابع max برای محاسبه بزرگترین عدد از بین سه عدد و تابع min و avrg را نیز به همین ترتیب تعریف کرده سپس تابع showResults را برای نمایش مقادیر حاصل به کار برد)
#include <stdio.h>
#include <conio.h>
void getvalues(int *,int *,int *);
int max(int,int,int);
int min(int,int,int);
float avrg(int,int,int);
void showResult(int,int,float);
main()
{
 int x=0,y=0,z=0,mx,mn,i;
for(i=1;i<9;printf("hello%d",i),i++);
 float av;
 clrscr();
 getvalues(&x,&y,&z);
 mx=max(x,y,z);
 mn=min(x,y,z);
 av=avrg(x,y,z);
 showResult(mx,mn,av);
 getch();
 return 0;
}
void getvalues(int*x,int*y,int*z)
{
printf("\n\n Enter a number(1) :");
scanf("%d",x);
printf("\n Enter a number(2) :");
scanf("%d",y);
printf("\n Enter a number(3) :");
scanf("%d",z);
return;
}
int max(int o1,int o2,int o3)
{
int maximum;
if(o1>=o2)maximum=o1;
else maximum=o2;
if(o3>=maximum)maximum=o3;
return(maximum);
}
int min(int g1,int g2,int g3)
{
int minimum;
if(g1<=g2)minimum=g1;
else minimum=g2;
if(g3<=minimum)minimum=g3;
return(minimum);
}
float avrg(int t1,int t2,int t3)
{
float sum;
sum=t1+t2+t3;
sum=sum/3;
return(sum);
}
void showResult(int p1,int p2,float p3)
{
printf("\n\n\t Max = %d \n\n\t Min = %d \n\n\tAvrg = %0.2f",p1,p2,p3);
return;
}


Last edited by arash on Thu Dec 02, 2004 6:23 am; edited 1 time in total
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Thu Dec 02, 2004 6:03 am    Post subject: Reply with quote

در مثال بالا اول هدر توابع تعریف شده سپس در تابع main به ترتیب توابع فراخوانی شد وهر کدام وظیفه خود را انجام داده و کنترل برنامه پس از انجام هر یک از زیر برنامه ها دوباره به قسمتmain باز می گردد. اولین زیر برنامه یعنی تابع getvalues وظیفه گرفتن سه مقدار وقرار دادن آن در x,y,z را بر عهده دارد .
برای این کار ما آدرس سه متغییر x,y,z را ( به وسیله دستور &x,&y,&z ) به درون تابع می فرستیم زیرا قرار است مقدار این سه متغییر در درون تابع تغییر کند ( چون قرار است سه متغییر x,y,z را از نوع call by reference باشند ) پس برای اینکه بعدا ما متغییرهای x,y,z را فراخوانی می کنیم مقادیر را در مکانهایی از حافظه که نامهای آنها x,y,z است ذخیره می کنیم و در تعریف خود تابع x,y,z را به صورت اشاره گر تعریف میکنیم . به همین خاطر برای استفاده از دستورscanf در تابع (getvalues (Function احتیاجی نیست مقادیر را در آدرس x,y,z ذخیره کنیم چون در داخل x,y,z ، آدرس متغییرهای اصلی x,y,z ذخیره شده است .
لازم به یاد آوری نیست که یک x,y,z در بدنه اصلی برنامه تعریف شده وبه عنوان متغییرهای اصلی هستند و یک x,y,z نیز به صورت محلی در تابع getvalues تعریف شده است .
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Sun Dec 05, 2004 10:10 pm    Post subject: نكات تكميلي Reply with quote

متغير هايي كه در داخل تابع تعريف ميشوند متغير هاي محلي local ناميده ميشوند و تنها در همان تابع كه تعريف شده اند قابل استفاده هستند . اين متغير ها بيرون از تابع ناشناس هستند .
متغير هاي سراسري Global يا عمومي خارج از بدنه تابع تعريف ميشوند . معمولا متغيرهاي سراسري را قبل از تابع main() تعريف ميشوند .
نكته مهم در مورد توابع سراسري انستكه از خط تعريف به بعد در دسترس هستند .
int a;
main(){
   int b;
   .
   .   
   .
   }
int c;
function1(...){
int d;
.
.
.
}
int e;
function2(...){
...}

در مثال فوق متغير a براي تمامي توابع تعريف شده است .
متغير b تنها براي تابع main تعريف شده است .
متغير c براي function1 و funtion2 تعريف شده است .
متغير d تنها براي function1 تعريف شده است .
متغير e براي تابع function2 به بعد تعريف شده است .
يعني اين متغير براي تابع function1 تعريف نشده است .


Last edited by vahid on Sun Dec 05, 2004 10:52 pm; edited 1 time in total
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Sun Dec 05, 2004 10:13 pm    Post subject: نكات تكميلي Reply with quote

نكته مهمي كه بايد يادتان باشد انستكه : در ابتداي هر بلوك } در صورتي كه متغيري تعريف شود تنها در همان بلوك براي برنامه قابل شناسايي است و بلافاصله پس از خارج شدن از بلوك { متغير تعريف شده پاك ميشود .
حتما ميدانيد كه استفاده از اين بلوك ها براي چه زمانهايي هست ؟ مثلا براي دستوراتي چون while و for و if و ... در هنگام باز شدن بلوك ميتوان متغيري تعريف كرد و بسته شدن همان بلوك متغير مربوطه پاك ميشود . اين متغير ها در استك سگمنت ساخته ميشوند و بلافاصله پس از خروج از بلاك در استكمنت از بين ( گم ميشوند ) ميروند .


Last edited by vahid on Sun Dec 05, 2004 11:06 pm; edited 1 time in total
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Sun Dec 05, 2004 10:17 pm    Post subject: نكات تكميلي Reply with quote

متغيرهاي محلي در استك ساخته ميشوند . هر گاه مقدار دهي اوليه نشوند . معلوم نخواهد بود چه مقداري در انها خواهد بود .
متغيرهاي عمومي يا سراسري در ديتا سگمنت تعريف ميشوند و هر گاه مقدار دهي اوليه نشوند مقدار اوليه انها صفر است .
متغيرهاي سراسري تا انتهاي برنامه زنده ميمانند .
هرگاه متغيري محلي و عمومي با يكديگر همنام شدند ان متغير محلي در بلاك تعريف شده اولويت دارد .
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum