ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

فصل اول / مقدمات برنامه نویسی با++ C

C++ فصل اول / مقدمات برنامه نویسی با

 

C++ برنامه سازی پیشرفته

  

پرسش های گزینه ای

صحیح نیست؟ C++ 1 – کدام یک از موارد زیر در مورد

است ب ) شی گراست C الف ) از نسل زبان

ج ) همه منظوره است د ) سطح پایین است

نقش داشته است؟ C++ 2 – کدام یک از زبا نهای زیر در تولید

Java ( ب Basic ( الف

Pascal ( د Simula ( ج

شامل کدام یک از امکانات زیر است؟ (IDE) 3 – محیط مجتمع تولید

الف ) ویرایش گر متن ب ) کامپایلر

ج ) ابزارخطایابی د ) همۀ موارد

است؟ C++ 4 – کدام یک از عملگرهای زیر عملگر خروجی در

الف ) >> ب ) # ج ) << د ) //

5 – از موارد زیر کدام در مورد عبارت " 10 " صحیح است؟

الف ) " 10 " یک کاراکتر است ب ) " 10 " یک عدد صحیح است

ج ) " 10 " یک لیترال است د ) " 10 " یک عدد دودویی است

کدام عبارت صحیح نیست؟ int k = 6 – در مورد عبارت ; 8

با مقدار 8 مقداردهی اولیه شده است k الف ) متغیر

است int از نوع k ب ) متغیر

در آدرس 8 از حافظه قرار گرفته است k ج ) متغیر

مقدار 8 قرار گرفته است k د ) در آدرس

چیست؟ C++ 7 – عملگر انتساب در

الف ) = ب ) == ج ) # د ) =!

const int x=7; x+= 8 – در کد مقابل چه روی می دهد؟ ; 9

ذخیره می شود x الف ) مقدار 9 در

ذخیره می شود x 7 یعنی 16 در + ب ) مقدار 9

ذخیره می شود x ج ) مقدار 9 و 7 هر کدام جدا در

2 برنامه سازی پیشرفته

برای اجرای بسیاری از دستوراتش از توابع کتابخانه ای استفاده می کند و بیشتر C زبان

خصوصیات وابسته به سخت افزار را به این توابع واگذار می نماید. نتیجه این است که

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

C می توانیم نرم افزار مورد نظر را روی ماشینی متفاوت اجرا کنیم. یعنی برنامه هایی که با

اجازه C ، دارند و مستقل از ماشین هستند. علاوه بر این « قابلیت انتقال » نوشته می شوند

می دهد تا کاربر توابع کتابخانه ای خاص خودش را ایجاد کند و از آن ها در برنامه هایش

را گسترش دهد. C استفاده کند. به این ترتیب کاربر می تواند امکانات

ساخته می شود بسیار فشرده تر و ک محجم تر C ‐ برنامۀ مقصدی که توسط کامپایلرهای

از برنام ههای مشابه در سایر زبان ها است.

است، تمام ویژگی های جذاب بالا را به ارث برده است. این C که از نسل C++

است. می توان با استفاده از « شی گرا » اکنون C++ : فرزند اما برتری فنی دیگری هم دارد

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

قابل روزآمد کردن اند، به سهولت تغییر و بهبود می یابند و قابلیت اطمینان و پایداری

بیشتری دارند.

بخوانید سی شارپ) ) C# ورود به دنیای C++ و سرانجام آخرین دلیل استفاده از

که اخیرا عرضه شده، زبانی است کاملا شی گرا. این زبان در شی گرایی C# . است

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

بسیار C# است. نحو C++ برای عبور از این پیچیدگی یک میان بر وجود دارد و آن

آن قدرها هم پیچیده نیست. کلید ورود به C# را بلد باشیم C++ است. اگر C++ شبیه

نهفته است. C++ میان کدهای C# دنیای

C++ 1 تاریخچۀ – 2

ایجاد شد. انحصار این زبان C در دهه 1970 در آزمایشگاه های بل زبانی به نام

Richie و Kernighan در اختیار شرکت بل بود تا این که در سال 1978 توسط

شرح کاملی از این زبان منتشر شد و به سرعت نظر برنامه نویسان حرفه ای را جلب

C نمود. هنگامی که بحث شی گرایی و مزایای آن در جهان نرم افزار رونق یافت، زبان

3 C++ فصل اول / مقدمات برنامه نویسی با

که قابلیت شی گرایی نداشت ناقص به نظر می رسید تا این که در اوایل دهۀ 1980

را C++ زبان Bjarne Stroustrup دوباره شرکت بل دست به کار شد و

بود و قابلیت های شی گرایی نیز Simula و C ترکیبی از دو زبان C++ . طراحی نمود

طراحی کردند. C++ داشت. از آن زمان به بعد شرکت های زیادی کامپایلرهایی برای

این امر سبب شد تفاو تهایی بین نسخه های مختلف این زبان به وجود بیاید و از

C++ قابلیت سازگاری و انتقال آن کاسته شود. به همین دلیل در سال 1998 زبان

به شکل استاندارد و یک پارچه (ANSI) توسط موسسۀ استانداردهای ملی آمریکا

در آمد. کامپایلرهای کنونی به این استاندارد پایبندند. کتاب حاضر نیز بر مبنای همین

استاندارد نگارش یافته است.

1 آماده سازی مقدمات – 3

دستورالعمل های متوالی است که می تواند توسط یک رایانه اجرا « برنامه 1 » یک

« کامپایلر 3 » و یک « ویرایش گر متن 2 » شود. برای نوشتن و اجرای هر برنامه به یک

احتیاج داریم. با استفاده از ویرایش گر متن می توانیم کد برنامه را نوشته و ویرایش کنیم.

سپس کامپایلر این کد را به زبان ماشین ترجمه می کند. گرچه ویرایش گر و کامپایلر را

محیط مجتمع » ، می توان به دلخواه انتخاب نمود اما امروزه بیشتر تولیدکنندگان کامپایلر

را توصیه می کنند. محیط مجتمع تولید یک بسته نرم افزاری است که «(IDE) تولید 4

تمام ابزارهای لازم برای برنامه نویسی را یک جا دارد: یک ویرایش گر متن ویژه که

امکانات خاصی دارد، یک کامپایلر، ابزار خطایابی و کنترل اجرا، نمایش گر کد ماشین،

ابزار تولید خودکار برای ایجاد امکانات استاندارد در برنامه، پیونددهنده های 5 خودکار،

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

استفاده می شوند IDE توانایی های ویژه ای دارند. ویرایش گرهای متن که در محیط های

قابلیت های بصری به کد برنامه می دهند تا کد خواناتر شود و نوشتن و دنبال کردن

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

متغیرها را با رنگ دیگری مشخص می کنند، توضیحات اضافی را به شکل مایل نشان

1 – Program 2 - Text editor 3 – Compiler

4 - Integrated Development Environment 5 – Linker

4 برنامه سازی پیشرفته

می دهند و حتی با نوشته های خاصی شما را راهنمایی می کنند که کجای برنامه چه

چیزهایی بنویسید. تمام این امکانات سبب شده تا برنامه نویسی جذاب تر از گذشته

باشد و برنام هنویس به عوض این که نگران سرگردانی در کد برنامه یا رفع خطا باشد،

تمرکز خویش را بر منطق برنامه و قابلیت های آن استوار کند.

C++ محصول شرکت میکروسافت و بستۀ Visual C++ بستۀ

محصول شرکت بورلند نمون ههای جالبی از محیط مجتمع تولید برای زبان Builder

به شمار می روند. البته هر دوی این ها مخصوص سیستم عامل ویندوز هستند. اگر C++

برنامه بنویسید باید Linux یا Unix می خواهید روی سیستم عامل دیگری مثل

کامپایلری که مخصوص این سیستم عامل ها است پیدا کنید.

را شروع کنیم یک محیط مجتمع تولید روی C++ قبل از این که برنامه نویسی با

رایانه تان نصب کنید تا بتوانید مثا لهای کتاب را خودتان نوشته و امتحان کنید. این کار

را بهتر یاد بگیرید و هم مهارت های حرفه ای تان را در کار با C++ هم کمک می کند تا

محیط های مجتمع تولید افزایش می دهد.

C++ 1 شروع کار با – 4

مجهز است. در ادامۀ فصل، C++ حالا شما رایانه ای دارید که به یک کامپایلر

را ذکر می کنیم و نکاتی را در قالب این مثا لها بیان C++ مثال های ساده ای از برنام ههای

آشنایی نداشته باشید ممکن است این مثا لها مبهم C++ یا C خواهیم کرد. اگر از قبل با

به نظر برسند و برخی از نکات را خوب درک نکنید، اما اصلا جای نگرانی نیست زیرا

است و تمام این نکات در فص لهای بعدی به C++ این فصل یک مرور کلی راجع به

شکل کامل شرح داده می شوند. این فصل به شما کمک می کند تا نکات اولیه و

را یاد بگیرید و همچنین مطلع شوید که در فصول بعدی باید منتظر چه C++ ضروری

مطالبی باشید.

1 اولین برنامه ‐ * مثال 1

برنامۀ زیر، اولین برنامه ای است که می نویسیم. اما قبل از این کار نکتۀ بسیار

مهم زیر را همیشه به خاطر داشته باشید:

5 C++ فصل اول / مقدمات برنامه نویسی با

را یکی نمی داند. a و A است. یعنی « حساس به حالت 1 » نسبت به حروف C++

هیچ یک با دیگری برابر نیست. برای این که my و mY و My و MY پس در عبارت های

همه چیز را با حروف » : در برنامه ها دچار این اشتباه نشوید، از قانون زیر پیروی کنید

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

داشته باشید

اولین برنامه ای که می نویسیم به محض تولد، به شما سلام می کند و عبارت

را نمایش می دهد: "Hello, my programmer!"

#include <iostream>

int main()

{ std::cout << "Hello, my programmer!\n" ;

return 0;

}

است. راهنمای پیش پردازنده « راهنمای پیش پردازنده 2 » اولین خط از کد بالا یک

شامل اجزای زیر است:

1 – کاراکتر # که نشان می دهد این خط، یک راهنمای پیش پردازنده است. این

کاراکتر باید در ابتدای همۀ خطوط راهنمای پیش پردازنده باشد.

include 2 – عبارت

که میان دو علامت <> محصور شده است. به « فایل کتابخانه ای » 3 – نام یک

نیز می گویند. فایل کتابخان های که در این جا استفاده شده « سرفایل 3 » فایل کتابخانه ای

نام دارد. iostream

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

می دهد در برنامه موجودیتی است که تعریف آن را باید در فایل کتابخانه ای مذکور

استفاده شده که کامپایلر راجع std::cout جستجو کند. در این برنامه موجودیت

مراجعه می کند، تعریف آن را iostream به آن چیزی نمی داند، پس به فایل

1 – Case Sensitive 2 – Preprocessor Directive

3 – Header

6 برنامه سازی پیشرفته

می یابد و سپس آن را اجرا می کند.

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

وجود داشته باشد. این خط به C++ خط دوم برنامه نیز باید در همه برنامه های

از کجا شروع می شود. این خط دارای اجزای « بدنۀ اصلی برنامه » کامپایلر می گوید که

زیر است:

است. راجع به انواع عددی در C++ که یک نوع عددی در int 1 – عبارت

در فصل دوم مطالب کاملی خواهید دید. C++

می گویند. C++ در « تابع اصلی » که به آن main 2 – عبارت

است. توابع را در « تابع 1 » یک main 3 – دو پرانتز () که نشان می دهد عبارت

فصل پنجم بررسی خواهیم کرد.

داشته باشد. وقتی برنامه اجرا شد، یک main() هر برنامه فقط باید یک تابع

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

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

می دهد که این برنامه یک عدد صحیح را به سیستم عامل برمی گرداند.

« بدنۀ اصلی برنامه » . را تشکیل می دهند « بدنۀ اصلی برنامه » ، سه خط آخر برنامه

مجموعه ای از دستورات متوالی است که میان دو علامت براکت {} بسته شده است.

این براکت ها شروع برنامه و پایان برنامه را نشان می دهند.

دستورات برنامه از خط سوم شروع شده است. این برنامه فقط دو دستور دارد.

اولین دستور یعنی:

Std::cout << "Hello, my programmer!\n";

std::cout را به فرایند خروجی "Hello, my programmer!\n" رشتۀ

« عملگر خروجی 2 » << می فرستد. این خروجی معمولا صفحه نمایش می باشد. علامت

نامیده می شود. این عملگر اجزای سمت راستش را به خروجی سمت چپش C++ در

1 – Function 2 – output operator

7 C++ فصل اول / مقدمات برنامه نویسی با

می فرستد. حاصل کار این است که رشتۀ

Hello, my programmer!

نیز در رشته فوق وجود دارد ولی به \n روی صفحه نمایش چاپ می شود. کاراکتر

جای آن چیزی چاپ نمی شود، بلکه چاپ این کاراکتر باعث می شود مکان نما به خط

نیز می گویند. « خط جدید » بعدی صفحه نمایش پرش کند. به این کاراکتر، کاراکتر

نمون ههای دیگری از این نوع کاراکترها را باز هم خواهیم دید.

دستور خط سوم با علامت سمیکولن ; پایان یافته است. این دومین قانون مهم

این .« حتما باید در پایان هر دستور، علامت سمیکولن ; قرار دهید » : است C++ و ساده

علامت به معنای پایان آن دستور است. اگر سمیکولن پایان یک دستور را فراموش

کنید، کامپایلر از برنامۀ شما خطا می گیرد و اصلا برنامه را اجرا نمی کند.

خط چهارم (دومین دستور برنامه) یعنی

return 0;

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

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

Visual C++ اگر از کامپایلری استفاده می کنید که حتما این خط را انتظار دارد (مثل

را در انتهای بدنۀ برنامه قرار دهید. return باید دستور ; 0 (C++ Builder یا

تلقی می کنند. main() کامپایلرهای مذکور، این دستور را به معنای پایان تابع

1 دقت کنید. کامپایلر این فاصله های اضافی را ‐ به فاصله گذاری ها در مثال 1

نادیده می گیرد مگر جایی که لازم باشد شناسه ها از هم جدا شوند. یعنی کامپایلر، برنامۀ

فوق را این چنین می بیند:

#include<iostream>

Int main(){std::cout<<"Hello, my programmer!\n";return 0;}

ما نیز می توانستیم برنامه را به همین شکل بنویسیم اما درک برنام های که بدون فاصله

نوشته می شود بسیار مشکل است. استفاده از فاصله های مناسب سبب می شود خواندن

برنامه هایتان راحت تر باشد.

8 برنامه سازی پیشرفته

1 یک برنامۀ دیگر – * مثال 2

1 را دارد: ‐ برنامۀ زیر همان خروجی مثال 1

#include <iostream>

using namespace std;

int main()

{ //prints "Hello, my programmer!" :

cout << "Hello, my programmer!\n" ;

return 0;

}

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

using namespace std;

را در سراسر برنامه در نظر داشته باشد تا std:: به کامپایلر می گوید که عبارت

این پیشوند را به کار ببریم. به این طریق cout مجبور نباشیم برای دستوراتی مثل

تنها استفاده cout از عبارت std::cout می توانیم برای دستور خروجی به جای

نماییم (که در خط پنجم همین کار را کرد هایم). در نهایت یک خط به برنامه اضافه

را اضافه کنیم. std:: عبارت cout می شود اما در عوض مجبور نیستیم قبل از هر

به این ترتیب خواندن و نوشتن برنام ههای طولانی آسان تر می شود.

است. فضای نام محدود های است که چند موجودیت در « فضای نام 1 » یک Std

در سرفایل std در فضای نام cout آن تعریف شده است. مثلا موجودیت

تعریف شده. با استفاده از فضای نام می توانیم چند موجودیت را با یک iostream

نام در برنامه داشته باشیم، مشروط بر این که فضای نام هر کدام را ذکر کنیم. برای

مراجعه کنید. C++ آشنایی بیشتر با فضای نام به مراجع

همۀ برنامه های این کتاب با دو خط

#include <iostream>

using namespace std;

شروع می شوند. هر چند برای اختصار از این به بعد این دو خط را در برنامه ها ذکر

1 – Namespace

9 C++ فصل اول / مقدمات برنامه نویسی با

نخواهیم کرد اما فراموش نکنید که برای اجرای برنامه ها حتما دو خط بالا را به ابتدای

برنامه تان اضافه کنید.

به خط چهارم برنامه توجه کنید:

// prints "Hello, my programmer!" :

است. توضیح، متنی است که به منظور راهنمایی و درک بهتر « توضیح 1 » این خط ، یک

به برنامه اضافه می شود و تاثیری در اجرای برنامه ندارد. کامپایلر توضیحات برنامه را

قبل از اجرا حذف می کند. استفاده از توضیح سبب می شود که سایر افراد کد برنامۀ شما

را راح تتر درک کنند. ما هم در برنام ههای این کتاب برای راهنمایی شما توضیحاتی

توضیحات اضافه کنیم: C++ اضافه کرده ایم. به دو صورت می توانیم به برنامه های

1 – با استفاده از دو علامت اسلش // : هر متنی که بعد از دو علامت اسلش

بیاید تا پایان همان سطر یک توضیح تلقی می شود.

هر متنی که با علامت */ شروع شود و با علامت : C 2 – با استفاده از حالت

به کار می رفته که C در زبان C /* پایان یابد یک توضیح تلقی می شود. توضیح حالت

هم می توان از آن استفاده کرد. C++ برای حفظ سازگاری در

پس توضیح برنامۀ بالا را به این شکل هم می توانیم بنویسیم:

/* prints "Hello, my programmer!" */

به فرق بین این دو توضیح توجه کنید: در حالت اول، متنی که بعد از // تا آخر

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

توضیح با علامت */ شروع می شود و همچنان ادامه می یابد C می رسد ولی در حالت

می تواند چند خط ادامه داشته C تا به علامت /* برخورد شود. یعنی توضیح حالت

باشد ولی توضیح با // فقط یک خط است و برای ادامۀ توضیح در خط بعدی باید

دوباره در ابتدای خط علامت // را قرار داد.

1 – Comment

10 برنامه سازی پیشرفته

1 عملگر خروجی – 5

نام دارد (به آن عملگر درج نیز می گویند). C++ علامت >> عملگر خروجی در

چیزی است که عملیاتی را روی یک یا چند شی انجام می دهد. عملگر « عملگر 1 » یک

خروجی، مقادیر موجود در سمت راستش را به خروجی سمت چپش می فرستد.

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

cout << 66 ;

معمولا به صفحه نمایش cout می فرستد که cout مقدار 66 را به خروجی

اشاره دارد. در نتیجه مقدار 66 روی صفحه نمایش درج می شود.

این قابلیت را دارد که چند چیز را به شکل متوالی و پشت سر هم روی cout

صفحه نمایش درج کند. با استفاده از این خاصیت می توان چند رشته مجزا را از طریق

با یکدیگر پیوند داد و خروجی واحد تولید نمود. مثال بعد این موضوع را بیشتر cout

روشن می کند. قبل از این که مثال زیر را ببینید باز هم یادآوری می کنیم که فراموش

نکنید دو خط اصلی راهنمای پیش پردازنده و فضای نام را به ابتدای برنامه اضافه کنید.

Hello 1 برنامه دیگری از – * مثال 3

int main()

{ //prints "Hello, my programmer!" :

cout << "Hello, m" << "y progra" << "mmer!" << endl;

return 0;

}

در این برنامه از عملگر خروجی >> چهار بار استفاده شده و چهار عنصر را به

"Hello, m" فرستاده تا روی صفحه نمایش چاپ شوند. سه تای اولی یعنی cout

سه رشته اند که به یکدیگر پیوند می خورند تا عبارت "mmer!" و "y progra" و

در خروجی تشکیل شود. عبارت چهارم یعنی "Hello, my programmer!"

را انجام می دهد. یعنی مکان نما را به خط بعدی روی '\n' همان کار کاراکتر endl

صفحه نمایش منتقل می کند. 11 C++ فصل اول / مقدمات برنامه نویسی با

1 لیترال ها و کاراکترها – 6

رشته ای از حروف، ارقام یا علایم چاپی است که میان دو علامت « لیترال 1 » یک

"y و "Hello, m" 1 سه عنصر ‐ نقل قول " " محصور شده باشد. در مثال 3

لیترال هستند. لیترال می تواند تهی باشد : "" و یا می تواند "mmer!" و progra"

."W" : فقط یک فاصلۀ خالی باشد " " و یا فقط یک حرف باشد

یک حرف، رقم یا علامت قابل چاپ است که میان دو نشانۀ « کاراکتر 2 » یک

و '!' و ' 1' هر کدام یک کاراکتر است. هر 'w' ' ' محصور شده باشد. پس

کاراکتر یک بایت از حافظه را اشغال می کند. رایانه ها 128 کاراکتر استاندارد را

می شناسند؛ حروف الفبای انگلیسی کوچک و بزرگ و اعداد صفر تا 9 و کاراکترهای

کنترلی و ویرایشی. رایانه ها به هر کاراکتر یک عدد یک بایتی تخصیص می دهند تا به

وسیلۀ آن عدد، کاراکتر مورد نظر را شناسایی یا دستیابی کنند. این 128 کاراکتر و

بخوانید اَسکی) قرار ) ASCII اعداد تخصیصی هر یک در جدولی به نام جدول

می گیرند. این جدول در ضمیمۀ کتاب آمده است. با دقت در این جدول می بینیم که

که قبلا دیدیم. گرچه این '\n' بعضی از کاراکترها دو عضوی هستند، مثل کاراکتر

و \ تشکیل شده اما رایانه آن دو با هم را یک کاراکتر فرض n کاراکتر از دو عضو

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

که مکا ننما را به خط جدید می برد. راجع به کاراکترها در فصل بعدی شرح '\n'

بیشتری خواهید دید.

دقت کنید: 6 یک « لیترال رشته ای » و « کاراکتر » و « عدد » به تفاوت سه موجودیت

عدد است، ' 6' یک کاراکتر است و " 6" یک لیترال رشته ای است.

کاراکترها را مانند لیترال های رشته ای می توان در خروجی نمایش داد. به مثال

بعدی توجه نمایید.

1 نسخۀ چهارم از برنامۀ سلام – * مثال 4

1 را دارد: ‐ این برنامه همان خروجی مثال 1

1 – Literal 2 – Character

 

1 – Operator12 برنامه سازی پیشرفته

int main()

{ // prints "Hello, my programmer!":

cout << "Hello, " << 'm' << "y programmer" << '!' << '\n';

return 0;

}

مثال بالا نشان می دهد که کاراکترها را نیز می توان به لیترال رشته ای پیوند داد و

خروجی ترکیبی درست کرد.

1 درج عدد در خروجی – * مثال 5

int main()

{ // prints "Today is Feb 5 2005":

cout << "Today is Feb " << 5 << ' ' << 2005 << endl;

return 0;

}

Today is Feb 5 وقتی مثال بالا را اجرا کنیم، خروجی به شکل 2005

بین 5 ' ' « کاراکتر جای خالی » روی صفحه نمایش چاپ می گردد. دقت کنید که یک

و 2005 گنجانده ایم تا این دو عدد با فاصله از یکدیگر چاپ شوند و به هم پیوند

نخورند.

1 متغیرها و تعریف آن ها: – 7

همۀ برنامه هایی که نوشته می شود برای پردازش داد هها به کار می رود. یعنی

اطلاعاتی را از یک ورودی می گیرد و آن ها را پردازش می کند و نتایج مورد نظر را به

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

استفاده می کنیم. « متغیرها » اصلی ذخیره شوند. برای این کار از

مکانی در حافظه است که چهار مشخصه دارد: نام، نوع، مقدار، آدرس. « متغیر 1 »

وقتی متغیری را تعریف می کنیم، ابتدا با توجه به نوع متغیر، آدرسی از حافظه در

نظر گرفته می شود، سپس به آن آدرس یک نام تعلق می گیرد. نوع متغیر بیان می کند که

1 – Variable

 

13 C++ فصل اول / مقدمات برنامه نویسی با

در آن آدرس چه نوع داده ای می تواند ذخیره شود و چه اعمالی روی آن می توان انجام

داد. مقدار نیز مشخص می کند که در آن محل از حافظه چه مقداری ذخیره شده است.

قبل از این که بتوانیم از متغیری استفاده کنیم، باید آن را اعلان 1 نماییم. C++ در

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

type name initializer

نوع متغیر را مشخص می کند. نوع متغیر به کامپایلر اطلاع می دهد type عبارت

که این متغیر چه مقادیری می تواند داشته باشد و چه اعمالی می توان روی آن انجام داد.

char برای تعریف متغیری از نوع عدد صحیح استفاده می شود و نوع int مثلا نوع

را در فصل C++ برای تعریف متغیری از نوع کاراکتر به کار می رود. انواع اصلی در

بعدی بررسی می کنیم.

نام متغیر را نشان می دهد. این نام حداکثر می تواند 31 کاراکتر name عبارت

نیز « کلمۀ کلیدی » باشد، نباید با عدد شروع شود، علایم ریاضی نداشته باشد و همچنین

برای کارهای خاصی منظور شده است. C++ کلمه ای است که در « کلمۀ کلیدی » . نباشد

63 کلمه کلیدی دارد که در ضمیمه آمده است. بهتر است نام یک متغیر با یک C++

حرف شروع شود.

نام دارد. با استفاده از این « مقداردهی اولیه » عبارت initializer عبارت

عبارت می توان مقدار اولیه ای در متغیر مورد نظر قرار داد.

دستور زیر تعریف یک متغیر صحیح را نشان می دهد:

int n = 50;

تعریف می کند و مقدار اولیه 50 را درون آن قرار n این دستور متغیری به نام

است، یعنی فقط می تواند اعداد صحیح را نگهداری کند. int می دهد. این متغیر از نوع

استفاده « = » برای این که مقداری را در یک متغیر قرار دهیم، از عملگر انتساب

قرار می دهد. n مقدار 50 را در متغیر n= می کنیم. مثلا دستور ; 50

1 – Declaration

14 برنامه سازی پیشرفته

به طور غیر مستقیم نیز می توانیم مقداری را به یک متغیر تخصیص دهیم. برای

n سبب می شود که مقدار n=m; مقدار 45 داشته باشد، آنگاه دستور m مثال اگر متغیر

برابر با 45 شود. n شود؛ یعنی مقدار m برابر با مقدار

همچنین می توانیم یک مقدار را به طور ه مزمان در چند متغیر از یک نوع قرار

n و سرانجام در m و سپس در k مقدار 45 را ابتدا در n=m=k= دهیم. دستور ; 45

قرار می دهد. به این ترتیب هر سه متغیر فوق مقدار 45 خواهند داشت.

1 استفاده از متغیرهای نوع صحیح – * مثال 6

int main()

{ // prints "m = 45 and n = 55":

int m = 45;

int n = 55;

cout << "m = " << m << " and n = " << n << endl;

return 0;

}

خروجی این برنامه به شکل زیر است:

m = 44 and n = 77

و مقدار اولیۀ 45 تعریف شده. سپس متغیر int از نوع صحیح m در برنامۀ بالا متغیر

و مقدار اولیۀ 55 تعریف گشته است. سرانجام مقادیر این دو int از نوع صحیح n

روی خروجی چاپ شده است. cout متغیر با دستور

می توانیم متغیرها را هنگام تعریف، بدون مقدار رها کنیم و مقداردهی را به درون

برنامه موکول نماییم. به مثال زیر نگاه کنید:

1 تعریف متغیر بدون مقداردهی – * مثال 7

1 را دارد: – این برنامه همان خروجی مثال 6

int main()

{ // prints "m = 45 and n = 55":

int m;

int n;

m = 45; // assigns the value 45 to m

15 C++ فصل اول / مقدمات برنامه نویسی با

n = m + 10; // assigns the value 55 to n

cout << "m = " << m << " and n = " << n << endl;

return 0;

}

خروجی این برنامه به شکل زیر است:

m = 45 and n = 55

تعریف شد هاند اما مقداردهی نشده اند. در خط n و m در خط سوم و چهارم، متغیرهای

یعنی m+ قرار داده می شود. در خط ششم نیز مقدار 10 m پنجم مقدار 45 در متغیر

قرار داده می شود. پس از این که دو متغیر n 45+10 که برابر با 50 است در

آن ها را چاپ کنیم. cout مقداردهی شدند، می توانیم با دستور

را روی یک خط تعریف کنیم به شکل زیر: n و m در مثال بالا می توانستیم متغیرهای

int m,n;

تعریف می شوند و هیچ کدام مقداردهی int به این ترتیب هر دو متغیر از نوع

با یک علامت کاما , از یکدیگر جدا شد هاند. لذا n و m نمی شوند. توجه کنید که

می توانیم چند متغیر را روی یک سطر تعریف کنیم به شرطی که همه از یک نوع باشند.

1 مقداردهی اولیه 1 به متغیرها – 8

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

مقداردهی کنیم. استفاده از متغیرهای مقداردهی نشده ممکن است باعث ایجاد

دردسرهایی شود. مثال زیر این موضوع را نشان می دهد.

1 متغیر مقداردهی نشده – * مثال 8

int main()

{ // prints "x = ?? and y = 45":

int x; // BAD: x is not initialized

int y=45;

cout << "x = " << x << " and y = " << y << endl;

1 – Initializing

 

16 برنامه سازی پیشرفته

return 0;

}

x = ?? and y = 45

تعریف شده اما در سراسر برنامه هیچ مقداری در آن x در مثال بالا متغیر

گذاشته نشده است. اگر سعی کنیم چنین متغیری را چاپ کنیم با نتایج غیرمنتظره ای

را ?? چاپ نموده x مواجه خواهیم شد. کامپایلری که برنامۀ بالا را اجرا کرده، مقدار

شناخته شده نیست. یک کامپایلر دیگر ممکن است x است به این معنی که مقدار درون

خروجی زیر را بدهد:

x = 7091260 and y = 45

هیچ مقداری تخصیص نداده ایم، در خروجی مقدار x با وجود این که به

می گویند (یعنی مقداری که قبلا در « زباله 1 » 7091260 چاپ شده است. به این مقدار

آن قسمت از حافظه بوده و سپس بدون استفاده رها شده است).

دردسر متغیرهای مقداردهی نشده وقتی بزرگ تر می شود که سعی کنیم متغیر

را که مقداردهی نشده در x مقداردهی نشده را در یک محاسبه به کار ببریم. مثلا اگر

غیر قابل پیش بینی خواهد بود. برای y به کار ببریم، حاصل y = x + عبارت ; 5

اجتناب از چنین مشکلاتی عاقلانه است که متغیرها را همیشه هنگام تعریف، مقداردهی

کنیم.

1 ثابت ها – 9

در بعضی از برنامه ها از متغیری استفاده می کنیم که فقط یک بار لازم است آن را

مقداردهی کنیم و سپس مقدار آن متغیر در سراسر برنامه بدون تغییر باقی می ماند. مثلا

تعریف می کنیم و آن را با 3.14 PI در یک برنامۀ محاسبات ریاضی، متغیری به نام

مقداردهی می کنیم و می خواهیم که مقدار این متغیر در سراسر برنامه ثابت بماند. در

استفاده می کنیم. یک ثابت، یک نوع متغیر است که فقط یک « ثابت ها 2 » چنین حالاتی از

بار مقداردهی می شود و سپس تغییر دادن مقدار آن در ادامۀ برنامه ممکن نیست.

1 – Garbage 2 – Constant

 

17 C++ فصل اول / مقدمات برنامه نویسی با

const تعریف ثابت ها مانند تعریف متغیرهاست با این تفاوت که کلمه کلیدی

و با مقدار k متغیری به نام int k= به ابتدای تعریف اضافه می شود. پس دستور; 3

اولیۀ 3 تعریف می کند که در ادامۀ برنامه می توان مقدار آن را تغییر داد ولی دستور

const int k=3;

و با مقدار اولیۀ 3 تعریف می کند که این مقدار را نمی توان در ادامۀ k ثابتی به نام

برنامه تغییر داد.

ثابت ها را باید هنگام تعریف، مقداردهی اولیه نمود. یک ثابت می تواند از نوع

کاراکتری، صحیح ، اعشاری و ... باشد. مثال زیر چند نوع ثابت را نشان می دهد.

1 تعریف ثابت ها – * مثال 9

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

int main()

{ // defines constants; has no output:

const char BEEP ='\b';

const int MAXINT=2147483647;

const float DEGREE=23.53;

const double PI=3.14159265358979323846

return 0;

}

در برنامۀ بالا نام ثابت ها را با حروف انگلیسی بزرگ نوشت هایم. معمولا در

برنامه ها برای نشان دادن ثابت ها از حروف بزرگ استفاده می کنند. هر چند این کار

اجباری نیست، اما با رعایت این قرارداد به راحتی م یتوانیم ثابت ها را از متغیرها تمیز

دهیم.

1 عملگر ورودی – 10

در بیشتر برنامه ها از کاربر خواسته می شود تا مقادیری را وارد کند. برای این که

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

 

18 برنامه سازی پیشرفته

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

دستور ورودی به شکل زیر است:

cin >> variable;

مقداری را از ورودی cin >> m; نام یک متغیر است. مثلا دستور variable

قرار می دهد. این که ورودی عدد باشد یا کاراکتر m (صفحه کلید) گرفته و درون متغیر

بستگی دارد. m یا ترکیبی از این دو، به نوع

1 استفاده از عملگر ورودی – * مثال 10

برنامۀ زیر یک عدد از کاربر گرفته و همان عدد را دوباره در خروجی نمایش

می دهد:

int main()

{ // reads an integer from input:

int m;

cout << "Enter a number: ";

cin >> m;

cout << "your number is: " << m << endl;

return 0;

}

روی صفحه Enter a number: هنگامی که برنامۀ بالا اجرا شود، عبارت

چاپ می شود و منتظر می ماند تا یک عدد را وارد کنید. برای وارد کردن عدد باید آن را

عدد را از cin >> m; را فشار دهید. خط Enter تایپ کرده و سپس کلید

قرار می دهد. توسط خط بعدی نیز جملۀ m ورودی گرفته و در متغیر

چاپ می شود. شکل زیر یک نمونه از m و سپس مقدار your number is:

اجرای برنامۀ بالا را نشان می دهد:

Enter a number: 52

mohsen_mahyar@yahoo.com

 

your number is: 52

در این شکل، عددی که کاربر وارد کرده با حروف سیاه تر نشان داده شده است. باز هم

به کد برنامه نگاه کنید. در خط چهارم کد یعنی:

cout << "Enter a number: ";

19 C++ فصل اول / مقدمات برنامه نویسی با

استفاده نکرده ایم تا مکان نما در همان خط باقی بماند endl یا '\n' از کاراکتر

و ورودی در جلوی همان خط وارد شود.

عملگر ورودی نیز مانند عملگر خروجی به شکل جریانی رفتار می کند. یعنی

همان طور که در عملگر خروجی می توانستیم چند عبارت را با استفاده از چند عملگر

>> به صورت پشت سر هم چاپ کنیم، در عملگر ورودی نیز می توانیم با استفاده از

چند عملگر << چند مقدار را به صورت پشت سر هم دریافت کنیم. مثلا با استفاده از

دستور:

cin >> x >> y >> z;

به ترتیب از ورودی دریافت می شوند. برای این کار باید بین هر z و y و x سه مقدار

بگذارید و پس از تایپ کردن همۀ ورودی ها، کلید (space) ورودی یک فضای خالی

را بفشارید. آخرین مثال فصل، این موضوع را بهتر نشان می دهد. enter

1 چند ورودی روی یک خط – * مثال 11

1 است با این تفاوت که سه عدد را از ورودی – برنامۀ زیر مانند مثال 10

گرفته و همان اعداد را دوباره در خروجی نمایش می دهد:

int main()

{ // reads 3 integers from input:

int q, r, s;

cout << "Enter three numbers: ";

cin >> q >> r >> s;

cout << "your numbers are: << q << ", " << r

<< ", " << s << endl;

return 0;

}

نمونه ای از اجرای برنامۀ بالا در زیر آمده است:

Enter three numbers: 35 70 9

your numbers are: 35, 70, 9

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

 

20 برنامه سازی پیشرفته

پرسش های گزینه ای

صحیح نیست؟ C++ 1 – کدام یک از موارد زیر در مورد

است ب ) شی گراست C الف ) از نسل زبان

ج ) همه منظوره است د ) سطح پایین است

mohsen_mahyar@yahoo.com

 

نقش داشته است؟ C++ 2 – کدام یک از زبا نهای زیر در تولید

Java ( ب Basic ( الف

Pascal ( د Simula ( ج

شامل کدام یک از امکانات زیر است؟ (IDE) 3 – محیط مجتمع تولید

الف ) ویرایش گر متن ب ) کامپایلر

ج ) ابزارخطایابی د ) همۀ موارد

است؟ C++ 4 – کدام یک از عملگرهای زیر عملگر خروجی در

الف ) >> ب ) # ج ) << د ) //

5 – از موارد زیر کدام در مورد عبارت " 10 " صحیح است؟

الف ) " 10 " یک کاراکتر است ب ) " 10 " یک عدد صحیح است

ج ) " 10 " یک لیترال است د ) " 10 " یک عدد دودویی است

کدام عبارت صحیح نیست؟ int k = 6 – در مورد عبارت ; 8

با مقدار 8 مقداردهی اولیه شده است k الف ) متغیر

است int از نوع k ب ) متغیر

در آدرس 8 از حافظه قرار گرفته است k ج ) متغیر

مقدار 8 قرار گرفته است k د ) در آدرس

چیست؟ C++ 7 – عملگر انتساب در

الف ) = ب ) == ج ) # د ) =!

const int x=7; x+= 8 – در کد مقابل چه روی می دهد؟ ; 9

ذخیره می شود x الف ) مقدار 9 در

ذخیره می شود x 7 یعنی 16 در + ب ) مقدار 9

ذخیره می شود x ج ) مقدار 9 و 7 هر کدام جدا در

 

21 C++ فصل اول / مقدمات برنامه نویسی با

د ) دستور دوم اجرا نمی شود و کامپایلر خطا می گیرد.

چه کاری انجام می دهد؟ cin >> age; 9 – کد

را چاپ می کند age الف ) مقدار متغیر

می گذارد age ب ) مقداری از ورودی گرفته و در

است age بزرگ تر از cin ج ) بررسی می کند که آیا

را محاسبه می کند age د ) سینوس مقدار

کدام گزینه صحیح است؟ #include<iostream> 10 – در مورد دستور

را در خروجی چاپ می کند "iostream" الف ) یک دستور خروجی است که عبارت

را معرفی می کند iostream ب ) یک راهنمای پیش پردازنده است که سرفایل

قرار می دهد iostream ج ) یک دستور ورودی است که مقدار دریافتی را در متغیر

د ) این دستور معتبر نیست زیرا علامت سمیکولن ندارد

mohsen_mahyar@yahoo.com

 

22 برنامه سازی پیشرفته

پرسش های تشریحی

یک زبان سطح متوسط می گویند؟ C++ 1‐ توضیح دهید چرا به

چه تفاوت هایی دارد؟ C++ با یک توضیح حالت C 2‐ یک توضیح حالت

3‐ چه اشتباهی در ای ن برنامه هست ؟

#include <iostream>

int main()

{ //prints "Hello, World!" :

cout << "Hello, World!\n"

return 0;

}

زیر چ ه اشتباهی وجود دارد؟ C 4‐ در توضی ح حالت

cout << "Hello, /* change? */ world.\n";

5‐ چه اشتباهی در ای ن برنامه است ؟

#include <iostream>

int main

{ //prints "n = 22":

n = 22;

cout << "n = << n << endl;

return 0;

}

6‐ در دستور مقداردهی زیر چه اشکالی وجود دارد؟

int k=6, age=20, grade=1, A+ =20;

7‐ در کد زیر چه اشتباهی هست؟

int Grade;

grade = 18;

8‐ قطعه برنامۀ زیر را اصلاح کنید:

int main()

cout >> "Enter a number:";

cin >> n;

cout >> "Your number is" >> n >> endl

 

23 C++ فصل اول / مقدمات برنامه نویسی با

9‐ برنامۀ زیر سن کاربر را از ورودی دریافت کرده و سپس آن مقدار را در خروجی چاپ

می کند اما خطوط این برنامه به هم ریخته است. آن را به ترتیب درست مرتب کنید:

int main()

{ // testing:

cout << "Your age is: " << age << " years." << endl;

cin >> age;

cout << "Enter your age: ";

int age;

return 0;

}

تمرین های برنامه نویسی

1‐ برنامه ای بنویسید که همۀ حروف الفبای انگلیسی را به ترتیب چاپ کند به طوری

که کنار هر حرف بزرگ، مشابه کوچک آن هم وجود داشته باشد.

6 مانند زیر چاپ کند. × را در ی ک بلوک 7 B 2‐ برنامه ای بنویسید که به وسیلۀ ستاره ها، حرف

*****

* *

* *

*****

* *

* *

*****

3‐ برنامه ای نوشته و اجرا کنید ک ه اولین حرف نام فامیل شما را به وسیلۀ ستاره ها در

7 چاپ کند. × یک بلوک 7

4‐ برنامه ای نوشته و اجرا کنید که نشان دهد چه اتفاقی می افتد اگر هر یک از ده

سویچ خروجی زیر چاپ شود:

\a , \b , \n , \r , \t , \v , \' , \" , \\ , \?

5‐ برنامه ای را نوشت ه و اجرا کنید ک ه مجموع ، تفاض ل، حاصل ضرب ، خارج قسمت و

باقیماندۀ دو عدد 60 و 7 را چاپ کند.

6‐ برنامه ای را نوشته و اجرا کنید که دو عدد صحیح از ورودی گرفته و مجموع ،

تفاضل ، حاصل ضرب ، خارج قسمت و باقیماندۀ آن دو عدد را چاپ کند.

 

23 C++ فصل اول / مقدمات برنامه نویسی با

9‐ برنامۀ زیر سن کاربر را از ورودی دریافت کرده و سپس آن مقدار را در خروجی چاپ

می کند اما خطوط این برنامه به هم ریخته است. آن را به ترتیب درست مرتب کنید:

int main()

{ // testing:

cout << "Your age is: " << age << " years." << endl;

cin >> age;

cout << "Enter your age: ";

int age;

return 0;

}

تمرین های برنامه نویسی

1‐ برنامه ای بنویسید که همۀ حروف الفبای انگلیسی را به ترتیب چاپ کند به طوری

که کنار هر حرف بزرگ، مشابه کوچک آن هم وجود داشته باشد.

mohsen_mahyar@yahoo.com

 

6 مانند زیر چاپ کند. × را در یک بلوک 7 B 2‐ برنامه ای بنویسید که به وسیلۀ ستاره ها، حرف

*****

* *

* *

*****

* *

* *

*****

3‐ برنامه ای نوشته و اجرا کنید که اولین حرف نام فامیل شما را به وسیلۀ ستاره ها در

7 چاپ کند. × یک بلوک 7

4‐ برنامه ای نوشته و اجرا کنید که نشان دهد چه اتفاقی می افتد اگر هر یک از ده

سویچ خروجی زیر چاپ شود:

\a , \b , \n , \r , \t , \v , \' , \" , \\ , \?

5‐ برنامه ای را نوشته و اجرا کنید که مجموع ، تفاضل، حاصل ضرب ، خارج قسمت و

باقیماندۀ دو عدد 60 و 7 را چاپ کند.

6‐ برنامه ای را نوشته و اجرا کنید که دو عدد صحیح از ورودی گرفته و مجموع ،

تفاضل ، حاصل ضرب ، خارج قسمت و باقیماندۀ آن دو عدد را چاپ کند.

 

mohsen_mahyar@yahoo.com

 

   + MOHSEN GHASEMI - ۱٢:٠٦ ‎ق.ظ ; ۱۳۸٩/٥/۱٦