سری جدیدی از آموزشهای برنامهنویسی آغاز شده است. این سری منقضی شده است. پیشنهاد میکنیم این سری را ادامه ندهید!
در بخش قبل در مورد زبانهای برنامهنویسی توضیحاتی دادیم. بهتر است سراغ بخش عملی کار برویم!
در نظر داریم برای شروع آموزش از زبان پاسکال استفاده کنیم که ساختیافتهترین زبان برنامهنویسی است.
برای کامپایل کدهای پاسکال نیاز به کامپایلر و محیط برنامهنویسی FreePascal دارید. پس از دانلود آن کافی است آن را اجرا کنید و کدهای خود را در محیط آبیرنگ برنامه بنویسید. (محیطهای نرمافزاری که برای کدنویسی به کار میروند SDK یا Software Development Kit نامیده میشوند.)
برنامه (یا همان کد)
به تمام نوشتههایی که معمولا در SDK مینویسید و بعدا کامپایل خواهند شد برنامه یا کد میگویند. در پاسکال روال اصلی برنامه پس از دستور Begin شروع میشود و در End. پایان مییابد. پس میتوان گفت سادهترین برنامه در پاسکال به شکل زیر است:
هر دستور در پاسکال با یک ; (نقطهویرگول انگلیسی) پایان مییابد و نوشتن ; در انتهای دستور اجباری است در غیر اینصورت کامپایلر هنگام کامپایل برنامه دچار مشکل خواهد شد!
چاپ یک نوشتهی ساده
راحتترین کاری که میتوانیم در برنامهنویسی انجام دهیم چاپ یک نوشتهی ساده است. برای چاپ نوشته میتوانیم از دستور Write یا Writeln استفاده کنیم. تفاوت Write با Writeln این است که در دستور Writeln پس از نوشتهشدن نوشتهی موردنظر اشارهگر متن یک خط به پایین نیز میرود به عبارت دیگر مثل این است که پس از نوشتن متن یک اینتر در ویرایشگر بزنیم (در اصل Writeln خلاصهشدهای از واژهی WriteLine است). به عنوان مثال در برنامهی
خروجی به شکل
خواهد بود ولی اگر بهجای Write از Writeln استفاده میکردیم خروجی به شکل
ورودیهای قابلقبول برای دستور Write یا Writeln
این دستور (از این به بعد Write و Writeln را یک دستور در نظر میگیریم) میتواند سهنوع ورودی بپذیرد که در ادامه آنها را توضیح میدهیم:
1. متن ساده: اگر میخواهید متنی در خروجی چاپ کنید (مانند مثال بالا) باید متن خود را درون کوتیشن «’» قرار دهید تا متن موردنظر مستقیما در خروجی چاپ شود.
2. عبارت ریاضی: میتوانید نتیجهی حاصل عبارات ریاضی شامل چهار عمل اصلی را در خروجی به کمک این تابع چاپ کنید. قوائد حاکم در اولویت عملگرها (ضرب، تقسیم، جمع، تفریق) مانند قوائد ریاضی است و تفاوتی نمیکند
3. متغیرها: در مورد متغیرها در آینده صحبت خواهیمکرد.
متغیرها
مسلما برنامهنویسی چاپ نوشتهها در خروجی نیست و مطمئنا برای انجام کار مفیدی نیاز به دریافت اطلاعاتی از کاربر و یا ذخیرهی اطلاعات (چه به صورت موقتی (یعنی تا زمانی که برنامه در حال اجراست) و چه بهصورت دائم) وجود دارد.
متغیرها خانههایی از حافظهی موقت شما (RAM یا Random Access Memory) هستند که برنامهی شما میتواند اطلاعاتی را در آنها ذخیره کند. در اینجا لازم است کمی وارد بحث تئوری-تاریخی شویم.
متغیرها در زبانهای برنامهنویسی اولیه صرفا خانههایی از حافظه بودند که شما باید خودتان نوع و مقدار اطلاعاتی را که میخواستید در آنها ذخیرهکنید را تعیین میکردید. به این معنی که برنامهی شما دسترسی مستقیم به خانههای حافظه داشته و مقادیر آن را تغییر میداد.
این کار دردسرهای فراوانی به همراه داشته مثلا خالیکردن حافظهای که مورد نیاز نبوده برای افزایش فضای خالی و یا این که هر چیزی که در حافظه ذخیره میشده چند خانه از حافظه را اشغال میکرده و اطلاعات باید از کدام خانهی حافظه شروع شوند و …
به همین دلیل در زبانهای برنامهنویسی جدیدتر مثل سی و سیپلاسپلاس (و البته پاسکال!) وظیفهی مدیریت حافظه به عهدهی کامپایلر است و نه به عهدهی برنامهنویس و در اینجا مفهوم متغیر تعریف شد. این ویژهگی باعث میشود دست برنامهنویس برای تغییر در خانههای حافظه بستهشود ولی در عوض کارش خیلی آسانتر شود (البته در زبانهای سی و سیپلاسپلاس هنوز هم به نوعی میتوان به حافظه دسترسی مستقیم داشت).
نوع متغیرها
کامپایلر برای مدیریت حافظه نیاز دارد تا بداند هر متغیر شما از چه نوعی است. یا به بیان دیگر نیاز دارد تا بداند برای هر متغیر چند خانه از حافظه را باید تا اشغال کند. به همین دلیل در هنگام تعریف متغیر نیاز است تا نوع آن را مشخص کنیم.
متغیرها در پاسکال
مسلما برای استفاده از متغیرها در پاسکال باید ابتدا آنها را تعریف کنیم. در پاسکال متغیرها در پاسکل باید قبل از شروع برنامه تعریف شوند. متغیرها پس از کلیدواژه Var تعریف میشوند. برای تعریف آنها از ساختار زیر استفاده میکنیم:
که ابتدا نام متغیر و پس از : نوع آن را تعیین میکنیم (نقطهویرگول فراموش نشود!)
کامپایلر پاسکال در محیط DOS اجرا میشود و بنابراین معماری آن ۱۶ بیتی است. در معماری ۱۶ بیتی هر متغیر عدد دو بایت (۱۶ بیت) فضا اشغال میکند
نوع متغیر
متغیرها در پاسکال انواع مختلفی دارند که برای شروع چندتایی از آنها را به شما معرفی میکنیم.
- عدد صحیح: برای ذخیرهسازی اعداد صحیح میتوانید از نوع integer استفاده کنید. کامپایلر پاسکال در محیط DOS اجرا میشود و بنابراین معماری آن ۱۶ بیتی است. در معماری ۱۶ بیتی هر متغیر عددی دو بایت (۱۶ بیت) فضا اشغال میکند بنابر این حداکثر مقدار برای آن در صورتی که فقط از اعداد طبیعی استفاده کنیم ۶۵۵۳۶ است (۰ جزو اعداد طبیعی نیست) بنابراین نوع integet میتواند بازهی -۳۲۷۶۸ تا ۳۲۷۶۸ را شامل شود. (۱۵ بیت برای عدد و ۱ بیت برای علامت آن!)
- عدد حقیقی: برای اعداد حقیقی از نوع real استفاده کنید. این متغیر بر اساس پلتفرمی که با آن برنامه مینویسید ۴ یا ۸ بایت فضا اشغال میکند و میتواند بازهی -۲.۹ ۱۰۳۹ تا ۱.۷ × ۱۰۳۸ را شامل شود.
- رشتهی متنی: برای ذخیرهسازی متنها میتوانید از نوع string بهره بگیرید. این نوع ۱۰ بایت فضا اشغال میکند.
- مقدار بولین (Boolean) : برای ذخیرهسازی مقدار درست (true) یا غلط (false) بهکار میرود.
- یک کارکتر: برای ذخیرهسازی یک کارکتر مثل ‘a’ یا ‘2’ و یا کارکترهای ASCII دیگر استفاده میشود.
و انواع دیگری نیز وجود دارند که بعدا به آنها میپردازیم.
دریافت یک ورودی از کاربر
برای دریافت ورودی از کاربر نیاز است که ابتدا متغیری برای آن ورودی در نظر بگیریم. به عنوان مثال در برنامهی زیر
- ابتدا متغیر a را از نوع عددی تعریف میکنیم
- سپس به کمک دستور readln از کاربر مقداری میگیریم و آن را در a میریزیم(readln این کارها را برایمان انجام میدهد)
- به کمک دستور writeln مقدار گرفتهشده را چاپ میکنیم.
- دستور readln() برای این به کار میرود تا پس از چاپ متغیر a از برنامه خارج نشویم بلکه برنامه منتظر بماند تا ما کلید اینتر را فشار دهیم. به این منظور که نتیجهی نهایی را ببینیم و کامروا از برنامه خارج شویم!
توجه در این برنامه درصورتی که کاربر مقداری غیر از مقدار عددی وارد کند برنامه خارج میشود!
تابع read و readln
این دو تابع که تفاوتشان این است که در read فقط اولین کارکتری که کاربر وارد میکند خوانده میشود ولی در readln تمام کارکترهایی که وارد میشود تا قبل از زدن دکمهی اینتر در متغیر ریخته میشود، برای گرفتن ورودی از کاربر به کار میروند و به صورت readln({varName}); به کار میروند. و همانطور که اشاره کردیم میتوان readln را بدون متغیر نیز استفاده کرد و در این صورت ورودیهای کاربر در جایی ذخیره نمیشوند.
تعیین مقدار برای متغیر
شما میتوانید مقدار متغیرهایتان را بهصورت دستی نیز تنظیم کنید. برای اینکار از varName:=Value; استفاده میشود. مثال زیر را در نظر بگیرید:
- ابتدا متغیرهای a و b را تعریف کردهایم (نکته: برای تعریف چند متغیر از نوع یکسان میتوان نامهای آنها را با , ازهم جدا کرد و سپس نوع آنها را نوشت (مثل بالا))
- سپس a را از کاربر گرفتهایم.
- b را برابر با a قرار دادهایم.
- سپس b را چاپ کردهایم.
- با کمک عبارات ریاضی مقدار b را تغییر دادهایم و سپس آن را چاپ کردهایم.
- در دستور writeln از عبارات ریاضی همراه با متغیرها استفاده کردهایم و مقدار دیگری را چاپ کردهایم.
- از readln() برای مشاهدهی نتیجه استفاده کردهایم.
فکر میکنم برای بخش نخست کافی باشد. اگر سوالی دارید میتوانید در دیدگاه خود آن را بیان کنید و ما در کوتاهترین زمان به شما پاسخ میدهیم.
نوبت شما
بد نیست شما هم کمی جستوجو کنید و سوالات زیر را حل کنید. پاسخهای خود را نیز در دیدگاه قرار دهید(خواهشا در عجوبه، استکاورفلو و یا هر سایت پرسشوپاسخ در این زمینه سوال مطرح نکنید! (مطمئنا امتیاز منفی میگیرید!)). پاسخ صحیح را در بخش بعدی منتشر خواهیم کرد!
- ب.ب.ک (برنامهای بنویسید که) دو متغیر از نوع string ار کاربر گرفته و آنها را باهم جمع کند و چاپ کند.
- ب.ب.ک میانگین حقیقی دو عدد صحیح را چاپ کند. (a,b:integer; avg:real;)
- ب.ب.ک نام کاربر و سن او را گرفته و آیدی به صورت نام+سن چاپ کند (name:string; age:integer;)