arash مدير بخش سي
Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
|
Posted: Mon Dec 06, 2004 10:47 pm Post subject: فرق procedure و function جلسه هشت . 16 آذر |
|
|
برای اینکه تشخیص دهیم که یک تکه برنامه procedure است یا function کافیست به تعریف تابع نگاه کنیم . اکر تعریف تابع به صورت (y=f(x بود یعنی به شکل زیر :
Quote: | ; ( آرگومانها) نام تابع = متغیر |
آنگاه گوییم که این نوع تعریف تعریف یک تابع است زیرا یک مقدار را باز می گرداند .
واگر به شکله
Quote: | ;( آرگومانها) نام پروسیجر |
بود چون هیچ مقداری را باز نمی گرداند در نتیجه این نوع تعریف ، تعریف یک پروسیجر است .
نکته :
اگر زیر برنامه ای فقط یک خروجی داشته باشد آنرا به شکل تابع می نویسیم اگر بیش از یک خروجی داشته باشد آنرا به شکل پروسیجری که خروجی هایش را پرامترهای call by reference تشکیل می دهند می نویسیم .
مثال : خروجی برنامه زیر چیست ؟
|
#include<stdio.h>
#include<conio.h>
void p1(int *,int);
int f1(int,int *);
main(){
int m=5,n,k=3;
p1(&m,n);
n=f1(m,&k);
printf(" m = %d , n = %d , k = %d ",m,n,k);
return 0;
}
void p1(int *a,int *b)
{
b+=5;
(*a)-=b;
b++;
return;
}
int f1(int a, int *b)
{
a++;
(*b)--;
return(*b)+a;
} |
برای تحلیل مثله بالا کافیست همه پارامترها و آرگمنهای هر کدام از توابع تک تک مورد برسی قرار دهید .
جواب مثال بالا به صورت:: m = 0 , n = 3 , k=2 :: می باشد .
تمرین 1 :
برنامه ای بنویسید که یک عدد صحیح را از ورودی دریافت و فاکتریل آنرا در خروجی بنویسید ؟ (برنامه به صورت ماژولار بنویسید )
|
#include<stdio.h>
#include<conio.h>
int fact(int);
main(){
int x=1,y=1;
do{
clrscr();
printf("\n Enter a number : ");
scanf("%d",&x);
}while(x>=8);
y=fact(x);
printf("\n \n\n \t %d! = %d \n",x,y);
getch();
return 0;
}
int fact(int x)
{ int y=1;
for(;x>0;y*=x,x--);
return y;
} |
در تمرین فوق برای اینکه کاربر اعداد بیش از 7 استفاده نکند از حلقه do...while استفاده شده است . و البته دستور ;()clrscr نیز برای پاک کردن صفحه از اطلاعات قبلی بکار می رود .
تمرین 2:
برنامه ای بنویسید که دو عدد صحیح m و n را از ورودی دریافت و مقادیر (comb(n,m و (perm(n,m را در خروجی چاپ کند ؟ (در این مثال!(perm(n,m)=n!/m!(n-m و !( comb(n,m)=n!/m!(n-m می باشد )
|
#include<stdio.h>
#include<conio.h>
int fact(int);
float comb(int,int);
float perm(int,int);
main(){
int x=1,y=1,x1;
float c=1,p=1;
do{
clrscr();
printf("\n Enter a number(x) : ");
scanf("%d",&x);
}while(x>=8);
do{
printf("\n Enter a number(y) : ");
scanf("%d",&y);
}while(y>=8);
if(x<y)
{
x1=x;
x=y;
y=x1;
}
c=comb(x,y);
p=perm(x,y);
printf("\n\n\n Comb(%d,%d)=%0.0f",x,y,c);
printf("\tPerm(%d,%d)=%0.0f \n",x,y,p);
getch();
return 0;
}
int fact(int x)
{ int y=1;
for(;x>0;y*=x,x--);
return y;
}
float comb(int x,int y)
{
return(fact(x)/(fact(y)*fact(x-y)));
}
float perm(int x,int y)
{
return(fact(x)/fact(y));
} |
مثال : پروسیجر Inc و Dec را در زبان C پیاده سازی کنید ؟
|
#include<stdio.h>
#include<conio.h>
void inc(int*);
void dec(int*);
main(){
int x=1,y=1;
do{
clrscr();
printf("\n Enter x : ");
scanf("%d",&x);
}while(x>=108);
do{
printf("\n Enter y : ");
scanf("%d",&y);
}while(x>=108);
inc(&x);
dec(&y);
printf("\n \n\n \t inc(x)=%d , dec(y)=%d \n",x,y);
getch();
return 0;
}
void inc(int *x)
{(*x)++;
return;
}
void dec(int *y)
{(*y)--;
return;
} |
مثال : توابع Inc و Dec را به شکل توابعی به نامهای finc و fdec بنویسید ؟
|
#include<stdio.h>
#include<conio.h>
int inc(int);
int dec(int);
main(){
int x,y;
do{
clrscr();
printf("\n Enter x : ");
scanf("%d",&x);
}while(x>=108);
do{
printf("\n Enter y : ");
scanf("%d",&y);
}while(x>=108);
x=inc(x);
y=dec(y);
printf("\n \n\n \t inc(x)=%d \t,\t dec(y)=%d \n",x,y);
getch();
return 0;
}
void inc(int x)
{
return ++x;
}
void dec(int *y)
{
return --y;
} |
مثال : برنامه ای بنویسید که یک عدد صحیح از ورودی گرفته و مجموع اعداد زوج بین 0 تا آن عدد را محاسبه و در خروجی چاپ کند ؟
| #include<stdio.h>
#include<conio.h>
int sum(int);
main(){
int x,y;
do{
clrscr();
printf("\n Enter x : ");
scanf("%d",&x);
}while(x>=108);
y=sum(x);
printf("\n \n\n \t sum(x)=%d \n",y);
getch();
return 0;
}
int sum(int x)
{int y;
if(!(x%2))x--;
for(;x>0;y+=x,x-=2);
return y;
} |
Last edited by arash on Tue Dec 07, 2004 9:08 pm; edited 1 time in total |
|