70
Ali Shakiba – http://shakiba.id.ir

مبانی برنامهسازی با C++ جلسه دوم

Embed Size (px)

DESCRIPTION

مبانی برنامه‌سازی با C++ جلسه دوم. علی شکیبا [email protected] اسفند 1391. مباحث این جلسه. متغیرها، ورودی خروجی کاربر، عملگرهای محاسباتی در C++ ، عبارات شرطی. یادآوری. یادآوری. قبل از نوشتن هر برنامه‌ای، صورت مساله را به درستی درک کنید، یک روش برای حل آن مساله ارائه کنید. - PowerPoint PPT Presentation

Citation preview

Page 1: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

Page 2: مبانی برنامهسازی با C++ جلسه دوم

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

جلسه دوم علی شکیبا[email protected]

1391اسفند

Page 3: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

3

مباحث این جلسهمتغیرها،•ورودی خروجی کاربر،•++،Cعملگرهای محاسباتی در •عبارات شرطی.•

Page 4: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

یادآوری

Page 5: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

5

یادآوریقبل از نوشتن هر برنامه ای،•

صورت مساله را به درستی درک کنید،–یک روش برای حل آن مساله ارائه کنید.–

در هنگام نوشتن برنامه،•درک روشنی از ساختارهای برنامه نویسی داشته –

باشید،مانند حلقه ها، شرط ها، توابع و مانند این،•

از الگوهای برنامه نویسی صحیح استفاده کنید،–زبان برنامه نویسی متناسب با مساله خود را –

انتخاب کنید.•

Page 6: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

6

الگوریتم هایک برنامه، برای محاسبه پاسخ یک مساله،•

دنباله ای از دستورات را اجرا می کند.–الگوریتم رویه ای است برای تعیین•

وظایفی که باید برای حل مساله انجام شوند،–ترتیب انجام آن وظایف،–

مثال، دستور پخت یک کیک خامه ای خوشمزه هجده •طبقه!

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

Page 7: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

7

شبه کدشبه کد•

زبانی مصنوعی و غیر رسمی برای توصیف –الگوریتم ها است،

شبیه به زبان های روزمره است،–نمی توانند توسط یک کامپیوتر اجرا شوند،•

مهم ترین کاربرد آن، امکان فکر کردن درباره –ساختار برنامه است، چرا که:

تبدیل آن به کد برنامه نویسی ساده است،•شبه کد می تواند تنها شامل دستورات اجرایی باشد.–

Page 8: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

متغیرها

Page 9: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

9

متغیرمتغیر •

مکانی از حافظه که می توان داده )ها( را در آن –ذخیره نمود،

++ باید دارای نام و نوع داده Cتمام متغیرها در –باشند،

نوع داده قبل از نام متغیر می آید،–انواع داده معمول–

(،intعدد صحیح )•(،charکاراکتر )•(،doubleممیز شناور با دقت مضاعف )•

می توان چندین متغیر از یک نوع را با یک دستور –مشخص نمود.

int test;double grade;char firstChar;

int test1, test2, numberOfPCs;

Page 10: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

10

متغیر )ادامه(متغیر •

نام متغیر باید یک نام معتبر باشد!–متشکل از دنباله ای از کاراکترها شامل حروف، ارقام و •

خط زیرین )_(، است،نباید با رقم آغاز شود،••C،به بزرگی و کوچکی حروف حساس است ++نباید از کلمات کلیدی باشد.•

int grade1, Grade1;

Page 11: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

11

++Cانواع داده ها در

Page 12: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

12

++ )ادامه(Cانواع داده ها در

Page 13: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

13

( )عملگر Assignmentانتساب ))=

مقدار دهی اولیه در هنگام تعریف متغیرها،•اگر این کار را انجام ندهید، مقدار اولیه متغیر نامشخص –

است و می تواند هر مقداری باشد!عادت خوب برنامه نویسی، مقداردهی اولیه همه متغیرها –

در هنگام تعریف است.int myValue = 0;

انتساب در حین اجرا،•مقادیر سمت راست و سمت چپ–

مقادیر سمت چپ در یک انتساب باید شناسه یک متغیر باشند،•مقادیر سمت راست در یک انتساب می توانند هر عبارتی باشند،•مثال:•

distance = rate * time;"distance" :مقدار سمت چپ "rate * time" :مقدار سمت راست

Page 14: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

14

مبان برهایی برای عملگر انتساب

Page 15: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

15

قواعد انتساب دادهقواعد انتساب داده•

همسان بودن نوع داده–قانون کلی: نمی توان داده ای از یک نوع را در یک نوع دیگر قرار •

داد!

intVar = 2.99; // 2 is assigned to intVar!، به متغیر 2در صورت اجرای این دستور، تنها قسمت صحیح، •

نسبت داده می شود،در این صورت، تبدیل نوع ضمنی یا خودکار فراخوانی شده است.•

(Literalsالفاظ )–2, 5.75, ‘Z’, "Hello World"

به عنوان ثابت در نظر گرفته می شوند، و نمی توان آن ها را در •طول برنامه تغییر داد!

مثال–

2 = 9;

Page 16: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

16

(Literalsالفاظ )الفاظ•

مثال– است،int یک لفظ 2• است،double یک لفظ 5.75••‘Z یک لفظ ’char،است •“Hello یک لفظ ”!string.است

مقادیر آن ها را در حین اجرای برنامه نمی توان تغییر •داد.

Page 17: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

17

کاراکترهای کنترلی

Page 18: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

18

کاراکترهای کنترلی )ادامه(

Page 19: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

19

ثوابتقالب کلی تعریف ثوابت•

const نوع داده NAME_OF_VAR = مقدار ;:مثال•

const int NUMBER_OF_STUDENTS = 24;در هر کجای برنامه، می توان از این ثابت با نوشتن –

نامش استفاده کرد،مقدار ثابت در طول برنامه، پس از تعریف؛ غیر –

قابل تغییر است!

Page 20: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

20

ثوابت

Page 21: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

21

دقت محاسبات ریاضیدقت محاسبات ریاضی•

یک اصل مهم در برنامه نویسی است که باید –همواره در نظر گرفته شود،

ممکن است محاسبه عبارات آنگونه که شما انتظار •دارید، پیش نروند!

دقت محاسبات توسط عملگر محاسباتی با –بیشترین اولویت مشخص می شود!

عدم دقت به این مورد، متاسفانه یکی از –++ Cمعمول ترین خطاها در بین برنامه نویسان

است!

Page 22: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

22

مثال هایی از محاسبات ریاضی ++Cدر

مثال•– 17 / 5

هر دو عملوند صحیح هستند!•در نتیجه تقسیم صحیح انجام شده است!•

– 17.0 / 5یکی از عملوندها، ممیز شناور دارد، بنابراین •عملگر تقسیم با ممیز شناور اعمال شده است.•

– int intVar1 =1, intVar2=2;intVar1 / intVar2;

اعمال تقسیم صحیح،• است!0جواب: •

Page 23: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

23

مثالی مهم و البته جالب!به خاطر داشته باشید: محاسبات یک به یک انجام •

می شوند!، سه عمل تقسیم انجام 4 / 3.0 / 2 / 1برای محاسبه –

می شوند:i.1 / 2 = 0ii.0 / 3.0 = 0.0iii.0.0 / 4 = 0.0

بنابراین برای نیل به نتیجه مورد نظر، باید تک تک •محاسبات و دقت محاسباتی آن ها را مد نظر داشت!

Page 24: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

24

تبدیل نوع دادهتبدیل متغیرها•

برای اینکه محاسبات با دقت اعشار را الزام کنیم، – را اضافه کنیم! اما نمی توان 0.می توانیم به الفاظ عددی،

نوشت:myInt.0

بنابراین برای متغیرها باید از تبدیل نوع داده صریح استفاده –کرد!

static_cast<double>(intVar) تبدیل double را به یک مقدار intVarمقدار متغیر صحیح –

می کند،نتیجه این محاسبه مورد استفاده قرار می گیرد،• ایجاد نمی کند،intVarاین تبدیل تغییری در نوع یا محتویات •مثال•

doubleVar = static_cast<double>(intVar1) / intVar2;

Page 25: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

25

تبدیل نوع داده )ادامه(دو نوع!•

ضمنی، یا خودکار–به صورت خودکار انجام می شود،•

17 / 5.5منجر به تبدیل زیر می شود:«

17 17.0

صریح–static_cast<double>(intVar)

انج?ام قاب?ل ن?یز زی?ر دس?تور ب?ا ص?ریح تب?دیل اس?ت، ام?ا توص?یه می کنم ب?ه اس?تفاده از دس?تور

فوق عادت کنید!نام متغیر (نوع داده مقصد)

Page 26: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

26

عملگرهای اختصاریعملگرهای افزایشی و کاهشی•

++، عملگر –•z معادل با ++z = z + 1!است

عملگر --،–•z معادل با --z = z – 1!است

Z++++ و Z ب?ا یک?دیگر متف?اوت هس?تند! این دو مقدار را ارزیابی کرده و توجیه کنید!

Z++ * 8 و ++Z * 8

Page 27: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

27

Z++++ یا Z؟

پس افزایش )عملگر ++ در سمت راست متغیر •باشد(intVar++

ابتدا از مقدار فعلی استفاده کرده و سپس آن را یک واحد –افزایش می دهد،

پیش افزایش•++intVar

ابتدا مقدار فعلی را افزایش داده و سپس از مقدار جدید –استفاده می کند.

Page 28: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

ورودی و خروجی

Page 29: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

29

ورودی و خروجی کنسولcin, cout, cerr عبارتند از I/Oاشیا مربوط به• تعریف std< در فضای نام iostreamکه در کتابخانه >•

شده اند،برای استفاده از آن ها، می توان از رویه ذیل استفاده •

نمود:

#include <iostream>using namespace std;

،cin++ می گویند که تعاریف مربوط به Cاین دستورات به –cout وcerr!را از کجا به دست بیاورد

Page 30: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

30

خروجی کنسولچه چیزهایی را می توان به خروجی فرستاد؟•

هر داده ای مانند–متغیرها،•ثوابت،•الفاظ،•عبارات )که شامل سه مورد فوق نیز می باشد(•

cout << numberOfGames << " games played.";، چاپ کردن چندین داده در Cascadingمنظور از •

می باشد.coutخروجی با استفاده از یک دستور

Page 31: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

31

جدا کردن خطوط در خروجیایجاد خطوط جدید در خروجی•

’ کاراکتر کنترلی خط جدیدn‘\یادآوری:–

عادت کنید!endlسعی کنید به استفاده از •مثال•

cout << "Hello World\n";

cout << "Hello World" << endl;

Page 32: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

32

خروجی قالب دارقالب دار کردن خروجی عددی•

مثال–cout << "The price is $" << price << endl;

تعریف double )که به صورت priceاگر مقدار متغیر • باشد، آنگاه مشخص نیست 78.5شده است(، برابر با

خروجی دقیقا به چه فرمی است! The price is $78.500000The price is $78.5

باید به صورت مشخص و صریح ذکر شود که •C از چه قالب خروجی برای اعداد استفاده ++

کند!

Page 33: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

33

قالب دار کردن اعداددستورات زیر، نمایش معمول )با دو رقم اعشار( از •

اعداد ممیز شناور را موجب می شوند،cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(2);

های پس از خود را تحت coutاین دستورات، همه •تاثیر قرار می دهند.

دقیقا دو رقم اعشار پس از ممیز داریم!–مثال:–

cout << "The price is $" << price << endl;نتیجه به صورت ذیل است:•

The price is $78.50دقت نمایش را می توان در هنگام اجرا نیز تغییر داد.•

Page 34: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

34

خروجی خطا ارسال کنیم،cerrکافی است که خروجی را به •

–cerr دقیقا مانند cout،کار می کند مکانیزمی برای تفاوت قائل شدن بین خروجی –

استاندارد و خروجی خطا فراهم می کند، )سعی (کنیم به استفاده صحیح از این اشیا عادت کنیم

Page 35: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

35

cinورودی با استفاده از برای خروجی cout برای ورودی و از شی cinاز شی •

استفاده می شود،تفاوت ها•

"<<" عملگر استخراج از جریان–جهت آن از جریان به سمت متغیر)ها( است.•

” استفاده می شود،cout به جای شی "cinاز شی "–، از هیچ لفظی نمی توان استفاده کرد.cinبرای –

باید ورودی ای برای یک متغیر فراهم کند!•

cin >> num;در کنسول، منتظر دریافت یک ورودی می ماند،–مقدار وارد شده در کنسول را به متغیر منسوب می کند.–

Page 36: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

36

اندکی درباره دریافت از ورودی در برنامه های ما!

همواره به کاربر پیامی مرتبط با نوع داده ورودی و •ویژگی های آن نشان دهید!

• cout << "Enter number of dragons: ";cin >> numOfDragons;

و تفاوت cout’ در انتهای رشته nبه عدم وجود کاراکتر ‘\–حاصل از آن در خروجی دقت کنید!

Enter number of dragons: ____

باشد تا کاربر بداند cout، یک cinسعی کنید قبل از هر •که باید چه داده ای را به عنوان ورودی وارد کند.

Page 37: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

37

توضیحاتیکی از مهمترین اهداف توضیحات، خواناتر کردن برنامه ها و •

ساده تر کردن فرآیند تغییر آن ها است.

دو شیوه کلی:•– از محل قرار گیری دو اسلش تا پایان خط جاری به عنوان توضیح //

.فرض می شود– ،هر آنچه که بین این دو عالمت قرار بگیرد *//* .حتی کاراکتر خط جدید نیز به عنوان توضیح فرض می شود

از هر دو روش به صورت معمول استفاده می شود.–

Page 38: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

38

کتابخانه ها++، از قالب Cبرای استفاده از کتابخانه ها در •

دستوری زیر استفاده می کنیم:• #include <Library_Name>

به پیش پردازنده می گوید که کتابخانه مورد نظر را –برای استفاده، به برنامه الحاق کند.

به صورت خیلی ساده می توان گفت که قبل از کامپایل •برنامه، کتابخانه مورد نظر را به برنامه الحاق می کند،

++ وجود دارند.Cکتابخانه های زیادی برای •

Page 39: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

39

cmathکتابخانه کافی است کتابخانه را به صورت زیر به برنامه •

الحاق کنیم:#include <cmath>

مثال امضا تابع تابع

double a = abs(-65.4);double abs ( double x );float abs ( float x );long double abs ( long double x );

قدر مطلق

double b = floor(63.95);double floor ( double x );float floor ( float x );long double floor ( long double x );

کف

double c = ceil(94.3);double ceil ( double x );float ceil ( float x );long double ceil ( long double x );

سقف

Page 40: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

40

)ادامه(cmathکتابخانه

مثال امضا تابع تابع

double d = pow(9,2);

double pow (double base, double exponent );long double pow ( long double base, long double exponent );float pow (float base, float exponent );double pow (double base, int exponent );long double pow (long double base, int exponent );

توان

double e = sqrt(93);double sqrt ( double x );float sqrt ( float x );long double sqrt ( long double x );

ریشه دوم

Page 41: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

41

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

نماد مرسوم

عملگر معادل در زبان C++

مثال در C++ توضیح

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

> > x > y X بزرگتر ازy.است

< < x < y X ازy.کمتر است

>= x >= y X بزرگتر یا مساوی باy.است

<= x <= y X کوچکتر یا مساوی باy است.

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

= == x == y X باy.برابر است

!= x != y X باy.برابر نیست

Page 42: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

42

ارزیابی عبارات رابطه ایboolنوع داده •

را باز می گرداند،false یا trueمقدار ––True و false ثوابت از پیش تعریف شده برای نوع ،

هستند.boolداده

Page 43: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

43

با = تفاوت دارد!==

خطای معمول•معموال منجر به خطای نحوی نمی شود!–

چرا مشکل ایجاد می شود؟•عباراتی که حاصل آن ها یک مقدار باشد، می توانند –

به عنوان شرط استفاده شوند!صفر == نادرست، ناصفر == درست!•

#include <iostream>

using namespace std;

int main(){ int a = 0; cout << (a = 10) << endl; return 0;}

10

Page 44: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

44

با = تفاوت دارد! )ادامه(==

مثال•if ( payCode == 4 ) cout << "You get a bonus!" << endl;

باشد، شامل پاداش می شود.4 برابر با payCodeاگر –حال اگر == را با = جایگزین کنیم:•

if ( payCode = 4 ) cout << "You get a bonus!" << endl;

تنظیم می کند )مقدار قبلی آن 4 را به payCodeمقدار –اهمیتی ندارد(،

ناصفر است، بنابراین شرط صحیح است!4چون –بنابراین در هر صورت، پاداش نسبت داده می شود.–

Page 45: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

45

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

)عطف(&&•if ( gender == 1 && age >= 65 )

++seniorFemales; )فصل(||•

if ( semesterAverage >= 90 || finalExam >= 90 ) cout << "Student grade is A" << endl;

Page 46: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

46

عملگرهای منطقی )ادامه(

)نقیض(!•if ( !( grade == sentinelValue ) ) cout << "The next grade is " << grade << endl;

یا به صورت معادلif ( grade != sentinelValue ) cout << "The next grade is " << grade << endl;

Page 47: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

47

جداول صحت مربوط به عملگرهای منطقی

Page 48: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

48

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

بیشترین اولویت

کمترین اولویت

Page 49: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

49

اولویت عملگرها )ادامه(

بیشترین اولویت

کمترین اولویت

Page 50: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

50

اولویت عملگرها )ادامه(

بیشترین اولویت

کمترین اولویت

Page 51: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

51

اولویت عملگرها )ادامه(

بیشترین اولویت

کمترین اولویت

Page 52: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

52

مثال هایی از اولویت عملگرهامحاسبات ریاضی قبل از عملگر منطقی اعمال •

می شوند،– x + 1 > 2 || x + 1 < -3

• (x + 1) > 2 || (x + 1) < -3

ارزیابی مدار کوتاه،•–(x >= 0( && )y < 1)! در مورد عملگر ++ و -- در چنین مواردی هشیار اخطار–

باشید!• (x > 1) && (y++)

اعداد صحیح را می توان به عنوان مقادیر منطقی در •نظر گرفت!

trueهمه مقادیر ناصفر – falseمقدار صفر –

Page 53: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

ساختارهای کنترل جریان برنامه

Page 54: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

54

ساختارهای کنترل جریان برنامه

اجرای دنباله ای•دستورات به ترتیبی که در برنامه آمده اند اجرا می شوند،–

انتقال کنترل•دستور بعدی که اجرا می شود، الزاما دستور بعدی نیست!–

سه ساختار کنترل جریان وجود دارد:•ساختار دنباله ای–

به صورت پیش فرض، دستورات برنامه به ترتیبی که در برنامه •آمده اند اجرا می شوند،

ساختارهای انتخاب–• if, if/else, switch

ساختارهای تکرار–• while, do/while, for

Page 55: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

55

ifساختار انتخابی ifساختار انتخابی •

از بین اعمال ممکن، یک عمل را انتخاب می کند،–نمونه شبه کد:–

If student’s grade is greater than or equal to 60Print “Passed”

باشد، آنگاه if، trueدر صورتی که شرط – دقت را چاپ کرده و سپس دستور بعدی اجرا می شود! )printدستور •

کنید! دستور بعدی، الزاما خط کد بعدی نیست! در این زمینه از فلوچارت استفاده کنید!(

باشد، آنگاه if، falseدر صورتی که شرط –دستور بعدی اجرا می شود،•

عادت خوب برنامه نویسی، استفاده به جا از فاصل ها در حین –کدنویسی است!

•C.فاصله های خالی را در نظر نمی گیرد ،++

Page 56: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

56

)ادامه(ifساختار انتخابی ++ ذیل،Cترجمه شبه کد به کد •

If student’s grade is greater than or equal to 60Print “Passed”

if ( grade >= 60 ) cout << "Passed";

 

A decision can be made on any expression. zero - false nonzero - trueExample:3 - 4 is true

Page 57: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

57

else و ifساختار انتخابی •if

در صورت صحیح بودن شرایط، دستوراتی را اجرا می کند،–•if/else

در صورتی که شرایط صحیح نباشند، دستوراتی را اجرا می کند،–شبه کد•

if student’s grade is greater than or equal to 60print “Passed”

elseprint “Failed”

•C++if ( grade >= 60 ) cout << "Passed";else cout << "Failed";

Page 58: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

58

عملگر شرطی سه تایی(?:)عملگر شرطی سه تایی•

cout << ( grade >= 60 ? “Passed” : “Failed” );

Condition Value if true Value if false

Page 59: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

59

else و ifساختار انتخابی النه ای

النه ایif/elseساختارهای •if student’s grade is greater than or equal to 90

Print “A”else

if student’s grade is greater than or equal to 80 Print “B”else

if student’s grade is greater than or equal to 70 Print “C” else if student’s grade is greater than or equal to 60 Print “D”

else Print “F”

Page 60: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

60

ساختار انتخابی با استفاده از if/else

مثال•if ( grade >= 90 ) // 90 and above cout << "A";else if ( grade >= 80 ) // 80-89 cout << "B";else if ( grade >= 70 ) // 70-79 cout << "C"; else if ( grade >= 60 ) // 60-69 cout << "D";else // less than 60 cout << "F";

Page 61: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

61

ساختار انتخابی با استفاده از if/else)ادامه(

بلوک دستورات•} و { قرار مجموعه ای از دستورات که در بین –

گرفته اند. if ( grade >= 60 )

cout << "Passed.\n";else { cout << "Failed.\n"; cout << "You must take this course again.\n";}

بدون استفاده از { و }، دستور–cout << "You must take this course again.\n";

همواره، بدون در نظر گرفتن شرط، اجرا می شود.

Page 62: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

62

switchساختار انتخاب چندگانه •switch

آزمودن مقدار متغیر در برابر چندین حالت مختلف،– و حالت caseدنباله ای از حالت های مشخص شده با –

)دلخواه( defaultپیش فرض switch ( variable ) {

case value1: // taken if variable == value1 statements break; // necessary to exit switch

case value2:case value3: // taken if variable == value2 or ==

value3 statements break;

default: // taken if variable matches no other cases statements break;

}

Page 63: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

63

switchساختار انتخاب چندگانه )ادامه(

Page 64: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

64

switchمثال از مثال•

(، خوانده و سپس تعداد هر A-Fبرنامه ای که نمرات به صورت حرفی، )–کدام را چاپ کند.

)در لینوکس( بیانگر انتهای لیست نمرات Ctrl+D )در ویندوز( یا Ctrl+Zکلیدهای •است،

وارد کند )برای سایر حروف نیز این اصل برقرار باید A یا aکاربر می تواند •باشد(.

اندکی درباره کاراکترها• ذخیره می کنیم.charبه صورت معمول، کاراکترها را در نوع داده –

•char یک عدد صحیح یک بایتی است، بنابراین می توان کاراکترها را به عنوان یک عدد صحیح نیز ذخیره نمود.

برخورد کرد.char یا intبا یک کاراکتر را می توان مانند نوع – است.ASCII’ در استاندارد a کد عددی معادل با کاراکتر ‘97•

cout << "The character (" << 'a' << ") has the value " << static_cast< int > ( 'a' ) << endl;

The character (a) has the value 97

” متفاوت است.a’ با “a‘! دقت کنیدتمرین: چرا؟

Page 65: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

65

)ادامه(switchمثال از 1 // Fig. 2.22: fig02_22.cpp2 // Counting letter grades.3 #include <iostream>4 5 using std::cout;6 using std::cin;7 using std::endl;8 9 // function main begins program execution10 int main()11 {12 int grade; // one grade13 int aCount = 0; // number of As14 int bCount = 0; // number of Bs15 int cCount = 0; // number of Cs16 int dCount = 0; // number of Ds17 int fCount = 0; // number of Fs18 19 cout << "Enter the letter grades." << endl20 << "Enter the EOF character to end input." << endl;21

Page 66: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

66

)ادامه(switchمثال از 22 // loop until user types end-of-file key sequence23 while ( ( grade = cin.get() ) != EOF ) {24 25 // determine which grade was input26 switch ( grade ) { // switch structure nested in while27 28 case 'A': // grade was uppercase A29 case 'a': // or lowercase a30 ++aCount; // increment aCount31 break; // necessary to exit switch32 33 case 'B': // grade was uppercase B34 case 'b': // or lowercase b35 ++bCount; // increment bCount 36 break; // exit switch37 38 case 'C': // grade was uppercase C39 case 'c': // or lowercase c40 ++cCount; // increment cCount 41 break; // exit switch42

cin.get() uses dot notation (explained chapter 6). This function gets 1 character from the keyboard (after Enter pressed), and it is assigned to grade.

cin.get() returns EOF (end-of-file) after the EOF character is input, to indicate the end of data. EOF may be ctrl-d or ctrl-z, depending on your OS.

Compares grade (an int) to the numerical representations of A and a.

break causes switch to end and the program continues with the first statement after the switch structure.

Assignment statements have a value, which is the same as the variable on the left of the =. The value of this statement is the same as the value returned by cin.get().

This can also be used to initialize multiple variables:a = b = c = 0;

Page 67: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

67

)ادامه(switchمثال از 43 case 'D': // grade was uppercase D44 case 'd': // or lowercase d45 ++dCount; // increment dCount 46 break; // exit switch47 48 case 'F': // grade was uppercase F49 case 'f': // or lowercase f50 ++fCount; // increment fCount 51 break; // exit switch52 53 case '\n': // ignore newlines, 54 case '\t': // tabs, 55 case ' ': // and spaces in input56 break; // exit switch57 58 default: // catch all other characters59 cout << "Incorrect letter grade entered."60 << " Enter a new grade." << endl;61 break; // optional; will exit switch anyway62 63 } // end switch64 65 } // end while66

Notice the default statement, which catches all other cases.

This test is necessary because Enter is pressed after each letter grade is input. This adds a newline character that must be removed. Likewise, we want to ignore any whitespace.

Page 68: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

68

)ادامه(switchمثال از

67 // output summary of results68 cout << "\n\nTotals for each letter grade are:" 69 << "\nA: " << aCount // display number of A grades70 << "\nB: " << bCount // display number of B grades71 << "\nC: " << cCount // display number of C grades 72 << "\nD: " << dCount // display number of D grades73 << "\nF: " << fCount // display number of F grades74 << endl;75 76 return 0; // indicate successful termination77 78 } // end function main

Page 69: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

69

مراجعمراجع درس:•

جعفرنژاد قمی، عین ا...؛ برنامه نویسی به زبان –C ؛ انتشارات علوم رایانه؛ ویراست چهارم؛++

1391.جعفرنژاد قمی، عین ا... و کریم پور، انیس؛ مبانی –

کامپیوتر و الگوریتم ها؛ انتشارات علوم رایانه؛ .1391ویراست دوم؛

برای آماده سازی مطالب و اسالیدها از مراجع •زیر نیز استفاده کرده ام:

– Deitel, P.J. and Deitel, H.M.; C++: How to program; Prentice-Hall; Fifth Edition; 2005.

Page 70: مبانی برنامهسازی با C++ جلسه دوم

Ali Shakiba – http://shakiba.id.ir

70