برنامه سازي C++

250
ي ه ساز م ا رن بC ++

description

برنامه سازي C++. فهرست مطالب. مقدمات زبان C++ ساختار های تصمیم گیری و تکرار سایر ساختار های تکرار اعداد تصادفی آرایه ها توابع ساختارها و اشاره گرها برنامه نویسی شی گرا. عملگر انتساب عملگر های محاسباتی عملگرهای افزایش و کاهش عملگر sizeof عملگرهای جایگزینی محاسباتی - PowerPoint PPT Presentation

Transcript of برنامه سازي C++

Page 1: برنامه  سازي C++

++Cبرنامه سازي

Page 2: برنامه  سازي C++

فهرست مطالب

++C زبان مقدماتهای تصمیم گیری و تکرار ساختار

ساختار های تکرار سایرتصادفی اعداد

ها آرایهتوابع

و اشاره گرها ساختارهاشی گرا نویسی برنامه

Page 3: برنامه  سازي C++

++Cبخش اول: مقدمات زبان

عملگر انتساب11.

عملگر های محاسباتی12.

عملگرهای افزایش و کاه13.ش

sizeof عملگر14.

عملگرهای جایگزینی محا15.سباتی

اولویت عملگرها16.

(Comments) توضیحات17.

توابع کتابخانه18.

++C برنامه در19.

تاریخچه مختصر1.

قانون نامگذاری شناسه2.ها

متغیر ها3.

اعالن متغیر4.

تخصیص مقادیر به متغیر5.

داده های از نوع کرکتر6.

کرکتر های مخصوص7.

رشته ها8.

نمایش مقادیر داده ها9.دریافت مقادیر10.

Page 4: برنامه  سازي C++

++Cتاریخچه مختصر

Bjarne stroustrup توس�ط 1980در اوائ�ل ده�ه این زب�ان � توس�عه يافت�ه در آزمايش�گاه ب�ل ط�راحي ش�ده. اين زب�ان عمًال

باش��د Cزب��ان برنام��ه نويس��ي ك��ه امك��ان نوش��تن می برنامه هاي ساخت يافته شئ گرا را مي دهد.

Page 5: برنامه  سازي C++

قانون نامگذاري شناسه ها

متفاوتحروف كوچك و بزرگ در نامگذاري شناسه ها ) 1 د.نمي باش

چهار Xy ، XY ، xY ، xyبنابراين ++ Cشناسه متفاوت از نظر

مي باشد.

Page 6: برنامه  سازي C++

قانون نامگذاري شناسه ها

:نامگذاري شناسه ها) 2 از حروف الفباء• ارقام •) underscoreزير خط (• 31حداكثر طول شناسه •. نميشهشناسه با يك رقم شروع •

Page 7: برنامه  سازي C++

قانون نامگذاري شناسه ها

براي نامگذاري شناسه ها از كلمات كليدي نبايستي استفاده نمود. در ( 3زير بعضي از كلمات كليدي داده شده است.

And Sizeof then xor Template

Float False Friend While continue

extern Private Switch Default Const

delete typedef if this Virtual

Page 8: برنامه  سازي C++

متغيرها

در اسالید بعد به انواع داده ها اشاره .می شود

متغ�ير، مك�اني در حافظ�ه اص��لي ك��امپيوتر مي باش��د ك��ه در آنج��ا ي��ك مق��دار را مي ت�����وان ذخ�����يره و در برنام����ه از آن اس����تفاده نم���ود. ق���انون نامگ���ذاري متغيره���ا هم���ان ق���انون نامگ������ذاري شناس������ه ها

مي باشد.

Page 9: برنامه  سازي C++

رمقادي نوع داده حافظه الزم

int 32768 –تا 32767 بايت 2

unsigned int 0 تا 65535 بايت2

long int 2147483648 –تا 2147483647 بايت 4

unsigned long int 0 تا 4294967295 بايت 4

char يك كاركتر بايت1

float 3.4e38 1.2 تاe-38 بايت 4

double 1.8e308 2.2 تاe-308 بايت 8

انواع داده ها

Page 10: برنامه  سازي C++

اعالن متغیرها

در اسالید بعد مثال هایی از اعالن متغیر ذکر .شده است

قبrrrل از آنكrrrه در برنامrrrه بrrrه متغيرهrrا مقrrداري تخصrrيص داده شrrود و از آنهrrا اسrrتفاده گrrردد بايسrتي آنهrا را در برنامrه اعالن

نمود.

Page 11: برنامه  سازي C++

براي اعالن متغيرx از نوع int : int x;

متغيرهاي برای اعالنp و q را از نوع float كه هر :كدام چهار بايت از حافظه را اشغال مي كنند

float p , q;

متغير برای اعالنnext از نوع كركتر كه مي توان كركتر را به آن تخصيص داد و يك بايت 256يكي از

را اشغال مي كند.char next;

چند مثال از اعالن متغیر ها :

Page 12: برنامه  سازي C++

تخصيص مقادير به متغيرها

در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.

مي توان به متغيرها مقدار اوليه تخصيص نمود. =با استفاده از عملگر

Page 13: برنامه  سازي C++

:مثال

در دستورالعمل int x=26; X اعالن 26 با مقدار اوليه intا از نوع ر

.نموده

در دستورالعمل long int a=67000 , b=260;

تعريف long int را از نوعa و b متغيرهاي نموده با مقادير بترتيب

.67000 و 260

Page 14: برنامه  سازي C++

داده هاي از نوع كركتر

در charبrراي نمrايش داده هrاي از نrوع اسrrتفاده ASCIIحافظrrه كrrامپيوتر از جrrدول

256مي شrrود. جrrدول اسrrكي بrrه هrrر يrrك از 255 تrا 0كركrتر يrك عrدد منحصrر بفrرد بين

تخصيص مي دهد.

Page 15: برنامه  سازي C++

كركترهاي مخصوص

\n Newline

\t Tab

\b Backspace

\a Beep sound

\” Double quote

\’ Single quote

\0 Null character

\? Question mark

\\ Back slash

مي توان براي a\بعنوان مثال از كركتر استفاده نمود. beepايجاد صداي

char x = '\a;

++ بعض��ي از كركتره��اي C کامپ��ایلرمخص�وص ك�ه در برنام�ه مي ت�وان از آنه��ا ب��راي ف��رمت بن��دي اس��تفاده ك�رد را تش�خيص مي ده�د. تع�دادي

ب��ه از اين كركتره��اي مخص��وص بع�د آنه�ا در اس�ًالید هم�راه ک�اربرد

آورده شده است .

Page 16: برنامه  سازي C++

رشته ها

عبارتست از دنباله اي از stringرشته يا قرار داده مي شود. در " " كركترها كه بين

ختم 0حافظه كامپيوتر انتهاي رشته ها بوسيله \مي گردد.

در اسالید بعد به دو مثال دقت نمایید.

Page 17: برنامه  سازي C++

:1مثال

"BOOK STORE"د ي�ك رش�ته ه كرك�تري ك�ه ب�ه 0مي باش�د ك�ه ب�ا توج�ه ب�ه كرك�تر \

انته�اي آن در ح�افظه اض�افه مي ش�ود � يازده بايت را اشغال مي كند. جمع��ا

Page 18: برنامه  سازي C++

:2مثال

ک��ه نمایی��د دقت "w" ي��ك رش��ته مي باش��د ك��ه دو ب��ايت از حافظ��ه را

' ي��ك wاش��غال مي كن��د در حاليك��ه 'كرك�تر مي باش�د ك�ه ي�ك ب�ايت از حافظ�ه

را اشغال مي نمايد.

Page 19: برنامه  سازي C++

نمايش مقادير داده ها

تور از یب�راي نم�ايش داده ه�ا ب�ر روي ص�فحه م�ان cout ك��ه ب�دنبال آن عملگ��ر درج يع��ني >> قي�د

ش��ده باش��د اس��تفاده مي گ��ردد. بايس��تي توج��ه +Cداش�ت ك�ه دوكرك�تر > پش�ت س�ر هم توس�ط

+ بصورت يك كركتر تلقي مي گردد.

Page 20: برنامه  سازي C++

پيغام برای نمایش good morningصفحه بر روی : نمایش

cout << "good morning;"

برای نمایش مقدار متغیرX: بر روی صفحه نمایش cout << x;

مثال :

Page 21: برنامه  سازي C++

دریافت مقادیر متغیرها

ب�ه منظ�ور دري�افت مق�ادير ب�راي متغيره�ا در ض�من اج�راي ك��ه ب��دنبال آن عملگ��ر cinبرنام��ه از ص��فحه كلي��د، از

اس�تخراج يع�ني << قي�د ش�ده باش�د مي ت�وان اس�تفاده نمود.

Page 22: برنامه  سازي C++

مثال :

int x;cout >> "Enter a

number; ":cin << x;

Page 23: برنامه  سازي C++

عملگر انتساب

مي باشد كه =عملگر انتساب باعث مي گردد مقدار عبارت در

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

قرار گيرد.

Page 24: برنامه  سازي C++

مثال :

x=a+b;

x=35 ; x=y=z=26 ;

از عملگره���اي انتس���اب چندگان���ه ن���يز ه مق�دار س�ه ک�مي ت�وان اس�تفاده نم�ود.

ميشود.26 برابر با x و y و zمتغير

Page 25: برنامه  سازي C++

عملگرهاي محاسباتي

:++ پنج عملگر محاسباتي وجود دارد كه عبارتند از Cدر

اين عملگرها دو تائي مي باشند زيرا روي دو عملوند عمل مي نمايند. از طرف ديگر عملگرهاي + و – رامي توان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.

جمع +

تفريق -ضرب *

تقسيم /

باقيمانده %

Page 26: برنامه  سازي C++

:1مثال

* ، + ، – در حrالتي كrه هrر دو عملونrد عملگرهrاي % ، / ، از نوع صحيح باشد نتيجه عمل از نوع صحيح مي باشد.

عبارت نتیجه

5 + 2 7

5 * 2 10

5 – 2 3

5 % 2 1

5 / 2 2

Page 27: برنامه  سازي C++

:2مثال

در صورتيكه حداقل يكي از عملوندهاي عملگرهاي / ، * ، – ، + از نوع اعشاري باشد نتيجه عمل از نوع اعشاري

مي باشد.

عبارت نتیجه

5 .0+ 2 7. 0

5* 2. 0 10.0

5. 0 / 2 2.5

5. 0 -2 3. 0

5. 0 / 2. 0 2.5

Page 28: برنامه  سازي C++

عملگرهاي افزايش و كاهش

++ ، افrزايش يrك واحrد Cدر بrrه مقrrدار يrrك متغrrير از نrrوع صrrحيح را افrrزايش و بطrrور مشrrابه كrrاهش يrrك واحrrد از مقrrrدار يrrrك متغrrrير از نrrrوع

صحيح را كاهش مي نامند..

Page 29: برنامه  سازي C++

عملگرهاي افزايش و كاهش

و - -عملگrrrر كrrrاهش را بrrrا ++عملگrrrر افrrrزايش را بrrrا

نمrrrrايش مي دهنrrrrد. چrrrrون فقrrط - - و ++عملگرهrrاي

روي يrrك عملونrrد اثrrر دارنrrد اين دو عملگrrrrر نrrrrيز جrrrrزء عملگرهrاي يكتrائي مي باشrند.

Page 30: برنامه  سازي C++

مثال :

:سه دستور العمل ++x;

x;++x=x+1;

rتورالعمل زيrه دسrابه سrق مشrند و بطريrادل مي باشrیز معrر ن

معادل مي باشند.

- -y ; y=y-1;

y; - -

Page 31: برنامه  سازي C++

مي توان بدو صورت پيشوندي و پسوندي استفاده نمود. --از عملگرهاي ++ و ر دستورالعمل هاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي ميشود و عملگر د

پسوندي بعد از انتساب ارزيابي مي شود.

Page 32: برنامه  سازي C++

مثال :

int x=5;y=++x * 2;

: پس از اجراي دستورالعملهاي فوق y=12

int x=5;y=x++ * 2;

:پس از اجراي دستورالعملهاي فوق y=10

Page 33: برنامه  سازي C++

sizeofعملگر

Sizeof ازعملگرهاي يكتائي مي باشد و مشخص كننده تعداد بايت هائي است كه يك نوع داده

اشغال مي كند.

مثال :int x;

cout << sizeof x ; . نمايش داده مي شود 2مقدار

cout << sizeof(float); . نمايش داده مي شود4مقدار

Page 34: برنامه  سازي C++

عملگرهاي جايگزيني محاسباتي

+Cبراي ساده تر نوشتن عبارتها در + ، مي توان از عملگرهاي جايگزيني

استفاده نمود. محاسبrrrاتي

=+ =- =* =/ =%

Page 35: برنامه  سازي C++

اولويت عملگرها

ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام مي گردد. در ذيل جدول اولويت عملگرها براساس بترتيب از بيشترين

اولويت به كمترين اولويت داده شده است.

( )پرانتزها چپ به راست sizeof ++ -- + -عملگرهاي يكتايي ست به چپ ار

% / *عملگرهاي ضرب و تقسيم و باقيمانده چپ به راست +عملگرهاي جمع و تفريق چپ به راست << >>عملگرهاي درج و استخراج چپ به راست =% =/ =* =- =+ =عملگرهاي جايگزيني و انتساب راست به چپ

Page 36: برنامه  سازي C++

:1مثال

(5+2(* )6+2*2/)2

با توجه به جدول اولويت عملگرها داريم كه

7)* 6+2*2/(27)*6+4/(27 *10/ 2

70/ 235

Page 37: برنامه  سازي C++

:2مثال

int a=6 , b=2, c=8, d=12;d=a++ * b/c;++

cout << d << c << b << a;

خروجی :

1 9 2 7

Page 38: برنامه  سازي C++

)Commentsتوضيحات (

توضrيحات در برنامrه بrاعث خوانrائي بيشrتر و درك بهrتر برنامrه ميشrود. بنrابراين توصrيه بrر آن اسrت كrه حrتي االمكrان در برنامه هrا از توضrيحات اسrتفاده نمrائيم. در

Cيردrrام مي گrrورت انجrrدو صrrيحات بrrدر ++، توض کrrه . اسالیدهای بعد به آن اشاره شده است

Page 39: برنامه  سازي C++

)Commentsتوضيحات (

الrف: اين نrوع توضrيح بوسrيله // انجrام مي شrود. كrه كrامپيوتر هrر چrيزي را كrه بعrد از // قrرار داده

شود تا انتهاي آن خط اغماض مي نمايد. مثال :

c=a+b;//c is equal to sum of a and b

ب:توضrيح نrوع دوم بrا /* شrروع شrده و بrه */ ختم مي شrود و هrر چrيزي كrه بين* / و */ قrرار گrيرد

.اغماض مي نمايد :مثال

* /this is a program

to calcufate sum of n integer numbers/*

Page 40: برنامه  سازي C++

توابع كتابخانه

++ مجهrز بrه تعrدادي توابrع كتابخانrه Cزبrان مي باشrد. بعنrوان مثrال تعrدادي توابrع كتابخانrه بrراي عمليrات ورودي و خrروجي وجrود دارنrد. معمrrrوال� توابrrrع كتابخانrrrه مشrrrابه ، بصrrrورت برنامه هrاي هrدف (برنامrه ترجمrه شrده بزبrان ماشrين) در قrالب فايلهrاي كتابخانrه دسrته بنrدي و مrورد اسrتفاده قrرا رمي گيرنrد. اين فايلهrا را

h مي نامنrrrrrد و داراي پسrوند .headerفايلهrrrrrاي مي باشند.

Page 41: برنامه  سازي C++

نحوه استفاده از توابع کتابخانه ای

براي استفاده از توابع كتابخانه headerخاصي بايستrrrي نام فايل

آنرا در ابتداي برنامه در دستور #include .قرار دهيم

#header < include اسم فايل <

Page 42: برنامه  سازي C++

فايل هيدر تابع نوعشرح stdlib.h قدرمطلقi int abs(i)

math.h كسينوسd double cos(d)

math.h ex double exp(d)

math.h loge d double log(d)

math.h Log10 d double log10(d)

math.h سينوسd double sin(d)

math.h جذرd double sqrt(d)

string.h تعداد كركترهاي رشتهs int strlen(s)

math.h تانژانتd double tan(d)

stdlib.h كداسكي كركترc int toascii( c)

stdlib.h تبديل به حروف كوچكint tolower(c )

stdlib.h تبديل به حرف بزرگint toupper(c )

Page 43: برنامه  سازي C++

++Cبرنامه در

اكنrون باتوجrه بrه مطrالب گفتrه شrده قrادر خrواهيم بrود كrه تعrدادي rك بrاده و كوچrه سrان ه برنامrزبC هrتن برنامrراي نوشrيم. بrبنويس ++

( ) قrرار دهيم و بrراي اينكrار mainبايسrتي دسrتورالعملها را در تrابع rوان بrريقه مي تrيكي از دو ط، آمrده اسrت بعrد ی کrه در اسrالیدهای عمل نمود.

Page 44: برنامه  سازي C++

روش اول :

#include < >int main( )}

1 دستورالعمل ;

2 دستورالعمل ;...

n دستورالعمل ;return 0 ;}

Page 45: برنامه  سازي C++

روش دوم :

#include < >

void main( )

{

1 دستورالعمل ;

2 دستورالعمل ;

.

.

.

n دستورالعمل ;

}

Page 46: برنامه  سازي C++

#include <iostream.h>

int main( )

{

cout <<"C++ is an object oriented language \n" ;

return 0 ;

}

را C++ is an object oriented language پيغام ای که برنامه دهد. تور نمايش ميیروي صفحه مان

Page 47: برنامه  سازي C++

برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مي نمايد.

#include <iostream.h>

#include <ctype.h>

int main( )

{

char c1 , c2;

cout << "Enter a lowercase letter:“;

cin >> c1;

c2 = toupper(c1);

cout << c2 ;

return 0;

}

Page 48: برنامه  سازي C++

دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آنها را محاسبه و نمايش مي دهد.

#include <iostream.h>

int main( )

{

float x,y,s,p ;

cin >> x >> y ;

s= x+y ;

p=x*y;

cout << s << p;

return 0 ;

}

Page 49: برنامه  سازي C++

بخش دوم: ساختارهای تصمیم گیری و تکرار

عملگر های رابطه ای1.

عملگر شرطی2.

دستورالعمل شرطی3.

عملگر کاما4.

عملگر های منطقی5.

For دستورالعمل6.

Page 50: برنامه  سازي C++

عملگرهای رابطه ای

براي تعيين این عملگرهااز اينكه آيا دو عدد با هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر

مي باشد استفاده مي گردد. عملگرهاي رابطه اي عبارتند از:

مساوي = =

مخالف ! =

بزرگتر <

مساوي يا بزرگتر =<

كوچكتر >

مساوي يا كوچكتر =>

Page 51: برنامه  سازي C++

عملگر شرطی

:شكل كلي عملگر شرطي بصورت زير مي باشد

++ مي باشد كه داراي Cعملگر شرطي تنها عملگري در سه عملوند مي باشد.

expression _ test ? expression _ true : expression _ false

Page 52: برنامه  سازي C++

:1مثال

int x=10,y=20,b;b=(x>y) ? x : y;

اين دو دستور العمل باعث ميشوند كه ماكزيمم مقادير

y و x در b.قرار بگيرد

:2مثال x>=10 ? cout << "passed" : cout << "failed" ;

بزرگتر يا مساوي ده باشد رشتة xاگر مقدار

passedرشته در غير اينصورت failed نمايش دادهميشود.

Page 53: برنامه  سازي C++

دستورالعمل شرطي

دسrتور این توسrط شrرطي را rته بrوده و بسrت نمrرط ه تسrه شrآنك

درسrت يrا غلrط باشrد عكس العمrل خاصي را نشان دهيم.

IF

if( عبارت ) {

; دستورالعمل1 .

n دستورالعمل ; }

else {

; دستورالعمل 1 .

n دستورالعمل ; }

Page 54: برنامه  سازي C++

:1مثال

if(x != y)

}

cout << x;

++x;

{

else

}

cout << y;

- -y ;

{

Page 55: برنامه  سازي C++

:2مثال

#include <iostream.h>#include <math . h>int main( ){float x,s;cin >> x ;if( x < 0 )cout << " x is negative" << endl ; else {s = sqrt(x) ;cout << s << endl ; }return 0;}

.برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مي نمايد.برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مي نمايد

Page 56: برنامه  سازي C++

عملگر كاما

تعrدادي عبrارت را مي تrوان بrا كامrا بهم متصrل نمrود و تشrكيل يrك عبrارت

ه اين عبارتهrrrrrا بrپيچيrrrrrده تري را داد.تrرتيب از چپ بrه راسrت ارزيrابي شrده و

nمقrrrrدار عبrrrrارت معrrrrادل عبrrrrارتمي باشد.

, عبارت 3. , عبارت … , nعبارت ()1 عبارت , 2

Page 57: برنامه  سازي C++

مثال :

عبارت زير را در نظر ;int a=2 , b=4 , c=5 اگر داشته باشيم:بگيريد

(++ a , a+b, ++ c, c+b)

مي با شد.10 كه معادل b+cمقدار عبارت برابر است با

Page 58: برنامه  سازي C++

عملگرهای منطقی

با استفاده از عملگرهاي منطقي مي توان شرطهاي تركيبي :در برنامه ايجاد نمود. عملگرهاي منطقي عبارتست از

AND

OR

NOT

ترتيب بصورت زير نشان داده ميشود.ه ++ بCكه در &&||!

Page 59: برنامه  سازي C++

جدول درستی سه عملگر شرطی

a && b b a True true true False false true False true false False false false

a || b b a True true true True false true True true false False false false

!a a False true True false

Page 60: برنامه  سازي C++

چند مثال :

if ((x= = 5) ||(y != 0))

cout << x << endl ;

نمايش داده شود . x مخالف صفر باشد مقدار y يا 5 برابر با xاگر

If (x)

x = 6 ;

برابر با صفر شود . x مخالف صفر باشد، آنگاه xاگر مقدار

Page 61: برنامه  سازي C++

برنامه زير طول سه پاره خط را از ورودي گرفته مشخص مي نمايد كه آيا

تشكيل يك مثلث ميدهد يا خير؟

#include < iostream.h >int main( ){float a, b, c; cout << "Enter three real numbers" << endl ; cin >> a >> b >> c; // if(( a < b + c) &&(b < a+c) &&(c < a+b))cout << "It is a triangle" ;else cout << "Not a triangle" ;return 0 ;}

Page 62: برنامه  سازي C++

Forدستورالعمل

براي تكرار دستورالعملها استفاده forاز دستور العمل بصورت زير مي باشد:forميشود. شكل كلي دستور

for) 1 عبارت 2 عبارت ; ;3(عبارت {; دستورالعمل 1 ; دستورالعمل 2 . . . n دستورالعمل ; }

Page 63: برنامه  سازي C++

#include <iostream.h>int main( ){int n, i ; long fact = 1 ;cout << "Enter a positive integer number";cin >> n;for( i=1; i<=n; ++i) fact *= i; cout << fact << endl;return 0 ;}

را از ورودي گرفته فاكتوريل آنرا nبرنامه زير عدد صحيح و مثبت محاسبه ونمايش مي دهد.

Page 64: برنامه  سازي C++

#include <iostream.h>

int main( )

{

int n, i=1 ;

long int s = 0 ;

cin >> n ;

for(; i<=n; i++) s += i;

cout << s ;

return 0 ; }

را محاسبه n تا 1برنامه زير مجموع اعداد صحيح و متوالي بين نموده و نمايش مي دهد.

Page 65: برنامه  سازي C++

#include <iostream.h>

int main( )

{

int j=0 ;

for( ; j <= 9 ; ) cout << j++ << endl;

return 0 ;

}

را نمايش مي دهد.9 تا 0برنامه زير ارقام

Page 66: برنامه  سازي C++

#include <iostream.h>int main( ){int i,j,k,n;for(i=1; i<=3; ++i)for(j=1; j<=3; ++j)for(k=1; k<=3; ++k){n=i*100 + j*10+k;cout << n << ‘\n’ ;}return 0 ;}

ايجاد 3 ، 2 ، 1 ارقام برنامه زير كليه اعداد سه رقمي كه بامي شوند را نمايش مي دهد.

Page 67: برنامه  سازي C++

فصل سوم

سایر ساختارهای تکرار

Page 68: برنامه  سازي C++

فهرست مطالب فصل سوم

while دستورالعمل1.

do while دستورالعمل2.

break دستورالعمل3.

continue دستورالعمل4.

switch دستورالعمل5.

()cin.get تابع6.

()<<static_cast عملگر7.

جدول اولویت عملگرها8.

Page 69: برنامه  سازي C++

whileدستورالعمل براي تكرار يك forاز اين دستور العمل مانند دستورالعمل

دستورالعمل ساده يا تركيبي استفاده مي گردد. شكل كلي اين دستور العمل بصورت زير مي باشد.

while( شرط)

}1 دستورالعمل ; 2 دستورالعمل ; . .

n دستورالعمل ; }

Page 70: برنامه  سازي C++

for و whileتفاوت دستورهای

زمrrrاني forدسrrrتورالعمل اسrتفاده ميشrود كrه تعrداد دفعrrrrات تكrrrrرار از قبrrrrل مشrrخص و معين باشrrد. در صrrrورتيكه تعrrrداد دفعrrrات تكrrrrرار مشrrrrخص نباشrrrrد بايسrrrتي از دسrrrتورالعمل

while .استفاده نمود

Page 71: برنامه  سازي C++

مثال :

int x=0

while(x<5)

cout << x ++<< endl;

با اجراي قطعه برنامه فوق مقادير زير نمايش داده : ميشود

01234

Page 72: برنامه  سازي C++

#include <iostream.h>void main( ){int count = 0 , n;float x, sum = 0 , avg ;cin >> n ; /* تعداد مقادير ورودي n*/while(count < n){

cin >> x ;sum += x ;count ++ ;

}avg = sum / n ;cout << avg << endl;}

مقدار از نوع اعشاري را گرفته ميانگين آنها را n برنامة فوق قرار مي دهد.avgمحاسبه و در متغير

Page 73: برنامه  سازي C++

do whileدستورالعمل

اين دس�تور العم�ل ن�يز ب�راي تك�رار ي�ك دس��تورالعمل س��اده ي��ا تركي��بي اس��تفاده مي ش��ود. ش��كل كلي اين دس��تورالعمل

بصورت زير مي باشد. do}1 دستورالعمل ; 2 دستورالعمل ; . . n دستورالعمل ; } while( شرط);

Page 74: برنامه  سازي C++

while و do whileتفاوت دستورهای

ابتrrدا whileدر دسrrتورالعمل مقrدار شrرط ارزيrابي شrده

do while در دسrتورالعمل امrاابتrدا دسrتورالعمل اجrرا شrده سrپس مقrدار شrرط ارزيrابي

بنrrrrrrابراینمي گrrrrrrردد. do whileدسrrrrrتورالعمل

حrrrrداقل يrrrrك بrrrrار انجrrrrام

.ميشود

Page 75: برنامه  سازي C++

مثال :

#include <iostream.h>int main( ){int count = 0;docout << count ++<<endl ;while(count <= 9);return 0 ; }

را روي ده خط 9 تا 0ارقام نمايش مي دهد

Page 76: برنامه  سازي C++

breakدستورالعمل

, for( اين دستورالعمل باعث توقف دستورالعملهاي تكرارwhile ,do while( شده و كنترل به خارج از اين

دستورالعملها منتقل مي نمايد.

Page 77: برنامه  سازي C++

:1مثال #include <iostream.h>void main( ){float x, s=0.0 ;cin >> x ;while(x <= 1000.0) {if(x < 0.0)

{cout << "Error-Negative Value" ;break; }

s += x ;cin >> x ;}cout << s << endl ; }

Page 78: برنامه  سازي C++

:2مثال

#include <iostream.h>void main( ){int count = 0 ;while( 1 ){

count ++ ;if(count > 10 )break ;

}cout << "counter : " << count << "\n";}

Page 79: برنامه  سازي C++

:3مثال #include <iostream.h>void main( ){int count; float x, sum = 0;cin >> x ;for(count = 1 ; x < 1000 . 0 ; count ++ ){

cin >> x ;If(x < 0.0) {

cout << "Error – Negative value " <<endl;break ;

}sum += x ;

}cout << sum << \n ; }

Page 80: برنامه  سازي C++

:4مثال

#include <iostream.h>void main( ){ float x , sum = 0.0 ;do {

cin >> x ;if(x < 0.0) {

cout << "Error – Negative Value" << endl ;break ;

}sum += x ;

} while(x <= 1000.0);cout << sum << endl ;}

Page 81: برنامه  سازي C++

continueدستورالعمل

مي تrrوان در continueاز دسrrتورالعمل do while ، while ، forدسrتورالعملهاي تكrرار

اسrrrتفاده نمrrrود. اين دسrrrتورالعمل بrrrاعث rترل بrه كنrود كrتورالعملهاي ه مي شrداي دسrابتتكرار منتقل گردد.

Page 82: برنامه  سازي C++

:1مثال

#include <iostream.h>void main( ){float x, sum = 0.0 ;Do {

cin >> x ;if(x < 0 . 0) {

cout << "Error" << endl ;continue ;

}sum += x ;

} while(x <= 1000.0 );cout << sum ;}

Page 83: برنامه  سازي C++

:2مثال #include <iostream.h>void main( ){int n , navg = 0 ;float x, avg, sum = 0 ;cin >> n ; / * عبارت از تعداد اعداد ورودي n * /for (int count = 1 ; count <=n ; count ++ ){

cin >> x ;if(x < 0 ) continue ; sum += x ;++ navg ;

}avg = sum / navg; cout << avg << endl ;}

Page 84: برنامه  سازي C++

switchدستورالعمل

دانید می که همانطور دستورالعمل از ifشرطی( else وانrت می بصrورت تودرتrو اسrتفاده نمrود ولي از )

طrرفي اگrر عمrق اسrتفادة تrو در تrو از اين دسrتورالعمل بrراي حrل اين .زيrاد گrردد، درك آنهrا مشrكل ميشrود

كrrrrه عمال� يrrrrك switch ، دسrrrrتورالعمل ++Cمشrrrrكل دسrrتورالعمل چنrrد انتخrrابي مي باشrrد را ارائrrه نمrrوده

است.

Page 85: برنامه  سازي C++

Switchشکل کلی دستور العمل switch(عبارت){case valueone :

statement; break;case valuetwo:

statement; break;

case valuen : statement;

break;default: statement ; }

Page 86: برنامه  سازي C++

:1مثال #include <iostream.h>void main( ){unsigned int n ;cin >> n;switch(n){

case 0: cout << "ZERO" << endl ;break;

case 1:cout << "one" << endl ;break ;

case 2:cout << "two" << endl ;break;

default :cout << "default" << endl;

} / * end of switch statement * /}

Page 87: برنامه  سازي C++

:2مثال #include <iostream.h>void main( ){unsigned int n;cin >> n ;switch(n) {case 0 :case 1:case 2: cout << "Less Than Three" << endl; break;case 3: cout << "Equal To Three" << endl ; break;default: cout << "Greater Than Three" << endl;

}}

Page 88: برنامه  سازي C++

() :cin.getتابع

اين تابع يك كركتر را از صفحه كليد مي گيرد. براي استفاده از اين تابع در ابتداي برنامه :بايستي داشته باشيم

#include <iostream.h>

Page 89: برنامه  سازي C++

char x;x = cin.get;) (cout << x;

قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش مي دهد.

Page 90: برنامه  سازي C++

#include <iostream.h>

int main( )

{

char x;

while((x = cin.get( ) !=EOF)

cout << x ;

return 0 ;

}

� CTRL Z برنامة ذيل يك سطر متن انگليسي كه به ختم ميشود را گرفته دقيقا نمايش مي دهد.

EOFrrrrrني ه بrrrrrمعEnd of File تعريrف iostream.hمي باشrد كrه در

- 1شrrده و مقrrدار آن برابrrر بrrا مي باشrد. مقrدار آن در سيسrتم

. ctrl z عبارتست از DOSعامل

Page 91: برنامه  سازي C++

char x;x = cin.get( );switch(x) {case r :case R : cout << RED << \n ; break ;case b :case B : cout << BLUE << endl ; break ;case y :case Y : cout << YELLOW << endl; }

استفاده شده است.switch() و دستور cin.getدر قطعه برنامه ذيل ازتابع

Page 92: برنامه  سازي C++

#include <iostream.h>int main( ){char next;while((next = cin.get( ) ) !=EOF)if(next != ) cout << next ;return 0 ; }

) آنرا blankبرنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي (حذف نموده و نمايش ميدهد.

Page 93: برنامه  سازي C++

فصل چهارم

اعداد تصادفی

Page 94: برنامه  سازي C++

فهرست مطالب فصل چهارم

تولید اعداد تصادفی1.

( typedef ) تعریف نوع داده2.

داده های از نوع شمارشی3.

Page 95: برنامه  سازي C++

اعداد تصادفی

مقrادير تصrادفي يrا شانسrي در اكrثر برنامه هrاي كrاربردي در زمينrه شrبيه سrازي و بازيهrاي كrامپيوتري نقش مهمي را ايفrا مي نماينrد.

بايسrتي از تrابع 32767 و 0بrراي ايجrاد يrك عrدد تصrادفي صrحيح بين rand .استفاده نمائيم ( )

Page 96: برنامه  سازي C++

#include <stdlib.h>

#include < iostream.h>

int main( )

{

for(int j=1; j<=10; ++j)

cout << rand( ) << \n ;return 0 ;

}

را ايجاد مي نمايد.32767 و 0 عدد تصادفي بين 10برنامه زير

Page 97: برنامه  سازي C++

نکته :

گيريم. می اگر برنامة فوق را چندبار اجرا نمائيم جواب يكساني را از كامپيوتري ( ) استفاده نمائيم. srandبراي تصادفي كردن اعداد مي بايستي از تابع نياز دارد.unsignedاين تابع به يك آرگومان صحيح از نوع

گفته مي شود. seed به اين آرگومان

( ) srandدر اسالید بعد برنامه قبلی را با تابع نوشته ایم.

Page 98: برنامه  سازي C++

#include <stdlib.h>#include < iostream.h>int main( ){unsigned seed;cout << "Enter seed value : " ;cin >> seed ;srand(seed);for(int j=1; j<=10; ++j)cout << rand( ) << \n ;return 0 ; }

( ) )srand( را ايجاد مي نمايد. 32767 و 0 عدد تصادفي بين 10برنامه زير

Page 99: برنامه  سازي C++

#include < iostream.h>#include <stdlib.h>int main( ){unsigned seed, d1, d2;cout << "Enter seed: " ;cin >> seed ;srand(seed) ;d1= 1+rand( )% 6 ;d2= 1+rand( )% 6 ;cout << d1 << << d2 ;return 0 ; }

برنامه زير نتيجه پرتاب دو تاس را نمايش مي دهد.

Page 100: برنامه  سازي C++

#include <stdlib.h>#include < iostream.h>int main( ){unsigned seed ;cout << "Enter seed: " ;cin >> seed ;srand(seed) ;for(int i=1; i<=10; ++i)cout << rand( ) / 32768.0 << endl ;return 0 ;}

را نمايش مي دهد.1 و 0 اعداد شانسي بين 10برنامه زير

Page 101: برنامه  سازي C++

)typedefتعريف نوع داده (

مي تrوان بrراي تعريrف نrوع داده هrاي جديrد typedefاز كrه معrادل نrوع داده هrاي موجrود باشrد اسrتفاده

:نمود. شكل كلي عبارتست از

typedef type newtype;

نشاندهنده نوع داده موجود

اسم جديد

Page 102: برنامه  سازي C++

مثال :

typedef int integer ;

د : را بصورت زير تعريف نموx و yحال مي توان integer x,y;

Page 103: برنامه  سازي C++

داده هاي از نوع شمارشي

enumبمنظور معرفي داده هاي از نوع شمارشي از كلمه استفاده مي گردد.

مثال :

enum color {red, blue, green, yellow, brown} ;

color يك نوع داده شمارشي مي باشد.

0 2 3 41

Page 104: برنامه  سازي C++

چند مثال :

emum status {married, devorced, vidow, single};

status a ;

a= single ;

enum days {sat, sun, mon, tue, wed, thr, fri};

enum bread {lavash, fantezi, taftoon, barbari};

enum color { yellow, red=2, brown, white }; color x=brown;

0 3 4

Page 105: برنامه  سازي C++

توجه :

بايسrتي در نظrر داشrت كrه داده هrاي از نrوع شمارشrي در عمليrrrrrrrrrات ورودي و خrrrrrrrrروجي شrrrrrrrrركت نمي نماينrrد. بعبrrارت ديگrrر مقrrادير داده هrrاي از نrrوع شمارشrrrrي بايسrrrrتي در برنامrrrrه تعrrrrيين نمrrrrود. دسrrrrتورالعلهاي ورودي و

در cout و cinخrروجي ماننrد مrورد داده هrاي شمارشrي

نمي توان استفاده نمود.

Page 106: برنامه  سازي C++

فصل پنجم

آرایه ها

Page 107: برنامه  سازي C++

فهرست مطالب فصل پنجم

آرایه یک بعدی1.

آرایه دو بعدی ( ماتریس ها )2.

Page 108: برنامه  سازي C++

آرایه یک بعدی

آرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر را در خود رمي باشد كه مي تواند چندين مقدا

جاي دهد.

كليه عناصر يك آرايه از يك نوع مي باشند.

عناصر آرايه بوسيله انديس آنها مشخص مي شوند.

++ ، انديس آرايه از صفر شروع مي شود. C در

Page 109: برنامه  سازي C++

کاربرد آرایه ها

آرايه ها در برنامه نويسي در مواردي كاربرد دارند كه بخواهيم اطالعات و داده ها را در طول اجراي

.برنامه حفظ نمائيم

Page 110: برنامه  سازي C++

int x[5] ;

x

0 1 2 3 4

x[0]اولين عنصر x[4]پنجمين عنصر

Page 111: برنامه  سازي C++

تخصیص مقادیر اولیه به عناصر آرایه :

int x[5]= {4, 2, 5, 17, 30};

x

4 2 5 17 300 1 2 3 4

Page 112: برنامه  سازي C++

دریافت مقادیر عناصر آرایه :

int x[5];

for(int i=0; i<=4; ++i)

cin >> x[ i ] ;

نمایش مقادیر عناصر آرایه :

for(int i=0; i<=4; ++i)

cout << x[ i ] ;

Page 113: برنامه  سازي C++

تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده اگر بطور اتوماتيك، مقدار اوليه صفر مي گيرند.

int x[5] = {12, 5, 7};

x

12 5 7 0 00 1 2 3 4

Page 114: برنامه  سازي C++

بايستي توجه داشت كه آرايه ها به صورت ضمني مقدار اوليه صفر نمي گيرند. برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا

عضوهاي باقي مانده بطور اتوماتيك، مقدار اوليه صفر بگيرند.

int x[5] = {0};

x

0 0 0 0 00 1 2 3 4

Page 115: برنامه  سازي C++

ايجاد مي نمايد. floatدستور زير يك آرايه يك بعدي شش عنصري از نوع

float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, 16.5};

x

2.4 6.3 -17.1 14.2 5.9 16.50 1 2 3 4 5

Page 116: برنامه  سازي C++

عدد اعشاري و مثبت را گرفته تشكيل يك آرايه ميدهد سپس 100برنامه ذيل مجموع عناصر آرايه را مشخص نموده نمايش مي دهد.

#include <iostream.h>void main( ){const int arrsize = 100 ;float x[ arrsize], tot = 0.0 ;for(int j=0; j<arrsize; j++)

cin >> x[ j ];for(int j=0; j<arrsize; j++)

cout << x[ j ] << endl;for(int j=0; j<arrsize; j++)

tot += x[ j ] ;cout << tot ;}

Page 117: برنامه  سازي C++

عدد اعشاري را گرفته تشكيل يك آرايه داده سپس 20برنامه ذيل كوچكترين عنصر آرايه را مشخص و نمايش مي دهد.

#include <iostream.h>#include <conio.h>void main( ){

float x[20], s;int j ;for(j=0; j<20 ; j++)

cin >> x[ j ];

s = x[0 ] ;

for(j=1; j<20; j++)if(x[ j] <s) s = x[ j ];

cout << s << endl; }

Page 118: برنامه  سازي C++

) Bubble sort عدد اعشاري را گرفته بروش حبابي ( 100برنامه زير بصورت صعودي مرتب مي نمايد.

#include <iostream.h>#include <conio.h>void main ( ){float x[100] , temp;int i,j; for( i=0; i<100; i++)

cin >> x[i ];for( i=0; i<99; i++)

for( j=i+1 ; j<100; j++)if (x[ j ] < x[i ])

{ temp = x[ j ] ;x[ j ] = x[ i ]; x[ i ] = temp ;}

for( i=0; i<=99; i++)cout << x[ i ] << endl;

}

Page 119: برنامه  سازي C++

آرايه هاي دوبعدي (ماتريس ها)

ماتريسها بوسيله آرايه هاي دوبعدي در كامپيوترنمايش داده ميشوند.

int a[3][4];

0ستون 1ستون 2ستون 3 ستون

0سطر a[0][0] a[0][1] a[0][2] a[0][3]

1سطر a[1][0] a[1][1] a[1][2] a[1][3]

2سطر a[2][0] a[2][1] a[2][2] a[2][3]

Page 120: برنامه  سازي C++

تخصیص مقادیر اولیه به عناصر آرایه :

int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };

0 1 2 3

0 1 2 3 41 5 6 7 82 9 10 11 12

Page 121: برنامه  سازي C++

int a[3][4]= { {1}, {2,3} , {4,5,6} };

0 1 2 3

0 1 0 0 01 2 3 0 02 4 5 6 0

Page 122: برنامه  سازي C++

int a[3][4]= {1, 2, 3, 4,5 };

0 1 2 3

0 1 2 3 41 5 0 0 02 0 0 0 0

Page 123: برنامه  سازي C++

در يك آراية دوانديسي، هر سطر، در حقيقت آرايه اي يك انديسي است. در

اعالن آرايه هاي دوانديسي ذكر تعداد ستونها الزامي است.

0 1 2 3

0 1 2 3 41 5 0 0 0

int a[ ][4]={1,2,3,4,5};

Page 124: برنامه  سازي C++

را گرفته مجموع عناصر آن را مشخص 4*3برنامه زير يك ماتريس نموده و نمايش مي دهد.

#include <iostream.h>#include <conio.h>void main( ){float x[3][4], total= 0.0;int i, j ;

// generate matrix x.for(i=0; i<3; i++)

for (j=0; j<3; j++)cin >> x[ i ][ j ];

// calculate the sum of elements.for(i=0; i<3; i++)

for(j=0; j<4; j++)tot + = x [ i ][ j ];

cout << "total = " << total << endl; }

Page 125: برنامه  سازي C++

فصل ششم

توابع

Page 126: برنامه  سازي C++

فهرست مطالب فصل ششم

تعریف تابع1.

تابع بازگشتی2.

توابع درون خطی3.

انتقال پارامترها از طریق ارجاع4.

( storage classes ) کالس های حافظه5.

سربارگذاری توابع6.

Page 127: برنامه  سازي C++

تعریف توابع

اسrتفاده از توابrع در برنامه هrا بrه برنrامه نويس اين امكrان را مي دهrد كrه بتوانrد برنامه هrاي خrود را بrه صrورت قطعrه قطعrه برنامrه بنويسrد. تrا كنrون كليrه

( ) mainبرنامه هrائي كrه نوشrته ايم فقrط از تrابع استفاده نموده ايم.

Page 128: برنامه  سازي C++

: شكل كلي توابع بصورت زير مي باشند

return-value-type function-name (parameter-list)

{

declaration and statements

}

نام تابع

نوع مقدار برگشتي

انتقال اطالعات از تابع احضار كننده به تابع فراخوانده شدهلیست پارامتر ها جهت

تعريف اعالن هاي تابع و دستورالعملهاي اجرائي

Page 129: برنامه  سازي C++

تابع زير يك حرف كوچك را به بزرگ تبديل مي نمايد.

char low_to_up (char c1)

{

char c2;

c2 = (c1>= a && c1<= z )?( A + c1- a ): c1;

return (c2) ;

}

نام تابع

نوع مقدار برگشتی پارامتری از نوع

char

Page 130: برنامه  سازي C++

يك حرف كوچك به بزرگ قبل جهت تبدیل تابع برنامه کامل که از مي نمايد.استفاده

#include <iostream.h>char low_to_up(char c1){char c2;

c2=(c1 >= a && c1 <= z )?( A +c1 - a ) : c1 ;

return c2;}

int main( ){char x;

x=cin.get;( )cout << low_to_up(x);

return 0;}

x‘d’

c1

‘d’

c2

‘D’

آرگومان

Page 131: برنامه  سازي C++

دو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند. maximumتابع

int maximum (int x, int y)

{

int z ;

z = (x >= y) ? x : y;

return z;

}

Page 132: برنامه  سازي C++

دو مقدار صحيحجهت یافتن ماکزیمم maximum تابع برنامه کامل که ازاستفاده می نماید.

#include <iostream.h>int maximum (int x , int y){

int z ;z=(x > y)? x : y ;return z;

}int main( ){

int a, b ;cin >> a >> b ;cout << maximum(a,b);

return 0;}

a b10 15

a, b آرگومانهای تابعmaximum

x y10 15

z15

Page 133: برنامه  سازي C++

اسامي پارامترها و آرگومانهاي يك تابع مي توانند

.همنام باشند

Page 134: برنامه  سازي C++

برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده نمايش مي دهد.

#include <iostream.h>long int factorial (int n){long int prod=1;if(n>1)for(int i=2; i<=n; i ++)

prod *=i;return(prod);}int main( ){int n;cin >> n ;cout << factorial(n) ;return 0 ;}

n در main

3

x!=1*2*3*4*…*(x-1)*x

n در factorial

3

i در factorial

2,3,4

prod در factorial

6

Page 135: برنامه  سازي C++

وقتي در تابعي، تابع ديگر احضار مي گردد بايستي تعريف تابع

احضار شونده قبل از تعريف تابع احضار كننده در برنامه ظاهر

.گردد

Page 136: برنامه  سازي C++

بخrواهیم در برنامه هrا ابتrدا اگrر ظrrاهر گrrردد بايسrrتي mainتrrابع

prototype ةrني پيش نمونrابع يعrت تrrابع كrrه شrrامل نrrام تrrابع، نrrوع مقrrrدار برگشrrrتي تrrrابع، تعrrrداد پارامترهrائي را كrه تrابع انتظrار دريrrrrافت آنrrrrرا دارد و انrrrrواع پارامترهrا و تrرتيب قرارگrرفتن اين پارامترهrrrrrا را بrrrrrه اطالع

كامپيلر برساند. در اسالید بعد مثالی در این زمینه آورده شده

است.

Page 137: برنامه  سازي C++

#include <iostream.h>#include <conio.h>long int factorial (int); // function prototype int main( ){

int n;cout << "Enter a positive integer" << endl; cin >> n;cout << factorial(n) << endl; return 0 ;

}long int factorial(int n){

long int prod = 1;if(n>1)for(int i=2; i<=n; ++i)

prod *= i;return(prod);

}

Page 138: برنامه  سازي C++

در صrورتي كrه تrابع مقrداري بrrrر نگردانrrrد نrrrوع مقrrrدار

اعالن voidبرگشrتي تrابع را مي كrrrنيم. و در صrrrورتيكه تrrابع مقrrداري را دريrrافت

از parameter- listنكنrد بجrاي void.رددrتفاده ميگrا ( ) اسrي

در اسالید بعد مثالی در این زمینه آورده شده است.

Page 139: برنامه  سازي C++

#include <iostream.h>#include <conio.h>

void maximum (int , int); int main) (

{ int x, y;

clrscr;) (cin >> x >> y;maximum(x,y);return 0;

}void maximum(int x, int y){

int z; z=(x>=y) ? x : y; cout << "max value \n" << z<< endl ;return ;

}

بر نمی تابع مقداري گرداند.

Page 140: برنامه  سازي C++

)Call By Valueاحضار بوسیله مقدار (

#include <iostream.h>int modify(int);int main( ){int a=20;cout << a << endl;modify(a) ;cout << a << endl;return 0 ;}int modify(int a){a *= 2;cout << a << endl;return ; }

a در main

20

a در modify

20

a در modify

40

خروجی برنامه :

20

40

20

Page 141: برنامه  سازي C++

)Call By Valueاحضار بوسیله مقدار (

#include <iostream.h>int modify(int)int main( ){int a=20;cout << a << endl;modify(a) ;cout << a << endl;return 0 ;}int modify(int a){a *= 2;cout << a << endl;return ; }

a در main

20

a در modify

20

a در modify

40

تrrrابع احضrrrار نrrrوع این در حافظه هrrrrاي مrrrrورد اسrrrrتفاده آرگومانهrrrrrrrrا و پارامترهrrrrrrrrا

از هم متمايزنrد و هرگونrه تغيrير در پارامترهrrا باعrrrrrث تغيrrrrrر در

آرگومانهاي متناظر نمي گردد.

Page 142: برنامه  سازي C++

)recursive functionsتابع بازگشتي (

توابعي هستند كهrecursiveتوابع بازگشتي يا وقتي احضار شوند باعث مي شوند كه خود را احضار نمايند.

Page 143: برنامه  سازي C++

نحوه محاسبه فاکتوریل از طریق تابع بازگشتی

n != 1*2*3*…*(n-1) *n

f(n) = n !

f(n) =

1 n=0 اگر

n *f(n-1) يرrrدر غاينصورت

n!= 1* 2* 3* … *(n-2) *(n-1) *n

n!=(n-1)! *n

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

Page 144: برنامه  سازي C++

تابع بازگشتی محاسبه فاکتوریل

#include <iostream.h>long int factorial (int) ;int main( ){

int n ;cout << n= ;cin >> n ;cout << endl << factorial = << factorial(n) << endl;return 0 ;

}long int factorial (int n){

if (n<=1)return (1);

else return (n *factorical(n-1) ) ;

}

Page 145: برنامه  سازي C++

امین مقدار دنباله فیبوناچی از n نحوه محاسبهطریق تابع بازگشتی

:دنباله فیبوناچی … ,34 , 21 ,13 ,8 ,5 ,3 ,2 ,1 ,1 , 0

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

fib(n)= جمله n ام

n=1اگر 0

n=2اگر 1

+ fib (n-1) در غير اينصورت fib (n-2)

Page 146: برنامه  سازي C++

) را مشخص و fibonacciي (چاون امين مقدار دنبالة فيبnبرنامه زير نمايش مي دهد.

#include <iostream.h>long int fib(long int); // forward declaration int main( ){

long int r ;int n ;cout << Enter an integer value << endl ;cin >> n ;r = fib(n) ;cout << r << endl ;return 0 ;

}long int fib(long int n){

if(n = = 1 || n= = 2)return 1 ;

else return(fib(n-1) + fib(n-2) ) ;

}

Page 147: برنامه  سازي C++

اسrتفاده از آرايه هrا بعنrوان پrارامتر تابع مجاز است.

در اسالید بعد به یک مثال توجه نمایید.

Page 148: برنامه  سازي C++

را بعنوان پارامتر مي گيرد. a آرايه modifyدر برنامه زير تابع

#include <iostream.h>void modify(int [ ] ); // forward declaration int main( ){int a[5] ;for ( int j=0; j<=4; j++)

a[ j ] = j+1 ;modify(a) ;for(j=0; j<5; j++)

cout << a[ j ] << endl ;return 0 ;}void modify(int a[ ]) // function definition {for(int j=0; j<5; j++)

a[ j ] += 2 ;for(j=0; j<5; ++j)

cout << a[ j ] << endl ;return ;}

: خروجی12345

34567

Page 149: برنامه  سازي C++

در صrورتيكه آرايrه بيش از يrك بعrد داشrته باشrد بعrدهاي دوم بrrه بعrrد بايسrrتي در تعريrrف تrابع و پيش نمونrه تrابع ذكrر

گردد.

در اسالید بعد به یک مثال توجه نمایید.

Page 150: برنامه  سازي C++

#include <iostream.h>void printarr (int [ 2 ][ 3 ]);int main( ){

int arrl [2][3] = { {1,2,3}, {4,5,6} };int arr2 [2][3]= {1,2,3,4,5};int arr3 [2][3]={ {1,2}, {4} };printarr (arr1);cout << endl ;printarr (arr2);cout << endl ;printarr (arr3);return 0 ;

}void printarr (int a[2][3] ){

for (int i=0; i<2; i++) {

for (int j=0; j<3; j++)cout << a[ i ][ j ] << ;cout << endl ;

} }

1 2 3 4 5 6 1 2 3 4 5 0 1 2 0 4 0 0

خروجی :

Page 151: برنامه  سازي C++

)inlineتوابع درون خطي (

يلر دسrتور مي دهrد كrه ا بrدين معrني اسrت كrه بrه كامپinlinerكلمrه (در زمrان مقتضrي) يrك كrپي از دسrتورالعلمهاي تrابع در همrان جrا توليد نمايد تا از احضار تابع ممانعت بعمل آورد.

Page 152: برنامه  سازي C++

inlineاشکال توابع

ر چند كپي از دستورالعملهاي تابع د ، بجاي داشتن تنها يك كپي از تابعبرنامه اضافه مي شود كه باعث بزرگ شدن اندازه يا طول برنامه مي شود.

براي توابع كوچك استفاده مي گردد. inline بنابراين از

Page 153: برنامه  سازي C++

مثالی از توابع درون خطی

#include <iostream.h>

inline float cube(const float s) {return s*s*s; }

void main( )

{

float side ;

cin >> side ;

cout << side << cube(side) << endl ;

}

Page 154: برنامه  سازي C++

انتقال پارامترها از طريق ارجاع

تاكنون وقrrتي تrrابعي را احضrrار مي كrrرديم •ارامترهrاي پيrك كrپي از مقrادير آرگومانهrا در

ن روش احضrار ایمتنrاظر قrرار مي گrرفت . . شrدميrده ناcall by value بوسrيله مقrدار يrا

در انتقrrال پارامترهrrا از طريrrق ارجrrاع در حقيقت حافظrrه مربrrوط بrrه آرگومانهrrا و پارامترهrrاي متنrrاظر بصrrورت اشrrتراكي

وش رمrورد اسrتفاده قrرار مي گrيرد. اين call by reference.ناميده مي شود

Page 155: برنامه  سازي C++

انتقال پارامترها از طريق ارجاع

عمل مي نمايند درcall by reference در اين روش پارامترهائي كه از طريق واضح است پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده مي شود.

همين طريق عمل مي شود. ه كه در تعريف تابع نيز ب

Page 156: برنامه  سازي C++

مثال :

#include <iostream.h>int vfunct (int); // for void rfunct (int &) ;int main( ){

int x=5, y=10;cout << x << endl << vfunct (x) << endl << x << endl ;cout << y << endl ;rfunct (y) ;cout << y << endl ;return 0 ;

}int vfunct (int a){

return a *= a ; }void rfunct (int &b){

b *= b ;}

x y

5 10

خروج 5: ی

25510

تغییر xمقدار آرگومان نمی کند.

x y b

5 10 100

ادامه خروجی :

100

Page 157: برنامه  سازي C++

نکته :

call byوقتي پارامتري بصورت reference ردد اينrrrاعالن مي گ

بrدان معrني اسrت كrه بrا تغيrير مقrrrدار اين پrrrارامتر در تrrrابع احضrrار شrrده مقrrدار آرگومrrان

متناظر نيز تغيير مي نمايد.

Page 158: برنامه  سازي C++

دو مقدار اعشاري را مبادله مي نمايد.fswapبرنامه زير با استفاده از

#include <iostream.h>void fswap (float & , float & );int main( ){

float a=5.2 , b=4.3;cout << a << endl << b ;fswap ( a , b) ;cout << a << endl << b ;return 0 ;

}void fswap (float &x , float & y){

float t;t = x ;x = y ;y = t ;

}

Page 159: برنامه  سازي C++

)storage classesكالس هاي حافظه (

دو طريق متمايز مشخص مي شوند يكي بوسيله نوع ه يرها بیمتغ )typeوسيله كالس حافظه آنها. نوع متغير قبال� ه ) آنها و ديگري ب

، . . . ولي كالس int ، float ، doubleاشاره شده بعنوان مثال حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث

مي نمايد.

در اسالید بعد به انواع کالس حافظه می پردازیم.

Page 160: برنامه  سازي C++

:بطور كلي كالس حافظه متغيرها به چهار دستة تقسيم مي گردد

.1automatic

.2static

.3external

.4register

Page 161: برنامه  سازي C++

در درون يrك تrابع تعريrف مي شrوند automaticتغيرهrاي م و در تrابعي كrه اعالن مي شrود بصrورت متغيرهrاي محلي بrراي آن تrابع مي باشrند. حافظrه تخصrيص داده شrده بrه

پس از اتمrrام اجrrراي تrrابع از بين automaticمتغيرهrrاي مي رود بعبrارت ديگrر وسrعت و دامنrة متغيرهrاي از نrوع

automatic دهrير در آن اعالن گرديrه متغrد كrابعي مي باشrت است.

Page 162: برنامه  سازي C++

نيز در درون توابع تعريف ميشوند و از نظر staticغيرهاي متوسعت و دامنه شبيه

هستند ولي در خاتمة اجراي تابع، automaticمتغيرهاي اين نوع متغيرهrrrا از بين نمي رود به حافظه وابسته

بلكه براي فراخواني بعدي تابع باقي مي ماند.در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می

پردازیم.

Page 163: برنامه  سازي C++

مثال :#include <iostream.h>// program to calculate successive fibonacci numbers

long int fib(int) ;int main( ){int n ;cout << how many fibonacci numbers? ;cin >> n ;cout << endl ;for(int j=1; j<=n; ++j )cout << j << << fib(j) << endl ;return 0 ;}long int fib(int count){static long int t1 = 1, t2=1;long int t ;t =(count <3) ?1 : t1 + t2 ;t2 = t1 ;t1 = t ;return(t) ;}

بايسrتي توجrه داشrت كrrه اگrrر در توابrrع بrrه متغيرهrrrrاي از نrrrrوع

static هrrrدار اوليrrrمق تخصrrrrrيص نrrrrrدهيم مقrدار صrفر بصrورت اتوماتيrrك بrrراي آنهrrا در نظrrrrrrر گرفتrrrrrrه

مي شود.

Page 164: برنامه  سازي C++

متغيرهrائي هسrتند كrه در externalمتغيرهrاي از نrوع بrيرون از توابrع اعالن ميشrوند و وسrعت و دامنrه فعrاليت آنهrا كليrه تrوابعي مي باشrد كrه در زيrر دسrتور اعالن متغrير

قرار دارد.

در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.

Page 165: برنامه  سازي C++

<include <iostream.h#مثال :int w; // external variablefuncta (int x, int y){cout << w ;w = x + y ;cout << endl << w << enld;return x%y ;}int main( ){int a, b, c, d;cin >> a >> b ;c = functa (a, b) ;d = functa (w, b+1);cout << endl << c << endl << d << endl << w ;return 0 ;}

بايسrتي توجrه داشrت كrrه اگrrر در توابrrع بrrه متغيرهrrrrاي از نrrrrوع

external هrrدار اوليrrمق تخصrrrrrيص نrrrrrدهيم مقrدار صrفر بصrورت اتوماتيrrك بrrراي آنهrrا در نظrrrrrrر گرفتrrrrrrه

مي شود.

Page 166: برنامه  سازي C++

اعالن مي شود از register وقتي متغيري از نوع مي شود كه به جاي حافظه كامپيوتر عمال� درخواست

از يكي از رجيسترهاي موجود استفاده نمايد. را میتrوان از کالس char و intتنهrا متغییرهrای از نrوع رجیستر اعالن نمود.

register int i;

Page 167: برنامه  سازي C++

registerکاربرد کالس

معموال� از نوع رجيستر براي شاخص هاي دستور تكرار و يا انديسهاي آرايه ها استفاده مي شود. بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده

نمي باشند cin دردستور

Page 168: برنامه  سازي C++

functionسربارگذاري توابع (overloading (

++ اين امكان وجود دارد كه دريك برنامه Cدر بتوانيم از چند توابع هم نام استفاده نمائيم

مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند. (از نظر تعداد پارامتر و يا نوع پارامترها و

ترتيب آنها)

Page 169: برنامه  سازي C++

مثال :

#include <iostream.h>float addf(float , int);int addf(int , int);int main( ){int a=5, b=10 ;float d=14.75 ;cout << addf(a , b) << endl;cout << addf(d , b) << endl;return 0 ;}int addf(int x, int y){return x+y ;}float addf(float x, int y){return x+y ;}

Page 170: برنامه  سازي C++

فصل هفتم

ساختار ها و اشاره گرها

Page 171: برنامه  سازي C++

فهرست مطالب فصل هفتم

ساختارها1.

(Pointer) گرها اشاره2.

تعریف آرایه3.

و اشاره گرها ها آرایه4.

ها و توابع مربوطه رشته5.

Page 172: برنامه  سازي C++

ساختارها

سrاختارها شrبيه آرايه هrا بrوده بrدين صrورت كrه يrك نrوع داده گrروهي اسrت كrه فضrاي پيوسrته از حافظrه اصrلي را

عناصrر سrاختار الزامrا� از يrك نrوع امrااشrغال مي نمايrد. نمي باشrند بلكrه اعضrاي يrك سrاختار مي تواننrد از نوع هrاي

، … باشند. char ، int ، floatمختلفه از قبيل

Page 173: برنامه  سازي C++

تعريف ساختار

struct time {int hour ; // 0 –

23int minute ; // 0 –

59int second; //} ;

نام ساختار

اعضا ساختار

Page 174: برنامه  سازي C++

مثال :

struct account {

int acc_no ;char acc_type;char name[80] ;float balance ;

};

داراي چهار عضو مي باشد.accountساختار acc_no شماره حساب از نوع int

acc_type نوع حساب از نوع char name كركتري 80 مشخصات صاحب حساب از نوع رشتة

balance مانده حساب از نوع float

Page 175: برنامه  سازي C++

به دو صورت می توان اعالن یک متغیر از نوع ساختار را نمایش داد :

struct account {

int acc_no;char acc_type;char name[80];float balance;

} cust1, cust2, cust3;

struct account

{

int acc_no ;

char acc_type;

char name[80];

float balance;

};

account cust1, cust2, cust3;

: روش اول

: روش دوم

Page 176: برنامه  سازي C++

به ساختارها مي توان مقدار اوليه نيز تخصيص داد

account cust = {4236, r, Nader Naderi , 7252.5};

Page 177: برنامه  سازي C++

دسترسي به عناصر يك ساختار

استفاده.بمنظور دسترسي به عناصر يك ساختار از عملگر .مي گردد . عملگر. جزء عملگرهاي يكتائي مي باشد

Page 178: برنامه  سازي C++

مثال :

cust .acc_no = 4236

cust .acc_type = rcust .name = Nader Nadericust .balance = 7252.5

Page 179: برنامه  سازي C++

نکته :

struct dateعضو يك ساختار خود مي تواند يك ساختار ديگر باشد. {

int month;int day;int year;

};struct account {

int acc_no ;char acc_typer;char name[80];float balance ;date lastpay ;

};اگرداشته باشيم

account x, y ; آنگاه عضو lastpay بوسيله

x.lastpay.day x.lastpay.monthx.lastpay.year

مشخص مي گردد.

Page 180: برنامه  سازي C++

نکته :

كه هر عضو آن يك ساختار باشد و حتي به آنها نمود مي توان آرايه اي تعريف مقادير اوليه تخصيص نمود.

struct struc1 {

char name[40];int pay1;int pay2;

} ; struct cust[ ]= {nader, 3000 , 40000,

ali, 4200, 6000, reza, 3700, 25000, saman, 4800 , 2000, };

Page 181: برنامه  سازي C++

برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته، دو عدد مختلط را مي گيرد و مجموع آنها را مشخص و نمايش مي دهد.

#include <iostream.h>int main( ){struct complex{

float a;float b;

} x, y, z;cout << enter 2 complex numbers << endl ;cin >> x.a>>x.b ;cout << endl;cin >> y.a >> y.b;z.a = x.a + y.a ;z.b = x.b + y.b ;cout << endl << z.a << << z.b;

return 0 ;} x = a + ib i2= -1 بطوريكه

y = c + idx+y =(a+c) + i(b+d)

Page 182: برنامه  سازي C++

)Pointersاشاره گرها (

داده هrائي كrه در كrامپيوتر در حافظrه اصrلي ذخrيره ميشrوند بايت هrاي متrوالي از حافظrه

اشغال مي كنند.dataبسته به نوع

رمقادي نوع داده حافظه الزمint 32768 –تا 32767 بايت 2

long int 2147483648 –تا 2147483647 بايت 4

char يك كاركتر بايت1

float 3.4e38 1.2 تاe-38 بايت 4

double 1.8e308 2.2 تاe-308 بايت 8

Page 183: برنامه  سازي C++

)Pointersاشاره گرها (با داشrتن آدرس داده در حافظrة اصrلي مي تrوان

وبراحrrتي بrrه آن داده دسترسrrي پيrrدا نمrrود از طrرف ديگrر آدرس هrر داده در حافظrه آدرس بrايت

شروع آن داده مي باشد.int x = 613; 0

1

2

3

4613

5

6

7

Page 184: برنامه  سازي C++

نکته :

px را در xدر كامپيوتر آدرس ها معموال� دو بايت اشغال مي نمايند. اگر آدرس اشاره مي نمايد.x به pxقرار دهيم آنگاه مي گوئيم كه

px x

نشان ميدهيم و عملگر & را عملگر آدرس مي نامند. x را بوسيله &xآدرس متغير

int x , *pxpx = &x ;

Page 185: برنامه  سازي C++

مثال :

int y , x , *px ;

x = 26 ;

px = &x ;

26

px x

; را بدهيم: x += 10حال اگر دستور العمل

36

px x

; بدهيم.px = *px + 7*حال اگر دستورالعمل

43

px x

Page 186: برنامه  سازي C++

آرایه یک بعدی و اشاره گرها

0 26.5 x 1 24.7 2 5.8 3 -73.2 4 69.0 5 100.5 6 -13.24 7 424.3 8 187.8 9 358.2

. مشخص مي شودx[0]اولين عنصر آرايه بوسيله

x يا بوسيله x[0]&آدرس اولين عنصر آرايه بوسيله .مشخص مي شود

.شودمشخص مي x(i-1) يا بوسيله x[i-1] امين عنصر آرايه بوسيله &iآدرس

دو دستورالعمل زير با هم معادلند .x[ i ] = 82.5;

)*x + i = (82.5; از طرف ديگر اگر داشته باشيم

float x[10];float *p;

دو دستورالعمل زير معادلند.p = &x[2]; p= x + 2;

Page 187: برنامه  سازي C++

ساختارها و اشاره گرها

)struct( مي توان اشاره گري را تعريف نمود كه به اولين بايت يك ساختار structاشاره نمايد.

struc1 { int a

; float

b ; char

c; int d

;} x, *px ;

px x a int b float c char d int

px = &x ;

مي باشد. px.(a معادل (*pxa معادل x.aعبارت

Page 188: برنامه  سازي C++

ايجاد شده و مقادير عناصر آرايه int عنصري از نوع 5در برنامه زير يك آرايه را به چهار طريق نمايش مي دهد.

#include <iostream.h>#include <conio.h> int main( ){

int x[ ]={12, 25, 6, 19, 100};clrscr( );int *px=x;

نام آرايه بدون انديس، اشاره به عنصر اول آرايه مي نمايد//for(int i=0; i<=4; i++)

cout << *(x+i) << endl;//the second method for(i=0; i<5; i++)

cout << x[ i ] << \n;//the third method for(i=0; i<=4; i++)

cout << px[ i ]<<endl;//the forth method for(i=0; i<=4; i++)

cout << *(px+i)<<endl;return 0; }

Page 189: برنامه  سازي C++

رشته ها و توابع مربوطه

ختم \0++ ، آرايه اي از كركترها مي باشند كه با كركتر Cرشته ها در ميشوند.

char name[ ]= sara;

s

a

r

a

\0

Page 190: برنامه  سازي C++

رشته و اشاره گر

كتر آن در دسترس قرار اراهر رشته از طريق اشاره گري به اولين ك كتر اول آن مي باشد. به رشته ها ارامي گيرد. آدرس يك رشته، آدرس ك

مي توان مقدار اوليه تخصيص داد.

char *name = sara;

Page 191: برنامه  سازي C++

رشته در نظر گرفته آنها را بترتيب حروف 5برنامه ذيل پنج اسم را بصورت الفباء مرتب نموده نمايش مي دهد.

#include <iostream.h>#include <string.h>void sort(char *[ ]);int main( ){char *name[5] = {sara, afsaneh, babak, saman, naser };sort(name);// display sorted strings for(int i=0; i<5; ++i) cout << name[ i ] << endl;return 0; }void sort(char *name[ ]){char *t;for(int i=0; i<4; ++i)for(int j=i+1; j<5; ++j)

if(strcmpi(name[ i ], name[ j ]))> 0) {// interchange the two strings t= name[ j ];name[ j ] = name[ i ];name[ i ] = t ;

};

Page 192: برنامه  سازي C++

strcmpi(s1, s2)تابع

را بrrا هم مقايسrrه نمrrوده (بrrدون توجrrه بrrه s2 و s1رشrrته هاي باشrد s2 برابrر بrا رشrته s1حrروف كوچrك و بrزرگ) اگrر رشrته

باشrد يrك مقrدار s2 كوچكrتر از رشrته s1مقrدار صrفر و اگrر رشrته منفي در غير اينصورت يك مقدار مثبت بر مي گرداند.

Page 193: برنامه  سازي C++

strcmp(s1, s2) تابع

s2 برابrر بrا s1 را بrا هم مقايسrه نمrوده اگrر s2 و s1شrته هاي ر باشrد يrك s2 كوچكrتر از رشrته s1باشrد مقrدار صrفر و اگrر رشrته

مقدار منفي در غير اينصورت يك مقدار مثبت برمي گرداند.

Page 194: برنامه  سازي C++

strncmp(s1, s2,n) تابع

مقايسrه s2 كركrتر از رشrتة n را بrا s1 كركrتر از رشrتة nحداكثر باشrد يrك مقrدار منفي، s2 كوچكrتر از s1نمrوده در صrورتيكه

باشrد مقrدار صrفر در غrير اينصrورت يrك s2 مسrاوي بrا s1اگrر مقدار مثبت برميگرداند.

Page 195: برنامه  سازي C++

strcat(s1, s2(تابع

را بrrه s2 را بعنrrوان آرگومrrان گرفتrrه رشrrتة s2 و s1دو رشrrتة روي s2 اضrافه مي نمايrد. كركrتر اول رشrتة s1انتهrاي رشrتة را s1 نوشrته مي شrود ونهايتrا� رشrتة s1 رشrتة \0كركrتر پايrاني

برميگرداند.

Page 196: برنامه  سازي C++

strncat(s1, s2,n(تابع

را بعنrوان آرگومrان n ومقrدار صrحيح و مثبت s2 و s1دو رشrته كrپي s1 را در انتهrاي رشrتة s2 كركrتر از رشrتة nگرفتrه، حrداكثر

رشrتة \0 روي كركrتر پايrاني s2مي نمايrد. اولين كركrتر رشrته s1 مي نويسد ونهايتا� مقدار رشتة s1.را برميگرداند

Page 197: برنامه  سازي C++

strlen(s(تابع

را بعنوان آرگومان گرفته طول رشته را مشخص sرشتة مي نمايد.

Page 198: برنامه  سازي C++

strcpy(s1,s2)تابع

را در s2 را بعنوان آرگومان گرفته رشتة s2 و s1دو رشتة را بر s1 كپي مي نمايد و نهايتا� مقدار رشتة s1رشتة

مي گرداند.

Page 199: برنامه  سازي C++

strncpy(s1, s2,n(تابع

را بعنوان آرگومان n و مقدار صحيح و مثبت s1 , s2دو رشتة كپي نموده، s1 در رشتة s2 كركتر را از رشتة nگرفته، حداكثر

را برميگرداند.s1نهايتا� مقدار رشتة

Page 200: برنامه  سازي C++

براي استفاده از توابع مربوط به رشته ها بايستي

حتما� در ابتدا برنامه #include <string.h را قرار >

دهيم.

Page 201: برنامه  سازي C++

مثال :

#include <iostream.h>#include <string.h>#include <conio.h> int main( ){char *s1= happy birthday;char *s2= happy holidays ;clrscr( ); cout << strcpy(s1, s2) << endl;return 0; }

Page 202: برنامه  سازي C++

مثال :

#include <iostream.h>

#include <string.h>

#include <conio.h>

int main( )

{

char *s = sara; clrscr( );

cout << strlen(s);

return 0; }

Page 203: برنامه  سازي C++

می باشد.strcmpتابع زیر معادل تابع کتابخانه

int nikstrcmp(char s[] , char t[] )

{

int i=0;

while (s[i]==t[i] )

if ( s[i++]=‘\0’ )

return 0;

return (s[i]-t[i]);

}

Page 204: برنامه  سازي C++

فصل هشتم

برنامه نویس شی گرا

Page 205: برنامه  سازي C++

فهرست مطالب فصل هشتم

تعریف شی گرایی1.

polymorphism) چند ریختی2.)

خاصیت ارث بری3.

(stack) پشته4.

ایجاد شی5.

ارث بری6.

سازنده ها و نابود کننده ها7.

توابع دوست8.

کالس های دوست9.توابع سازنده پارامتر دار10.توابع سازنده یک پارامتری11.

static عضوهای12.

کالسهای تودرتو13.

کالس های محلی14.

object استفاده از15.ها بعنوان پارامترهای تاب ع

برگشت اشیاء16.

انتساب اشیاء17.

آرایه اشیاء18.

اشاره گر به اشیاء19.

this اشاره گر20.

توابع مجازی و پلی مرفی21.سم

Page 206: برنامه  سازي C++

تعریف شی گرایی

يك روش oopبرنامه نويسي شئ گرا يا جديد برنامه نويسي مي باشد كه در آن از

ويژگي ساخت يافته همراه با ويژگي هاي قوي

جديد استفاده مي شود. زبان برنامه را به oop++ امكان استفاده از Cنويسي

راحتي فراهم مي نمايد.

Page 207: برنامه  سازي C++

تعریف شی گرایی

، بطور كلي مساله به تعدادي oopدر هم شكسته ه زيرگروه قطعات مربوط ب

data و codeمي شود كه براي هر زير گروه تهيه شده و نهايتا� اين زيرگروه ها تبديل

objects ها يا واحدهائي مي شود كه unitبه (يا اشياء) ناميده ميشوند.

Page 208: برنامه  سازي C++

نکته مهم :

تمام زبانهاي برنامه نويسي شي گرا داراي سه خصوصيت مشترك زير

:مي باشند

(محصورسازي)encapsulationالف:

(چندريختي)polymorphismب:

(ارث بري) inheritanceج:

Page 209: برنامه  سازي C++

)Encapsulationمحصورسازی (

را بهم وصrل نمrوده و data و codeصورسrازي مكrانيزمي اسrت كrه محهrر دوي آنهrا را از اسrتفاده هاي غيرمجrاز مصrون نگrه مي دارد. شrي يrك

بrاعث code را محصrور نمrوده و code و dataمؤلفrه منطقي اسrت كrه مي شود. dataدستكاري و پردازش

Page 210: برنامه  سازي C++

polymorphism(چند ريختي)

چند ريختي مشخصه اي است كه بيك وسيله امكان ميدهد كه باتعدادي از سيستمها يا عميات يا

.دستگاهها، مورد استفاده قرار گيرد

Page 211: برنامه  سازي C++

inheritance(ارث بري)

ارث بري فرآيندي است كه بوسيله آن يك شي )object مي تواند خاصيت هاي شي ديگري را دارا (

شود.

Page 212: برنامه  سازي C++

)stackپشته (

last inپشته ساختاري است كه داراي خاصيت first out مي باشد. پشته فضاي پيوسته در

ملياتي كrrه روي پشته . عحافظه اشغال مي نمايدانجام مي شوند عبارتند از :

، كه باعث مي شود يك عنصر وارد پشته pushالف: شده.

، كه باعث مي شود يك عنصر از پشته خارج popب: گردد.

Page 213: برنامه  سازي C++

)objectايجاد شي (

بمنظrور ايجrاد يrك شrي بايسrتي از اسrتفاده نمrود. classكلمrة رزروشrده

class اrاختار يrبيه سrاهر شrر ظrاز نظ struct كrوان يrته را بعنrد. پشrمي باش object هrrرفت كrrر گrrوان در نظrrمي ت

data كrه و يrك آرايrامل يrآن ش tos و ، انجrrام objectعمليrrاتي كrrه روي اين

push، initialize مي شود عبارتست از، pop.كردن پشته

در اسالید بعد مثالی از نحوه ایجاد شی آورده شده است.

Page 214: برنامه  سازي C++

مثال :

#define SIZE 100// this creates the class stack.class stack { private : int stck[SIZE]; int tos;public:

void init( );void push(int i);int pop( );

};

بدين معrrني اسrrت كrrه stck و tos يلهrrrrrrrrrrبوس

objectتrوابعي كrه عضrو نباشrrrrند غrrrrير قابrrrrل دسترسrي هسrتند. و اين يكي از روش هrrrrrrrrrrاي محصrrrور سrrrازي اقالم

داده هاست.

بدين معrrني اسrrت كrrه بوسrrيله سrrاير قطعrrات برنامrه قابrل دسترسrي

مي باشد.

Page 215: برنامه  سازي C++

نکته :

فقrط توابrع عضrو مي تواننrد بrه متغيرهrاي عضrو دسترسrrrي داشrrrته باشrrrند. privateاز نrrrوع

بايسrتي توجrه داشrت كrه اگrر نrوع عضrوي مشrخص می privateنگrردد آن عضrو بrه صrورت اتوماتيrك

باشد.

Page 216: برنامه  سازي C++

نحوه تعریف تابع عضو یک کالس

void stack : : push(int i){ if(tos = = SIZE ) { cout << stack is full.; return; } stck[tos]= i ; tos ++ ;}

objectعملگrrر: : مشrخص مي نمايrrد كrrه تrrابع متعلrrق بrrه كrدام مي باشrrrrrrrrrrrrrrrrد. عملگrrrrrrrrrrrrrrrrر : : عملگrrrrrrrrrrrrrrrrر

scope resolution .ناميده مي شود

Page 217: برنامه  سازي C++

:stackبرنامه کامل

#include <iostream.h>#define SIZE 100// this creates the class stack. class stack { int stck[SIZE]; int tos;public:

void init(int i); int pop( ); void push(int i); };void stack : : init( ){ tos = 0 ;}void stack : : push(int i){ if(tos = = size) { cout << stack is full. ; return ; }stck[tos] = i ;tos ++ ;}

int stack : : pop( ){ if(tos = = 0) { cout << stack underflow. ; return 0 ; } tos - - ; return stck[tos]; }

int main( ){stack st1, st2; // create two objectsst1. init( ); st2.init( );st1.push(1);st2.push(2);st1.push(3);st2.push(4);cout << st1.pop( ) << endl;cout << st1.pop( ) << endl;cout << st2. pop( ) << endl;cout << st2. pop( ) << endl;return 0; }

Page 218: برنامه  سازي C++

ارث بری

ارث بري فرآيندي است كه بوسيله آن يك شي )object مي تواند خاصيت هاي شي ديگري را دارا (

شود.

در اسالید بعد مثالی از ارث بری آورده شده است.

Page 219: برنامه  سازي C++

مثال :

building اي بنrام سrاختمان يrا object روبrرودر تعريrrف گرديrrده اسrrت. هrrر سrrاختمان داراي تعrدادي اطrاق، تعrدادي طبقrه و سrطح زيrر بنrا نrيز مي باشrد. از طrرف ديگرتrوابعي بrراي شrي تعريrف

:شده

class building {int rooms;int floors;int area;

public:void set_rooms(int num);int get_rooms( );void set _floors(int num);int get_floors( );void set_area(int num);int get_area( );

}; تعريrrrrrف house ديگrrrrrري بنrrrrrام objectحال مي نمrائيم كrه نrه تنهrا داراي تمrام اعضrاي شrي

buildingهrrد بلكrrدارای مي باش دو اقالم داده اضrافي و چهrار تrابع اضrافي مي باشrد. دراينجrا

ارث building از شrrrrrrي houseعمال� شrrrrrrي :مي برد

// house is derived from building class house : public building {

int bedrooms; int baths;

public: void set_bedrooms(int num);int get_bedrooms( );void set_baths(int num);int get_baths( );

};

Page 220: برنامه  سازي C++

نکته :

می derived class را house و base class را building مثrال قبrلدر را دارا اسrت بعالوه اينكrه building تمrام اعضrاي house شrي نامنrد.

توابrع و همچrنينbedrooms ، bathsداراي متغيرهrاي عضrوي اضrافي ()نrيز set_baths()، set_bebrooms()، get_baths()، get_bedroomsعضrوي

مي باشد.

Page 221: برنامه  سازي C++

constructors andسازنده ها و نابودكننده ها (destructors(

Initialization ك ازrورت اتوماتيrه دادن بصrدار اوليrا مقrي يrا تrابع constructorطريrق تrابعي انجrام مي شrود بنrام تrابع

سrازنده. تrابع سrازنده تrابع مخصوصrي اسrت كrه عضrوي از كالس بوده و همنام با كالس مي باشد.

Page 222: برنامه  سازي C++

constructors andسازنده ها و نابودكننده ها (destructors(

، عكس عمrل تrابع destructorتrابع نrابود كننrده يrا سrازنده را انجrام مي دهrد. وقrتي كrه شrي اي از بين مي رود بصrrrورت اتوماتيrrrك تrrrابع نrrrابود كننrrrده آن

فراخواني مي گردد.

Page 223: برنامه  سازي C++

)friend functionsتوابع دوست (

اين امكrان وجrود دارد كrه بrه friendبrا اسrتفاده از كلمrة تrابعي كrه عضrو كالس نمي باشrد اجrازه دسترسrي بrه

كالس را داد. بrrراي آنكrrه تrrابعي را privateمتغيرهrrاي قبrل از تعريrف تrابع friendدوسrت اعالن نمrائيم از كلمrه

استفاده مي نمائيم.

در اسالید بعد مثالی آورده شده است.

Page 224: برنامه  سازي C++

<include <iostream.h#مثال :#include <conio.h>class myclass {

int a,b;public :

friend int sum(myclass x);void set_ab(int i, int j);

};void myclass :: set_ab(int i, int j){ a=i; b=j; }//sum is not a member function int sum(myclass x){

return s.a + x.b;}int main( ){

myclass n;clrscr( );n. set_ab(5,8);cout << sum(n);return 0 ;

}

Page 225: برنامه  سازي C++

نکته :

-كالسي كه از كالس ديگر ارث مي برد ، توابع 1دوست آن كالس را به ارث نمي برند. بعبارت

، توابع دوست را به ارث derived classديگر يك نمي برد.

-توابع دوست داراي مشخصه نوع ذخيره 2نمي باشند يعني توابع دوست را نمي توان

تعريف نمود.external يا staticبصورت

Page 226: برنامه  سازي C++

)friend classesكالسهاي دوست (

اين امكان وجود دارد كه يك كالس دوست كالس ديگري باشد. در تعريف شده در privateچنين وضعيتي تابع دوست به كليه اسامي

كالس ديگر دسترسي دارد.

در اسالید بعد مثالی آورده شده است.

Page 227: برنامه  سازي C++

#include <iostream.h>class coins {

enum units {penny, nickel, dime, quarter, half_ dollar};friend class amount;

};class amount {coins :: units money;public:

void setm( );int getm( );

} ob;void amount :: setm( ){

money = coins :: dime;}int amount :: getm( ){

return money;}int main( ){

ob.setm( );cout << ob.getm( );return 0 ;

}

مثال :

Page 228: برنامه  سازي C++

توابع سازنده پارامتردار

مكrان انتقrال آرگومانهrا بrه توابrع سrازنده وجrود ا initializeدارد. معمrrrوال� از اين آرگومانهrrrا بrrrراي

نمودن شي در زمان ايجاد آن استفاده ميگردد.

در اسالید بعد مثالی آورده شده است.

Page 229: برنامه  سازي C++

مثال :

#include <iostream.h>#include <conio.h>class myclass { int x, y;public: myclass(int i, int j) {x = i; y=j; } void show( ) {cout << x << endl << y; } };int main( ) { myclass obj( 3 , 5); clrscr( ); obj.show( ); return 0; }

Page 230: برنامه  سازي C++

توابع سازنده يك پارامتري#include <iostream.h>#include <conio.h>class myclass{ int x; public: myclass(int i) {x=i;} int getx( ) {return x;} };int main( ){

clrscr( );myclass obj=126; // منتقل كن i 126را بهcout << obj.getx( );return 0 ;

}

Page 231: برنامه  سازي C++

staticعضوهاي

اعالن گردد اين بدين static اگر عضو داده اي بصورت معني است كه كامپيلر فقط يك كپي از متغير

ها بايستي objectمذكور را نگهداري نموده و تمام بصورت اشتراكي از آن كپي استفاده نمايند. براي

قبل از اعالن عضو staticاينكار مي بايستي از كلمه استفاده نمود.

در اسالید بعد مثالی آورده شده است.

Page 232: برنامه  سازي C++

مثال :#include <iostream.h>class shared{ static int a; int b; public : void set (int i, int j) {a=i; b=j; } void show( ); };int shared :: a ; // define avoid shared :: show( ) { cout << static a: << a << endl; cout << nonstatic b: << b << endl; }int main( ){

shared x,y; x.set(1,1); // set a to 1x.show( );y.set(4,4); // change a to 4y.show( );x.show( );return 0;

}

Page 233: برنامه  سازي C++

nested classes(كالسهاي تودرتو)

مي توان يك كالس را در يك كالس ديگر تعريف نمود. اما بعلت اينكه در

C براي كالسها خاصيت ارث بري ++وجود دارد نيازي معموال� به تعريف

نمودن يك كالس در كالس ديگر نيست

Page 234: برنامه  سازي C++

local classes(كالسهاي محلي)

وقrrتي كrrه كالسrrي در درون يrrك تrrابع تعريrف مي شrود اين كالس فقrط بrراي آن تrrابع شrrناخته شrrده اسrrت و بrrراي توابrع ديگrر ناشrناخته مي باشrد. چrنين

كالسي را كالس محلي مي نامند.

Page 235: برنامه  سازي C++

:در مورد كالسهاي محلي رعايت نكات زير ضروري است

تمام توابع عضو بايستي در درون كالس تعريف گردند.1.

از متغيرهاي محلي، تابعي كه كالس در آن تعريف شده نمي تواند 2.استفاده نمايد.

نمي توان استفاده نمود.staticاز متغيرهاي عضوي 3.

Page 236: برنامه  سازي C++

ها بعنوان objectاستفاده ازپارامترهاي توابع

ها مي توان بعنوان پارامترهاي توابع استفاده objectاز

callنمود و مكانيزم انتقال آرگومانها و پارامترها بصورت

by value .مي باشد

Page 237: برنامه  سازي C++

)returning objectsبرگشت اشياء (

باشد.objectمقدار برگشتي يك تابع مي تواند يك

در اسالید بعد مثالی آورده شده است.

Page 238: برنامه  سازي C++

مثال :#include <iostream.h>class myclass {int i ;public :void set_ i(int n) { i=n;}int get_i( ) {return i;} };myclass funct( ); // return an object int main( ){ myclass ob; ob=funct( ); cout << ob.get_i( ) << endl; return 0; } myclass funct( ) { myclass x ; x.set_i(1); return x; }

Page 239: برنامه  سازي C++

)object assignmentانتساب اشياء (

از يك نوع باشندobjectدر صورتيكه دو تا را بديگري انتساب نمود.object مي توان يك

در اسالید بعد مثالی آورده شده است.

Page 240: برنامه  سازي C++

مثال :

#include <iostream.h>#include <conio.h>class myclass{ int i; public: void set_i(int n) {i=n;} int get_i( ) {return i;} };int main( ){

myclass ob1, ob2; obl.set_i(126);ob2= ob1; // assign data from ob1 to ob2 clrscr( );cout << ob2.get_i( );retrun 0 ;

}

Page 241: برنامه  سازي C++

)array of objectsآرايه اشياء (

.امكان استفاده از آرايه در مورد اشياء مي باشد ها object بعبارت ديگر مي توان در برنامه ها آرايه اي از

داشته باشيم.

در اسالید بعد مثالی آورده شده است.

Page 242: برنامه  سازي C++

مثال :

#include <iostream.h>#include <conio.h> class myclass{ int i; public: void set_i(int j) {i=j;} int get_i( ) {return i;}};int main( ){

clrscr( );myclass ob[3];int i;for(i=0; i<3; i++) ob[ i ].set_i(i+1);for(i=0; i<3; i++) cout << ob[ i ].get_i( ) << endl;

return 0; }

Page 243: برنامه  سازي C++

pointers toاشاره گر به اشياء (objects(

در مورد اشياء نيز از اشاره گرها نيز مي توان استفاده نمود. در اين مورد استفاده مي شود. از عملگر

در اسالید بعد مثالی آورده شده است.

Page 244: برنامه  سازي C++

مثال :

#include <iostream.h>#include <conio.h>class myclass{ int i ; public: myclass( ) {i=0;} myclass(int j) {i=j;} int get_i( ) {return i;} };int main( ) { myclass ob[3]= {1, 2, 3}; myclass *p; int i; p=ob; // get start of array for(i=0; i<3; i++)

{ cout << p get_i( ) << endl;

p++; // point to next object }

return 0; }

Page 245: برنامه  سازي C++

this (this pointer)اشاره گر

ر تابع عضو يك كالس داراي يك پارامتر مخفيهobject اشاره به this مي باشد. this pointer بنام

خاصي مي نمايد.

در اسالید بعد مثالی آورده شده است.

Page 246: برنامه  سازي C++

<include <iostream.h#مثال :class pwr {

double b;int e;double val;

public:pwr(double base, int exp);double get_pwr( ) {return val;}

};pwr :: pwr(double base, int exp){

this b=base;this e=exp;this val =1;if(exp = = 0) return;for(; exp > 0 ; exp )this val = this val *this b;

}int main( ){ pwr x(4.0, 2) , y(2.5, 1), z(5.7,0);

cout << x.get_pwr( ) << ;cout << y.get_pwr( ) << ; cout << z.get_pwr( ) << \n ;return 0;

}

Page 247: برنامه  سازي C++

virtualتوابع مجازي و پلي مرفيسم (functions(

تعريف شد وbase classتابع مجازي، تابعي است كه در تغير داده ميشود. براي اعالن يكderived class بوسيله

استفاده نمائيم.virtual تابع مجازي بايستي از كلمه ) base classتغير تابع در كالس مشتق روي تابعي كه در كالس پايه (

تعريف شده انجام مي شود.

در اسالید بعد مثالی آورده شده است.

Page 248: برنامه  سازي C++

<include <iostream.h#مثال :class base {public :virtual void vfunc( ){cout << this is base s vfunc( ) \n ;} };class derived1 : public base {public:void vfunc( ) {cout << this is derived1 s vfunc( ) " << endl ; } };class derived2: public derived1 {public:/*vfunc( ) not overridden by derived2.In this case, since derived2 is derived from derived1, derived1 s vfunc( ) is used */ } ;int main( ){base *p, b;derived1 d1;derived2 d2;//point to basep = &b;p vfunc( ); // access base's vfunc// point to derived1 p=&d1;p vfunc( ); //access derived1's vfunc( )//point to derived2p = &d2;p vfunc( ); // use derived1 s vfunc( )return 0 ; }

Page 249: برنامه  سازي C++
Page 250: برنامه  سازي C++

asm enum protected typedef

auto explicit public typeid

bool extern register typename

break false reinterpret_cast union

case float return unsigned

catch for short using

char friend signed virtual

class goto sizeof void

const if static volatile

const_cast inline static_cast wchar_t

continue int struct while

default long switch xor

delete mutable template xor_eq

do namespace this or_eq

double new throw not

dynamic_cast operator true bitand

else private try and_eq

And -- or bitor not_eq compl

keywords and alternative tokens.