نکات برنامه نویسی به زبان پاسکال (قسمت دوم)


در زبان پاسکال :

- داده های شمارشی (Enum) به ترتیب از 0 شماره گذاری می شوند و از این طریق قابل دسترس هستند.
- متغیر های داده های شمارشی را نمیتوان مستقیما با دستور Read یا Write به کار برد.

- یک مجموعه حداکثر می تواند 256 عضو داشته باشد؛ پس نمیتوان انها را از نوع integer یا real یا انواع گسترده دیگر انتخاب کرد.

- جابه جایی و تکرار در مجموعه ها بی تاثیر است.

- در پاسکال عملیات اجماع، اشتراک و تفاضل بر روی مجموعه ها قابل انجام است و اینکار به ترتیب با عملگر های + ، * و - انجام می شود.

- "رکورد" ها در زبان پاسکال در نقش "ساختار" ها یا "کلاس" ها در زبان C++ یا C شارپ هستند. کلمه ی End ، انتهای فیلد های یک رکورد را مشخص می کند.

- فیلد های یک رکورد نمیتوانند از نوع همان رکورد باشند ولی میتوانند از نوع یک رکورد دیگر باشند. برای دسترسی به فیلد های یک رکورد از عملگر ( . ) استفاده می شود.

- یک رکورد برای ارسال به تابع، باید در قسمت type تعریف شده باشد.

- تعداد تکرار یک الگوریتم (مجموع تعداد تکرار حلقه ها) مرتبه ی الگوریتم را تعیین میکند. هر چه مرتبه و پیچیدگی یک الگوریتم کمتر باشد سرعت اجرای بهتری دارد.

- توابع تنها میتوانند یک مقدار را برگشت دهند و نوع بازگشتی آنها نمیتواند از نوع رکورد یا آرایه باشد.

- متغیر های بولین قابلیت خوانده شدن از ورودی را نداردند. مقدار "True" بزرگتر مساوی "False" است.

True > False

- کلمات کلیدی زبان پاسکال را نمیتوان برای نامگذاری ها به کار برد؛ ولی نام توابع و روال ها و ... میتوانند برای نام گذاری استفاده شوند. در این صورت عملکرد اصلی انها لغو خواهد شد؛ ولی این کار توصیه نمی شود.

برترین کامپیوتر های دوستدار محیط زیست در Green 500


احتمالا با سایت Top 500 اشنایی دارید. سایتی که لیستی از 500 ابرکامپیوتر برتر جهان ، به همراه اطلاعاتی در مورد هر یک از آنها در اختیار شما قرار می دهد. این سایت متلعق به پروژه ای به همین نام است که در سال 1993 ایجاد شده است و هدف آن رتبه بندی قویترین کامپیوتر های (غیر توزیعی یا غیر شبکه ای) جهان است.

Green 500 پروژه مرتبط دیگری است که هدف آن رتبه بندی ابرکامپیوتر های جهان بر اساس نسبت عملکرد به مصرف، یا بازدهی است. ابر کامپیوتر ها معمولا مصرف بسیار بالایی دارند و کاهش توان مصرفی در کنار افزایش قدرت محاسبه، یکی از مهمترین اهداف سازندگان آنها است. در سایت Green 500 علاوه بر رتبه بندی کامپیوتر های قدرتمند جهان، اطلاعات بسیار زیاد دیگری موجود است که می تواند برای علاقه مندان جالب باشد.
 

حماسه ای که پا را از ژانر "ابرقهرمانی" فراتر گذاشت.


هر وقت یک فیلم ابر قهرمانی مانند مرد عنکبوتی، مرد آهنی، سوپر من و ... اکران می شود، همه می دانیم که با فیلمی طرف هستیم که برای چند ساعت ما را در دنیای فیلم با قدرت های ماورایی قهرمان داستان و جلوه های بصری خیره کننده، سرگرم و ما را از مشکلات دور و ورمان خلاص می کند! ولی هیچگاه انتظار نداریم که با یک فیلم فلسفی روبه رو شویم که بخواهد ما را بعد از دیدن آن تا مدت ها به فکر فرو برد. شاید روال استاندارد این فیلم ها (که معمولا بودجه ی بالایی هم دارند) همینطور است و هدف آنها نیز چیزی به جز این نیست. ولی واقعا چرا ؟ آیا یک فیلم ابر قهرمانی نمیتواند یک شاهکار هنری باشد ؟ آیا یک بلاک باستر نمیتواند در بردارنده ی مفاهیم عمیق فلسفی و حماسی باشد ؟ آیا یک فیلم ابر قهرمانی نمیتواند توانایی نامزدی و دریافت جوایز هنری را داشته باشد ؟ جواب این سوال این است : "بله، به شرطی که پا را از ظواهر فراتر گذارد..." و این چیزی است یک فیلم و یک کارگردان آن را به جهان آموخت...


بتمن، حماسه ای که پا را از ژانر "ابرقهرمانی" فراتر گذاشت.

این چیزی بود که در سال 2005 با دیدن فیلم "بتمن آغاز می کند" شاهد آن بودیم. آقای "کریستوفر نولان" به همه نشان داد که یک فیلم ابرقهرمانی و پلاک باستر هم می تواند در پس ظاهر پر زرق و برقش دارای داستانی قوی همراه مفاهیم ارزشمند باشد. سال 2008 دومین قسمت از این سری، یعنی شاهکار "شوالیه تاریکی" مهر تاییدی بر این موضوع زد و تمجید ها و تحسین ها منتقدان را سبب شد. حالا دیگر با چنان فیلمی روبه رو بودیم که از آمدن نسخه ی بعدی آن ترس داشتیم، شاید که نسخه بعدی نتواند این موفقیت را تکرار کند و تجربه کم نظیری که از شوالبه تاریکی داشتیم را تحت تاثیر قرار دهد. حالا چهار سال بعد از آن واقعه که نگاه خیلی ها به ژانر ابرقهرمانی را تغییر داد، قسمت سوم و پایانی بتمن از راه رسیده است و می توانیم بگوییم بتمن یک روال دیگر را هم تغییر داد : "زوال سه گانه ها در قسمت آخر".
شاید بیشتر از همه باید به کریستوفر نولان آفرین گفت که شهامت ساخت نسخه ی سوم را داشته است، آن هم پس از آن همه انتظاری که با دیدن قسمت دوم از فیلم می رفت. شاید قسمت سوم بتمن نتوانسته از قسمت دوم بالاتر رود ولی چیزی از قسمت دوم هم کمتر ندارد. کریستوفر نولان کسی نیست که کیفیت را فدای کمیت کند، این در فیلم های او مشخص است. وی در استفاده از امکانات نه کم کاری میکند نه اغراق. او از گروهی از بهترین بازیگران سینما استفاده می کند، آهنگ سازی توانا همچون هانس زیمر را انتخاب می کند، جلوه های بصیری خیره کننده ای را به نمایش می گذارد ولی در چیزی اغراق نمی کند، ولی در نهایت داستان بی نقصی که می نویسد باعث می شود تا چنین شاهکار هایی از او را شاهد باشیم.


حالا دیگر می توانیم امید وار باشیم که فیلم های بلاک باستر هم فلسفی و پر محتوا باشند و این را مدیون این سه گانه ی ارزشمند سینما هستیم. ارزش کار آقای نولان فقط در این نبود که یک "شاهکار" از خود به جا گذاشت، ارزش اصلی کار او این بود که این شاهکار را از یک فیلم ابرقهرمانی ساخت و کاری را انجام داد که خیلی تصورش را هم نمی کردند.  
 

مرتب سازی انتخابی - Selection Sort


مرتب سازی انتخابی یا Selection Sort یکی از ساده ترین روش های مرتب سازی یک آرایه یا لیست است. اگر لیست مورد نظر برای مرتب سازی در این روش دارای n عضو باشد، در حالت کلی تعداد n² مقایسه مورد نیاز است و n بار نیز جابه جایی صورت می گیرد.
در این الگوریتم ابتدا کوچکترین عضو لیست جست و جو و به خانه اول لیست آورده شده، سپس دومین عضو کوچک جست و جو شده و به خانه ی دوم لیست آورده می شود و این روال تا رسیدن به خانه ی آخر لیست (مرتب شدن کامل لیست) ادامه پیدا می کند. یعنی در هر بار به دنبال کوجکترین عضو از باقی مانده ی لیست هستیم و آن را در مکان مناسب قرار می دهیم. پیاده سازی این الگوریتم بسیار ساده است ولی در حالت کلی سرعت الگورینم برای لیست های بزرگ مناسب نیست. در زیر پیاده سازی این الگوریتم در زبان C++ را مشاهد می کنید.
min : کوچکترین عضو لیست.
index : شماره خانه ی کوچکترین عضو لیست.
List : آرایه ی مرتب نشده ورودی.



int min = 0;
int index = 0;
for (int i=0; i < List - > Length - 1; i++)
{
   min = List[i];
   index = i;
   for (int j=i+1; j < List - > Length; j++)
   {
 
if (List[j] < min)
{
min = List[j];
index = j;
}
   }
   List [index] = List[i];
   List[i] = min;

}

میراث لینکین پارک Linkin Park - What I've Done



What I've Done به معنی "آنچه انجام داده ام" (یا "چه کردم؟") نام آهنگی از البوم سوم لینکین پارک به نام Minutes to Midnight (دقایقی تا نیمه شب) است. 
ویدئو :
ویدئو ی این ترانه، به موضوعات و مشکلات دنیای امروز به خصوص نابودی محیط زیست به دست ما انسان ها اشاره داره و در یک کلام ترجمه ی تصویری متن ترانه است. "خدایا من چکار کرده ام ؟" ، "تنها ترحم تو می تونه کارهای زشتم رو پاک کنه". روحیه ضد جنگ در خیلی از آهنگ ها و ویدئو های لیلکین پارک دیده میشه؛ این آهنگ هم مستثنا نیست، موزیک ویدئو این آهنگ فقر، نابودی محیط زیست، جنگ، نژاد پرستی و بسیاری دیگر از جنایاتی که بشر به خود و محیط زیست کرده است را به ما گوشزد می کند که با فریاد های چستر از پشیمانی و افسوس همراه است. و در انتها با اراده و تصمیم برای مقابله با این اقدامات و جبران گذشته به پایان می رسد و رویش دوباره گیاهان به انسان امید می دهد که اگر مصمم به جبران اشتباهات گذشته و تغییر در خود باشد می تواند این رویه را تغییر دهید.

متن و ترجمه آهنگ What I've Done :
(خطوط موقوف المعانی یکجا ترجمه شده اند)
Lyrics.Wikia.Com


In this farewell - در این وداع
There's no blood - هیچ خشونتی نیست
There's no alibi - هی عذر و بهانه ای نیست
'Cause I've drawn regret
From the truth
Of a thousand lies - چرا که من پشیمانی را از حقیت هزاران دروغ پنهان کردم

So let mercy come
And wash away... - پس بگذار بخشش بیاد و با خودش اینها رو پاک کنه

What I've done - من چیکار کردم ؟
I'll face myself - من جلوی خودم می ایستم
To cross out what I've become -  تا اون چیزی که بهش تبدیل شدم رو برچینم (خودمو تغییر بدم)
Erase myself - تا خودمو پاک کنم
And let go of what I've done - و کار های که کردم رو ترک کنم

Put to rest
What you thought of me - چیزی که در مورد من فکر می کردی رو فراموش کن ...
While I clean this slate
With the hands
Of uncertainty - ... در حالی که من این لوح رو با دستان بلاتکلیفی (تردید) پاک می کنم

So let mercy come
And wash away... - پس بگذار ترحم بیاد و با خودش اینها رو پاک کنه

What I've done
I'll face myself
To cross out what I've become
Erase myself
And let go of what I've done

For what I've done - به خاطر کار هایی که تا حالا انجام دادم (برای جبران اون ها)
I'll start again - دوباره شروع خواهم کرد
And whatever pain may come -
Today this ends - و هر چقدر هم زجر بکشم، این رویه امروز به پایان می رسه
And forgiving what I've done - و کارهایی که انجام دادم رو می بخشم

I'll face myself
To cross out what I've become
Erase myself
And let go of what I've done (Na na na na, na na na na, na na na na, na na na na)
What I've done (Na na na na, na na na na, na na na na, na na na na)
Forgiving what I've done (Na na na na, na na na na, na na na na, na na na)


ایجاد یک برنامه Windows Forms C++/CLI در Visual Studio 2012

 
یکی از راه حل ها برای ایجاد یک برنامه Windows Forms در محیط Visual Studio 2012 این است که ابتدا یک برنامه CLR خالی (Empty) ایجاد کنید و سپس اجزای Windows Forms را به آن اضافه کنید. برای این کار مراحل زیر را دنبال کنید.

گام 1 :
ابتدا از منو گزینه ی New Project را انتخاب کرده و از بخش C++ - > CLR یک پروژه ی Empty CLR ایجاد کنید.

گام 2 :
پس از باز شدن پروژه، از منو Project گزینه ی Add New Item را انتخاب کنید و پس از آن در قسمت UI گزینه ی Windows Form را انتخاب کنید.

گام 3 :

در قسمت Solution Explorer بر روی پروژه ی خود کلیک راست کرده و Properties را انتخاب کنید. به قسمت Linker - > System بروید و SubSystem را بر روی گزینه ی Windows (/SUBSYSTEM:WINDOWS) قرار دهید. سپس به بخش Advanced رفته و در قسمت Entry Point عبارت main را وارد کنید و OK را کلیک کنید.

گام 4 :

در فایل .cpp فرمی که ساخته اید پس از دستور include کد های زیر را اضافه کنید.


using namespace System;
using namespace System::Windows::Forms;

[STAThread]

void main (array ^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

Project1::MyForm form;
Application::Run(%form);

}

Project1 : نام پروژه

MyForm : نام فرم 

form : شی کلاس MyForm



حالا میتوانید پروژه ی خود را build کرده و امتحان کنید. اگر مراحل را به درستی انجام داده باشید بایستی بدون مشکل برنامه با فرمی که ایجاد کرده اید اجرا شود.

آموزش تصویری این کار را میتوانید در این صفحه مشاهده کنید.
www.youtube.com/watch?v=U14ZpnAmoXg

توابع پیش ساخته زبان پاسکال

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



Abs : بازگرداندن قدر مطلق پارامتر ارسالی

Sin, Cos, ArcTan, ... : محاسبه نسبت مثلثاتی دلخواه برای پارامتر ارسالی

Exp : عدد نپر را به توان پارامتر ارسالی می رساند (e = 2.71)

frac : بازگرداندن قسمت اعشاری یک عدد اعشاری

trunc : بازگرداندن قسمت صحیح یک عدد اعشاری

int : بازگرداندن قسمت صحیح یک عدد اعشاری

InResult : بازگرداندن آخرین عملیات ورودی / خروجی

Ln : محاسبه لگاریتم یک عدد اعشاری را در مبنای عدد نپر

odd : بررسی فرد بودن یک عدد صحیح

Ord : بازگرداندن کد اسکی یک متغیر کاراکتری

Pi : بازگرداندن عدد پی

Pred : بازگرداندن مقدار قبلی پارامتر ارسالی

suce : بازگرداندن مقدار بعدی پارامتر ارسالی

Random : تولید اعداد تصادفی تا مرز پارامتر ارسالی (بدون پارامتر محدوده ی اعداد بین صفر تا یک خواهد بود)

Round : گرد کردن یک عدد اعشاری

sqr : محاسبه ی مجذور یک عدد اعشاری یا صحیح

sqrt : محاسبه جذر یک عدد اعشاری یا صحیح

chr : بازگرداندن معادل کاراکتری کد اسکی

Upcase : تبدیل کاراکتر به حرف بزرگ

بی انصافی های ماکروسافت نسبت به C++/CLI !


کسی که به دنبال ساخت برنامه های کاربری به وسیله C++/CLI در ویژوال استدیو هستند تا به حال با دو شک بزرگ پس از نصب ویژوال استدیو روبه رو شده اند! یکی در ویژوال استدیو 2010 و دیگری در ویژوال استدیو 2012 .
اولین آنها حذف قابلیت کاربردی "اینتلیسنس" یا "خود تکمیلی" در ویژوال استدیو 2010 برای زبان C++ بود که امروزه یکی از قابلیت های اساسی برای برای برنامه نویسان به حساب می آید! تا جایی که من می دانم دلیل اینکار مشکلات فنی و زمانی اعلام شده بود و قول داده شده بود تا حداقل در نسخه های دیگر این مشکل برطرف شود و البته هم این طور شد.
دومین شکی که احتمالا به برنامه نویسان C++/CLI وارد شده حذف گزینه ی ایجاد برنامه های Windows Forms به زبان C++ است که با نصب ویژوال استدیو 2012 با آن روبه رو می شوید. دلیل این کار هنوز به طور قطعی مشخص نیست ولی این که گفته شده "توصیه نمیشود که برنامه های گرافیکی جدید را با این گزینه ایجاد کنید" ! البته هنوز میتوان برنامه هایی که از قبل با این گزینه ایجاد شده اند را در ویژوال استدیو 2012 باز کرد و آنها را ویرایش کرد و به آنها افزود ولی گزینه ی ایجاد یک برنامه C++/CLI در قالب Windows Forms حذف شده است.
یکی از اولین راه حل هایی که به ذهن می آید ایجاد این برنامه در نسخه های قبلی ویژوال استدیو و انتقال انها به ویژوال استدیو 2012 است. (هرچند زیاد دلچسب به نظر نمیرسد!). ولی نگران نباشید هنوز راه حل هایی برای ایجاد برنامه های C++/CLI در قالب Windows Forms وجود دارد که می توان انها را اینترنت پیدا کرد و ما هم در پست های بعدی به سراغ آنها می رویم. نمیتوان با قاطعیت گفت که دلیل اصلی این اقدامات از طرف ماکروسافت چیست، آیا دلایلی علمی پشت سر آنهاست یا این بخشی از سیاست های ماکروسافت برای کشاندن برنامه نویسان به سمت C# است...

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

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

در زبان پاسکال :

- برای برنامه نویسی در محیط ویندوز باید دستور uses wincrt را به برنامه اضافه کرد.

- هر دستور به سمیکالن ( ;) ختم می شود.

- بعد کلمات کلیدی مانند for ، if و else ، سمیکالن قرار نمی گیرد.

- هر بلوک داخل یک Begin و End قرار می گیرد و پس از End سمیکالن نیاز است.

- End اخر برنامه باید منتهی به نقطه ( .) باشد نه سمیکالن.

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

- استفاده از جای خالی (space) و پرانتز بین نام ها ممکن نیست.

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

- توضیحات برنامه درون اکولاد {} قرار می گیرد.

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

- در دستور Case تنها حالت تساوی متغیرها بررسی می شود و عملگر های دیگر معنایی ندارند.

- در دستور Case نیازی نیست که در پایان هر خط، دستور break استفاده شود.

- دستور Repeat نیازی به تعریف بلوک به صورت Begin و End ندارد و تمام دستوراتی که در بین Repeat و Until باشند اجرا خواهند شد.

- اندیس آرایه ها الزاما از یک (1) شروع نمیشود و میتواند از اعداد منفی نیز شروع شود.

- هر متغیر تنها در بلوکی که تعریف شده است اعتبار دارد و خارج از آن، ناشناخته است.

- متغیر ها نمیتوانند حاوی مقادیری شوند که از ظرفیت انها بیشتر است یا از نوع انها نیست.

- در توربو پاسکال اعلان نام برنامه اختیاری است و همچنین آرایه های تعریف شده به صورت فشرده (Packed) در نظر گرفته می شوند.

اصول زبان برنامه نویسی پاسکال (قسمت اول)


کسانی که رشته ی آنها کامپیوتر است در کتاب مبانی برنامه سازی با زبان پاسکال آشنا می شوند. این درس به گونه ای مقدمه و پایه ای برای برنامه سازی پیشرفته به حساب می آید. نحو این زبان نیز تا حدودی مشابه زبان C++ است و یادگیری آن باعث تسریع در یادگیری زبان های دیگر می شود. البته پاسکال یک زبان سطح بالا و C++ یکی زبان سطح میانی است و از آن مهمتر پاسکال یک زبان رویه ای و C++ یک زبان شی گرا است. (البته نسخه شی گرایی از زبان پاسکال به نام Object Pascal ارائه شده است). به هر حال دیدم حالا که این کتاب را می خوانم بد نیست تا اصول و نکات برنامه نویسی در این زبان را در چند پست یادآوری کنم تا شاید برای کسانی که به دنبال یادگیری این زبان هستند مفید واقع شود.
ساختار کلی برنامه در زبان پاسکال به صورت زیر است :


عنوان برنامه
تعاریف برنامه
Begin
متن و دستورات برنامه
End.

عنوان برنامه یک شناسه برای برنامه به حساب می آید. عنوان برنامه به وسیله کلمه کلیدی Program تعریف می شود و نام برنامه پس از آن تعریف می شود. در "توربو پاسکال" اعلام نام برنامه یک امر اختیاری است ولی بهتر است این کار صورت گیرد تا خوانایی برنامه بیشتر شود. معمولا بعد از آوردن نام برنامه پارامتر هایی را در یک پرانتز می آورند تا وضعیت ورودی یا خروجی بودن برنامه مشخص گردد. برای مثال در زیر اعلان عنوان برنامه ای که فقط ورودی دریافت می کند را مشاهده می کنید.

Program Example (Input);


تعاریف برنامه شامل تعریف متغیر ها، ثابت ها، انواع و برچسب ها می شود. در پاسکال تعریف یک متغیر در حالت کلی به صورت زیر است. ابتدا از کلمه کلیدی Var استفاده می شود و پس از آن نام متغیر و سپس نوع آن آورده می شود. 

Var
نوع متغیر : نام متغیر ; 


بدنه ی برنامه شامل کد ها و دستورات برنامه می شود و بین دو کلمه ی Begin و End قرار می گیرد. در حالت کلی Begin و End نقش اکولاد {} را در زبان پاسکال ایفا می کنند و در هنگامی که بخواهید یک بلوک کد ایجاد مورد استفاده قرار می گیرند. به این تفاوت که End در پایان برنامه حتما باید همراه با نقطه ( . ) باشد.
بسیاری از قوائد نحوی زبان پاسکال با زبان C++ مشترک هستند مانند قوائد نام گذاری، استفاده از ویرگول ( ,) یا نقطه ویرگول ( ;) یا برخی از عملگر ها و کلمات کلیدی ... که در پست های بعدی به آنها بیشتر خواهیم پرداخت. عملگر های بیتی در نحو کمی با زبان C متفاوت هستند. عملگر های بیتی پاسکال عبارتند از :

AND : و
OR : یا
XOR : یا انحصاری
NOT : نقیض
Shl : شیفت به چپ
Shr : شیفت به راست

کاربرد عملگر های بالا نباید به عملگر های منطقی and ، or و not اشتباه گرفته شود. عملگر های محاسباتی پاسکال نیز مانند عملگر های C است و علاوه بر عملگر تقسیم ( / ) ، دارای عملگر div نیز می باشد که فقط برای تقسیم اعداد صحیح به کار می رود.
دستور if که یکی از کاربردی ترین دستور های هر زبان برنامه نویسی است در زبان پاسکال به صورت زیر است.

if
    عبارت شرطی یا منطقی  
then
   دستورات     
else if
   عبارت شرطی یا منطقی
then
   دستورات 
.
.
.
esle
  دستورات  ;