Download presentation
Presentation is loading. Please wait.
2
مبانی برنامهسازی با C++ جلسه دوم
علی شکیبا اسفند 1391
3
مباحث این جلسه متغیرها، ورودی خروجی کاربر، عملگرهای محاسباتی در C++،
عبارات شرطی.
4
یادآوری
5
یادآوری قبل از نوشتن هر برنامهای، در هنگام نوشتن برنامه،
صورت مساله را به درستی درک کنید، یک روش برای حل آن مساله ارائه کنید. در هنگام نوشتن برنامه، درک روشنی از ساختارهای برنامه نویسی داشته باشید، مانند حلقهها، شرطها، توابع و مانند این، از الگوهای برنامه نویسی صحیح استفاده کنید، زبان برنامه نویسی متناسب با مساله خود را انتخاب کنید.
6
الگوریتمها یک برنامه، برای محاسبه پاسخ یک مساله،
دنبالهای از دستورات را اجرا میکند. الگوریتم رویهای است برای تعیین وظایفی که باید برای حل مساله انجام شوند، ترتیب انجام آن وظایف، مثال، دستور پخت یک کیک خامهای خوشمزه هجده طبقه! کنترل جریان برنامه تعیین ترتیبی که دستورات برنامه اجرا میشوند.
7
شبهکد شبهکد نمیتوانند توسط یک کامپیوتر اجرا شوند،
زبانی مصنوعی و غیر رسمی برای توصیف الگوریتمها است، شبیه به زبانهای روزمره است، نمیتوانند توسط یک کامپیوتر اجرا شوند، مهمترین کاربرد آن، امکان فکر کردن درباره ساختار برنامه است، چرا که: تبدیل آن به کد برنامه نویسی ساده است، شبهکد میتواند تنها شامل دستورات اجرایی باشد.
8
متغیرها
9
متغیر متغیر مکانی از حافظه که میتوان داده(ها) را در آن ذخیره نمود،
تمام متغیرها در C++ باید دارای نام و نوع داده باشند، نوع داده قبل از نام متغیر میآید، انواع داده معمول عدد صحیح (int)، کاراکتر (char)، ممیز شناور با دقت مضاعف (double)، میتوان چندین متغیر از یک نوع را با یک دستور مشخص نمود. int test; double grade; char firstChar; int test1, test2, numberOfPCs;
10
متغیر (ادامه) متغیر نام متغیر باید یک نام معتبر باشد!
متشکل از دنبالهای از کاراکترها شامل حروف، ارقام و خط زیرین (_)، است، نباید با رقم آغاز شود، C++ به بزرگی و کوچکی حروف حساس است، نباید از کلمات کلیدی باشد. int grade1, Grade1;
11
انواع دادهها در C++
12
انواع دادهها در C++ (ادامه)
13
انتساب (Assignment) (عملگر =)
مقدار دهی اولیه در هنگام تعریف متغیرها، اگر این کار را انجام ندهید، مقدار اولیه متغیر نامشخص است و میتواند هر مقداری باشد! عادت خوب برنامه نویسی، مقداردهی اولیه همه متغیرها در هنگام تعریف است. int myValue = 0; انتساب در حین اجرا، مقادیر سمت راست و سمت چپ مقادیر سمت چپ در یک انتساب باید شناسه یک متغیر باشند، مقادیر سمت راست در یک انتساب میتوانند هر عبارتی باشند، مثال: distance = rate * time; مقدار سمت چپ: "distance" مقدار سمت راست: "rate * time"
14
مبانبرهایی برای عملگر انتساب
15
قواعد انتساب داده قواعد انتساب داده همسان بودن نوع داده
قانون کلی: نمیتوان دادهای از یک نوع را در یک نوع دیگر قرار داد! intVar = 2.99; // 2 is assigned to intVar! در صورت اجرای این دستور، تنها قسمت صحیح، 2، به متغیر نسبت داده میشود، در این صورت، تبدیل نوع ضمنی یا خودکار فراخوانی شده است. الفاظ (Literals) 2, 5.75, ‘Z’, "Hello World" به عنوان ثابت در نظر گرفته میشوند، و نمیتوان آنها را در طول برنامه تغییر داد! مثال 2 = 9;
16
الفاظ (Literals) الفاظ
مثال 2 یک لفظ int است، 5.75 یک لفظ double است، ‘Z’ یک لفظ char است، “Hello!” یک لفظ string است. مقادیر آنها را در حین اجرای برنامه نمیتوان تغییر داد.
17
کاراکترهای کنترلی
18
کاراکترهای کنترلی (ادامه)
19
ثوابت قالب کلی تعریف ثوابت مثال:
const نوع داده NAME_OF_VAR = مقدار ; مثال: const int NUMBER_OF_STUDENTS = 24; در هر کجای برنامه، میتوان از این ثابت با نوشتن نامش استفاده کرد، مقدار ثابت در طول برنامه، پس از تعریف؛ غیر قابل تغییر است!
20
ثوابت
21
دقت محاسبات ریاضی دقت محاسبات ریاضی
یک اصل مهم در برنامه نویسی است که باید همواره در نظر گرفته شود، ممکن است محاسبه عبارات آنگونه که شما انتظار دارید، پیش نروند! دقت محاسبات توسط عملگر محاسباتی با بیشترین اولویت مشخص میشود! عدم دقت به این مورد، متاسفانه یکی از معمولترین خطاها در بین برنامه نویسان C++ است!
22
مثالهایی از محاسبات ریاضی در C++
17 / 5 هر دو عملوند صحیح هستند! در نتیجه تقسیم صحیح انجام شده است! 17.0 / 5 یکی از عملوندها، ممیز شناور دارد، بنابراین عملگر تقسیم با ممیز شناور اعمال شده است. int intVar1 =1, intVar2=2; intVar1 / intVar2; اعمال تقسیم صحیح، جواب: 0 است!
23
مثالی مهم و البته جالب! به خاطر داشته باشید: محاسبات یک به یک انجام میشوند! برای محاسبه 1 / 2 / 3.0 / 4، سه عمل تقسیم انجام میشوند: 1 / 2 = 0 0 / 3.0 = 0.0 0.0 / 4 = 0.0 بنابراین برای نیل به نتیجه مورد نظر، باید تک تک محاسبات و دقت محاسباتی آنها را مد نظر داشت!
24
doubleVar = static_cast<double>(intVar1) / intVar2;
تبدیل نوع داده تبدیل متغیرها برای اینکه محاسبات با دقت اعشار را الزام کنیم، میتوانیم به الفاظ عددی، .0 را اضافه کنیم! اما نمیتوان نوشت: myInt.0 بنابراین برای متغیرها باید از تبدیل نوع داده صریح استفاده کرد! static_cast<double>(intVar) مقدار متغیر صحیح intVar را به یک مقدار double تبدیل میکند، نتیجه این محاسبه مورد استفاده قرار میگیرد، این تبدیل تغییری در نوع یا محتویات intVar ایجاد نمیکند، مثال doubleVar = static_cast<double>(intVar1) / intVar2;
25
(نوع داده مقصد) نام متغیر
تبدیل نوع داده (ادامه) دو نوع! ضمنی، یا خودکار به صورت خودکار انجام میشود، 17 / 5.5 منجر به تبدیل زیر میشود: 17 17.0 صریح static_cast<double>(intVar) تبدیل صریح با دستور زیر نیز قابل انجام است، اما توصیه میکنم به استفاده از دستور فوق عادت کنید! (نوع داده مقصد) نام متغیر
26
عملگرهای اختصاری عملگرهای افزایشی و کاهشی عملگر ++، عملگر --،
z++ معادل با z = z + 1 است! عملگر --، z-- معادل با z = z – 1 است! Z++ و ++Z با یکدیگر متفاوت هستند! این دو مقدار را ارزیابی کرده و توجیه کنید! Z++ * 8 و ++Z * 8
27
Z++ یا ++Z؟ پس افزایش (عملگر ++ در سمت راست متغیر باشد) intVar++
ابتدا از مقدار فعلی استفاده کرده و سپس آن را یک واحد افزایش میدهد، پیش افزایش ++intVar ابتدا مقدار فعلی را افزایش داده و سپس از مقدار جدید استفاده میکند.
28
ورودی و خروجی
29
ورودی و خروجی کنسول اشیا مربوط بهI/O عبارتند از cin, cout, cerr
که در کتابخانه <iostream> در فضای نام std تعریف شده اند، برای استفاده از آنها، میتوان از رویه ذیل استفاده نمود: #include <iostream> using namespace std; این دستورات به C++ میگویند که تعاریف مربوط به cin، coutو cerr را از کجا به دست بیاورد!
30
خروجی کنسول چه چیزهایی را میتوان به خروجی فرستاد؟
هر دادهای مانند متغیرها، ثوابت، الفاظ، عبارات (که شامل سه مورد فوق نیز میباشد) cout << numberOfGames << " games played."; منظور از Cascading، چاپ کردن چندین داده در خروجی با استفاده از یک دستور cout میباشد.
31
جدا کردن خطوط در خروجی ایجاد خطوط جدید در خروجی
یادآوری:‘\n’ کاراکتر کنترلی خط جدید سعی کنید به استفاده از endlعادت کنید! مثال cout << "Hello World\n"; cout << "Hello World" << endl;
32
خروجی قالبدار قالبدار کردن خروجی عددی
مثال cout << "The price is $" << price << endl; اگر مقدار متغیر price (که به صورت double تعریف شده است)، برابر با 78.5 باشد، آنگاه مشخص نیست خروجی دقیقا به چه فرمی است! The price is $ The price is $78.5 باید به صورت مشخص و صریح ذکر شود که C++ از چه قالب خروجی برای اعداد استفاده کند!
33
قالبدار کردن اعداد دستورات زیر، نمایش معمول (با دو رقم اعشار) از اعداد ممیز شناور را موجب میشوند، cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); این دستورات، همه cout های پس از خود را تحت تاثیر قرار میدهند. دقیقا دو رقم اعشار پس از ممیز داریم! مثال: cout << "The price is $" << price << endl; نتیجه به صورت ذیل است: The price is $78.50 دقت نمایش را میتوان در هنگام اجرا نیز تغییر داد.
34
خروجی خطا کافی است که خروجی را به cerr ارسال کنیم،
cerr دقیقا مانند cout کار میکند، مکانیزمی برای تفاوت قائل شدن بین خروجی استاندارد و خروجی خطا فراهم میکند، (سعی کنیم به استفاده صحیح از این اشیا عادت کنیم )
35
ورودی با استفاده از cin از شی cin برای ورودی و از شی cout برای خروجی استفاده میشود، تفاوتها ">>" عملگر استخراج از جریان جهت آن از جریان به سمت متغیر(ها) است. از شی "cin به جای شی "cout” استفاده میشود، برای cin، از هیچ لفظی نمیتوان استفاده کرد. باید ورودیای برای یک متغیر فراهم کند! cin >> num; در کنسول، منتظر دریافت یک ورودی میماند، مقدار وارد شده در کنسول را به متغیر منسوب میکند.
36
اندکی درباره دریافت از ورودی در برنامههای ما!
همواره به کاربر پیامی مرتبط با نوع داده ورودی و ویژگیهای آن نشان دهید! cout << "Enter number of dragons: "; cin >> numOfDragons; به عدم وجود کاراکتر ‘\n’ در انتهای رشته cout و تفاوت حاصل از آن در خروجی دقت کنید! Enter number of dragons: ____ سعی کنید قبل از هر cin، یک cout باشد تا کاربر بداند که باید چه دادهای را به عنوان ورودی وارد کند.
37
توضیحات یکی از مهمترین اهداف توضیحات، خواناتر کردن برنامهها و سادهتر کردن فرآیند تغییر آنها است. دو شیوه کلی: // از محل قرار گیری دو اسلش تا پایان خط جاری به عنوان توضیح فرض میشود. /* هر آنچه که بین این دو علامت قرار بگیرد، حتی کاراکتر خط جدید نیز به عنوان توضیح فرض می شود. */ از هر دو روش به صورت معمول استفاده میشود.
38
کتابخانهها برای استفاده از کتابخانهها در C++، از قالب دستوری زیر استفاده میکنیم: #include <Library_Name> به پیشپردازنده میگوید که کتابخانه مورد نظر را برای استفاده، به برنامه الحاق کند. به صورت خیلی ساده میتوان گفت که قبل از کامپایل برنامه، کتابخانه مورد نظر را به برنامه الحاق میکند، کتابخانههای زیادی برای C++ وجود دارند.
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 ); سقف
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 ); ریشه دوم
41
عملگرهای رابطهای > x > y < x < y >= x >= y
نماد مرسوم عملگر معادل در زبان 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 برابر نیست.
42
ارزیابی عبارات رابطهای
نوع داده bool مقدار true یا false را باز میگرداند، True و false، ثوابت از پیشتعریف شده برای نوع داده bool هستند.
43
== با = تفاوت دارد! خطای معمول چرا مشکل ایجاد میشود؟
معمولا منجر به خطای نحوی نمیشود! چرا مشکل ایجاد میشود؟ عباراتی که حاصل آنها یک مقدار باشد، میتوانند به عنوان شرط استفاده شوند! صفر == نادرست، ناصفر == درست! #include <iostream> using namespace std; int main() { int a = 0; cout << (a = 10) << endl; return 0; } 10
44
== با = تفاوت دارد! (ادامه)
مثال if ( payCode == 4 ) cout << "You get a bonus!" << endl; اگر payCode برابر با 4 باشد، شامل پاداش میشود. حال اگر == را با = جایگزین کنیم: if ( payCode = 4 ) cout << "You get a bonus!" << endl; مقدار payCode را به 4 تنظیم میکند (مقدار قبلی آن اهمیتی ندارد)، چون 4 ناصفر است، بنابراین شرط صحیح است! بنابراین در هر صورت، پاداش نسبت داده میشود.
45
عملگرهای منطقی && (عطف) || (فصل)
if ( gender == 1 && age >= 65 ) ++seniorFemales; || (فصل) if ( semesterAverage >= 90 || finalExam >= 90 ) cout << "Student grade is A" << endl;
46
عملگرهای منطقی (ادامه)
! (نقیض) if ( !( grade == sentinelValue ) ) cout << "The next grade is " << grade << endl; یا به صورت معادل if ( grade != sentinelValue ) cout << "The next grade is " << grade << endl;
47
جداول صحت مربوط به عملگرهای منطقی
48
اولویت عملگرها بیشترین اولویت کمترین اولویت
49
اولویت عملگرها (ادامه)
بیشترین اولویت کمترین اولویت
50
اولویت عملگرها (ادامه)
بیشترین اولویت کمترین اولویت
51
اولویت عملگرها (ادامه)
بیشترین اولویت کمترین اولویت
52
مثالهایی از اولویت عملگرها
محاسبات ریاضی قبل از عملگر منطقی اعمال میشوند، x + 1 > 2 || x + 1 < -3 (x + 1) > 2 || (x + 1) < -3 ارزیابی مدار کوتاه، (x >= 0) && (y > 1) اخطار! در مورد عملگر ++ و -- در چنین مواردی هشیار باشید! (x > 1) && (y++) اعداد صحیح را میتوان به عنوان مقادیر منطقی در نظر گرفت! همه مقادیر ناصفر true مقدار صفر false
53
ساختارهای کنترل جریان برنامه
54
ساختارهای کنترل جریان برنامه
اجرای دنبالهای دستورات به ترتیبی که در برنامه آمده اند اجرا میشوند، انتقال کنترل دستور بعدی که اجرا میشود، الزاما دستور بعدی نیست! سه ساختار کنترل جریان وجود دارد: ساختار دنبالهای به صورت پیش فرض، دستورات برنامه به ترتیبی که در برنامه آمده اند اجرا میشوند، ساختارهای انتخاب if, if/else, switch ساختارهای تکرار while, do/while, for
55
ساختار انتخابی if ساختار انتخابی if
از بین اعمال ممکن، یک عمل را انتخاب میکند، نمونه شبه کد: If student’s grade is greater than or equal to 60 Print “Passed” در صورتی که شرط if، true باشد، آنگاه دستور print را چاپ کرده و سپس دستور بعدی اجرا میشود! (دقت کنید! دستور بعدی، الزاما خط کد بعدی نیست! در این زمینه از فلوچارت استفاده کنید!) در صورتی که شرط if، false باشد، آنگاه دستور بعدی اجرا میشود، عادت خوب برنامه نویسی، استفاده به جا از فاصل ها در حین کدنویسی است! C++، فاصلههای خالی را در نظر نمیگیرد.
56
ساختار انتخابی if (ادامه)
ترجمه شبه کد به کد C++ ذیل، If student’s grade is greater than or equal to 60 Print “Passed” if ( grade >= 60 ) cout << "Passed"; A decision can be made on any expression. zero - false nonzero - true Example: 3 - 4 is true
57
ساختار انتخابی if و else
در صورت صحیح بودن شرایط، دستوراتی را اجرا میکند، if/else در صورتی که شرایط صحیح نباشند، دستوراتی را اجرا میکند، شبهکد if student’s grade is greater than or equal to 60 print “Passed” else print “Failed” C++ if ( grade >= 60 ) cout << "Passed"; else cout << "Failed";
58
cout << ( grade >= 60 ? “Passed” : “Failed” );
عملگر شرطی سهتایی عملگر شرطی سهتایی(?:) cout << ( grade >= 60 ? “Passed” : “Failed” ); Condition Value if true Value if false
59
ساختار انتخابی if و else لانهای
if student’s grade is greater than or equal to Print “A” else if student’s grade is greater than or equal to Print “B” else if student’s grade is greater than or equal to Print “C” else if student’s grade is greater than or equal to Print “D” else Print “F”
60
ساختار انتخابی با استفاده از if/else
مثال if ( grade >= 90 ) // 90 and above cout << "A"; else if ( grade >= 80 ) // cout << "B"; else if ( grade >= 70 ) // cout << "C"; else if ( grade >= 60 ) // cout << "D"; else // less than cout << "F";
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"; همواره، بدون در نظر گرفتن شرط، اجرا میشود.
62
ساختار انتخاب چندگانه 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 break; default: // taken if variable matches no other cases statements break; }
63
ساختار انتخاب چندگانه switch (ادامه)
64
دقت کنید! ‘a’ با “a” متفاوت است.
مثال از switch مثال برنامهای که نمرات به صورت حرفی، (A-F)، خوانده و سپس تعداد هر کدام را چاپ کند. کلیدهای Ctrl+Z (در ویندوز) یا Ctrl+D (در لینوکس) بیانگر انتهای لیست نمرات است، کاربر میتواند a یا A وارد کند (برای سایر حروف نیز این اصل برقرار باید باشد). اندکی درباره کاراکترها به صورت معمول، کاراکترها را در نوع داده char ذخیره میکنیم. char یک عدد صحیح یک بایتی است، بنابراین میتوان کاراکترها را به عنوان یک عدد صحیح نیز ذخیره نمود. با یک کاراکتر را میتوان مانند نوع int یا char برخورد کرد. 97 کد عددی معادل با کاراکتر ‘a’ در استاندارد ASCII است. cout << "The character (" << 'a' << ") has the value " << static_cast< int > ( 'a' ) << endl; The character (a) has the value 97 دقت کنید! ‘a’ با “a” متفاوت است. تمرین: چرا؟
65
مثال از switch (ادامه) 1 // Fig. 2.22: fig02_22.cpp
// Counting letter grades. #include <iostream> 4 using std::cout; using std::cin; using std::endl; 8 // function main begins program execution 10 int main() 11 { int grade; // one grade int aCount = 0; // number of As int bCount = 0; // number of Bs int cCount = 0; // number of Cs int dCount = 0; // number of Ds int fCount = 0; // number of Fs 18 cout << "Enter the letter grades." << endl << "Enter the EOF character to end input." << endl; 21
66
مثال از switch (ادامه) // loop until user types end-of-file key sequence while ( ( grade = cin.get() ) != EOF ) { 24 // determine which grade was input switch ( grade ) { // switch structure nested in while 27 case 'A': // grade was uppercase A case 'a': // or lowercase a aCount; // increment aCount break; // necessary to exit switch 32 case 'B': // grade was uppercase B case 'b': // or lowercase b bCount; // increment bCount break; // exit switch 37 case 'C': // grade was uppercase C case 'c': // or lowercase c cCount; // increment cCount break; // exit switch 42 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; 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.
67
مثال از switch (ادامه) case 'D': // grade was uppercase D case 'd': // or lowercase d dCount; // increment dCount break; // exit switch 47 case 'F': // grade was uppercase F case 'f': // or lowercase f fCount; // increment fCount break; // exit switch 52 case '\n': // ignore newlines, case '\t': // tabs, case ' ': // and spaces in input break; // exit switch 57 default: // catch all other characters cout << "Incorrect letter grade entered." << " Enter a new grade." << endl; break; // optional; will exit switch anyway 62 } // end switch 64 } // end while 66 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. Notice the default statement, which catches all other cases.
68
مثال از switch (ادامه) 67 // output summary of results
cout << "\n\nTotals for each letter grade are:" << "\nA: " << aCount // display number of A grades << "\nB: " << bCount // display number of B grades << "\nC: " << cCount // display number of C grades << "\nD: " << dCount // display number of D grades << "\nF: " << fCount // display number of F grades << endl; 75 return 0; // indicate successful termination 77 78 } // end function main
69
مراجع مراجع درس: جعفرنژاد قمی، عین ا...؛ برنامه نویسی به زبان C++؛ انتشارات علوم رایانه؛ ویراست چهارم؛ 1391. جعفرنژاد قمی، عین ا... و کریمپور، انیس؛ مبانی کامپیوتر و الگوریتمها؛ انتشارات علوم رایانه؛ ویراست دوم؛ 1391. برای آمادهسازی مطالب و اسلایدها از مراجع زیر نیز استفاده کردهام: Deitel, P.J. and Deitel, H.M.; C++: How to program; Prentice-Hall; Fifth Edition; 2005.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.