فراخوانی توابع در c++

فراخوانی توابع در c++ سی پلاس پلاس

برنامه نویسی c++

1- فراخوانی توابع با مقدار در c++ سی پلاس پلاس :

مقادیر متغیرها به تابع فرستاده میشود و در آنجا توسط پارامترهای معمولی تابع دریافت میگردد.

2- فراخوانی تابع با آدرس در c++ سی پلاس پلاس :

آدرس متغیرها به تابع فرستاده میشود و در تابع توسط پارامترهایی از نوع اشاره گر دریافت می گردد.

فراخوانی توابع در c++ سی پلاس پلاس

مثال :


void f1( int,int);
void main()
{
   int a=8 , b=12;
   f1(a,b)
   cout<<a<<b;
}
void f1( int a,int b)
{
   a++;
   b--;
   cout<<a<<b;
}

مثال فراخوانی با آدرس :


void f1(int * , int *);
void main()
{
   int a=8 , b=12;
   f1 (&a , &b);
   cout<<a<<b;
}
void f1(int *p1 , int *p2)
{
   (*p1)++;
   (*p2)--;
   cout<<*p1<<*p2;
}

مثال :

تابعی بنویسید که ضرایب یک معادله ی درجه دوم در c++ را به عنوان پارامتر دریافت کند

و ریشه هایش را محاسبه و چاپ کند. تابع باید تعداد ریشه های معادله را بازگرداند.

مقادیر ریشه ها در تابع فراخواننده ی این تابع باید قابل استفاده باشد.


void main()
{
   int n;
   float a,b,c,x1,x2;
   cin>>a>>b>>c;
   n=f1(a,b,c,&x1,&x2);
   if( n==0) puts("risheh nadarad" );
   if( n==1) cout<<x1;
   if( n==2) cout <<x1 <<x2;
}
int f( float a ,float b ,float c ,float *p1 ,float *p2 )
{
   float d;
   d= b*b-4*a*c;
   if( d<0) return 0;
   if( d==0)
   {
      *p1 = -b/2*a;
      return 1;
   }
   *p1 =( -b+sqrt(d))/(2*a);
   *p2 =( -b-sqrt(d))/(2*a);
   return 2;
}

آرایه ها به عنوان آرگومان توابع :

در مورد آرایه ها فراخوانی توابع با آدرس در c++ به یکی از دو روش زیر صورت میگیرد:

روش اول :


void f1( int b[]);
void main()
{
   int a[10] , j;
   for( i=0 ; i<10 ;i++)
      b[i]=i;
      f1(a);
      for(i=0 ; i<10;i++)
        cout<<a[i];
}
void f1(int b[])
{
   int i;
   for(i=0 ; i<10 ; i++)
   {
      b[i]++;
      cout<< b[i];
   }
}

در این روش آرایه ی جدیدی تشکیل نمیشود. عناصر آرایه ی b به آرایه ی a منطبق میباشند.

روش دوم :

همانطور که گفته شد نام آرایه آدرس شروع آن را مشخص میکند.

بنابراین میتوانیم آدرس شروع آرایه را به تابع ارسال کنیم و در آنجا توسط

اشاره گر دریافت نماییم.


void f1(int *);
void main()
{
   int a[10] , i;
   for(i=0 ; i<10 ;i++)
      a[i]=i;
      f1(a);
      for( i=0 ; i<10 ; i++)
         cout<<a[i];
}
void f1( int *p)
{
   int i;
   for( i=0 ; i<10 ; i++ ,p++)
   {
      (*p)++;
      cout<< *p;
   }
}

مثال :

تابعی به نام slen بنویسید که آدرس یک رشته را به عنوان پارامتر دریافت کند و طولش را بنویسد.


int slen( char *p)
{
   int i ;
   for( i=0 ; *p ; i++ ;p++);
   retuen i ;
}

مثال :

تابعی به نام scmp بنویسید که آدرس دو رشته ی s1 و s2  را به عنوان پارامتر دریافت کند و اگر

s1 از s2 بزرگتر بود یک عدد مثبت و اگر s2 بزرگتر بود عدد منفی و در صورت برابری صفر را برگرداند.


int scmp (char *p1 ,char *p2)
{
   for( ; *p1 && *p2 && *p1 ==*p2 ; p1++ , p2++ );
   if( *p1> *p2) return +1;
   if( *p1< *p2) return -1;
   return 0;
}