سری جدیدی از آموزشهای برنامهنویسی آغاز شده است. این سری منقضی شده است. پیشنهاد میکنیم این سری را ادامه ندهید!
در بخش قبل در مورد زبانهای برنامهنویسی توضیحاتی دادیم. بهتر است سراغ بخش عملی کار برویم!
در نظر داریم برای شروع آموزش از زبان پاسکال استفاده کنیم که ساختیافتهترین زبان برنامهنویسی است.
برای کامپایل کدهای پاسکال نیاز به کامپایلر و محیط برنامهنویسی 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;)
با سلام و تشکر
با دیدن این مطالب علاقه قدیمی من به یادگیری برنامه نویسی دوباره زنده شد،
یه سؤال:
Turbo Pascal هم کامپایلره؟ میتونم از این به جای FreePascal استفاده کنم؟
لطفا یه لینک دانلود FreePascal معرفی کنید.
موفق باشید…
FreePascal یه نسخهی سازگار باز نسخههای جدید ویندوزه و توربو پاسکال با یکسری از سیستمعاملها کار نمیکنه ولی در کل فرقی ندارن! (البته FreePascal خوشگلتر هم هست)
لینک دانلود هم قرار بوده اونجا باشه ولی نیست! الان درستش میکنم
سلام
ممنون از تلاشتان برای ایجاد بخش برنامه نویسی
خواهش می کنم این بخش را حذف نکنید خواهش می کنم
من فری پاسکال را دانلود کردم بعد نصب کردم خودم این قدر با محیط برنامه کلنجار رفتم تا یک تسلط خیلی کم نسبت به بخش های محیط برنامه پیدا کردم خواستم سوالاتم را در مورد محیط برنامه بپرسم گفتم الان موقع امتحاناتتان است خودم دست به کار شدم
از برنامه های ساده شروع کردم در همان برنامه های ساده به مشکل برخوردم مثلا خروجی را نمی دیدم و…این قدر این ور اون ور گشتم تا کم کم خودم فهمیدم
تازه این قسمت را تمام کردم می خواهم روی سوالاتی که دادید فکر کنم
کلی سوال در بخش صفرم هم دارم
فقط این بخش برنامه نویسی را حذف نکنید اگر برایتان مهم است که یک نفر پیگیر این اموزش هاست
سلام.
خوشحالم که شما بخش برنامهنویسی رو دنبال میکنید.
برنامهی دقیق این بخش رو احمدعلی میدونه، ولی کلیت ماجرا اینه که این بخش ادامه خواهد داشت، و مطالبش با تفصیل بیشتر ارائه خواهند شد.
این که خودتون گشتید و چیزهایی فهمیدید خیلی خوبه! همینطور ادامه بدید!
امتحانهای ما هم تموم شده :) به این ترتیب ادامهی این سری (احتمالاً با رویکرد کمی متفاوت) به زودی منتشر بشه.
موفق باشید!
سلام
اول از همه این که واقعا عالیه چون تقریبا ناامید شده بودم که کسی این آموزشها رو پیگیری کنه. :D
دوم اینکه این بخش قرار نبوده حذف بشه. همین امشب یک نوشته مینویسم و توش توضیح میدم که قراره چه تغییراتی داشته باشیم.
سوم: در بخش «دریافت ورودی از کاربر» توضیح شمارهی پنجم گفتم که برای اینکه پس از انجام کارها از برنامه خارج نشه از readln() استفاده میکنیم. فکر کنم منظورم رو درست نرسوندم! (پس از اتمام این دیدگاه اول از همه این نوشته رو ویرایش میکنم!)
چهارم: واقعا خوبه که خودتون در جستوجوش بودید. موفق باشید و من (و به احتمال زیاد دوستان دیگه) هم سعی میکنیم به شما کمک کنیم.
سلام، برنامه نویسی به قدری در دنیای امروز تکنولوژی مهم هست که تقریبا همه ی شرکت های بزرگ و کوچک به دنبال برنامه نویس های خلاق هستن. خوشحالم که یه وبلاگ ایرانی به صورت حرفه ای روی این قضیه کار می کنه. سعی کنید ویژگی خلاق بودنتون رو حفظ کنید.
با سلام
تشکر میکنم از بیان ساده و قابل فهم اموزش های برنامه نویسی
سلام
ممنون از آموزشی که قرار دادین
اما هیچکدوم از عکس ها لود نمیشن :(
این آموزش اصلا عکسی نداره!
در ضمن همونطور که در ابتدای نوشته میبینید سری جدید آموزشها شروع شده که بهتره با اون شروع کنید.
سلام خیلی ممنون از مطالب خوبتون خیلی مفیدن
سلام اموزش ساده و عالی بود من می خوام از برنامه سی شروع کنم تا با مفاهیم اشنا شوم