خدایا چنان کن سرانجام کار تو خوشنود باشی و ما رستگار
جلسه اول
یک برنامه ساده ++C از نمادهایی استفاده میکنه که ممکنه برای افراد غیر برنامه نویس، نمادهای عجیبی به نظر برسه ولی اصلآ نگران نباشید، انشالله تا پایان آموزش اونقدر از این نمادها استفاده میکنیم که برای همهی ما عادی میشه.
کارمون رو با برنامه سادهای شروع میکنیم که یک خط از متنی رو در خروجی چاپ میکنه. اول مشخص میکنیم که منظورمون از خروجی و ورودی چیه.
بنا به تعریف خروجی به بخش حمل و نقل کامپیوتر گفته میشه.بخش خروجی اطلاعات پردازش شده توسط کامپیوتر رو دریافت میکنه و اون رو در اختیار وسایل خروجی قرار میده تا امکان استفاده از اطلاعات در خارج از کامپیوتر فراهم بشه.دستگاههای خروجی معمولآ عبارتند از : مانیتور، چاپگر
ورودی هم بخش دریافت نامیده میشه. در این واحد داده ها و اطلاعات توسط دستگاههای مختلف ورودی دریافت میشه و اطلاعات دریافت شده در اختیار واحد های دیگه قرار داده میشه. در حال حاظر مورد استفاده ترین دستگاههای ورودی صفحه کلید و ماوس هستش.
خوب برگردیم سر برنامه نویسی، قرار شد یه برنامه بنویسیم که یه خط برامون چاپ کنه ( رو مانیتور نمایش بده)
\\Avalin barname
#include
int main()
{
cout<< " avalin jalaseh C++ dar tebyan!\n";
return 0;
}
این برنامه چند ویژگی مهم از زبان ++C رو بیان میکنه. هر خط از این برنامه رو بررسی خواهیم کرد:
خط اول با // شروع شده، در ++C هر خطی که با این علامت شروع بشه توضیحات گفته میشه. این خط در هنگام اجرای برنامه هیچ تاثیری نداره و فقط از اون برای توضیح دادن استفاده میکنیم. برنامه نویسان از توضیحات برای مستند سازی و افزایش خوانائی برنامه استفاده میکنن.
توضیحات به افراد دیگه در خواندن و درک برنامه کمک میکنه.مثلا وقتی انشالله یه روزی 15000 خط برنامه نوشتید برای اینکه متوجه بشید که هر خط چه کاری رو انجام میده مجبور میشید واسش توضیح بنویسید، مگر اینکه حافظتون اونقدر خوب باشه که دقیقا کار هر خط برنامه یادتون باشه!
دو نوع توضیحات داریم:
1-توضیحات یه خطی که با // شروع میشه و نمونش در ابتدای برنامه بالا اومد
2- توضیحات چند خطی که با */ شروع میشه و با /* تمام میشه مثل:
/* in tozihe chand khati hastesh ke baraye tozihate ziyad azash estefadeh mishe va tasiri dar ejraye barnameh nadareh */
بنابراین اگه توضیحات رو اضافه کنید یا حذف کنید هیچ تاثیری رو برنامه نداره.
#include
دستور پیش پردازنده یا سرفایل نامیده میشه. خطوطی که با # شروع میشن قبل از اجرای برنامه توسط پیش پردازنده پردازش میشن. این خطوط خاص به پیش پردازنده میگه که در برنامه محتوای سر فایل جریان ورودی/خروجی رو قرار بده.
این سر فایل باید در تمام برنامه هایی که اطلاعات خروجی رو در صفحه نمایش نشون میده یا با استفاده از صفحه کلید داده ها رو دریافت میکنه در ابتدای برنامه قرار بگیره.
دستورات پیش پردازنده یا سرفایل ها انواع مختلفی دارند که پر کاربردترینشون iostream.h هستش.
ساده تر میگم: فرض کنید شما یه برنامه نوشتید که از صفحه کلید عدد رو دریافت میکنه و بعد از جمع کردن رو مانیتور نمایش میده.سر فایل iostream.h به کامپیوتر میگه که عدد ها رو از صفحه کلید قراره بخونی و جواب رو قراره رو مانیتور نمایش بدی.
قرار ندادن سر فایل iostream.h در برنامه ای که ورودیش رو از صفحه کلید دریافت میکنه و خروجیش رو در صفحه نمایش چاپ میکنه باعث میشه کامپایلر پیغام خطا بده.
یه نکته در مورد کامپیالر بگم که منظور ما از کامپایلر محیطی هستش که دستورات سی رو داخل اون مینویسیم تا به زبان ماشین ترجمه و تبدیل بشن.کامپیالر وظیفه چک کردن دستورات رو هم داره و بررسی میکنه که کدوم خط از برنامه اشتباه نوشته شده و خطا رو مشخص میکنه و به ما اعلام میکنه که مثلآ در فلان خط اشتباه دستوری یا منطقی دارید.
در مورد انواع اشتباهات برنامه نویسی بعدآ توضیح خواهم داد.
Int main()
این خط قسمتی از هر برنامه ++C هستش. یعنی غیر ممکنه شما یه برنامه پیدا کنید یا بنویسید که این تابع در داخلش استفاده نشده باشه. حالا شاید سئوال واستون پیش بیاد که از کجا فهمیدم این تابع هستش. به پرانتز های بعد از main توجه کنید.پرانتز های باز و بسته () بعد از main بیان میکنه که ()main یک قسمت اصلی یا به اصطلاح بلاک اصلی از برنامه به نام تایع هستش.
هر برنامه ++C از یک یا چند تابع تشکیل میشه که یکی از اونها حتما باید ()main باشه. این برنامه ای که نوشتیم فقط یه تابع داره و اون هم تابع اصلی یا ()main هستش. معمولآ اجرای برنامه های ++C با اجرای تابع ()main شروع میشه.
حتی اگر ()main اول برنامه نوشته نشه و در انتها یا وسط برنامه نوشته بشه کامپیالر ابتدا تابع ()main رو پردازش میکنه و بعد سراغ تابع های دیگه میره.
کلمه کلیدی int در سمت چپ ()main اعلام میکنه که تابع یک مقدار صحیح ( عدد درست) برمیگردونه. در ریاضی اگه یادتون باشه ما چند نوع عدد داشتیم یکی اعداد صحیح بودن مثل 5656،212،9987 و یه سری هم اعداد اعشاری بودن مثل 12.33265و 6565.78 که ممیز داخشون بود.
حالا کار int اینه که به کامپایلر بگه که این تابعی که قراره اجرا بشه میخواد به اندازه یه عدد صحیح مقدار برگردونه.
فرض کنید تابع یه کارمنده که تو یه اداره ای پیش چند تا کارمند دیگه کار میکنه. رئیس اداره وقتی با این کارمند کار داره صداش میکنه (فراخوانی تایع) و وظایفی رو به عهده کارمند قرار میده. بعضی از کارمندان برای انجام وظایف خود نیاز به یک سری داده های اولیه یا ورودی دارند که ورودی تابع نامیده میشه و بعد از پردازش به وسیله اون داده های ورودی پاسخ و نتیجه رو برمیگردونند.
بعضی از کارمندان هم نیازی به اطلاعات ندارند و بدون ورودی و خروجی کار خودشون رو انجام میدن مثل آبدارچی یک اداره.
کامپایلر با دیدن int قبل از نام هر تابع یا متغیر مطلع میشه که این تابع بعد از پردازش مقادیری رو به عنوان پاسخ برگشت خواهد داد و به همین خاطر برای تابع فضایی رو در نظر میگیره تا پاسخ درون اون قرار بگیره.
چون اینجا از int استفاده کردیم کامپایلر به اندازه 4 بایت حافظه آماده خواهد کرد، اگر از double استفاده میکردیم 8 بایت حافظه تخصیص میافت.
Int مخفف integer (تلفظ کنید اینتیجر) هستش که به معنی عدد صحیح و عدد درست ترجمه میشه.
قبل از ()main یا هر تابعی که درست خواهیم کرد به جای int میتونیم از
char ، short ،long ،unsigned char ،unsigned short ،unsigned int ،unsigned long ، signed char، float double و long double
هم استفاده کنیم که در این صورت طبق جدول زیر مختص هرکدوم حافظه در نظر گرفته میشه. مثلآ وقتی فکر میکنید که تابع شما ممکنه عدد اعشاری هم برگردونه از float استفاده میکنید.
جدول تخصیص حافظه:
Char 1B
Short 2B
Int 4B
Long 4B
Unsigned char 1B
Unsigned short 2B
Unsigned int 4B
Unsigned long 4B
Signed char 1B
Float 4B
Double 8B
Long double 8B
از این جدول هنگام تعریف متغییر هم استفاده خواهیم کرد پس بهتره خوب حفظش کنید.
معمولآ بیشتر از float،int ،double،char استفاده میشه و کاربردشون بیشتره.
اگه برنامه رو نگاه کنید متوجه میشید که بعد از ()main یه دونه آکولاد باز } قرار دادیم و دو خط پایین ترش آکولاد بسته { گذاشتیم.
آکولاد محدوده بدنه تابع رو مشخص میکنه و از اون برای تعیین محدوده استفاده میکنیم. داخل دوتا آکلاد هرچی هست جزء بدنه دستور قبلش محسوب میشه.
داخل بدنه تابع ()main یعنی بین دوتا آکولاد دو تا دستور هستش.یکیش اینه:
Cout<< " avalin jalaseh C++ dar tebyan!\n";
دستور >>cout به کامپیوتر دستور میده که حروف یا به اصطلاح رشته کاراکترهایی که داخل بین دوتا کوتیشن " " قرار دارند رو در صفحه نمایش چاپ کن.
تمام این خط یه دستور نامیده میشه. هر دستور باید با یه سمی کالن ; به پایان برسه. به ; پایان دهنده دستور هم گفته میشه.اگه ; نذاری خطای دستوری محسوب میشه. خطای دستوری یاعث میشه کامپایلر نتونه اون خط رو به رسمیت بشناسه. در این گونه موارد کامپایلر خطا میده و به برنامه نویس کمک میکنه مکان دستور نادرست رو پیدا کنه و اشکالش رو بر طرف کنه.خطاهای دستوری نقض قوانین زبان ++C میشن.
داخل کوتیشن یعنی بین " و " هرچی بنویسید همون چاپ میشه مثلآ ما اینجا نوشتیم اولین جلسه ++C در تبیان. ولی اگه دقت کنید وقتی برنامه رو اجرا میکنید متوجه میشید که n\ چاپ نمیشه. یعنی فقط جمله avalin jalaseh C++ dar tebyan! نمایش داده میشه و خبری از n\ نیست.
کاراکتر \ کاراکتر کنترلی یا کاراکتر گریز نامیده میشه و نشان دهنده کاراکتر خاصی برای خروجیست.
وقتی کاراکتر یا علامت \ در داخل یه جمله ظاهر میشه کاراکتر بعدی در ترکیب با اون، رشته کنترلی رو تشکیل میدن یعنی \و n با همند و n\ تشکیل میدن.
n\ به معنی خط جدید است که باعث میشه مکان نما بیاد سر خط بعدی. اگه یادتون باشه وقتی بهمون دیکته میگفتن وقتی جمله تموم میشد خانم معلم میگفت نقطه سر خط.
این هم دقیقآ همون کار رو انجام میده. مثلآ دستور زیر رو در نظر بگیرید:
Cout<<"123456789";
این دستور تو نمایشگر به این صورت چاپ میشه:
123456789
اما اگه بین اعداد از n\ استفاده کنیم یعنی به این صورت بنویسیمش:
Cout<<"1234\n56789";
در این صورت به این شکل چاپ میشه:
123456789
به جای n\ میتونید از رشته های کنترلی زیر هم استفاده کنید که توضیحشو مقابلش نوشتم:
n\ خط جدید: مکان نما را به ابتدای خط بعدی منتقل میکنه
t\ جدول بندی افقی: مکان نما را به محل ستون بهدی میبره (مثل کلید tab فاصله میندازه)
r\ برگشت به اول سطر: مکان نما رو در ابتدای خط فعلی قرار میده
a\ زنگ سیستم به صدا درمیاد: کامپیوتر بوق میزنه!
\\ برای چاپ کاراکتر \ به کار میره.
"\ برای چاپ کاراکتر " به کار میره
یه نکته دیگه اینکه زبان c نسبت به حروف بزرگ و کوچک حساسه، مثلا A با a فرق داره و دو چیز جدا از هم فرض میشن. بازم مثال میزنم. فرض کنید میخوایید بنویسید cout اگه اون رو COUT یا Cout یا coUt و ... بنویسی قبول نیست و فقط cout مورد قبول واقع میشه.
میرسیم به خط:
Return 0;
این خط باید در پایان هر تابع main نوشته بشه.کلمه کلیدی return در ++C، یکی از چندین روشی است که از اون برای خروج از یک تابع استفاده میشه. مقدار 0 نشون میده که اجرای برنامه موفقیت آمیز به پایان رسیده.
آکولاد بسته { اعلام پایان بدنه تابع main هستش.