آکادمی سیم پاور

برنامه نویسی در ++C با حلقه ها

مثال 2 : برنامه ای که مربع اعداد 1 تا 10 را در خروجی چاپ کند :

Calculator-Icon

این برنامه هم مشابه مثال قبليست :

جواب:

#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 برعکس متغير های دیگر ( که اگر به آنها مقدار اوليه ندهيم ، مقدار آنها نامعلوم

خواهد بود ) دارای مقدار اوليه ی صفر است .

 

سعید عربعامری
من سعید عربعامری نویسنده کتاب 28 گام موثر در فتح متلب مدرس کشوری متلب و سیمولینک و کارشناس ارشد مهندسی برق قدرتم . بعد از اینکه دیدم سایتهای متعدد یک مجموعه کامل آموزش متلب و سیمولینک ندارند به فکر راه اندازی این مجموعه شدم
http://sim-power.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *