1 / 70

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

مبانی برنامه‌سازی با C++ جلسه دوم. علی شکیبا ali@shakiba.id.ir اسفند 1391. مباحث این جلسه. متغیرها، ورودی خروجی کاربر، عملگرهای محاسباتی در C++ ، عبارات شرطی. یادآوری. یادآوری. قبل از نوشتن هر برنامه‌ای، صورت مساله را به درستی درک کنید، یک روش برای حل آن مساله ارائه کنید.

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. مبانی برنامه‌سازی باC++جلسه دوم علی شکیبا ali@shakiba.id.ir اسفند 1391

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

  3. یادآوری

  4. یادآوری • قبل از نوشتن هر برنامه‌ای، • صورت مساله را به درستی درک کنید، • یک روش برای حل آن مساله ارائه کنید. • در هنگام نوشتن برنامه، • درک روشنی از ساختارهای برنامه نویسی داشته باشید، • مانند حلقه‌ها، شرط‌ها، توابع و مانند این، • از الگوهای برنامه نویسی صحیح استفاده کنید، • زبان برنامه نویسی متناسب با مساله خود را انتخاب کنید. • 

  5. الگوریتم‌ها • یک برنامه، برای محاسبه پاسخ یک مساله، • دنباله‌ای از دستورات را اجرا می‌کند. • الگوریتم رویه‌ای است برای تعیین • وظایفی که باید برای حل مساله انجام شوند، • ترتیب انجام آن وظایف، • مثال، دستور پخت یک کیک خامه‌ای خوشمزه هجده طبقه! • کنترل جریان برنامه • تعیین ترتیبی که دستورات برنامه اجرا می‌شوند.

  6. شبه‌کد • شبه‌کد • زبانی مصنوعی و غیر رسمی برای توصیف الگوریتم‌ها است، • شبیه به زبان‌های روزمره است، • نمی‌توانند توسط یک کامپیوتر اجرا شوند، • مهم‌ترین کاربرد آن، امکان فکر کردن درباره ساختار برنامه است، چرا که: • تبدیل آن به کد برنامه نویسی ساده است، • شبه‌کد می‌تواند تنها شامل دستورات اجرایی باشد.

  7. متغیرها

  8. متغیر • متغیر‌ • مکانی از حافظه که می‌توان داده‌(ها) را در آن ذخیره نمود، • تمام متغیرها در C++ باید دارای نام و نوع داده باشند، • نوع داده قبل از نام متغیر می‌آید، • انواع داده معمول • عدد صحیح (int)، • کاراکتر (char)، • ممیز شناور با دقت مضاعف (double)، • می‌توان چندین متغیر از یک نوع را با یک دستور مشخص نمود. int test; double grade; char firstChar; int test1, test2, numberOfPCs;

  9. متغیر (ادامه) • متغیر‌ • نام متغیر باید یک نام معتبر باشد! • متشکل از دنباله‌ای از کاراکترها شامل حروف، ارقام و خط زیرین (_)، است، • نباید با رقم آغاز شود، • C++ به بزرگی و کوچکی حروف حساس است، • نباید از کلمات کلیدی باشد. int grade1, Grade1;

  10. انواع داده‌ها در C++

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

  12. انتساب (Assignment) (عملگر =) • مقدار دهی اولیه در هنگام تعریف متغیرها، • اگر این کار را انجام ندهید، مقدار اولیه متغیر نامشخص است و می‌تواند هر مقداری باشد! • عادت خوب برنامه نویسی، مقداردهی اولیه همه متغیرها در هنگام تعریف است. intmyValue = 0; • انتساب در حین اجرا، • مقادیر سمت راست و سمت چپ • مقادیر سمت چپ در یک انتساب باید شناسه یک متغیر باشند، • مقادیر سمت راست در یک انتساب می‌توانند هر عبارتی باشند، • مثال: distance = rate * time;مقدار سمت چپ: "distance"مقدار سمت راست: "rate * time"

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

  14. قواعد انتساب داده • قواعد انتساب داده • همسان بودن نوع داده • قانون کلی: نمی‌توان داده‌ای از یک نوع را در یک نوع دیگر قرار داد! intVar = 2.99; // 2 is assigned to intVar! • در صورت اجرای این دستور، تنها قسمت صحیح، 2، به متغیر نسبت داده می‌شود، • در این صورت، تبدیل نوع ضمنی یا خودکار فراخوانی شده است. • الفاظ (Literals) 2, 5.75, ‘Z’, "Hello World" • به عنوان ثابت در نظر گرفته می‌شوند، و نمی‌توان آن‌ها را در طول برنامه تغییر داد! • مثال 2 = 9;

  15. الفاظ (Literals) • الفاظ • مثال • 2 یک لفظ int است، • 5.75 یک لفظ double است، • ‘Z’ یک لفظ char است، • “Hello!” یک لفظ string است. • مقادیر آن‌ها را در حین اجرای برنامه نمی‌توان تغییر داد.

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

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

  18. ثوابت • قالب کلی تعریف ثوابت constنوع داده NAME_OF_VAR = مقدار ; • مثال: const int NUMBER_OF_STUDENTS = 24; • در هر کجای برنامه، می‌توان از این ثابت با نوشتن نامش استفاده کرد، • مقدار ثابت در طول برنامه، پس از تعریف؛ غیر قابل تغییر است!

  19. ثوابت

  20. دقت محاسبات ریاضی • دقت محاسبات ریاضی • یک اصل مهم در برنامه نویسی است که باید همواره در نظر گرفته شود، • ممکن است محاسبه عبارات آنگونه که شما انتظار دارید، پیش نروند! • دقت محاسبات توسط عملگر محاسباتی با بیشترین اولویت مشخص می‌شود! • عدم دقت به این مورد، متاسفانه یکی از معمول‌ترین خطاها در بین برنامه نویسان C++ است!

  21. مثال‌هایی از محاسبات ریاضی در C++ • مثال • 17 / 5 • هر دو عملوند صحیح هستند! • در نتیجه تقسیم صحیح انجام شده است! • 17.0 / 5 • یکی از عملوندها، ممیز شناور دارد، بنابراین • عملگر تقسیم با ممیز شناور اعمال شده است. • int intVar1 =1, intVar2=2;intVar1 / intVar2; • اعمال تقسیم صحیح، • جواب: 0 است!

  22. مثالی مهم و البته جالب! • به خاطر داشته باشید: محاسبات یک به یک انجام می‌شوند! • برای محاسبه 1 / 2 / 3.0 / 4، سه عمل تقسیم انجام می‌شوند: • 1 / 2 = 0 • 0 / 3.0 = 0.0 • 0.0 / 4 = 0.0 • بنابراین برای نیل به نتیجه مورد نظر، باید تک تک محاسبات و دقت محاسباتی آن‌ها را مد نظر داشت!

  23. تبدیل نوع داده • تبدیل متغیرها • برای اینکه محاسبات با دقت اعشار را الزام کنیم، می‌توانیم به الفاظ عددی، .0 را اضافه کنیم! اما نمی‌توان نوشت: myInt.0 • بنابراین برای متغیرها باید از تبدیل نوع داده صریح استفاده کرد! static_cast<double>(intVar) • مقدار متغیر صحیح intVar را به یک مقدار double تبدیل می‌کند، • نتیجه این محاسبه مورد استفاده قرار می‌گیرد، • این تبدیل تغییری در نوع یا محتویات intVar ایجاد نمی‌کند، • مثال doubleVar = static_cast<double>(intVar1) / intVar2;

  24. تبدیل نوع داده (ادامه) • دو نوع! • ضمنی، یا خودکار • به صورت خودکار انجام می‌شود، 17 / 5.5 • منجر به تبدیل زیر می‌شود: 17  17.0 • صریح static_cast<double>(intVar) تبدیل صریح با دستور زیر نیز قابل انجام است، اما توصیه می‌کنم به استفاده از دستور فوق عادت کنید! (نوع داده مقصد) نام متغیر

  25. عملگرهای اختصاری • عملگرهای افزایشی و کاهشی • عملگر ++، • z++ معادل با z = z + 1 است! • عملگر --، • z-- معادل با z = z – 1 است! Z++ و ++Z با یکدیگر متفاوت هستند! این دو مقدار را ارزیابی کرده و توجیه کنید! Z++ * 8 و ++Z * 8

  26. Z++ یا ++Z؟ • پس افزایش (عملگر ++ در سمت راست متغیر باشد)intVar++ • ابتدا از مقدار فعلی استفاده کرده و سپس آن را یک واحد افزایش می‌دهد، • پیش افزایش++intVar • ابتدا مقدار فعلی را افزایش داده و سپس از مقدار جدید استفاده می‌کند.

  27. ورودی و خروجی

  28. ورودی و خروجی کنسول • اشیا مربوط بهI/O عبارتند از cin, cout, cerr • که در کتابخانه <iostream> در فضای نام std تعریف شده اند، • برای استفاده از آن‌ها، می‌توان از رویه ذیل استفاده نمود: #include <iostream>using namespace std; • این دستورات به C++ می‌گویند که تعاریف مربوط به cin، coutو cerr را از کجا به دست بیاورد!

  29. خروجی کنسول • چه چیزهایی را می‌توان به خروجی فرستاد؟ • هر داده‌ای مانند • متغیرها، • ثوابت، • الفاظ، • عبارات (که شامل سه مورد فوق نیز می‌باشد) cout << numberOfGames << " games played."; • منظور از Cascading، چاپ کردن چندین داده در خروجی با استفاده از یک دستور cout می‌باشد.

  30. جدا کردن خطوط در خروجی • ایجاد خطوط جدید در خروجی • یادآوری:‘\n’ کاراکتر کنترلی خط جدید • سعی کنید به استفاده از endlعادت کنید! • مثال cout << "Hello World\n"; cout << "Hello World" << endl;

  31. خروجی قالب‌دار • قالب‌دار کردن خروجی عددی • مثال cout << "The price is $" << price << endl; • اگر مقدار متغیر price (که به صورت double تعریف شده است)، برابر با 78.5 باشد، آنگاه مشخص نیست خروجی دقیقا به چه فرمی است!  The price is $78.500000 The price is $78.5 • باید به صورت مشخص و صریح ذکر شود که C++ از چه قالب خروجی برای اعداد استفاده کند!

  32. قالب‌دار کردن اعداد • دستورات زیر، نمایش معمول (با دو رقم اعشار) از اعداد ممیز شناور را موجب می‌شوند، cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(2); • این دستورات، همه cout های پس از خود را تحت تاثیر قرار می‌دهند. • دقیقا دو رقم اعشار پس از ممیز داریم! • مثال: cout << "The price is $" << price << endl; • نتیجه به صورت ذیل است: The price is $78.50 • دقت نمایش را می‌توان در هنگام اجرا نیز تغییر داد.

  33. خروجی خطا • کافی است که خروجی را به cerr ارسال کنیم، • cerrدقیقا مانند cout کار می‌کند، • مکانیزمی برای تفاوت قائل شدن بین خروجی استاندارد و خروجی خطا فراهم می‌کند، (سعی کنیم به استفاده صحیح از این اشیا عادت کنیم  )

  34. ورودی با استفاده از cin • از شی cin برای ورودی و از شی cout برای خروجی استفاده می‌شود، • تفاوت‌ها • ">>" عملگر استخراج از جریان • جهت آن از جریان به سمت متغیر(ها) است. • از شی "cin به جای شی "cout” استفاده می‌شود، • برای cin، از هیچ لفظی نمی‌توان استفاده کرد. • باید ورودی‌ای برای یک متغیر فراهم کند! cin >> num; • در کنسول، منتظر دریافت یک ورودی می‌ماند، • مقدار وارد شده در کنسول را به متغیر منسوب می‌کند.

  35. اندکی درباره دریافت از ورودی در برنامه‌های ما! • همواره به کاربر پیامی مرتبط با نوع داده ورودی و ویژگی‌های آن نشان دهید! • cout << "Enter number of dragons: ";cin >> numOfDragons; • به عدم وجود کاراکتر ‘\n’ در انتهای رشته cout و تفاوت حاصل از آن در خروجی دقت کنید! Enter number of dragons: ____ • سعی کنید قبل از هر cin، یک cout باشد تا کاربر بداند که باید چه داده‌ای را به عنوان ورودی وارد کند.

  36. توضیحات • یکی از مهمترین اهداف توضیحات، خواناتر کردن برنامه‌ها و ساده‌تر کردن فرآیند تغییر آن‌ها است. • دو شیوه کلی: • //از محل قرار گیری دو اسلش تا پایان خط جاری به عنوان توضیح فرض می‌شود. • /* هر آنچه که بین این دو علامت قرار بگیرد، حتی کاراکتر خط جدید نیز به عنوان توضیح فرض می شود. */ • از هر دو روش به صورت معمول استفاده می‌شود.

  37. کتابخانه‌ها • برای استفاده از کتابخانه‌ها در C++، از قالب دستوری زیر استفاده می‌کنیم: • #include <Library_Name> • به پیش‌پردازنده می‌گوید که کتابخانه مورد نظر را برای استفاده، به برنامه الحاق کند. • به صورت خیلی ساده می‌توان گفت که قبل از کامپایل برنامه، کتابخانه مورد نظر را به برنامه الحاق می‌کند، • کتابخانه‌های زیادی برای C++ وجود دارند.

  38. کتابخانه cmath • کافی است کتابخانه را به صورت زیر به برنامه الحاق کنیم: #include <cmath>

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

  40. عملگرهای رابطه‌ای

  41. ارزیابی عبارات رابطه‌ای • نوع داده bool • مقدار true یا false را باز می‌گرداند، • True و false، ثوابت از پیش‌تعریف شده برای نوع داده bool هستند.

  42. == با = تفاوت دارد! • خطای معمول • معمولا منجر به خطای نحوی نمی‌شود! • چرا مشکل ایجاد می‌شود؟ • عباراتی که حاصل آن‌ها یک مقدار باشد، می‌توانند به عنوان شرط استفاده شوند! • صفر == نادرست، ناصفر == درست! #include <iostream> using namespace std; int main() { int a = 0; cout << (a = 10) << endl; return 0; } 10

  43. == با = تفاوت دارد! (ادامه) • مثال if ( payCode == 4 ) cout << "You get a bonus!" << endl; • اگر payCode برابر با 4 باشد، شامل پاداش می‌شود. • حال اگر == را با = جایگزین کنیم: if ( payCode = 4 )cout << "You get a bonus!" << endl; • مقدار payCode را به 4 تنظیم می‌کند (مقدار قبلی آن اهمیتی ندارد)، • چون 4 ناصفر است، بنابراین شرط صحیح است! • بنابراین در هر صورت، پاداش نسبت داده می‌شود.

  44. عملگرهای منطقی • && (عطف) if ( gender == 1 && age >= 65 ) ++seniorFemales; • || (فصل) if ( semesterAverage >= 90 || finalExam >= 90 )cout << "Student grade is A" << endl;

  45. عملگرهای منطقی (ادامه) • ! (نقیض) if ( !( grade == sentinelValue ) )cout << "The next grade is " << grade << endl; یا به صورت معادل if ( grade != sentinelValue )cout << "The next grade is " << grade << endl;

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

  47. اولویت عملگرها بیشترین اولویت کمترین اولویت

  48. اولویت عملگرها (ادامه) بیشترین اولویت کمترین اولویت

  49. اولویت عملگرها (ادامه) بیشترین اولویت کمترین اولویت

More Related