استفاده از کامنتهای تکخطی و چندخطی برای مستندسازی کد
آشنایی با نحوه کامپایل و اجرا در Code Blocks
ساختار کلی یک برنامه C++
هر برنامه C++ از چند بخش تشکیل شده است که هر کدام نقش مشخصی دارند. پیش از نوشتن اولین کد، این بخشها را میشناسیم:
main.cppcpp
بهترتیب:
۱. هدر (Header): خط #include <iostream> به کامپایلر میگوید «امکانات ورودی/خروجی استاندارد را به برنامه اضافه کن». بدون این خط، نمیتوانیم از cin و cout استفاده کنیم.
۲. فضای نام (Namespace): خط using namespace std; به ما اجازه میدهد بهجای std::cout فقط cout بنویسیم. در پروژههای بزرگ، این خط ممکن است حذف شود تا تداخل نامها پیش نیاید، اما برای شروع کار بسیار مفید است.
۳. تابع main: نقطه شروع برنامه است. وقتی برنامه را اجرا میکنید، سیستمعامل از main شروع به اجرا میکند. کلمه int قبل از main میگوید این تابع یک عدد صحیح به سیستمعامل برمیگرداند.
۴. بدنه: هر چیزی که بین { و } تابع main قرار دارد، بهترتیب اجرا میشود. این همان «برنامه» شماست.
۵. return 0: به سیستمعامل میگوید «برنامه با موفقیت تمام شد». عدد ۰ یعنی «بدون خطا». اگر عدد غیر صفر برگردانیم، یعنی خطایی رخ داده.
نکته: در نسخه اولیه جزوه، main() بدون int نوشته شده بود و return 0; هم وجود نداشت. این اشتباه استاندارد است و در کامپایلرهای مدرن خطا یا هشدار تولید میکند.
برنامه ۱: Hello World
این سنتی است که در همه دنیا، اولین برنامهای که در یک زبان جدید مینویسید، چاپ عبارت «Hello World!» است. این برنامه ساده فقط ساختار را آموزش میدهد؛ در برنامههای بعدی با ورودی، محاسبات و کنترل جریان آشنا میشویم.
سادهترین برنامه ممکن — فقط یک پیام چاپ میکندcpp
$خروجی برنامه
Hello World!
در حال باز کردن ویرایشگر…
هر خط چه میکند؟ (تحلیل خط به خط)
بررسی خط به خط برنامه Hello World:
خط ۱: #include <iostream>
این یک دستور پیشپردازنده (Preprocessor Directive) است. علامت # به کامپایلر میگوید قبل از کامپایل اصلی، این خط را پردازش کن. iostream (مخفف Input/Output Stream) حاوی تعریف cin، cout، endl و سایر امکانات ورودی/خروجی است. بدون این خط، نمیتوانید چیزی چاپ کنید یا از کاربر چیزی بگیرید.
خط ۲: using namespace std;
در C++ همه چیز در «فضاهای نام» سازماندهی شده. std (مخفف Standard) فضای نامی استاندارد است که cin, cout, string و ... در آن قرار دارند. بدون این خط، باید بنویسیم std::cout << "Hello". این خط به ما اجازه میدهد پیشوند std:: را حذف کنیم.
خط ۳: int main()
این اعلان تابع main است. int نوع بازگشتی است (یک عدد صحیح برمیگرداند). () یعنی این تابع هیچ ورودی نمیگیرد (البته میتوان ورودیای از خط فرمان گرفت، که بعداً میبینیم).
خط ۴: {
شروع بدنه تابع. هر چیزی بین { و } جزء این تابع است.
خط ۵: cout << "Hello World!";cout (مخفف Character Output) شیئی برای چاپ روی صفحه است. عملگر << (stream insertion operator) مقدار سمت راست را در جریان خروجی میفرستد. رشته "Hello World!" در داخل علامت نقلقول "..." قرار دارد. در پایان ; آمده که نشاندهنده پایان دستور است.
خط ۶: return 0;
مقدار ۰ را به سیستمعامل برمیگرداند و از تابع خارج میشود. عدد ۰ یعنی «موفقیت».
خط ۷: }
پایان بدنه تابع.
cout: دستور خروجی
دستور cout (Character Output) برای نمایش داده روی صفحه استفاده میشود. شکل کلی:
در C++، cout با حرف کوچک c نوشته میشود. در نسخه اولیه جزوه، Cout با C بزرگ نوشته شده بود که باعث خطای کامپایل میشود. این نکته را همیشه بهخاطر بسپارید: C++ به بزرگی/کوچکی حروف حساس است.
برنامه ۲: چاپ چند مقدار با cout
این برنامه نشان میدهد چطور میتوان رشتههای متنی و مقادیر متغیرها را در یک cout چاپ کرد. این الگوی بسیار پرکاربردی است و در تمام طول دوره از آن استفاده میکنیم.
نمایش نحوه زنجیر کردن چند مقدار در یک coutcpp
$خروجی برنامه
Salam!
Sen-e man 18 saal ast.
Nomre-ye man 18.5 va gorouh-e man 'A' ast.
در حال باز کردن ویرایشگر…
endl در برابر \n
هر دو برای رفتن به خط جدید استفاده میشوند، اما تفاوتهای ظریفی دارند:
endl (مخفف end line):
main.cppcpp
\n (کاراکتر خط جدید):
main.cppcpp
تفاوتهای کلیدی:
ویژگی
endl
\n
مکان نوشتن
بیرون از کوتیشن
داخل کوتیشن
Flush کردن بافر
بله (آنی)
خیر (هنگام نیاز)
سرعت
کندتر
سریعتر
خوانایی
خوب
خوب
کدام را انتخاب کنیم؟
برای برنامههای آموزشی و ساده، فرقی ندارد.
برای برنامههای با خروجی زیاد (مثل چاپ هزاران خط)، \n سریعتر است چون flush کردن بافر پرهزینه است.
اگر میخواهید مطمئن شوید خروجی قبل از خطای احتمالی نمایش داده میشود، endl امنتر است.
نکته: میتوانید \n را در انتهای رشته یا در وسط آن بنویسید: cout << "Line 1\nLine 2\n"; دو خط چاپ میکند.
نکته دیگر: \n یک escape sequence است (مثل \t برای تب، \\ برای بکاسلش، \" برای نقلقول). همه اینها باید داخل کوتیشن نوشته شوند.
اصلاح: main() به جای int main()
در نسخه اولیه جزوه (صفحه ۷)، برنامه Hello World اینگونه نوشته شده بود:
main.cppcpp
این کد در C++ استاندارد غلط است. در کامپایلرهای قدیمی (مثل Turbo C++) شاید کار کند، اما در کامپایلرهای مدرن (GCC، Clang، MSVC) خطا یا حداقل هشدار میدهد. استاندارد C++ صراحتاً میگوید main باید نوع بازگشتی int داشته باشد.
نسخه اشتباه جزوه
کد دارای باگcpp
نسخه اصلاحشده و استاندارد
کد صحیحcpp
cin: دستور ورودی
دستور cin (Character Input) برای دریافت داده از کاربر استفاده میشود. شکل کلی:
main.cppcpp
در cout از << (جهت جریان خروجی) و در cin از >> (جهت جریان ورودی) استفاده میکنیم. یک راهحفظ ساده:
cout << x; → «x را بهسوی صفحه بفرست»
cin >> x; → «از صفحه بهسوی x بیاور»
میتوان چند متغیر را در یک cin خواند:
main.cppcpp
نکات مهم:
۱. نوع داده متغیر مهم است. اگر int a; تعریف کردهاید و کاربر 3.5 وارد کند، فقط 3 ذخیره میشود و .5 در بافر میماند.
۲. فاصله، تب و Enter جداکنندهاند. کاربر میتواند 3 5 یا 3\n5 یا 3\t5 وارد کند؛ همه درست کار میکند.
۳. متغیر باید قبل از cin اعلان شده باشد. اگر بنویسید cin >> x; بدون int x; قبلی، خطای کامپایل میگیرید.
۴. هیچ پیام prompt نیست: cin خودش هیچ چیزی روی صفحه چاپ نمیکند. مرسوم است که قبل از آن با cout یک پیام بدهید: cout << "Adad ra vared konid: "; cin >> x;
برنامه ۳: دریافت عدد از کاربر و چاپ آن
این برنامه نشان میدهد چطور میتوان ورودی گرفت، آن را در یک متغیر ذخیره کرد، و سپس با آن کار کرد. این الگوی پایهای است که در تمام برنامههای تعاملی از آن استفاده میشود.
نمونه کامل برنامهای که ورودی میگیرد و پردازش میکندcpp
$خروجی برنامه
Yek adad vared konid: 7
Shoma '7' vared kardid.
Do barabar-e an = 14
در حال باز کردن ویرایشگر…
فلوچارت: چاپ پیام ← دریافت ورودی ← چاپ خروجی
flow.svg
کامنتها: یادداشتهای داخل کد
کامنت (Comment) یا توضیح، متنی است که در کد نوشته میشود اما کامپایلر آن را نادیده میگیرد. هدف کامنت این است که به انسان (شما در آینده، یا همتیمیهایتان) توضیح دهد کد چه میکند.
C++ دو نوع کامنت دارد:
۱. کامنت تکخطی — با // شروع میشود و تا پایان خط ادامه دارد:
main.cppcpp
۲. کامنت چندخطی — با /* شروع و با */ تمام میشود:
main.cppcpp
چه وقت کامنت بنویسیم؟
وقتی کد واضح نیست: مثلاً فرمول پیچیدهای را پیاده کردهاید.
وقتی چرایی کد مهم است: «چرا اینجا +1 گذاشتیم؟»
وقتی هشدار میدهید: «اگر اینجا را تغییر دهید، فلان بخش خراب میشود».
در ابتدای فایل یا ابتدای تابع: توضیح کلی کار.
چه وقت کامنت ننویسیم؟
وقتی کد خودش گویا است: int age = 18; نیازی به کامنت ندارد.
وقتی فقط تکرار کد است: x = x + 1; // اضافه کردن یک به x بیفایده است.
قاعده طلایی: کد را طوری بنویسید که نیازی به کامنت نداشته باشد؛ ولی وقتی نیاز بود، کامنت معنادار بنویسید.
برنامه ۴: استفاده از کامنتها
این برنامه نمونهای از نحوه نوشتن کامنتهای مفید و غیرمفید را نشان میدهد. به تفاوت دقت کنید.
مثالی از استفاده درست و غلط کامنتcpp
$خروجی برنامه
L va W: 4 5
Masahat = 20
در حال باز کردن ویرایشگر…
getch() غیراستاندارد است
در نسخه اولیه جزوه (صفحه ۶)، در برنامه Hello World از دستور getch() و هدر <conio.h> استفاده شده بود:
main.cppcpp
چرا از آن استفاده میکردند؟ در محیطهای قدیمی DOS یا Turbo C++، وقتی برنامه تمام میشد، پنجره سریع بسته میشد و کاربر نمیتوانست خروجی را ببیند. getch() منتظر میماند تا کاربر یک کلید بزند، و بعد برنامه بسته میشد.
چرا نباید از آن استفاده کنیم؟
۱. <conio.h> جزو استاندارد C++ نیست. در کامپایلرهای مدرن (GCC، Clang، MSVC) یا موجود نیست یا رفتار متفاوتی دارد.
۲. getch() غیرقابل حمل است؛ روی لینوکس یا مک ممکن است اصلاً وجود نداشته باشد.
۳. کد شما را به یک کامپایلر خاص محدود میکند.
جایگزینهای استاندارد:
در محیطهای مدرن IDE مثل Code Blocks یا Visual Studio، پنجره خروجی بهطور خودکار باز میماند؛ نیازی به چیزی نیست.
اگر واقعاً میخواهید منتظر یک کلید بمانید: cin.get(); (از <iostream> استاندارد).
برای اجرای پایتونمانند: system("pause"); (فقط ویندوز).
قاعده: در کد استاندارد، هیچگاه #include <conio.h> و getch() استفاده نکنید.
کامپایل و اجرا در Code Blocks
برای اجرای برنامههای C++ به یک کامپایلر نیاز داریم. کامپایلر کد منبع (.cpp) را به فایل اجرایی (.exe در ویندوز) تبدیل میکند. یکی از محیطهای توسعه (IDE) محبوب برای آموزش C++، Code Blocks است.
مراحل ساخت و اجرای یک برنامه در Code Blocks:
۱. ساخت پروژه جدید: منوی File → New → Project.
۲. انتخاب نوع پروژه: Console Application (برنامههای خط فرمان).
۳. انتخاب زبان: C++.
۴. نامگذاری پروژه: مثلاً HelloWorld و انتخاب محل ذخیره.
۵. انتخاب کامپایلر: معمولاً GCC (پیشفرض).
۶. نوشتن کد: فایل main.cpp باز میشود؛ کد خود را در آن بنویسید.
۷. ساخت و اجرا: کلید F9 یا دکمه Build and Run در نوار ابزار.
۸. مشاهده خروجی: یک پنجره کنسول باز میشود و خروجی برنامه را میبینید.
ساختار فایل پروژه:
main.cppcpp
توجه: قبل از اجرا، حتماً پروژه را ذخیره کنید (Ctrl+S). اگر ذخیره نکنید، ممکن است فایل اجرایی در مسیر موقت قرار گیرد و گم شود.
کامپایلرهای جایگزین: علاوه بر Code Blocks، میتوانید از Visual Studio، CLion، یا حتی VS Code با افزونه C++ استفاده کنید. تمام آنها از یک کامپایلر (معمولاً GCC، Clang یا MSVC) استفاده میکنند؛ تفاوت فقط در محیط توسعه است.
ورودی در برابر خروجی
این مفهوم بنیادی است که گاهی تازهکارها در آن سردرگم میشوند:
ورودی (Input): هر چیزی که به برنامه داده میشود. از کاربر، از فایل، از شبکه. در برنامههای کنسولی، ورودی از طریق cin از کیبورد گرفته میشود.
نمونه: وقتی کاربر عدد 7 را تایپ میکند، این ورودی است.
عملگر: cin >> x;
جهت: از بیرون به درون برنامه.
خروجی (Output): هر چیزی که برنامه تولید میکند. روی صفحه، در فایل، روی چاپگر. در کنسول، خروجی با cout نمایش داده میشود.
نمونه: وقتی برنامه Hello World! را روی صفحه مینویسد، این خروجی است.
عملگر: cout << x;
جهت: از درون برنامه به بیرون.
راهحفظ ساده:
مفهوم
چه کسی به چه کسی؟
عملگر
کلاس
ورودی
کاربر → برنامه
>>
cin
خروجی
برنامه → کاربر
<<
cout
جهت فلشها را فراموش نکنید:
cin >> x → فلش به سمت متغیر x (داده وارد میشود).
cout << x → فلش از سمت متغیر x خارج میشود (داده بیرون میرود).
ترکیب ورودی و خروجی: یک برنامه واقعی معمولاً ورودی میگیرد، پردازش میکند، و خروجی میدهد:
main.cppcpp
اشتباهات رایج تازهکارها
این خطاها را تقریباً همه تازهکارها یکبار مرتکب میشوند:
۱. فراموش کردن سمیکالن ; در پایان دستور:
main.cppcpp
۲. بزرگی/کوچکی حروف:
main.cppcpp
۳. فراموش کردن using namespace std; (یا نوشتن std:: قبل از cout/cin):
main.cppcpp
راهحل: یا using namespace std; اضافه کنید، یا بنویسید std::cout << "Hello";.
۴. عدم تطبیق کوتیشنها:
main.cppcpp
۵. عدم تعریف متغیر قبل از استفاده:
main.cppcpp
راهحل: int x; قبل از cin اضافه کنید.
۶. اشتباه گرفتن >> و <<:
main.cppcpp
۷. عدم بستن براکت {}:
main.cppcpp
وقتی کامپایلر خطا میدهد، اول به این هفت مورد شک کنید. در ۹۰٪ موارد، خطا یکی از همینهاست.
برنامهنویسی تمیز: قواعد سبک
برای اینکه کد شما خوانا و حرفهای بهنظر برسد، این قواعد سبک را رعایت کنید:
۱. تورفتگی (Indentation): هر چیزی داخل { را با ۴ فاصله (یا یک Tab) تورفته بنویسید:
main.cppcpp
۲. فاصله میان عملگرها: برای خوانایی بهتر، اطراف عملگرها فاصله بگذارید:
main.cppcpp
۳. نامهای معنادار: بهجای x و y، از width و height استفاده کنید.
۴. هر دستور در یک خط: دستورات طولانی را نشکنید:
main.cppcpp
۵. بلوکهای کوتاه: اگر بلوک if فقط یک خط دارد، میتوانید براکتها را حذف کنید، اما توصیه میشود همیشه بگذارید:
main.cppcpp
۶. کامنت برای کدهای مبهم: اگر کدی نوشتید که فردا خودتان هم نمیفهمید، کامنت اضافه کنید.
این قواعد ساده، تفاوت میان کد آماتور و حرفهای را نشان میدهند.
برنامهای بنویسید که نام و سن شما را در دو متغیر ذخیره کند و سپس آنها را در یک جمله چاپ کند. خروجی مورد انتظار: «Salam, man [name] hastam va [age] saal daram.»
نمایش راهنما
برای نام از نوع string (با #include <string>) و برای سن از int استفاده کنید. میتوانید نام را مستقیم در کد بگذارید یا از کاربر بگیرید.
02
تمرین•حل کامل دارد
برنامهای بنویسید که دو عدد صحیح از کاربر بگیرد و حاصلجمع، تفریق، ضرب و تقسیم آنها را چاپ کند.
نمایش راهنما
برای تقسیم، مراقب تقسیم بر صفر باشید. اگر b == 0، پیام خطا چاپ کنید. برای تقسیم اعشاری، حداقل یکی از اعداد را به double تبدیل کنید.
03
تمرین•حل کامل دارد
برنامهای بنویسید که تعداد ثانیه را از کاربر بگیرد و آن را به فرمت ساعت:دقیقه:ثانیه تبدیل و چاپ کند. مثلاً ورودی ۳۶۶۱ باید خروجی 1:1:1 تولید کند.
نمایش راهنما
از تقسیم صحیح و باقیمانده استفاده کنید. ساعت = sec / 3600، باقیمانده = sec % 3600، دقیقه = باقیمانده / 60، ثانیه = باقیمانده % 60.
04
تمرین•حل کامل دارد
برنامهای بنویسید که اسم دانشآموز و سه نمرهاش را از ورودی بگیرد و میانگین نمرات را همراه با نام چاپ کند. خروجی نمونه: «Miangin-e [name]: [avg]».
نمایش راهنما
برای نام از string، برای نمرات از double استفاده کنید. میانگین = (n1 + n2 + n3) / 3.0 (دقت کنید 3.0 بنویسید تا تقسیم اعشاری شود).
05
تمرین•حل کامل دارد
برنامهای بنویسید که شعاع یک دایره را از کاربر بگیرد و محیط و مساحت آن را چاپ کند. سپس کد را با کامنتهای مناسب مستند کنید.
نمایش راهنما
برای π از مقدار ثابت const double PI = 3.14159; استفاده کنید. محیط = 2*PI*r، مساحت = PI*r*r. بالای تابع main یک کامنت چندخطی با توضیح کلی برنامه بنویسید.
// نکات-کلیدی۷
01هر برنامه C++ شامل: #include (هدر)، using namespace std، int main()، بدنه و return 0 است.
02cout با عملگر << خروجی چاپ میکند؛ cin با عملگر >> ورودی میگیرد.
03C++ به بزرگی/کوچکی حروف حساس است؛ cout و Cout دو چیز مختلف هستند.
04endl و \n هر دو به خط جدید میروند، اما endl بافر را فورش میکند (کندتر) و \n سریعتر است.
05کامنتهای تکخطی با // و چندخطی با /* ... */ نوشته میشوند؛ کامپایلر آنها را نادیده میگیرد.
06تابع main باید نوع بازگشتی int داشته باشد و با return 0; تمام شود؛ این استاندارد رسمی C++ است.
07getch() و هدر <conio.h> غیراستاندارد هستند؛ در کد مدرن از آنها استفاده نکنید.
گام بعدی پیشنهادی
عملگرها و عبارات
از جمع و تفریق تا تقسیم اعشاری، باقیمانده و ترجمه فرمولهای ریاضی به کد C++
int age =18;cout <<"Salam, sen-e man "<< age <<" saal ast."<< endl;// خروجی: Salam, sen-e man 18 saal ast.
1#include<iostream>2usingnamespace std;34intmain(){5int age =18;6double grade =18.5;7char group ='A';89 cout <<"Salam!"<< endl;10 cout <<"Sen-e man "<< age <<" saal ast."<< endl;11 cout <<"Nomre-ye man "<< grade <<" va gorouh-e man '"<< group <<"' ast."<< endl;12return0;13}
cout <<"Salam"<< endl <<"Donya";// خروجی:// Salam// Donya
cout <<"Salam\nDonya";// خروجی:// Salam// Donya
main()// بدون نوع بازگشتی{ cout <<"hello world!"<< endl; cout <<"c++ class";}
int a, b;cin >> a >> b;// کاربر باید دو عدد با فاصله وارد کند: 3 5
1#include<iostream>2usingnamespace std;34intmain(){5int a;6 cout <<"Yek adad vared konid: ";7 cin >> a;8 cout <<"Shoma '"<< a <<"' vared kardid."<< endl;9 cout <<"Do barabar-e an = "<< a *2<< endl;10return0;11}
flow.svg100%
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
شروع/پایانپردازشتصمیمورودی/خروجی
int age =18;// سن کاربر// این خط فقط توضیح است و کامپایل نمیشودcout << age;
/*
* این برنامه مساحت مستطیل را محاسبه میکند
* ورودی: طول و عرض
* خروجی: مساحت و محیط
* نویسنده: دانشجوی برنامهنویسی
*/intmain(){...}
1#include<iostream>2usingnamespace std;34/*
5 * برنامه: محاسبه مساحت مستطیل
6 * ورودی: طول و عرض از کاربر
7 * خروجی: مساحت
8 * نویسنده: دوره آموزش C++
9 */10intmain(){11double L, W;// طول و عرض12 cout <<"L va W: ";// پیام راهنما برای کاربر13 cin >> L >> W;1415double S = L * W;// محاسبه مساحت16// double S = L + W; // کامنت شده: فرمول اشتباه، فقط برای یادآوری1718 cout <<"Masahat = "<< S << endl;19// cout << S; // کامنت بد: فقط تکرار کد بالا، ارزش افزودهای ندارد20return0;21}