مثال 2 : برنامه ای که مربع اعداد 1 تا 10 را در خروجی چاپ کند :
این برنامه هم مشابه مثال قبليست :
جواب:
#include <iostream.h>
int sqr(int x)
{
return x*x;
}
int main()
{
for (int i=1; i<=10; i++)
{
cout << sqr(i) << endl;//sim-power.ir
}
return 0;
}
یا به این صورت :
#include <iostream.h>
int sqr(int x);
int main()
{
for (int i=1; i<=10; i++)
{
cout << sqr(i) << endl;
}
return 0;
}
int sqr(int x)
{
return x*x;
}
مثال 3 : با استفاده از یک تابع ، برنامه ای بنویسيد که اعداد 1 تا 100 را در خروجی چاپ کند :
راهنمایی : تابعی خواهيم نوشت که عدد را بگيرد و توسط مقدار برگردانده شده نشان دهد که اول یا نه . اگر اول بود 1 برگرداند اگر نه 0 را
برگرداند .
#include <iostream.h>
int aval(int x)
{
int w=0;//sim-power.ir
for(int i=1;i<=x;i++)
{
if (x%i==0)
w++;
}
if(w==2)
return 1;
else
return 0;
}
int main()
{
int a;
for(int i=1;i<=100; i++)
{
if(aval(i)==1)
cout<<” adad e aval = ” << i<<endl;
}
return 0;
}
به این شکل هم می توانستيم بنویسيم :
#include <iostream.h>
int aval(int x);
int main()
{
int a;
for(int i=1;i<=100; i++)
{
if(aval(i)==1)
cout<<” adad e aval = ” << i<<endl;
}
return 0;//sim-power.ir
}
int aval(int x)
{
int w=0;
for(int i=1;i<=x;i++)
{
if (x%i==0)
w++;
}
if(w==2)
return 1;
else
return 0;
}
مثال : برنامه ای بنویسيد که سه عدد را از کا گربر رفته و آنها را به تابعی فرستاده و بزرگترین آنها را پيدا و چاپ کند .
#include <iostream.h>
int max ( int x, int y, int z)
{
int max=x;
if(max<y) max=y;
if(max<z) max=z;
return max;//sim-power.ir
}
int main()
{
int a,b,c;
cout<<“Enter three numbers: ” <<endl;
cin>>a>>b>>c;
cout<<“The max number is = ” <<max(a,b,c)<<endl;
return 0;
}
یا به این صورت :
#include <iostream.h>
int max ( int x, int y, int z);
int main()
{
int a,b,c;
cout<<“Enter three numbers: ” <<endl;
cin>>a>>b>>c;//http://sim-power.ir
cout<<“The max number is = ” <<max(a,b,c)<<endl;
return 0;
}
int max ( int x, int y, int z)
{
int max=x;
if(max<y) max=y;
if(max<z) max=z;
return max;
}
یک نمونه استفاده از توابعی که هيچ مقداری را برنمی گردانند :
برنامه ای که مقداری را می گيرد و مشخص می کند در چه محدوده ای از صفر قرار دارد .
#include <iostream.h>
void fun (int x)
{
if(x<0)
cout<<“The number is lower then zero ! ” <<endl;
else
cout<<“The number is higher then zero ! (Or equal with ) ” <<endl;
return ;//http://sim-power.ir
}
int main()
{
int a;
cout<<“Enter a number: ” ;
cin>>a;
fun(a);
return 0;
}
خوب به ساختار استفاده ی تابع بالا توجه کرده و آن را به خاطر بسپارید . با فراخوانی تابع و اجرای آن مانند این است که عينا دستورات آن را
در همان مکان اجرا می کنيم .
ممکن است در جایی حتی لازم نباشد تابع مقداری را بگيرد ! پس :
مثال : برنامه ای که با استفاده از تابعی در صفحه چاپ کند : MajidOnline.com First Persian Graphic and Web design Resource
#include <iostream.h>
void fun ()
{
cout<<“***MajidOnline.com “<<endl
<<“First Persian Graphic and Web design Resource “
<<endl;
return ;
}
int main()
{
fun();
return 0;
}
یک نکته ی مهم :
انواع شوه های عمومی فراخوانی داده ها توسط یک تابع :
pass by refrence 1-
pass by value 2-
برای متوجه شدن مفهوم ایندو شيوه به برنامه ی زیر توجه فرمایيد :
#include <iostream.h>
int f1( int a )
{
return a *= a;
}
void f2( int &b )
{
b*= b;
}
int main()
{
int x = 2, z = 4;
cout << “x = ” << x << ” before passByValue\n”
<< “Value returned by passByValue: “
<< f1( x ) << endl
<< “x = ” << x << ” after passByValue\n” << endl;
//********
cout << “z = ” << z << ” before passByReference” << endl;//http://sim-power.ir
f2( z );
cout << “z = ” << z << ” after passByReference” << endl;
return 0;
}
در ضيوه ی pass by value می خواهيم با استفاده از تابع f1 مقداری را مربع کنيم . در نهایت خواهيد دید که بعد از اجرای تابع ، هيچ تاثيری در مقدار اوليه
ی تابع نخواهد داشت .
اما اگر به قسمت pass by reference و تابع f2 توجه کنيد ، خواهد دید از یک علامت & (آمپر سند) بين اسم متغير ارسالی و نوع آن استفاده کرده ایم .
این یعنی اینکه هر تغيير که روی مقدار ارسالی ما در داخل تابع صورت گرفت ، آنرا بر روی آن ذخيره کن . در واقع در حالت pass by reference مقدار متغير اوليه
ارسالی به تابع تغيير کرده و در آن ذخيره خواهد شد .
درواقع در خروجی خواهيم داشت :
x = 2 before passByValue
Value returned by passByValue: 4
x = 2 after passByValue
z = 4 before passByReference
z = 16 after passByReference
می توانيد تغييرات زیادی روی برنامه بالا انجام دهيد تا به شيوه ی کار هر کدام پی ببرید . مثلا :
-1 یکبار علامت آمپر سند را بردارید .
-2 یکبار سعی کنيد نوع توابع را تغيير دهيد .
.
رای آشنایی بيشتر با کاربرد علامت & به برنامه ی ساده ی زیر توجه کنيد :
مثال : برنامه ای بنویسيد که عددی را گرفته و مقدار همان را 10 برابر کند :
#include <iostream.h>
void jj(int &a)
{
a*=10;
}
int main()
{
int x;
cout<<“Enter a number plz ! : “;//http://sim-power.ir
cin>>x;
jj(x);
cout<<“result is : ” <<x;
return 0;
}
با قرار دادن علامت آمپرسند ، با تغيير مقدار a ، این تغييرات در همانجا ذخيره می شود.
می توانيد یکبار هم & را بردارید و نتيجه آنرا ببينيد . در اینصورت ، مقدار ورودی هيچ تغييری نخواهد کرد.
فقط یادتان نرود که بين نام متغير و نوع آن ( که & در ميان آنها قرار خواهد گرفت ) فاصله را رعایت کنيد .
آشنایی با یک نوع داده : static int :
Static int یک نوع داده است که تقریبا کار آن ، شبيه عمل نوع داده ی int به همراه & است .
برای درک این مطلب به برنامه ی زیر توجه بفرمایيد:
#include <iostream.h>
void printme()
{
static int i=1;
cout<<i++<<” “;
}
int main()
{
for(int k=0; k<10; k++)
printme();
return 0;
}
حالا خودتان با توجه به خروجی می توانيد نحوه ی کار این نوع داده ر ا بگویيد ؟
در خروجی این برنامه خواهيم داشت :
1 2 3 4 5 6 7 8 9 10
حال در برنامه static int را تبدیل کنيد به int تبدیل کنيد . در خروجی خواهيم داشت :
1 1 1 1 1 1 1 1 1 1
حال int را دوباره به حالت اوليه برگردانيد و این بار مقدار دهی اوليه ی آن را پاک کنيد . یعنی به این صورت : ;static int i
در خروجی خواهيم داشت :
0 1 2 3 4 5 6 7 8 9
از این آخری می توانيم نتيجه بگيریم که متغير static int برعکس متغير های دیگر ( که اگر به آنها مقدار اوليه ندهيم ، مقدار آنها نامعلوم
خواهد بود ) دارای مقدار اوليه ی صفر است .