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

آنچه در این مقاله مورد بررسی قرار گرفته ترکیبی از شباهتا و تفاوتهای زبانهای دلفی و پاسکال است، دلفی در حقیقت یک کامپایلر پاسکال است. دلفی از نسل جدید کامپایلر های پاسکال است که شرکت برلند از زمان ایجاد اولین نسخه پاسکال از زمانی که اولین نسخه پاسکال ارائه شد به بازار عرضه گردید. برنامه نویسی به زبان پاسکال در سالیان سال از استواری و ثبات، زیبایی و ظرافت و البته سرعت بالای کامپایل سود برده است. دلفی هم از این قاعده مستثنی نیست. کامپایلر دلفی ترکیبی از بیش از یک دهه تجربه طراحی کامپایلر پاسکال و معماری بهبود یافته کامپایلر های 32 بیتی است. اگرچه قابلیت های کامپایلرها با گذشت زمان پیشرفت قابل توجهی داشته است ولی سرعت آن چندان کاهش نیافته و همچنان از سرعت بالایی برخوردار است. به علاوه استحکام و قدرت کامپایلر دلفی معیاری برای سنجش دیگر کامپایلر هاست. 


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


سال 1995 Delphi1

در زمان استفاده از سیستم عامل DOS برنامه نویسان مجبور بودند از بین زبان پر قدرت ولی کم سرعت Basic و زبان کارآمد ولی پیچیده و نامفهوم Assembly یکی را انتخاب کنند. پاسکال با ارائه یک زبان ساخت یافته و یک کامپایلر سریع و کم نقص این شکاف را پرکرد. برنامه نویسان Windows 3.1 هم با تصمیم گیری مشابهی رو برو شدند. یکی زبان قدرتمند و سنگین ++C و یکی زبان ساده و محدود کننده Visual Basic . 


ارائه Delphi1 در این مورد هم راه حل خوبی برای برنامه نویسان بود. دلفی مجموعه متفاوتی برای برنامه نویسی بود . طراحی و توسعه برنامه های کاربردی، ایجاد DLL ها، پایگاههای داده و ... که یک محیط ویژوال وسیع را تشکیل می داد. Delphi1 اولین ابزار برنامه نویسی ویندوز بود که محیط طراحی ویژوال، کامپایلر بهینه کد برنامه و دسترسی قوی به پایگاههای داده را در یک جا جمع کرد که آن را به یکی از بهترین ابزارهای روش نوین توسعه سریع نرم افزار (Rapid Application Development) تبدیل کرد. این مجموعه قدرتمند باعث شد که در همان زمان بسیاری از برنامه نویسان زبانهای دیگر به Delphi روی بیاورند و این موفقیت بزرگی برای Borland به حساب می آمد. همچنین بسیاری از برنامه نویسان پاسکال دلفی را ابزاری یافتند که توسط آن هم از توانایی و تجربه خود در برنامه نویسی پاسکال استفاده می کردند و هم توانایی کار در ویندوز را به دست آوردند. همچنین زبانی که در آن زمان با نام پاسکال شیئی (ObjectPascal) در دانشگاهها ایجاد شده بود یک زبان بسیار خشک و محدود کننده بود که اصلاٌ حالت کاربردی پیدا نکرد. 


ویژگیهای دلفی مثل طراحی ظاهری حساب شده و کاربر پسند آن باعث شد که زبان پاسکال شیئی عملاٌ از رده خارج شود. تیم طراحی VB در Microsoft قبل از حضور دلفی هیچ رقیب مهمی برای خود نمی دید. VisualBasic در آن زمان زبانی نا کارآ ، کم سرعت و کند ذهن بود. Visual Basic 3 در عمل اصلا توانایی رقابت با Delphi 1 را نداشت. در این سال شرکت Borland گرفتار یک سری مشکلات قضائی با شرکت Lotus بود که در نهایت هم متخلف شناخته شد. همچنین درگیری مشابهی هم با Microsoft بر سر تلاش در تغییر دادن فضای نرم افزار های Microsoft پیدا کرد. همچنین Borland مشغول طراحی و فروش طرح Quatro به شرکت Novell و طراحی پایگاه های داده dBase و Paradox بود که با استقبال قابل توجهی مواجه نشد. 


در این زمان که Borland مشغول فعالیتهای قضایی و تجاری بود Microsft توانست گوی سبقت را از Borland برباید و قسمت اعظم بازار ابزار های برنامه نویسی تحت Windows را در اختیار بگیرد و سعی می کرد تا این طرز فکر را اشاعه دهد که چون Windows را طراحی کرده صلاحیت و توانایی تهیه بهترین ابزار های برنامه نویسی تحت آن را نیز در دست دارد. در این شرایط Borland با عرضه Delphi و نسخه جدید ++Borland C سعی کرد خدشه ای در فرمانروایی Microsoft وارد کند و سهمی در بازار بزرگ این محصولات داشته باشد. 


سال 1996Delphi2

یک سال بعد Delphi2 تمام مزایای نسخه قبلی را تحت سیستم های جدید 32 بیتی (Windows 95,Windows NT) ارائه داد. همچنین Delphi2 با ارائه خصوصیات اضافه و کارکرد های قویتری نسبت به Delphi1 توانایی های خود را افزایش داد. (ازجمله ارائه کامپایلر 32 بیتی که سرعت بالایی به نرم افزار ها می بخشید، کتابخانه بزرگ و کاملی از اشیای مختلف، شیوه جدید و تکامل یافته ای برای اتصال به پایگاه های داده مختلف، ادیتور پیشرفته، پشتیبانی از OLE ، توانایی وراثت در فرمهای ویژوال و سازگاری با پروژه های 16 بیتی Delphi1 ). Delphi2 به معیاری برای سنجش و مقایسه همه ابزارهای توسعه نرم افزار در آن زمان تبدیل شد. 


در آن زمان با ارائه سیستم 32 بیتی Windows95جهش بزرگی در سیستم عامل Windows رخ داد و Borland بسیار مشتاق بود که Delphi را به بهترین ابزار برنامه نویسی سیستم جدید تبدیل کند. نکته این که در آن زمان به منظور تاثیر در افکار عمومی و تاکید بر قدرت Delphi در سیستم عامل 32 بیتی قرار بود که نرم افزار با نام جدید Delphi32 به بازار عرضه شود ولی در آخرین مراحل به خاطر اینکه نشان دهند این زبان زبانی رشد یافته و تکامل یافته نسخه قبلی یعنی Delphi1 است نام Delphi2 را برای آن انتخاب کردند. 


Microsoft تلاش کرد که با Visual Basic 4 با Delphi مقابله کند ولی از ابتدا کیفیت پایین آن و ضعف آن در انتقال برنامه های 16 بیتی به سیستم 32 بیتی و بروز اشکالات ساختاری در طراحی آن موجب شکست زودهنگام Visual Basic 4 شد. در این زمان هنوز تعداد زیادی از برنامه نویسان به Visual Basic وفادار بودند. Borland هنچنین روشها و ابزارهای قدرتمندی همچون PowerBuilder برای طراحی نرم افزار های Client/Server ارائه داد ولی Delphi هنوز آن قدر قدرتمند نشده بود که بتواند نرم افزارهایی که جایی در بین توسعه گران پیدا کرده اند را براندازد. 


سال 1997  Delphi3

از زمان تهیه و توسعه Delphi1 تیم توسعه Delphi در فکر گسترش و ایجاد یک زبان قدرتمند جهانی بود. برای Delphi2 این تیم تمام نیروی خود را صرف اعمال مربوط به انتقال تواناییها و کارکرد ها به سیستم 32 بیتی و همچنین اضافه کردن خصوصیات Client/Server و پایگاه داده کرد. در زمان تهیه Delphi3 تیم توسعه فرصت لازم برای گسترش مجموعه ابزار موجود را یافت و در این راستا کیفیت و کمیت ابزارهای Delphi بهبود یافت. به علاوه راه حل هایی برای مشکلات عمده و قدیمی برنامه نویسان تحت ویندوز ارائه شد. به ویژه استفاده از برخی فناوری های پیچیده و نا مفهوم (مثل COM و ActiveX وتوسعه نرم افزار های تحت Web وکنترل پایگاههای داده چند کاربره). روش نمایش کد برنامه همچنین توانایی کامل کردن خودکار کد (Code Completion) عملیات کد نویسی را راحت تر کرد. ضمن این که همچنان در بیشتر موارد اساس و متدولوژی برنامه نویسی مانند Delphi1 بود و بر پایبندی به قوانین اصولی Pascal تاکید می شد. 


در این زمان رقابت شرکت های تولید کننده ابزار های برنامه نویسی بسیار تنگاتنگ شده بود. Microsoft با ارائه Visual Basic 5 به پیشرفت های خوبی دست یافت ازجمله پشتیبانی قوی از COM و ActiveX و ایجاد برخی خصوصیات و تغییرات کلیدی و اساسی در کامپایلر VB. ضمن این در همین سال Borland با پشتوانه قوی Delphi و با استفاده از ساختار موفق آن ابزارهای دیگری همچون Forte و BC++ Builder به بازار عرضه کرد. 


تیم Delphi در زمان طراحی Delphi3 چند تن از اعضای کلیدی خود را از دست داد. Andres Hejlsberg معمار اصلی Delphi در اقدام غیر منتظره ای Borland را ترک کرد و تصمیم گرفت به رقیب دیرینه یعنی Microsoft بپیوندد. اما حرکت تیم Delphi متوقف نشد و معاون Hejlsberg که سالها تجربه همکاری با او را داشت توانست رهبری این تیم را به خوبی در دست بگیرد. همچنین مسئول فنی تیم (Paul Gross) هم در اقدام مشابهی به گروه Microsoft ملحق شد. این تغییرات بیشتر به خاطر اختلافات شخصی بین افراد تیم بود و نه به خاطر مسائل حرفه ای. 


سال 1998  Delphi4

Delphi4 بیشتر بر روی راحتتر کردن کار با دلفی متمرکز شد. مرورگر روال ها (Module Explorer) بهبود یافت و مرور و ویرایش Unit ها را راحت تر کرد. کنترل کد و کامل کردن خودکار کلاسها این فرصت را به کاربر داد که فکر و زمان خود را روی ساختار اصلی برنامه بگذارد و در وقت صرفه جویی کند. طراحی رابط کاربر هم کاملاٌ عوض شد و بهبود یافت و اشکال زدا (Debugger) نیز پیشرفت قابل توجهی داشت. Delphi4 قابلیتهای برنامه نویسان را در استفاده از تکنولوژیهای چند منظوره خارجی مثل MIDAS ، DCOM ، MIS و Corba افزایش داد. 


در این سال Delphi جایگاه خود را در رقابت با دیگران مستحکم کرده بود و کم کم به سمت دست یابی به سودآوری مالی مورد نظر خود پیش می رفت. در واقع در این زمان بود که حاصل کار سنگین چند ساله تیم نمایان می شد. بعد از سالها آزمایش Delphi شهرت و محبوبیت خاصی پیدا کرد و دیگر برنامه نویسان Delphi توانایی جدا شدن از آن را نداشتند. در این زمان Borland به کار سوٌال برانگیزی دست زد و به منظور تبلیغ بیشتر و برتری در جنگ روانی با دیگر شرکتها نام Inprise را برای فعالیتهای تجاری خود برگزید. 


ابزار های مربوط به فن آوری Corba را گسترش داد تا راه جدیدی برای سودآوری ایجاد کند. برای موفقیت در این زمینه Corba نیاز به رابط کاربر قدرتمندی داشت که در کنار توانایی های آن کار کردن با آن نیز راحت باشد. دقیقاٌ همان کاری که در سالهای قبل در مورد COM و برنامه نویسی تحت Web انجام شده بود و به موفقیت دست یافته بود. با این وجود بنا به دلایل مختلفی این گسترش و توسعه Corba هیچ وقت تکامل و موفقیتی که مورد نظر بود را به دست نیاورد و بر خلاف تبلیغات و سرمایه گذاری های انجام شده فن آوری Corba تنها توانست نقش کوچکی در روند رو به جلوی Delphi ایفا کند. 


سال 1999  Delphi5

Delphi5 در برخی زمینه ها پیشرفت های قبلی را ادامه داده است. اولاٌ مسیری را که Delphi4 با اضافه کردن ویژگیهای زیادی شروع کرده بود ادامه داد. Delphi4 باعث شد کارهایی که قبلاٌ به صرف وقت زیادی احتیاج داشت بسیار سریعتر انجام شود. Delphi به شکل امیدوار کننده ای به برنامه نویس این امکان را می دهد که بیشتر به برنامه ای که میخواهد بنویسد توجه کند و نه به قواعد برنامه نویسی و نوشتن کد های تکراری و خسته کننده. این ویژگیهای سودمند شامل رابط کاربر بهبودیافته و سیستم اشکال زدایی(Debugger) توانمند ، امکانات برنامه نویسی تیمی و ابزار های ترجمه می شود. 


ثانیا Delphi5 خصوصیات جدیدی را در بر می گیرد که توسعه برنامه های تحت وب را واقعاٌ راحت کرده است. این ویژگیها شامل طراح اشیای مربوط به ASP برای ساختن صفحات (Active Server Page)، اشیایی موسوم به Internet Express برای پشتیبانی از XML و خصوصیات جدید MIDAS که آن را به یک ابزار همه کاره در پایگاه های داده تحت Web تبدیل کرد. در نهایت با صرف وقت ، هزینه و صبر زیاد توانست Delphi5 قدرتمند را عرضه کند. این فعالیت مدتها به طول انجامید و قبل از عرضه عمومی، Delphi5 بارها در بازبینی ها و آزمایشهای داخلی قسمتهای مختلف آن تغییر کرد و بهبود یافت. 


Delphi5 در نیمه دوم سال 1999 به بازار عرضه شد و به نفوذ و تسلط بر بازار ادامه داد. در این زمان Visual Basic که کم کم به عضوی تحقیر آمیز برای Microsoft تبدیل می شد هم با پیشرفتهایی توانست در رقابت دوام بیاورد و از صحنه خارج نشود. در اقدام درست و به جایی نام Inprise دوباره به Borland بازگشت. این اقدام از سوی طرفداران و مشتریان قدیمی Borland با استقبال خوبی مواجه شد. 


سال 2001  Delphi6

در هنگام تهیه Delphi6 ساختار Delphi در زمینه های مختلف شکل گرفته بود و به یک تکامل نسبی رسیده بود. این مسئله باعث شد که تیم طراحی بتواند وقت خود را بر روی طرحی که مدتها تنها در حد یک نظریه بود بگذارد و آن را بسیار زودتر از آن که انتظار می رفت عملی کند: گام نهادن به محیط های فراتر از Windows . بیشتر نیروی توسعه گران Delphi در این مدت صرف رهانیدن Delphi از بند Windows شد که این خود در درجه اول مبارزه ای آشکار با سلطه Microsoft بود و ثانیاٌ راه برنامه نویسان را به سوی فضا های دیگر برنامه نویسی باز کرد. در ابتدا این عمل ریسک بزرگی بود و بیم آن می رفت که جایگاه Delphi در Windows هم به خطر بیفتد ولی در نهایت به نقطه رشد و قوتی بدل شد که Delphi را به یکی از بهترین ابزار برنامه نویسی Multi Platform تبدیل کرد.تکنولوژی CLX روالهای مختلف Delphi را با Kylix (عضو جدید خانواده Borland که در فضای Linux کار می کند) به اشتراک گذاشت و استفاده از سیستم بایت Java باعث شد که Delphi حتی از قید سخت افزار هم رها شود. 


به نظر می رسد که این فعالیتها باعث ثبات Delphi در دنیای برنامه نویسان شود و نگرانی های Borland و برنامه نویسان که همیشه می ترسیدند که مبادا با ضعیف شدن Windows جایگاه خود را از دست بدهند حال به افتخار و آرامش برای آنان و نگرانی برای طرفداران Microsoft تبدیل شده است. 


در زمان استفاده از سیستم عامل DOS برنامه نویسان مجبور بودند از بین زبان پر قدرت ولی کم سرعت Basic و زبان کارآمد ولی پیچیده و نامفهوم Assembly یکی را انتخاب کنند. پاسکال با ارائه یک زبان ساخت یافته و یک کامپایلر سریع و کم نقص این شکاف را پرکرد.


دلفی مجموعه متفاوتی برای برنامه نویسی بود . طراحی و توسعه برنامه های کاربردی، ایجاد DLL ها، پایگاههای داده و ... که یک محیط ویژوال وسیع را تشکیل می داد. Delphi اولین ابزار برنامه نویسی ویندوز بود که محیط طراحی ویژوال، کامپایلر بهینه کد برنامه و دسترسی قوی به پایگاههای داده را در یک جا جمع کرد .این مجموعه قدرتمند باعث شد که در همان زمان بسیاری از برنامه نویسان زبانهای دیگر به Delphi روی بیاورند و این موفقیت بزرگی برای Borland به حساب می آمد. همچنین بسیاری از برنامه نویسان پاسکال دلفی را ابزاری یافتند که توسط آن هم از توانایی و تجربه خود در برنامه نویسی پاسکال استفاده می کردند و هم توانایی کار در ویندوز را به دست آوردند. همچنین زبانی که در آن زمان با نام پاسکال شیئی (Object Pascal) در دانشگاهها ایجاد شده بود یک زبان بسیار خشک و محدود کننده بود که اصلاٌ حالت کاربردی پیدا نکرد. 


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

همچنین Delphi با ارائه خصوصیات اضافه و کارکرد های قویتری توانایی های خود را افزایش داد. (ازجمله ارائه کامپایلر 32 بیتی که سرعت بالایی به نرم افزار ها می بخشید، کتابخانه بزرگ و کاملی از اشیای مختلف، شیوه جدید و تکامل یافته ای برای اتصال به پایگاه های داده مختلف، ادیتور پیشرفته، پشتیبانی از OLE ، توانایی وراثت در فرمهای ویژوال و سازگاری با پروژه های 16 بیتی Delphi ). 


 Delphi خصوصیات جدیدی را در بر می گیرد که توسعه برنامه های تحت وب را واقعاٌ راحت کرده است. این ویژگیها شامل طراح اشیای مربوط به ASP برای ساختن صفحات (Active Server Page)، اشیایی موسوم به Internet Express برای پشتیبانی از XML و خصوصیات جدید MIDAS که آن را به یک ابزار همه کاره در پایگاه های داده تحت Web تبدیل کرد


در مقایسه با دلفی زبان پاسكال يكي از زبانهاي برنامه سازي است كه ويژگيهاي آموزشي آن بسيار بالاست يعني زبان خوبي براي آموزش برنامه نويسي منظم و دقيق است.قابليت خوانايي و درك برنامه هاي اين زبان بالاست وميتوان برنامه هايي نوشت كه احتمال خطاهاي آنها بسيار اندك باشد علتش اين است كه يك زبان ساختار يافته (structed) است.

چند ويژگي زبان پاسكال:

     زبان پاسكال نسبت به حروف كوچك و حروف بزرگ حساس نيست، يعني اگر شما متغير A را تعريف كنيد و بعد در برنامه آن را با a فراخواني كنيد هيچ مشكلي پيش نمي آيد ( a=A ).

     دستور عمل هاي پاسكال به ; ختم مي شود.

     هر دستور عملي مي تواند در يك يا چند سطر ادامه داشته باشد.

     حداكثر طول هر دستور 255 كاراكتر است.

     چنانچه در بين برنامه خواستيد توضيحاتي را بنويسيد مي توانبد آنها را بين { } يا (* *) قرار دهيد.

     در هر سطر مي توانيد يك يا چند دستور تايپ كنيد. 


بر نامه نویسی شی گرا:شیوه نوینی است که در آن می توان قطعاتی را ایجادودر برنامه های مختلف مورد استفاده قرارداد.

مزایای برنامه نویسی شی گرا:قابلیت خوانایی برنامه هایی که با این روش نوشته می شود بالاست وهمچنین تست وعیب یابی واصلاح آن آسان است.

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

برنامه نویسی شی گرا داده ها(صفات)وتوابع(رفتارها)را در بسته ای به نام اشیابسته بندی می کند.داده ها و توابع هرشی شدیدابه هم گره خورده انددربرنامه های ساختیافته به فعالیتهاتوجه می شود یعنی واحد برنامه نویسی تابع است اما در برنامه نویسی شی گرا واحد برنامه نویسی کلاسی است که اشیا سرانجام از آن نمونه سازی می شوند.

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

برنامه نویس می تواند با استفاده از انواع ابتدایی انواع دیگری را ایجاد کند که آنها را انواع جدید می نامیم.

 متغیر نمونه ای از نوع کاراکتری  Var ch: char میباشد.

هر کلاس علاوه بر دادها توابعی داردکه داده ها را دستکاری می کند .قطعات داده ای کلاس را اعضای داده ای وقطعات قطعات تابعی کلاس را توابع عضو یا متد می گویند.

مزایای دلفی:انعطاف پذیری دلفی بسیار زیاد است وکاربران به راحتی با دلفی ارتباط برقرار می کنندوهمچنین قابلیت اجرای برنامه هاوایجاد وبه کارگیری قطعات در برنامه ها بسیارزیاد است.

قطعات ویژوال :دلفی کتابخانه ای از قطعات ویژوال دارد برنامه نویس می تواند این قطعات را ایجاد و به کتابخانه بیفزاید.برنامه های دلفی مجموعه ای از این قطعات میباشد تمام قطعات موجود در این کتابخانه در نوار ابزار ظاهر می شود وبه راحتی قابل دسترسی اند.


 انواع فایلها در دلفی:

:dpr

فایل مربوط به پروژه می باشد وبرای نگهداری اطلاعات در باره فرم هاوواحرها مورداستفاده قرارمگیرد.

:Dfm

این فایل عملا فایل باینری منبع است وحاور توضیحی از فرم واجزای آن است.این فایل فایل فرم می باشد.

:pas

از این فایل برای ذخیره دستورات استفاده می شود.هریونیت عملا یم فایل با این پسونددارد.این فایل فایل منبع یونیت دلفی می باشد. 

:dskفایل میز کارپروژه

این فایل سابقه اجرایی پروژه را هنگام بازوبسته شدن نگه میدارد.

:dof

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

:Drf

یک فایل باینری است که دلفی با بسته های نرم افزاری مورد استفاده قرار می دهد در واقع این فایل فایل اطلاعات بسته های نرم افزاری می باشد.

 :res

 

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

:exe 

 یک فایل اجرایی مستقل است.

 :~idp,~df,~pa

 به ترتیب فایلهای پشتیابانی یونیت وفرم وپروژه می باشند.



:dcu

نسخه کامپایل شده فایلهای واحد(pas) است و یا فایل اجرایی پایانی مرتبط است.                   

:Rc

 در صورتی که برنامه دارای آیکن وتصویر ویا مکان نما باشد این فایلها تشکیل میشود.

:Dll

در صورت طراحی dllایجاد می شود



انواع داده ها در دلفی:


نوع کاراکتری:

برای ذخیره کاراکترها به کار می رودهر کاراکتر یک بایت را اشغال می کند256 نوع کاراکتر مختلف را می توان در یک بایت ذخیره کرد.

انواع کاراکتری در جدول زیر آمده است:

قابلیت    طول به بایت    نوع

Ansiیک کاراکتر

Ansi یک کاراکتر

یک کاراکتر یونيكد    ۱

۱

۲    Char

Ansichar

Widechar

نوع رشته ای:


داده های رشته ای برای ذخیره رشته ها مثل اسامی و آدرسها به کار میرود.رشته ها می تواند 255کاراکتر رادر خود ذخیره کند.

انواع رشته ای به صورت زیر می با شد:

عنصری که ذخیره می شود    طول به بایت    نوع

Ansichar

Ansichar

Ansichar

Widechar    255

حداکثر 3 مگا بایت

255یا حداکثر 3 مگابایت

حداکثر 5/1گیگا بایت    Shortstring

Ansistring

String

Widestring


نوع  Variant

این نوع ویژگی جالبی است که در دلفی وجود دارد و میتواندیک عدد صحیح ویا عبارت رشته ای ویا مقدار عددی ممیز شناور را ذخیره کند.

نوع variant یک داده 16 بیتی است که علاوه بر مقدار نوع اطلاعات را نیزنگهداری می کند.

انواع داده ها در دلفی:یکی از جنبه های مهم هر زبان برنامه نویسی انواع داده های آن است انواع داده ها در دلفی به صورت زیر می باشد.

داده های نوع صحیح که به صورت زیر می باشد : 


نوع    محدوده قابل قبول    طول بایت

Byte

Word

Shortint

Smallint

Integer

Cardial

Logint

Longword    0 تا 255

0 تا 65535

128- تا 127

32768- تا 32767

32147483648- تا2147483647

0 تا 2147483647

2147483648- تا 2147483647

0 تا 4294967295    1

2

1

2

4

4

4

۴


نوع داده ارزی:


در اغلب زبانها می توان از انواع حقیقی برای نمایش مقادیر ارزی استفاده کرد. اما در دلفی نوع ارزی برای این منظور اختصاص یافته است.دقت نوع ارزی جهار رقم اعشار است وبه صورت یک عدد 64 بیتی ذخیره می شود.

نوع ارزی با کلمه کلیدی  currency  مشخص می شود این نوع نسبت به نوع حقیقی امتیازات زیر را دارد:

• دقت بیشتری برای نگهداری اعداد بزرگ دارد. 

• با انواع داده هایی که در بانک های اطلاعاتی به کار می رود سازگار است.


انواع بولی:

انواع بولی بسیار ساده و پرکاربری هستند. این ها مقادیر منطقی درستی و نادرستی را مشخص می کند

انواع داده های بولی عبارتند از:


نوع     محدوده    طول به بایت

boolean

ByteBool

Bool

WordBool

Longbool    یک بایتی

یک بایتی

یک کلمه ای

یک کلمه ای 

کلمه مضاعف    1

1

2

2

4


انواع داده ها در Pascal : 

نوع داده ها 

نحوه ي جايگيري يك عدد خاص در حافظه، توسط نوع داده ي آن عدد مشخص مي شود. در پاسكال استاندارد، چهار نوع داده ي از پيش تعريف شده وجود دارند كه عبارتند از : Real( براي اعداد حقيقي)، integer (براي اعداد صحيح)، Char( براي داده هاي كاركتري) و Boolean (براي مقادير True و false) در توربو پاسكال نوع داده ي ديگري به نام String وجود دارد كه استاندارد نيست ولي پردازش مجموعه اي از كاركتر ها را( مثلا، نام يك شخص) را آسان تر مي كنند 

يك داده را هم مي توان داخل برنامه پاسكال نوشت و هم مي توان آن را طوري در نظر گرفت كه توسط برنامه دريافت مي شود. داده اي كه داخل برنامه نوشته مي شود، يك ليترال ناميده مي شود. 


نوع داده integer 

در رياضيات، integer ها اعداد صحيح مثبت يا منفي هستند و عددي كه بدون علامت است، مثبت در نظر گرفته مي شود. در پاسكال براي نمايش اعداد صحيح از نوع داده ي integer استفاده مي شود.چون ظرفيت حافظه محدود است، كليه اعداد صحيح را نمي توان نمايش داد. توربو پاسكال اعداد بين 32768- تا 32768 را نشان مي دهد. ثوابتي با عنوانMaxint  وجود دارد كه بزرگترين عدد مثبت را مشخص ميكند. در اعداد صحيح نمي توان از ويرگول استفاده كرد. بعضي از اعداد صحيح به شرح زير هستند: 

 35-       67-     5888      10089 

مي توانيم اعداد صحيح را خوانده و نمايش دهيم، عمليات محاسباتي معمولي (نظير جمع، تفرق، ضرب و تقسيم) روي آنها  انجام دهيم و دو عدد صحيح را با يكديگر مقايسه كنيم. 


نوع داده ي Real 

يك عدد حقيقي شامل يك بخش صحيح و يك بخش اعشاري است كه توسط نقطه اعشار از يكديگر جدا شده اند. در پاسكال براي نمايش اعداد حقيقي از نوع داده Real استفاده مي شود و يك عدد حقيقي بايد با عدد شروع شده و به عدد ختم شود. بنابراين در پاسكال اعداد -.25 و 64. را بايد به صورت 0.25- و 64.0 نوشت. 

براي نمايش اعداد خيلي بزرگ و اعداد خيلي كوچك مي توانيم از نماد علمي استفاده كنيم. در نمايش اعداد، عدد حقيقي 105×1.23 معادل با عدد 123000.0 است كه در آن توان 5 به معناي «انتقال نقطه اعشار به اندازه 5 رقم به سمت راست» مي باشد. در پاسكال نمايش علمي اعداد به صورت 1.23E+5 يا 123E5 خواهد بود. اگر توان داراي علامت منفي باشد، نقطه اعشار به سمت چپ منتقل مي شود.(به عنوان مثال عدد 0.34E-4 معادل با 0.000034خواهد بود). در جدول زير تعدادي عدد حقيقي معتبر و نامعتبر را ملاحظه مي كنيد. در آخرين خط ملاحظه مي شود كه در نمايش علمي پاسكال مي توانيم يك عدد حقيقي را بدون نقطه اعشار نشان دهيم. مي توانيم اعداد حقيقي را دريافت كرده و آنها را چاپ كنيم، روي آنها اعمال محاسباتي معمولي انجام دهيم و آنها را با يكديگر مقايسه كنيم. 

اعداد حقيقي نامعتبر     اعداد حقيقي معتبر 

150(نقطه اعشاري وجود ندارد) 

.1254 (قبل از نقطه اعشاري عدد وجود ندارد) 

152. (بعد از نقطه اعشاري عدد وجود ندارد) 

-15E-0.3 (جزء 0.3 نامعتبر است) 

-15E-.3 (جزء .3 نامعتبر است) 

    3.14159 

0.005 

12345.0 

15.0E-04 

2.345E2 

1.15E-7 

12E+5 


نوع داده char 

نوع داده ي char براي يك داده كاركتري بكار مي رود. اين داده مي تواند، يك حرف، يك عدد يا يك علامت خاص باشد. هر داده كاركتري ميان يك جفت نقل قول ('') قرار مي گيرد، در زير نمونه هايي از داده هاي كاركتري را در زير مشاهده مي كنيد. 

'a'     'z'     '2'     '*'     '''    ' ' 

در نمونه هاي فوق كاركتر يكي مانده به آخر كاركتر نقل قول است، آخرين كاركتر ، كاركتر فضاي خالي است، كه آن را با فشردن كليد فاصله خالي در بين يك جفت نقل قول مي توان ايجاد كرد. 

گرچه در برنامه داده نوع char را بايد با علائم نقل قول مشخص كرد ولي داده اي كه  از بيرون دريافت مي شود را نبايد درون علائم نقل قول گذاشت. به عنوان مثال، هنگام وارد كردن حرفZ به يك برنامه بجاي وارد كردن رشته'Z'، كليد Z را فشار دهيد. روي داده هاي نوع char نمي توان اعمال رياضي انجام داد.به اين معنا كه در پاسكال عبارت '2'+'3'  است. با اين حال مي توانيم كاركترها را با يكديگرمقايسه كرده و آنها را دريافت و چاپ كنيم. 


نوع داده ي Boolean 

بر خلاف ساير انواع داده ها، نوع داده ي Boolean(نوع داده بولن بعد از مرگ جوج بول كه مخترع جبر دو مقداري است، به اين نام انتخاب شد).فقط دو مقدار true و false را مي تواند داشته باشد. براي نمايش مقادير شرطي، از اين نوع داده مي توانيم استفاده كنيم، به طوري كه برنامه با توجه به اين مقادير مي تواند تصميم گيري كند. يك داده منطقي را مي توان چاپ كرد ولي نمي توان به عنوان ورودي آن را دريافت كرد. 



نوع داده ي string 

كليه ي نوع داده هاي Real، integer، Char و Boolean استاندارد هستند. توربو پاسكال از نوع داده ي پنجمي با عنوان string (يكي از كلمات كليدي توربو پاسكال) نيز حمايت مي كند، كه شامل كاركترهايي است كه ميان يك جفت علامت نقل قول قرار گرفته اند. در خط زير نمونه هايي از اين نوع داده را مي بينيد: 

'asdfg'   '12345'  'true' 

توجه داشته باشيد كه رشته ي '12345' همانند عدد 12345 در حافظه ذخيره نمي شود، همچنين عملگرهاي محاسباتي را نمي توان با اين رشته به كار برد.(فقط در حالت اتصال رشته ها به هم و فقط جمع). رشته 'true' نيز، به شكلي متفاوت از ارزش منطقي True ذخيره مي شود. در توربو پاسكال مي توان، رشته ها را دريافت كرد، در حافظه ذخيره كرد، با يكديگر مقايسه نمود و آنها را نمايش داد.يك داده ي رشته اي حدكثر 255 كاركتر مي تواند داشته باشد. هنگام وارد كردن يك داده رشته اي براي يك برنامه، درست مانند داده ي نوع Char، علامت هاي نقل قول آن را حذف كنيد. گرچه در پاسكال استاندارد مجاز به استفاده از داده هاي رشته اي نيستيد، اما در خود برنامه مي توانيد از آنها استفاده كنيد. رشته ها معمولا در دستورالعمل هايي كه براي نمايش اطلاعات بكار مي روند، مورداستفاده قرار مي گيرند.

انواع داده هاي صحيح

طول(بايت)    بازه مقادير قابل قبول    نوع

1     0 تا 225     byte

1     128- تا 127     shortlnt

2     32768- تا 32767     integer

2    0 تا 63535     word

4     2147483648- تا 2147483647     longlnt

انواع داده هاي اعشاري

طول(بايت)    بازه مقادير قابل قبول    نوع

4     I1.5E-45 تا I3.4E 38     single

6     I2.90-39 تا I1.7E 38     real

8    U 5.0E-324تا TJ1.7E 308     double

10     I 1.9E-4951تا I1.1E 493     extended



نوع زير بازه:

ساختار كلي دستور تعريف اين نوع داده بصورت زير است:

Type حدبالا ..حد پائين = نام زير بازه





عملگرها:

*عملگرهاي محاسباتي: در زير انواع اين نوع عملگر با مثال بيان شده است.

 

انواع عملگرهاي محاسباتي

عملگر    نام    مثال

+    جمع    5+2=7

-    تفريق     5-2=3

*    ضرب    5*2=10

/    تقسيم اعشاري    5/2=2.5

Div    تقسيم صحيح    5 Div 2=2

Mod    باقيمانده تقسيم    5 Mod 2=1


 

 

*عملگرهاي رابطه اي: اين عملگرهايي هستند كه براي مقايسه بين عملوند ها مورد استفاده قرار ميگيرند.در زير انواع اين نوع عملگر با مثال بيان شده است.

انواع عملگرهاي رابطه اي

عملگر    نام    مثال

<    كوچكتر    2<5

<=    كوچكتر يا مساوي    5<=5

>    بزرگتر    5>2

>=    بزرگتر يا مساوي    2>=2

=    مساوي    2=5-3

<>    نامساوي    2<>5



عملگرهاي منطقي:

با استفاده از عملگرهاي  منطقي ميتوان عبارات مركبي را بدست آورد.به عنوان مثال دو.

جدول درستي عملگرهاي منطقي

X    Y    NOT X    X AND Y    X OR Y    X XOR Y

T    T    F    T    T    F

T    F    F    F    T    T

F    T    T    F    T    T

F    F    T    F    F    F

عملگرهاي بيتي:

انواع عملگرهاي بيتي

عملگر    نام    توضيح

Not    نقيض    بر روي يك بيت عمل ميكند اگر صفر باشد آن را يك ميكند و اگر يك باشد آن را صفر ميكند

And    و    بر روي دو بيت عمل ميكند اگر هر دو بيت يك بود حاصل 1 وگرنه 0 است

Or    يا    بر روي دو بيت عمل ميكند اگر هر دو بيت 0 بود حاصل 0 وگرنه 1 است

Xor    ياي انحصاري    بر روي دو بيت عمل ميكند.حاصل آن وقتي 1 است كه يكي از دو بيت 1 و بيت ديگر صفر باشد

Shl    شيفت به چپ    بيت ها را به مقدار معيني به سمت چپ شيفت ميدهد و سمت راست را با 0 پر ميكند

Shr    شيفت به راست    بيت ها را به مقدار معيني به سمت راست شيفت ميدهد و سمت چپ را با 0 پر ميكند



آرایه‌ها در دلفی:


دلفی به ما امکان می دهد آرایه‌هایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم: 

var 

array[indexType1, ..., indexTypen] of baseType; 


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



آرایه‌های ثابت:                                              


آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشته‌ها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند                                 .  

 


آرایه‌های دینامیکی                                                                             

آرایه‌های دینامیکی، آرایه‌های تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید: 

var

 MyFlexibleArray: array of Real; 


قبل از به کار گیری آرایه‌های دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:


 SetLength( MyFlexibleArray, 2; ( 


نکته: آرایه‌های دینامیکی همیشه مبتنی بر صفر می باشند. 


نکته: شما می‌توانید آرایه‌های دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید: 

MyFlexibleArray := nil; 


نکته: مقدار حافظه‌ای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایه‌ای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص می‌یابد. 



مدیریت حافظه در دلفی

تخصیص خودکار حافظه

وقتی شما از نوع‌های پایه (Integer ،real ،word و…) برای ایجاد متغییرهای خود استفاده می کنید، هیچ نگرانی درباره تخصیص حافظه آن وجود ندارد چون دلفی خودش آنرا تخصیص حافظه می کند و سپس آزاد میکند. 


type

   TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);

var

   Name  : String; 

                         {256 Bytes}

   X, Y  : Integer; 

                          {4 + 4 = 8 Bytes}

   List  : array [0..10] of Double;

     {8 * 11 = 88 Bytes}

   Today : TDay; 

                           {1 Byte}


دراین نمونه پس از پایان برنامه، تمام حافظه تخصیص داده شده فراخوانی و آزاد می شود. 



تخصیص حافظه دینامیکی

در این حالت برنامه نویس احتیاج دارد تا انباره حافظه را شخصا" تخصیص و آزاد کند. 


نوع Pointer

اشاره‌گرها در دلفی می‌توانند شکل‌های مختلفی را در برگیرد. نخست، نوع اشاره‌گری که یک آدرس حافظه را برای نوع ویژه‌ای از داده، همانند صحیح، رشته و غیره نگه میدارد (Typed Pointer).


var

   Number : ^Integer;

   Name   : ^String;


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

begin

   New(Something);

   Dispose(Something);

end;


برای تخصیص حافظه کامپایلر باید بداند که نوع داده ما برای تخصیص حافظه چیست: 

type

   IntPtr = ^Integer;


var

   Something : Pointer;

begin

   Something := New(IntPtr);

   Integer(Something^) := 10;

   Dispose(Something);

end;



تخصیص بلاکی از حافظه

ما می‌توانیم از اشاره به بلاک‌هایی از تخصیص حافظه در سیستم استفاده کنیم. این کار را با رویه‌های GetMem و FreeMem برای تخصیص و آزاد سازی حافظه استفاده میکنیم. 

var

   Something : Pointer

begin

   GetMem(Something, 100);

   FreeMem(Something, 100);

end;



اشاره به حافظه از قبل تخصیص داده شده

هر دو نوع اشاره‌گرها می توانند به هر جایی از حافظه اشاره بکنند. این بدان معناست که آنها می‌توانند اشاره به فضای اشغال شده با داده‌هایی که در حال حاضر موجودند داشته باشند. این نمونه اشاره‌گر احتیاجی به تخصیص حافظه ندارد. 

var

   Something : Pointer;

   MyString  : PChar;        // type PChar = ^Char;

                              

begin

   GetMem(Something, 100);

   MyString := Something;

   StrCopy(Something, 'Hello World'); 

   FreeMem(Something, 100);

end;



حافظه Heap

Heap شامل قسمتی از حافظه موجود در یک برنامه است که آنرا حافظه پویا می نامیم. Heap بخشی است که در آن تخصیص و تعریف حافظه به صورت تصادفی (Random) اتفاق می‌افتد. این به آن معناست که اگر شما سه بلاک از حافظه را به طور متوالی تخصیص دهید، می توانید بعد از هر دستور آنرا از بین ببرید. مدیر Heap جزئیات را برای شما نگهداری می کند. بنابراین شما به سادگی می توانید یک حافظه جدید را با GetMem و یا بوسیله صدا زدن constructor هنگام ساختن یک شی درخواست کنید و دلفی به شما یک بلاک جدید را برخواهد گرداند. Heap یکی از سه فضای موجود در برنامه کاربردی را استفاده کرده و دوتای دیگر به صورت فضای یکپارچه (Global) و پشته قرار می گیرند. 



حافظه Stack

Stack شامل قسمتی از یک بخش از حافظه موجود یک برنامه است که دینامیکی است اما برای تخصیص و آزادسازی فرامین مخصوص دارد. تخصیص Stack به صورت LIFO می باشد. این بدان معناست که آخرین حافظه شیء شما تخصیص داه خواهد شد و سپس حذف می شود. حافظه پشته در روتین‌های نوعی استفاده می‌شود. وقتی شما یک روتین را صدا میزنید، پارامترهایش و روتین نوع آن در پشته ریخته می شود. همچنین پارامترهایی که در یک روتین تعریف میشوند، در پشته ذخیره میشوند و وقتی روتین خاتمه پیدا می کند تمام آنها به طور خودکار از بین می رود. 

 

 

 


 











 

 

 




 


 

 

 

 

مجموعه ها : مجموعه ها در زبان پاسكال همانند مجموعه در رياضيات است بعبارت ديگر در زبان پاسكال مجموعه شامل گروهي از عناصر ( اعضاء ) مرتبط به هم است .

هر يك از عناصر مجموعه عضو آن مجموعه ناميده مي شوند .

در پاسكال براي نوشتن مجموعه از علامت [ ] استفاده مي شود .

مثال : [1,2,3,4,5]

مجموعه بالا را ميتوان بصورت مجموعه نيز نوشت . [1..5] 


معرفي مجموعه در پاسكال

 :

Var شناسه : Set of نوع ;

مثال : Var S : Set of 1..99 ;

Var D : Set of ‘A’..’H’ ;

يك مجموعه ميتواند نه شامل كاراكترها باشد و نه شامل اعداد صحيح ، بعبارت ديگر مجموعه ها مي توانند حاوي عناصري باشند كه توسط برنامه نويس تعريف ميشوند . چون اين عناصر از نوع خاصي نيستند لذا بايد آنها را تك تك معرفي كرد .

مثال :Var Color : Set of (Blue,Red,Yellow,Brown,White,Black,Green);

نكته : در زبان پاسكال حداكثر تعداد عناصر مجموعه ها محدود است و حداكثر مي تواند 255 باشد بر خلاف مجموعه ها در رياضيات كه مي تواند تعداد عناصر مجموعه نامحدود باشد .

پردازش مجموعه : از مجموعه اساسا براي آزمايش اينكه يك كاراكتر و يا يك عدد در يك مجموعه قرار دارد استفاده ميشود . عناصر يك مجموعه را نميتوان از ورودي مانند متغيرهاي ديگر دريافت نمود يعني نميتوان در دستورالعمل Read يا Readln يك متغير مجموعه اي را بعنوان پارامتر ورودي قرار داد اما ميتوان براي مقداردهي به مجموعه مقادير را در داخل برنامه به آن نسبت داد : ; عبارت مجموعه اي = : متغير مجموعه اي 

مثال در مجموعه هايي كه در بالا معرفي شده اند . S := [1..10] ;

D := [‘A’..’D’] ; 

Color := [Red,Green,Blue] ;

نكته : مجموعه تهي مجموعه اي است كه داراي هيچ عضوي نمي باشد و آنرا با علامت [ ] نشان ميدهيم .

مثال : S := [ ] ;

نكته : مجموعه همگاني مجموعه اي است كه همه مقادير مجاز را به آن نسبت ميدهيم . S:=[1..99]; 

تركيب مجموعه ها : 

1- اجتماع دو مجموعه : حاصل اجتماع دو مجموعه ، خود مجموعه اي است كه اعضاي آن مشتمل بر اعضاي هر دو مجموعه است . اجتماع دو مجموعه همنوع را با علامت + محاسبه مي نمايند .

مثال فرض ميكنيم : X := [11..99] ; Y := [1..10] ;

آنگاه حاصل Z := X + Y ; برابر خواهد بود با [1...99]

2-اشتراك دو مجموعه : هنگاميكه دو مجموعه با يكديگر اشتراك داشته باشند ، مجموعه اي حاصل از اشتراك دو مجموعه خواهيم داشت ، بگونه اي كه محتواي مجموعه جديد شامل عناصري است كه در هر دو مجموعه وجود دارد . اشتراك دو مجموعه همنوع را با علا مت * محاسبه ميكنيم . 

مثال فرض ميكنيم : X := [1,3,5] ; Y:= [1..9] ;

آنگاه حاصل Z := X * Y ; خواهد بود : [1,3,5] 

3- تفاضل دو مجموعه : حاصل تفاضل دو مجموعه ، مجموعه اي است كه شامل عناصر مجموعه اول كه عناصر يا اعضاي مجموعه دوم از آن حذف شده است . تفاضل دو مجموعه همنوع را با علامت – محاسبه ميكنيم .

مثال فرض ميكنيم : X := [1..9] ; Y := [1,3,5] ;

آنگاه حاصل Z := X – Y ; برابر خواهد بود با : [2,4,6,7,8,9] 

نكته : در مجموعه ها اگر بخواهيم عنصر جديدي را به مجموعه وارد كنيم مثلا اگر بخواهيم عنصر 4 را به مجموعه Z اضافه كنيم به شكل مقابل عمل مينماييم : Z := Z + [4] ;

عضويت در مجموعه : براي اينكه بخواهيم عضويت يك عضو را در مجموعه مشخص نماييم از عملگر IN استفاده ميكنيم . نتيجه اين عملگر يك ارزش يا عبارت منطقي است .

توسط عملگر IN عنصر مجموعه در مجموعه مورد جستجو قرار ميگيرد چنانچه اين عنصر در مجموعه وجود داشته باشد حاصل عبارت True و درغيراينصورت حاصل عبارت False ميباشد .

مثال : حاصل عبارت 5 IN [2,3,6,8,9] ; ، False است زيرا 5 در مجموعه وجود ندارد .

حاصل عبارت K IN [‘A’,’B’,’K’] ; ، ‏True است زيرا ‘K’ در مجموعه وجود دارد .

مقايسه مجموعه ها : دو مجموعه همنوع را ميتوان با هم مقايسه نمود ، حاصل اين مقايسه يا ارزش True و يا ارزش False را دارد .

مساوي بودن دو مجموعه =

نامساوي بودن دو مجموعه <>

مجموعه كوچكتر <

مجموعه بزرگتر >

مجموعه كوچكتر يا مساوي <=

مجموعه بزرگتر يا مساوي >=

مثال : 

مقايسه مجموعه ها نتيجه

[2,4] < [2,4,6,8,10] ‏True

[6,3,2] > [2,3] True

[1..9] <> [1..8] True

[5,6,7] >= [5,6,7] True

[1,2] < [3,4] False

[2,3,5] > [2,3,4] False

[1..9] < [1..9] False


اشاره گرها : در انواع ساختاري مانند آرايه ، ركورد و مجموعه ميزان حافظه لازم براي هر يك از اين ساختارهاي داده اي در شروع اجراي برنامه درنظر گرفته ميشود زيرا هركدام از اين ساختارها از لحاظ اندازه ثابت بوده و لذا با توجه به معلوم بودن طول اين نوع ساختمان داده ها ميزان حافظه تخصيصي در ابتداي برنامه مشخص ميشود و به اين گونه ساختارهاي داده اي ساختارهاي ايستا ميگويند . برخي از ساختارهاي داده اي ديگر به علت نامعلوم بودن طول آنها در شروع اجراي برنامه ، حافظه اي به آنها تخصيص نخواهد يافت و عمل تخصيص حافظه در حين اجراي برنامه صورت خواهد گرفت ، به اين نوع از ساختارهاي داده اي كه به لحاظ شكل و اندازه متغير هستند ساختارهاي داده اي پويا ميگويند . اين نوع ساختارها شامل عناصري هستند كه هر عنصر با عنصر ديگر از طريق متغيري به نام ، متغير اشاره گر ( Pointer ) به يكديگر متصل شده اند .

متغيري كه محتوياتش آدرس متغير ديگري باشد اشاره گر ناميده ميشود . 

معرفي متغير اشاره گر : 

Type نوع اشاره گر = ^نوع متغير ;

Var نام اشاره گر : نوع ;

اطلاعات آدرس

مثال : 

Type P = ^Integer;

Var K : P ;

در اين مثال P نوعي است كه مقادير آن آدرسهاي سلول حافظه هستند . يك عضو داده كه آدرس آن در متغيري از نوع P ذخيره ميشود بايد از نوع Integer باشد .

كاربردهاي اشاره گر : در پردازش ساختارهاي پويا نظير يك ليست پيوندي(در ادامه جزوه توضيح داده خواهد شد)

ميتوان تخصيص حافظه نمود و يا حافظه تخصيص داده شده را به سيستم عامل بازگرداند . بعبارت ديگر ميتوان به يك ساختار پويا يك گره اضافه نمود و يا يك گره از آن حذف نمود .

براي تخصيص حافظه پويا(افزودن يك گره) به يك ساختار از دستور New استفاده ميكنيم .

New ( نام اشاره گر ) ;

مثال : New ( K ) ; 

مثال : 

Type Pointer = ^Student;

Student = Record

Number : Integer ;

Name : String [10] ;

Family : String [10] ;

End;

Var

P : Pointer ;

Begin

New ( P ) ;

End.

توسط دستور New ( p ) ; يك متغير از نوع Student در حافظه ايجاد نموده و اشاره گر P به آن اشاره مينمايد بعبارت ديگر يك گره توسط دستور New ( P ) ; مطابق ركورد فوق ساخته ميشود .

دسترسي به محتويات متغير پويا : 


ليستهاي پيوندي : ليست پيوندي نوعي ساختمان داده پويا است كه عناصر آن هنگام اجراي برنامه از سيستم گرفته ميشود بر خلاف آرايه كه عناصر آن در محلهاي متوالي حافظه قرار ميگيرند ، عناصر ليست پيوندي ميتوانند در محل هاي غيرمتوالي حافظه وجود داشته باشند ، بنابراين هر عنصر ليست پيوندي بايد آدرس عنصر ديگر ليست را در خودش داشته باشد تا بتوان به تمام عناصر ليست دست يافت . هر يك از عناصر ليست پيوندي را گره گويند .



پس از استفاده از حافظه پويا براي حذف يك گره از يك ساختار پويا از دستور Dispose استفاده ميكنيم . 

Dispose (نام اشاره گر ) ;

مثال : Dispose ( P ) ; 

توسط اين دستور گره اي كه آدرس آن در P قرار دارد حذف شده و درنتيجه جاي آن در حافظه آزاد ميشود ، بعبارت ديگر اين حافظه پويا به سيستم عامل بازگردانده ميشود . 

همانند ساير متغيرها ميتوان بر روي اشاره گرها اعمال انتساب و مقايسه را انجام داد .

مثال : P2 := P1 ;

دو اشاره گر به نامهاي P1 و P2 كه هر دو از يك نوع بوده و مقدار P1 به P2 نسبت داده ميشود . 

اگر اشاره گر به هيچ متغيري اشاره نكند اشاره گر تهي است براي اين كار از دستور زير استفاده ميكنيم .

:= NIL ; نام اشاره گر

مثال : P := NIL ;

در اينجا اشاره گر P به جايي اشاره نميكند زيرا كه دستور فوق اشاره گر P را تهي نموده است .

ليست هاي پيوندي ( Linked List ) : ليستهاي پيوندي ، ساختمان داده اي است كه به تخصيص حافظه پويا نيازمند است . اين ليست شامل عناصر يا گره هايي است كه توسط اشاره گرهايي با يكديگر ارتباط دارند .

هر عنصر از ليست پيوندي از دو بخش تشكيل شده است ، يكي اشاره گر كه در ليست پيوندي به عنصر بعدي خود اشاره ميكند و ديگري اطلاعات يا داده .


آرايه هاي فشرده : آرايه فشرده آرايه اي است كه فاصله ميان عناصر آن كم است و درنتيجه ميزان حافظه كمتري براي ذخيره سازي آن مورد نياز است ولي سرعت اجراي برنامه در آرايه هاي فشرده كمتر است .

دستور Exit : استفاده از اين دستور در هر بلوك از برنامه باعث نيشود كه كنترل برنامه به خارج از آن بلوك انتقال يابد . 

دستور Break : اين دستور باعث ميشود كه اجراي يك حلقه خاتمه يافته و كنترل برنامه به دستورالعمل بعدي انتقال يابد .

دستور Continue : اين دستور باعث ميشود كه كنترل برنامه به ابتداي حلقه بازگردد .



سازمان داده ها و بانكهاي اطلاعاتي :


كاراكتر : در پايين ترين سطح يك پايگاه داده اي با كاراكترها سر و كار داريم . منظور از كاراكتر يك حرف ، عدد يا علامت است .

فيلد : هر فيلد شامل يك يا گروهي از كاراكتر ها است .

ركورد : از تجمع چند فيلد ، يك ركورد بدست مي آيد .

فايل اطلاعاتي : گروهي از ركوردها تشكيل يك فايل اطلاعاتي را مي دهند .

پايگاه داده ها : مجموعه اي از فايلهاي اطلاعاتي ، تشكيل يك پايگاه داده اي را مي دهند .

ركوردها : مجموعه عناصر داده اي مربوط به هم كه ميتوانند از انواع مختلف باشند بعبارت ديگر ركورد نوع داده اي است كه امكان تركيب نوعهاي مختلف را فراهم ميكند . عناصر يك ركورد را فيلد مي نامند . از ركوردها ميتوان براي ذخيره سازي انواع مختلف اطلاعات استفاده كرد . براي تعريف يك ركورد از كلمه كليدي Type استفاده ميكنيم . 

Type نام ركورد = Record

فيلد 1 : نوع ;

فيلد 2 : نوع ;

.

.

End;

پس از تعريف ركورد بايد بسته به نياز يك يا چند متغير را از نوع ركورد معرفي نمود .

مثال : ركورد Student 

Type Student = Record

A : integer ;

B,C : Real ;

D : Char ;

End ;


Var k : Student ;

براي دسترسي به هر يك از فيلدهاي يك ركورد از غالب زير استفاده مينماييم .

نام فيلد . نام متغير ركورد

مثال : k . a

با فيلدهاي يك ركورد ميتوان همانند يك متغير برخورد كرد و درصوزت نياز ميتوان به آن مقدار اختصاص داد .

ميتوان محتواي يك ركورد كامل را در يك ركورد ديگر از همان نوع كپي كرد .

جهت خواندن يك ركورد از ورودي بايد تك تك فيلدهاي ركورد را بصورت جداگانه خواند.

براي نوشتن محتواي يك ركورد در خروجي نيز بايد تك تك فيلدهاي ركورد را بصورت جداگانه به خروجي فرستاد .


روال يا رويه 

( Procedure ) روال يا رويه زيربرنامه اي است كه ميتواند بيش از يك نتيجه را برگرداند و يا اصلا هيچ نتيجه اي را به برنامه فراخوان بازنگرداند . جهت تعريف يك رويه لازم است نام رويه در جلوي كلمه كليدي Procedure تايپ شود و سپس در داخل يك جفت پرانتز ليست پارامترهاي مجازي آورده ميشود و نهايتا به منظور ختم سطر عنوان برنامه بعد از پرانتزها يك ; تايپ ميشود . 

Procedure نام رويه ( پارامترهاي مجازي ) ;

Begin

دستورات

end;

يك زيرروال ممكن است پارامتري نداشته باشد .

مثال : ; نام رويه Procedure 

اگر روال پارامتر خروجي داشت بعد از پارامترهاي مجازي كلمه Var را قرار داده و سپس پارامترهاي خروجي را قرار ميدهيم . مثال : 

Procedure sum (x,y : integer ; Val k:integer) ; 

تذكر : فرق رويه با تابع اين است كه در تابع حتما يك مقدار و توسط نام تابع برگردانده ميشود ولي در رويه ممكن است هيچ مقداري برگردانده نشود و يا يك يا چند مقدار برگردانده شود .

توضيح : اجراي برنامه از ابتداي برنامه اصلي ميباشد و لذا پس از اينكه رويه مورد نظر فراخوانده شد كنترل اجراي برنامه به رويه مذكور انتقال مي يابد و پس از اجراي رويه و رسيدن به پايان آن كنترل اجراي برنامه به دستور بعد از فراخواني رويه در برنامه اصلي بازميگردد و اجراي برنامه ادامه مي يابد .


توابع استاندارد ( كتابخانه اي ) : برخي از زيربرنامه ها بعلت كاربرد فراوان و اهميت خاص آنها از پيش براي مترجم پاسكال تعريف شده و همراه آن مي باشند و ضرورتي ندارد كه برنامه نويس آنها را بنويسد . اينگونه زيربرنامه ها را توابع استاندارد مي نامند . هر يك از اين توابع صرفا يك كميت يا يك مقدار را برميگردانند و يا يك عمل را انجام ميدهند . اينگونه توابع عموما در محاسبات رياضي و اعمال مختلف كاربرد فراواني دارند و براي استفاده از تابع ، نام تابع را مي نويسيم و سپس مقداري را كه مي خواهيم تابع محاسبه كند ، در داخل پرانتز و در جلوي تابع خواهيم نوشت . مقدار داخل پرانتز را آرگومان تابع يا پارامتر تابع مي نامند .

تابع ()ABS : محاسبه قدر مطلق ( اگر عدد منفي باشد آن را مثبت مي كند ) پارامتر ورودي اين تابع مي تواند صحيح يا اعشاري و نوع خروجي آن نيز صحيح يا اعشاري باشد .

تابع ROUND() : نزديكترين عدد صحيح به آرگومانش رابرميگرداند . پارامتر ورودي اين تابع اعشاري و خروجي آن صحيح است .

تابع SQRT() : محاسبه جذر يا ريشه دوم آرگومان . پارامتر ورودي مي تواند صحيح يا اعشاري باشد و نوع نتيجه خروجي اعشاري است .

تابع SQR() : اين تابع آرگومانش را به توان 2 مي رساند . پارامتر ورودي مي تواند صحيح يا اعشاري و نتيجه خروجي نيز مي تواند صحيح يا اعشاري باشد .

تابع TRUNC : قسمت اعشاري آرگومان را حذف مي كند يا بعبارت ديگر قسمت صحيح را برميگرداند . پارامتر ورودي اين تابع اعشاري و نوع خروجي آن صحيح است .

تابع SIN() : محاسبه سينوس . پارامتر ورودي مي تواند صحيح يا اعشاري و خروجي آن اعشاري است .

تابع COS() : محاسبه كسينوس . پارامتر ورودي مي تواند صحيح يا اعشاري و خروجي آن اعشاري است .

تابع ARCTAN () : محاسبه آرك تانژانت . پارامتر ورودي مي تواند صحيح يا اعشاري باشد و خروجي تابع اعشاري است .

تابع LN() : محاسبه لگاريتم طبيعي . ورودي صحيح يا اعشاري ، خروجي اعشاري .

تابع EXP() : مقدار e كه برابر 2.218282 مي باشد را به توان آرگومان مي رساند . ورودي صحيح يا اعشاري ، خروجي اعشاري .

تابع ODD() : يك تابع منطقي است كه پارامتر ورودي آن صحيح مي باشد . درصورتيكه مقدار آرگومان ( پارامتر ورودي ) يك عدد فرد باشد ارزش تابع True بوده و درغيراينصورت با زوج بودن آرگومان ارزش تابع False خواهد بود .

تابع CHR() : كاراكتر مربوط به كد آرگومان را مشخص مي كند . پارامتر ورودي صحيح و خروجي تابع كاراكتري است .

تابع ORD : عدد صحيحي كه كد اسكي آرگومان است را مشخص مس كند . پارامتر ورودي اين تابع كاراكتري و خروجي آن صحيح است .

تابع PRED() : مقدار ماقبل آ‎رگومان را برميگرداند . 

تابع SUCC() : مقدار بعد از آرگومان را برميگرداند







منابع : 


Borland Delphi Developer's Guide, Essentials of Rapid Development Advanced Techniques


www.Entekhab.net


Google serching


I BUILT MY SITE FOR FREE USING