بالا
 تعرفه تبلیغات




 دانلود نمونه سوالات نیمسال دوم 93-94 پیام نور

 دانلود نمونه سوالات آزمونهای مختلف فراگیر پیام نور

صفحه 4 از 5 اولیناولین ... 2345 آخرینآخرین
نمایش نتایج: از شماره 31 تا 40 از مجموع 45

موضوع: معرفی کامل زبان های برنامه نویسی به همراه تاریخچه و کاربرد و منابع آموزشی در مورد آن

  1. #31
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    برنامه Hello World

    برنامه زیر با استفاده از کتابخانه استاندارد و جریان های خروجی یک متن را به خروجی استاندارد ارسال می نماید.

    # کد PHP:
    کد:
    کد:
    include <iostream.h> // provides std::cout using namespace std; int main() { cout << "Hello, world!\n"; // prints "Hello, world!" }


    ویژگی های زبان


    عملگرها


    پیش پردازنده


    ++C بطور عمومی در سه فاز ترجمه می گردد: پیش پردازنده، ترجمه به کد object، پیوند (که دو مرحله آخر به عنوان عمل کامپایل شناخته می شود.) در اولین مرحله در پیش پردازنده، شبه دستورات پیش پردازنده تغییرات لغوی بر روی کد منبع ایجاد می نمایند و آن را به به مراحل دیگر تحویل می دهند.

    شبه دستورات پیش پردازنده با استفاده از کاراکتر # قبل از هر گونه فضای خالی آغاز گشته و رشته هایی را در کد منبع با فایل یا رشته های دیگر با توجه به قوانین تعریف گشته توسط برنامه نویس جایگزین می نماید. این دستورات معمولاً اعمال زیر را انجام می دهند: جایگزینی ماکروها، شمول فایل های دیگر (برخلاف ویژگی سطح بالاتر مانند شمول ماجول ها/پکیج ها/یونیت ها/کامپوننت ها)، کامپایل شرطی و/یا شمول شرطی. به عنوان مثال:

    کد PHP:
    کد:
    کد:
    #include <iostream>
    که این دستور تمام سمبل ها در فایل سرایند کتابخانه استاندارد iostream را در فایل منبع وارد می سازد.

    کاربرد معمول دیگر به عنوان ماکرو خوانده می شود:

    کد PHP:
    کد:
    کد:
    #define MY_ASSERT(x) assert(x)
    که کد (MY_ASSERT(x را با (assert(x در فایل منبع جایگزین می نماید. که این جایگزینی امکان کنترل استفاده از این تابع را در اختیار برنامه نویس قرار می دهد.

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

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

    دستورات پیش پردازنده برای کاربردهای عددی نیز به کار می رود که هم اکنون استفاده از const به جای #define ترجیح داده می شود. این کار علاوه بر ایجاد کنترل نوع قوی مانع از گمراهی در فضاهای نام می گردد.

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


    قالب ها

    قالب ها متفاوت با ماکروها هستند. در حالی که هر دوی این ویژگی های زمان کام پایل برای ایجاد کامپایل شرطی استفاده می شوند قالب ها محدود هب تغییرات لغوی و متنی نیستند. قالب ها با آگاهی از معنا و سیستم نوع در زبان استفاده شده و سایر ویژگی های زمان کامپایل می توانند از عملیات سطح بالا برای کنترل ترتیب اجرا براساس نوع پارامترها استفاده نمایند. ماکروها کنترل خود را بر کامپایل از طریق ویژگی های از پیش تعیین شهد انجام می دهند ولی قادر به ایجاد انواع جدید و کنترل نوع نیستند و فقط محدود به تغییرات متنی پیش از کامپایل هستند. به زبان دیگر ماکروها کنترل خود را با استفاده از نشانه های از پیش تعیین شده انجام می دهند اما همانند قالب ها نمی توانند نشانه ها را خود ایجاد نمایند. قالب ها ابزاری برای چندریختی ایستا و برنامه نویسی جنریک است. مثلاً جایگزین معادل با استفاده از قالب ها برای عبارت خطرناک #define max(x,y) ((x)>(y)?(x)y)) در پایین نشان داده شده است.

    کد PHP:
    کد:
    کد:
    template <typename T> const T& max(const T& x, const T& y) { return x > y ? x : y; }
    این قالب در سرآیند algorithm تحت عنوان std::max() قابل دسترسی است. معمولاً می توان از کلمه کلیدی class بجای typename استفاده کرد.

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

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


    اشیا


    سی++ چندین ویژگی شی گرا را زبان سی معرفی نمود معرفی کلاس چهار ویژگی که در زبان های شی گرا و بعضا غیر شی گرا حضور دارد یعنی انتزاع، بسته بندی، وراثت، و چندریختی را فراهم کرد. اشیا نمونه های ساخته شده از کلاس در زمان اجرا هستند. می توان کلاس را نمونه ای از قالب ها دانست که چندین مورد از آنها بوجود می آید.


    بسته بندی

    بسته بندی به معنای جمع آوری عملیات و داده در یک محل می باشد. سی++ بسته بندی را با ایجاد امکان تعریف هر کلاس به صورت public، private، protected پیاده سازی نموده است. اعضای private فقط توسط اعضای کلاس و یا کلاس ها دقیقا بیان شده (friend) قابل دسترسی هستند. اعضای protected توسط کلاس های ارث برده شده و اعضای کلاس و کلاس های friend قابل دسترسی هستند.

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

    عموماً توصیه بر این است که تمام اعضا به صورت خصوصی یا حفاظت شده تبدیل گردند و فقط توابعی که باید توسط دیگر کلاس ها به عنوان واسط استفاده شوند عمومی باقی بمانند.


    وراثت


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

    وراثت چندگانه یکی از ویژگی های مورد بحث در سی++ است. وراثت چندگانه امکان اشتقاق از چند کلاس پایه را فراهم می نماید که موجب بوجود آمدن گراف رابطه وراثت بسیار پیچیده است. به عنوان مثال «گربه پرنده» می تواند از کلاس «گربه» و کلاس «پستانداران پرنده» ارث برد. در زبان های دیگر مانند سی شارپ و جاوا به صورت دیگری ویژگی مشابه را پیاده سازی می نماید هر کلاس می تواند از چندین واسط اشتقاق یابد اما فقط یک کلاس پایه برای اشتقاق وجود دارد(واسط ها برخلاف کلاس پایه فقط تعریف هستند و هیچ گونه پیاده سازی را شامل نمی گردند).


    چندریختی

    امکان استفاده از یک واسط برای چندین پیاده سازی فراهم می نماید و اشیا در شرایط مختلف رفتار مختلفی از خود نشان می دهند.

    سی++ دو نوع چندریختی در اختیار برنامه نویس قرار می دهد: چندریختی زمان کامپایل و چندریختی زمان اجرا. چندریختی زمان کامپایل امکان تصمیم گیری های زمان اجرا را فراهم نمی سازد و چندریختی زمان اجرا اغلب موجب پایین آمدن بازدهی می گردد.


    چندریختی ایستا


    چندریختی ایستا شامل گرانبارسازی تابع، گرانبارسازی عملگر، آرگومان پیش فرض، و قالب کلاس ها و تابع است.


    گرانبارسازی تابع

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


    گرانبارسازی عملگر

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


    آرگومان پیش فرض

    آرگومان پیش فرض در شرایطی به کار می رود که تعیین یک مقدار مشخص برای یک آرگومان نیاز به تعریف یک تابع جدید را برطرف می سازد. هنگام استفاده از این مشخصه باید دقت شود که تابع های گرانبار شده و تابع های دارای آرگومان پیش فرض با یکدیگر تداخل نداشته باشند به عنوان مثال:
    کد PHP:
    کد:
    کد:
    // function with default argument but also an overloaded function int strcpy(char str1, char str2, short unsigned n=65535); // second overloaded function int strcpy(char str1, char str2);
    کد بالا در صورت استفاده از یک آرگومان n برای strcpy درست کامپایل می گردد اما اگر آرگومانی تعیین نگردد درست عمل نخواهد کرد. چرا که کامپایلر نخواهد دانست که باید از مقدار پیش فرض استفاده نماید یا از تابع بدون آرگومان.


    چندریختی

    چندریختی پویا شامل وراثت و توابع مجازی عضو است.


    ساختار برنامه ها

    ساختار برنامه ها در این زبان بدین صورت است که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه برنامه داشته باشد. هر برنامه معمولاً از تعداد زیادی فایل تشکیل می شود که به هم الحاق می گردند (با دستور include) و به این فایل های الحاقی سرآیند (Header) می گوییم. فایل های الحاقی حاوی کدها یا نسخه های اجرایی کلاس ها (مجموعه متغیرها و توابع) می باشند که در بدنه اصلی برنامه از آنها استفاده می شود. معمولاً هر کلاس (که تعریف یک نوع داده ای با متدهای مربوط به آن است) را در یک سرآیند می نویسند. هر سرآیند که معمولاً تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایل های پیاده سازی به زبان ++C یا پیاده سازی های کامپایل شده (به صورت فایل اشیا مانند dll یا so یا ... ) می تواند به کار برده شود. به مجموعه های یکپارچه ای از کلاس های پیاده سازی شده (به صورت فایل های سرآیند با پیاده سازی های کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار می روند، یک کتابخانه ++C گفته می شود و قدرت اصلی این زبان در امکان به کارگیری کتابخانه های آماده می باشد. کتابخانه های بزرگ ++C مانند STL، MFC، QT و ... مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کرده اند.


    محیط های برنامه نویسی


    یک برنامه به زبان ++C می تواند در محیط های ++Turbo C++ ,Borland C++ ,Dev C در ویندوز و GCC در لینوکس نوشته شود. این محیط های برنامه نویسی، همراه با یک کمپایلر عرضه می شوند که کار تبدیل برنامه به فایل اجرایی را راحت می کند.




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  2. #32
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    سی شارپ #C

    سی شارپ (C#) زبانی شیءگرا و سطح بالا (high level) از خانوادهٔ زبان های چارچوب دات نت شرکت مایکروسافت است.

    زبان #C، یک زبان برنامه نویسی چند الگویی است و منظم شده مدل های تابعی، امری، عمومی، شی گرا و جز گرا می باشد. این زبان توسط ماکروسافت و جزئی از دات نت به وجود آمد و بعدا استانداردهای ECMAو ISO را نیز در بر گرفت. #C یکی از 44 زبان برنامه نویسی ای است که توسط Common Language Runtime از .NET Framework پشتیبانی می شوند و در همه جا به وسیله Microsoft Visual Studio شناخته می شود.

    این زبان برپایه سادگی، مدرن بودن، همه منظوره و شی گرا بودن ساخته شد.Anders Hejlsberg، طراح زبان برنامه نویسی دلفی، سرپرستی تیم طراحان زبان #C را بر عهده داشت.این زبان دارای دستوری شی گرا مشابه ++C است و به شدت از زبان های جاوا و دلفی تاثیر پذیرفته است.در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در جولای 2000، زمانی که ماکروسافت پروژه را عمومی اعلام کرد، اسم آن به #C تغییر پیدا کرد.آخرین نسخه آن نسخه 3 است که از ویژوال استدیو 2008 استفاده می کند. نسخه بعدی 4 است که در دست ساخت است.

    اهداف طراحی زبان

    • استاندارد ECMA این اهداف طراحی زبان را برای #C بر آورده می سازد:
    • سی شارپ یک زبان برنامه سازی ساده،مدرن،برای اهداف عمومی و شی گرا است.
    • به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره وری برنامه نویس،زبان دارای چک کننده Strong Type ، چک کننده مرزهای آرایه، تشخیص حالتهایی که یک متغیر مقدار دهی اولیه نشده است،قابلیت انتقال کدها و Garbage Collection خودکار است.
    • این زبان برای استفاده در اجزای توسعه نرم افزار برای دستیابی به مزایای سیستم های توزیعی در نظر گرفته شده است.
    • قابلیت انتقال برنامه نویس بسیار مهم است،خصوصاً برای آن دسته از برنامه نویسانی که با زبان های C و C++ آشنا هستند.
    • پشتیبانی از این زبان برای بین المللی شدن بسیار مهم است.
    • زبان سی شارپ برای نوشتن برنامه ها برای سیستمهای تعبیه شده و میزبان در نظر گرفته شده است، از سیستم عامل های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.
    • هر چند برنامه های نوشته شده با #C طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان های C و اسمبلی نیست.

    تاریخچه

    در سال 1999، شرکت سان اجازه استفاده از زبان برنامه نویسی جاوا را در اختیار ماکروسافت قرار داد تا در سیستم عامل خود از آن استفاده کند.جاوا در اصل به هیچ پلت فرم یا سیستم عاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم عامل بودن جاوا را از آن برداشت.شرکت سان پرونده ای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شی گرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس های کتابخانه ای با زبان و کامپایلر SMC نوشته شدند.در سال 1999 آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شی گرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی .NET در PDC در سال 2000 این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاس ها و runtime در ASP.NET به#C منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان های برنامه سازی++Borland , Delphi, Turbo Pascal, Visual C به آسانی در دستورالعمل های سی شارپ قابل رویت است و به همان خوبی در هسته CLR.

    ویژگی ها

    برخی از تفاوت های زبان سی شارپ با C و ++C عبارتند از:


    هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس ها تعریف شوند.این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاس های عمومی استفاده کرد.

    متغیرهای عمومی، بر خلاف C و ++C ، نمی توانند بلاک های پیوستی را در بر بگیرند.

    سی شارپ دارای یک نوع داده بولی است (bool).برخی از عبارت ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند.همان طور که ++C نیز دارای نوع داده بولی است،این نوع داده به راحتی می تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد.کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی می کند که به درستی یک مقدار bool را برمی گردانند. بنابراین دستوری مانند (if(a = b باعث بروز خطا می شوند.(به جای = بایستی از == استفاده شود)

    در سی شارپ ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد.بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیر ممکن است.اشاره گر نا امن می تواند به نمونه ای از value-type ، آرایه، رشته یا بلاکی که حافظه به آن داده شده است اشاره نماید.کدی که به عنوان نا امن علامت نخورده باشد، هنوز می تواند اشاره گرها را از سیستم بازیابی یا در آن ذخیره کند ولی نمی تواند مرجع جدیدی به آنها اختصاص دهد.

    حافظه ساماندهی شده نمی تواند صریحا آزاد شود، ولی به طور خودکار به عنوان به درد نخور تلقی می شود.انتخاب آدرس های به درد نخور حافظه نفوذ ناپذیر است. هم چنین #C با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می کند(پشتیبانی از اصطلاح Resource Acquisition Is Initialization).

    وراثت چندگانه از کلاس ها در این زبان پشتیبانی نمی شود.البته یک کلاس امکان ارث بری از تعداد نامحدود واسط ها را دارد.پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است.
    سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت می پذیرد.هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می شود(بایستی به صورت explicit تعریف شود)اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.

    #C قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجول های کسول شده در یک کلاس به صورت ویژگی ها قرار داده است.

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

    تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده است.

    در حال حاضر (3 جوان 2008) دارای 77 کلمه رزرو شده است.


    سیستم یکپارچه شده


    سی شارپ دارای یک سیستم نوع یکپارچه است که به آن CTS می گویند.این بدان معناست که تمام انواع،شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند.به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می برد.بخاطر کارائی،انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته می شود.

    انواع داده

    CTS داده ها را به دو نوع تقسیم می کند:

    نوع مقداری
    نوع مرجعی

    انواع داده ای توده ساده ای از داده می باشند.نمونه های انواع داده ای نه حویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده ای، خود مقدار داده ها را با یکدیگر مقایسه می کنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند.مقادیر داده های مرجعی همیشه یک مقدار پیش فرض دارند و همیشه می توانند ایجاد و یا کپی شوند.یکی دیگر از محدودیت های انواع داده ای این ات که آنها نمی توانند از یکدیگر مشتق شوند(ولی می توانند اشتراکاتی داشته باشند) و هم چنین نمی توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند( که در آن هر نمونه از نوع مرجع، به طور ذاتی از دیگر نمونه ها جدا می شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقا نمونه مشابه مقایسه تساوی یا عدم تساوی داده های مرجعی است، که در آن آزمایش برای مرجع ها از داده ای ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه.ولی به هر حال انواع مرجعی خاص می توانند این اعمال را از طریق سازنده های عمومی یا اجرای واسط های مشابه(مثل ICloneable یا IComparable) انجام دهند.نمونه هایی از انواع مرجعی، اشیا، System.Stringو Sysmet.Array می باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند.

    Boxing و UnBoxing:
    Boxing عمل تبدیل مقدار نوع داده ای به نوع مرجع مشابه آن می باشد.

    مثال:
    کد PHP:
    [PHP]
    کد:
     		 			 int foo = 42; // Value type... 
    object bar = foo; // foo is boxed to bar.
    [/PHP]
    UnBoxing عمل تبدیل نوع مرجع به نوع داده ای می باشد. مثال:
    کد PHP:
    [PHP]
    کد:
     		 			 int foo = 42; // Value type. 
    object bar = foo; // foo is boxed to bar. 
    int foo2 = (int)bar; // Unboxed back to value type.
    [/PHP]
    سی شارپ به برنامه نویس با استفاده از کلمه کلیدی Struct اجازه می دهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه نویسی، آنها کلاس های سبک وزن به نظر می رسند. برخلاف کلاس ها (که بر روی heap قرار می گیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار می گیرند.آنها همچنین می توانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به طور معمول برای انواع کلاس تخصیص می یابد.

    ویژگی های جدید در C# 2.0

    ویژگی های جدید در C# .NET SDK 2.0 (مطابق با سومین ویرایش استاندارد ECMA-334):

    کلاسهای partial

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

    file1.cs:
    کد PHP:
    [PHP]
    کد:
     		 			 public partial class MyClass 
    { 
        public MyClass() 
        { 
            // implementation 
        } 
    }
    [/PHP]
    file2.cs:
    کد:
    کد PHP:[PHP] 	 		 			 public partial class MyClass   
    {   
        public void SomeMethod()   
        {   
            // implementation   
        }   
    }  [/PHP]




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  3. #33
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    Generic ها

    genericها یا نوع های پارامتری شده یا چندریختی های پارامتری یک ویژگی جدید .NET 2.0 است که به وسیله سی شارپ پشتیبانی می شود.برخلاف Template های سی پلاس پلاس،در این انواع به جای اینکه نمونه سازی توسط کامپایلر انجام شود، در زمان اجرا صورت می گیرد، بنابراین می توانند چند زبانه باشند در حالی که ++C نمی تواند.آنها دارای ویژگی هایی هستند که به طور مستقیم توسطTemplate های C++ پشتیبانی نمی شوند مانند نوع محدودیت ها در پارامترهای Generic با استفاده از رابط ها(Interface). سی شارپ از پارامترهای های Generic بدون نوع پشتیبانی نمی کند.بر خلاف genericهای جاوا،genericهای دات نت برای پارامتری کردن انواع داده ای در اشیا ماشین مجازی CLI، از مفاهیم شی گرایی استفاده می کنند که اجازه بهینه سازی و حفاظت انواع اطلاعات را می دهد.

    کلاس های static

    کلاس ها به صورت Static قابل تعریف نیستند مگر اینکه تمام اعضای آنها Static باشند.که این امر بسیار شبیه به مفهوم مدل در زبانهای رویه ای است.(زبان رویه ای : یک زبان برنامه نویسی که در آن عنصر اصلی برنامه نویسی یک زیربرنامه است.مانند زبانهای C، پاسکال و...)

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

    یک شکل جدید از iterator(تکرار کننده) ، با استفاده از ساختار yield return بسیار شبیه به yield زبان Python.

    کد PHP:
    [PHP]
    کد:
     		 			 // Method that takes an iterable input (possibly an array) and returns all even numbers. 
    public static IEnumerable<int> GetEven(IEnumerable<int> numbers) 
    { 
        foreach (int i in numbers) 
        { 
            if (i % 2 == 0) yield return i; 
        } 
    }
    [/PHP]
    Delegate های ناشناس

    Delegate های ناشناس که عملکردهای محدودی را در #C به وجود می آورند.کد کنار بدنه Deletage ناشناس، دسترسی کامل برای خواندن یا نوشتن در متغیرهای عمومی، پارامترهای توابع و اعضای کلاسهای دارای محدوده Deletage را دارد ولی پارامترهای out و ref را پشتیبانی نمی کند. برای مثال :
    کد PHP:
    [PHP]
    کد:
     		 			 int SumOfArrayElements(int[] array) 
    { 
        int sum = 0; 
        Array.ForEach( 
            array, 
            delegate(int x) 
            { 
                sum += x; 
            } 
        ); 
        return sum; 
    }
    [/PHP]
    Delegate covariance and contravariance

    تبدیل گروه های متد به نوع Deletage در برگشت دارای covariant و در انواع پارامترها دارای contravariant هستند.

    اکسسورهای یک خاصیت(get و set) می توانند دارای سطح دسترسی متفاوتی باشند.

    مثال :
    کد PHP:
    [PHP]
    کد:
     		 			 string status = string.Empty; 
      
    public string Status 
    { 
        get { return status; }             // anyone can get value of this property, 
        protected set { status = value; }  // but only derived classes can change it 
    }
    [/PHP]
    نکته مهم : سطح دسترسی خاصیت نمی تواند بالاتر از سطح دسترسی اکسسورها باشد.به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا می شود.

    نوع داده Nullable

    نوع داده Nullable (که با یک علامت سوال قابل تشخیص است : int? i = null;)اجازه تخصیص مقدار null را برای انواع داده ای می دهد.این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL می شود. در این حالت نوع ستونی INTEGER NULL در SQL به طور مستقیم به int? در سی شارپ تبدیل می شود.

    داده های Nullable در آخرین لحظات آگوست 2005 اضافه شدند چند هفته مانده به اتمام کار اداری و برای بهبود زبان.متغیر Null در حقیقت خالی نیست، بلکه نمونه ای است از struct Nullable<T> با ویژگی HasValue مساوی false. وقتی در برنامه قرار می گیرد، خود به خود نمونه خالی در آن قرار می گیرد، نه مقدار خود آن، در نتیجه اشاره گر مقصد همیشه غیر Null می باشد، حتی برای مقادیر Null. کد زیر نضص بالا را مشخص می کند:
    کد PHP:
    [PHP]
    کد:
     		 			 int? i = null; 
    object o = i; 
    if (o == null) 
        Console.WriteLine(«Correct behaviour - runtime version from September 2005 or later»); 
    else 
        Console.WriteLine(«Incorrect behaviour - pre-release runtime (from before September 2005)»);
    [/PHP]
    وقتی درون شی ای کپی می شود، نمونه Nullable به صورت تشریفاتی در آن قرار می گیرد و در نتیجه مقادیر و منابع Null با هم برابر می شوند.در گذشته این خاصیت دارای مجادله بود تا زمانی که علاوه بر .NET2 ، به هسته CLR نیز مجهز شد و همه تکنولوژی ها نظیر #CوVBوSQL Server 2005و Visual Studio 2005 را شامل شد.

    Coalesce Operator

    مقدار اولین عملوندی که null نباشد را برمی گرداند.(یا null،برای زمانی که تمام عملوندها null باشند)
    کد PHP:
    [PHP]
    کد:
     		 			 object nullObj = null;  
    object obj = new Object();  
    return nullObj ?? obj; // returns obj
    [/PHP]
    کاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده است.
    کد PHP:
    [PHP]
    کد:
     		 			 int? i = null; 
    int j = i ?? 0; /  Unless i is null, initialize j to i. Else (if i is null), initialize j to 0. /
    [/PHP]
    ویژگی های جدید در C# 3.0

    این ورژن در تاریخ 19 نوامبر سال 2007 به عنوان بخشی از .NET Framework 3.5 عرضه شد.که شامل ویژگی های جدید الهام شده از زبان های برنامه نویسی اصلی(Functional) مانند Haskell و ML، و الگوی LINQ برای CLR است.در حال حاظر توسط هیچ موسسه استاندارد سازی ای تائید نشده است.

    معرفی (Language-Integrated Query(LINQ

    LINQ، یک زبان پرس و جوی قابل انعطاف و همه منظورهبرای بسیاری از انواع منبع داده هااست( مثل انتخاب اشیا شناور، سندهای XML، بانک های اطلاعاتی و . . .) که در ویژگی های 3#C جمع شده اند. سینتکس زبان به زحمت از SQL گرفته شده است، برای مثال:
    کد PHP:
    [PHP]
    کد:
     		 			 int[] array = { 1, 5, 2, 10, 7 }; 
      
    // Select squares of all odd numbers in the array sorted in descending order 
    IEnumerable<int> query = from x in array 
                             where x % 2 == 1 
                             orderby x descending 
                             select x   x;
    [/PHP]
    مقدار دهی به اشیا
    کد PHP:
    [PHP]
    کد:
     		 			 Customer c = new Customer(); c.Name = "James";
    [/PHP]
    عبارت بالا می تواند به صورت زیر نوشته شود:
    کد PHP:
    [PHP]
    کد:
     		 			 Customer c = new Customer { Name="James" };
    [/PHP]
    مقدار دهی Collection
    کد PHP:
    [PHP]
    کد:
     		 			 MyList list = new MyList(); 
    list.Add(1); 
    list.Add(2);
    [/PHP]
    عبارت بالا می تواند به صورت زیر نوشته شود:
    M کد PHP:
    [PHP]
    کد:
     		 			 yList list = new MyList { 1, 2 };
    [/PHP]
    فرض کنید که اجزای MyList و System.Collections.IEnumerable دارای متد عمومی Add هستند.

    انواع داده ای بی نام
    کد PHP:
    var x = new { FirstName="James", LastName="Frank" };

    C# 2.0توابع بی نام را معرفی کرد. C# 3.0هم انواع بی نام را معرفی می کند.با استفاده از این ویژگی برنامه نویسان قادر خواهند بود به صورت Inline انواع دلخواه خود را ایجاد کنند.به نمونه زیر توجه کنید:
    کد PHP:
    static void Main(string[] args)
    {
    var
    anonymousType = new { Name = string.Empty, Age = 0 };
    }

    کد ارائه شده، یک نوع بی نام را تعریف می کند که از طریق متغیر ضمنی محلی به نام anonymousType در اختیار قرار می گیرد.

    چرا Anonymous types؟ انواع بی نام بهترین گزینه برای تولید Entity Typeها می باشند.همانطور که گفته شد Entity Typeها فقط حاوی داده ها هستند.بنابراین به بهترین نحو می توان داده های دریافت شده از کاربر را در انواع بی نام بسته بندی کرد.




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  4. #34
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    نتیجه نوع متغیر محلی

    کد PHP:
    [PHP]
    کد:
     		 			 var x = new Dictionary<string, List<float>>();
    [/PHP]
    کد بالا با کد زیر قابل تعویض می باشد:
    کد PHP:
    [PHP] Dictionary<string, List<float>> x = new Dictionary<string, List<float>>();
    [/PHP]
    این ویژگی تنها یک ntactic sugarراحت برای کوتاه تر بیان کردن متغیرهای محلی نمی باشد، بلکه برای تعریف متغیرهای بی نام لازم نیز است.

    عبارات لامبدا :

    عبارات لامبدا یک راه کوتاه برای نوشتن مقادیر توابع بی نام کلاس اول را فراهم می کنند. دو مثال زیر را در نظر بگیرید:
    کد PHP:
    [PHP]
    کد:
     		 			 listOfFoo.Where(delegate(Foo x) { return x.Size > 10; }) 
    listOfFoo.Where(x => x.Size > 10);
    [/PHP]
    در مثال های فوق، عبارات لامبدا صرفا یک نوع سینتکس برای delegateهای بی نام با مقادیر دارای بازگشت هستند.هر چند با توجه به نوع متن استفاده می شوند، کامپایلر #C می تواند لامبداها را به ASTها نیز تبدیل کند تا بعدا در زمان اجرا نیز بتوانند پردازش شوند.در مثال فوق، اگر listOfFoo یک مجموعه ساده داخل حافظه نباشد، ولی یک پوشه در اطراف جدول بانک اطلاعاتی می باشد. این تکنیک می تواند برای بهینه کردن اجرا، برای ترجمه بدنه لامبدا به عبارت معادل آن در SQL استفاده شود.در هر یک از دو راه فوق، خود عبارت لامبدا دقیقا شبیه کد به نظر می رسد، بنابراین روش استفاده در زمان اجرا، برای کاربر ناپیدا می باشد.

    یکی از ویژگی هایی کهC# 2.0 ارائه کرد، توانایی تعریف توابع به صورت Inline بود که این ویژگی با عنوان توابع بی نام (anonymous methods) شناخته می شود. توابع بی نام در پاره ای مواقع بسیار مفیدند. اما نحو(syntax) به کارگیری آنها دشوار می باشد. عبارات لامبدا ویژگی توابع بی نام را دارند اما با نحو ساده تری در C# 3.0معرفی شده اند.به نمونه زیر توجه کنید:
    کد PHP:
    [PHP]
    کد:
     		 			 static void Main(string[] args) 
    { 
       (int x) => x + 1; // explicitly typed parameter 
       (y, z) => y   z;  // implicitly typed parameter 
    }
    [/PHP]
    تعریف عبارات لامبدا از نحو (syntax) خاصی پیرو می کند. همانطور که در کد بالا مشاهده می کنید، پارامترهای تابع هم به صورت صریح و هم به صورت ضمنی قابل بیان اند. کلمه return به صورت ضمنی حذف شده است. تابع معادل عبارت لامبدای اول به صورت زیر است:
    کد PHP:
    [PHP]
    کد:
     		 			 int Fn(int x) 
    { 
        return x+1; 
    }
    [/PHP]
    لیست پارامترها و بدنه عبارت لامبدا توسط => از هم جدا می شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می توان بدنه آن را با استفاده از {} نشان داد.
    کد PHP:
    [PHP]
    کد:
     		 			 static void Main(string[] args) 
    { 
        (int x) => { x + 1; return x   x; }; 
    }
    [/PHP]

    خواص خودکار


    کامپایلر به طور خودکار یک متغیر نمونه خصوصی و قرار دهنده و قرار گیرنده مناسب تولید می کند، مانند :
    کد PHP:
    [PHP]
    کد:
     		 			 public string Name { get; private set; }
    [/PHP]

    توابع بسط داده شده


    توابع بسط داده شده حالتی از سینتکس Suger هستند که امکان اضافه کردن متد جدید به کلاس موجود را بیرون از حوزه تعریف آن فراهم می کنند.در این مثال، تابع بسط داده شده یک تابع ایستا است که قابل فراخوانی توسط تابع مشابه می باشد.گیرنده فراخوانی مقید به اولین پارامتر تابع تحت عنوان this می باشد:
    کد PHP:
    [PHP]
    کد:
     		 			 public static class StringExtensions 
    { 
        public static string Left(this string s, int n) 
        { 
            return s.Substring(0, n); 
        } 
    } 
      
    string s = "foo"; 
    s.Left(3); // same as StringExtensions.Left(s, 3);
    [/PHP]
    زبان سی شارپ کلمه کلیدی sealed را برای این منظور ارائه کرد که امکان ارث بری از یک کلاس را صلب کند. یعنی با اضافه شدن این کلمه کلیدی به ابتدای تعریف کلاس، امکان ارث بری از آن غیر ممکن می شود. C# 3.0 ویژگی جدیدی را در اختیار برنامه نویسان قرار می دهد به این صورت که می توان هر نوع کلاسی حتی کلاس های مهر شده با Sealed را با استفاده از Extension methodsبسط داد.

    توابع جزئی


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

    متغیرهای ضمنی محلی :


    C# 3.0 کلمه کلیدی جدید var را معرفی می کند که به کمک آن برنامه نویسان قادر خواهند بود متغیرهای محلی خود را بدون ذکر صریح نوع آن ها، تعریف کنند.
    کد PHP:
    [PHP]
    کد:
     		 			 namespace CS3_Test 
    { 
        class Program 
        {  
            static void Main(string[] args) 
            { 
                var string_value = «Hello C# 3.0»; 
                var int_value = 3; 
            } 
        } 
     {
    [/PHP]

    یکی از ویژگی های اصلی زبان سی شارپ،Strong Type بودن آن است. Strong Type بودن زبان به این معناست که با اعلان یک متغیر، نوع آن صریحا باید توسط برنامه نویس مشخص شود. آیا اضافه شدن این ویژگی جدید، منافاتی با Strong Type بودن این زبان دارد؟در پاسخ باید گفت که تعریف متغیرهای محلی به صورت ضمنی با استفاده از کلمه کلیدی var هیچ گونه منافاتی با Strong Type بودن سی شارپ ندارد. چون برنامه نویس می بایست نوع متغیر را به هنگام اعلان آن صریحا مشخص کند.نوع متغیر پس از اولین اعلان تا اتمام حوزه تعریف آن تغییر نخواهد کرد و هر گونه تلاش برای تغییر نوع با خطا مواجه خواهد شد.بنابراین دو اعلان زیر نامعبر هستند:
    کد PHP:
    [PHP]
    کد:
     		 			 namespace CS3_Test 
    { 
        class Program 
        { 
            static void Main(string[] args) 
            { 
                var string_value; // Error : Implicitly typed locals must be inintialized 
                var int_value = null; /  Error : Cannot assign '<null>' to an implicitly typed local  / 
            } 
        } 
    }
    [/PHP]

    استفاده از var تنها در تعریف متغیرهای محلی امکانپذیر است. در اعلان متغیرها به صورت سراسری، پارامترهای توابع و مقادیر بازگشتی نمی توان از var استفاده کرد. چرا var ؟ این ویژگی آزادی عملی بیشتری برای کار با متغیرهای محلی در اختیار برنامه نویس قرار می دهد. سناریویی را در نظر بیگیرید که یک تابع تحت شرایطی، مقادیر از انواع مختلف را برگرداند. در این صورت بدون درگیر شدن با casting و تبدیل نوع می توان با تعریف متغیر ضمنی محلی هر نوعی را که تابع برمی گرداند، در اختیار داشت.

    سازنده های پیشرفته : ماهیت تمامی برنامه های امروزی به گونه ای ست که با حجم عظیمی از داده ها سرو کار دارند.برای مدیریت داده ها، نیاز به کلاس هایی ست که در مهندسی نرم افزار آنها را Entity Types می نامیم.این کلاس ها به عنوان بسته هایی از داده ها محسوب می شوند.معضل فعلی موجود در رابطه با Entity Typeها تعدد سازنده های آن ها می باشد و ممکن است شما نیز با این مشکل برخورد کرده باشید.به این صورت که در سناریوهای مختلف، برنامه نویسان مجبور هستند سازنده یک کلاس را به چند شکل سربارگذاری کنند.C# 3.0 راه چاره ای فوق العاده برای این مشکل ارائه می دهد. Object initializer حالت پیشرفته ای از سازنده می باشد.

    [PHP]
    کد:
     class Person
    {
        private string firstname;
     
        public string FirstName
        {
            get { return firstname; }
            set { firstname = value; }
        }
     
        private string lastname;
     
        public string LastName
        {
            get { return lastname; }
            set { lastname = value; }
        }
     
        private int age;
     
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }
    [/PHP]

    این کلاس شامل سه متغیر بوده و برای هر متغیر خاصیتی تعریف شده است.اینک این سوالات مطرح می شوند : سازنده این کلاس را به چند شکل باید سربارگذاری کرد؟ سازنده ای که هر سه متغیر را مقداردهی کند؟ شاید در مواردی هر سه متغیر در دست نباشد در این صورت چه سازنده ای باید فراخوانی شود؟ C# 3.0 راه حل زیر را ارائه می دهد.فرض کنید بخوانیم نمونه ای ازکلاس Person را ایجاد کنیم. همانطور که مشاهده می کنید،در C# 3.0 به هنگام نمونه سازی، این امکان در اختیار برنامه نویس قرار می گیرد که هر یک از خصیصه های موجود در کلاس را به دلخواه و بنا به نیاز مقدار دهی کند به صورت زیر :

    [PHP]
    کد:
     Person person = new Person 
    { 
        Age = 21,
        FirstName = «Mohamad Sadegh»,
        LastName = "Mozafari" 
    };
    [/PHP]
    عبارات جست و جو (Query Expression) : تیم طراح سی شارپ ویژگی فوق العاده ای را به آن اضافه کرد که برنامه نویسان را قادر می سازد نحو (Syntax) زبان های پرس و جو مانند SQL و XQuery را با استفاده از این زبان پیاده سازی کنند. این ویژگی با نام اختصاری LINQ شناخته می شود و دارای انواع زیر است:

    § LINQ-to-Objects - talks to in-memory objects

    § LINQ-to-SQL - talks to SQL Server databases

    § LINQ-to-XML - talks to hierarchical data represented in XML

    § LINQ-to-DataSets - talks to DataSet objects and underlying DataTables with their relationships


    § LINQ-to-Entities - talks to "entities", part of ADO.NET 3.0

    نمونه ای از کاربرد LINQ به صورت زیر است:
    کد PHP:
    [PHP]
    کد:
     		 			 static void Main(string[] args) 
    { 
        var int_array = new int[] { 1, 2, 7, 9, 12 }; 
      
        var selective_array = from c in int_array where c > 0 select c; 
      
        foreach (var selected in selective_array) 
        { 
            Console.WriteLine(selected); 
    {  
    }
    [/PHP]

    توضیح : در مثال بالا ابتدا یک آرایهٔ int با مقداردهی اولیه تعریف شده است.سپس با استفاده از دستورات) LINQ که جز کلمات کلیدی سی شارپ محسوب می شوند)، آرایه ای با اعضای بزرگتر از 5 انتخاب و در متغیر ضمنی محلی selective_array ذخیره می شود.در نهایت اعضای selective_array به صورت 7 و 9 و 12 خواهد بود.در توضیح این ویژگی جدید به همین یک مثال بسنده می کنیم چون بیان تمامی جنبه های LINQ خود نیازمند نگارش مقاله ای مفصل می باشد.

    آرایه های نوع ضمنی :آرایه ها را نیز می توان با استفاده از کلمه کلیدی var تعریف کرد.
    کد PHP:


    static void Main(string[] args)
    {
    var a = new[] { 1, 10, 100, 1000 }; // int[]
    var b = new[] { 1, "one", 2 }; // Error
    }




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  5. #35
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    یش پردازنده

    ویژگی «دستورات پیش پردازنده» سی شارپ(اگرچه آنها به واقع یک پیش پردازنده نیستند) مبنی بر دستورات پیش پردازنده C است که به برنامه نویس اجازه تعریف سمبلهایی را می دهند.برخی از این دستورات عبارتند از : #if ، #region ، #define . راهنماهایی نظیر #region تذکراتی به ویرایش گرها برای code foldingمی دهند.

    توضیحات کد

    توضیحات تک خط با استفاده از دو اسلش تعریف می شوند(//) و توضیحات چند خطی با / شروع و به / ختم می شوند.
    کد PHP:
    [PHP]
    کد:
     		 			 public class Foo 
    { 
        // a comment 
        public static void Bar(int firstParam) {}  //Also a comment 
    } 
      
    public class FooBar 
    { 
        /  a comment  / 
        public static void BarFoo(int firstParam) {}  /  Also a comment  / 
    
    توضیحات چند خطی هم چنین می توانند با /  شروع و با  / تمام شوند. 
    public class Foo 
    { 
        /  A Multi-Line 
           comment   / 
        public static void Bar(int firstParam) {}   
    }
    [/PHP]
    سیستم مستند سازی XML

    سیستم مستند سازی سی شارپ بسیار شبیه به جاوا است ، اما مبنی بر XML. دو شیوه مستند سازی در حال حاضر به وسیله کامپایلر سی شارپ پشتیبانی می شود.

    توضیحات تک خطی،که معمولا در تولید کننده کد Visual Studioپیدا می شوند، با استفاده از /// شروع می شوند.
    کد PHP:
    [PHP]
    کد:
     		 			 public class Foo 
    { 
        /// <summary>A summary of the method.</summary> 
        /// <param name="firstParam">A description of the parameter.</param> 
        /// <remarks>Remarks about the method.</remarks> 
        public static void Bar(int firstParam) {} 
    }
    [/PHP]
    توضیحات چند خطی،که در نسخه 1.0 تعریف شدند ،اما در نسخه 1.1 پشتیبانی از آنها وجود نداشت با / شروع و به / ختم می شوند:
    کد PHP:
    [PHP]
    کد:
     		 			 public class Foo 
    { 
        /   <summary>A summary of the method.</summary> 
            <param name="firstParam">A description of the parameter.</param> 
            <remarks>Remarks about the method.</remarks>  / 
        public static void Bar(int firstParam) {} 
    }
    [/PHP]
    نکته:در اینجا یک ملاک سخت در مورد استفاده از فضاهای خالی در سندهای XML هنگام استفاده از / وجود دارد:
    کد PHP:
    [PHP]
    کد:
     		 			 /    
       <summary> 
       A summary of the method.</summary> /
    [/PHP]
    نوع دیگری از کد بالا ارائه خواهد شد:
    کد PHP:
    [PHP]
    کد:
     		 			 /    
       <summary> 
       A summary of the method.</summary> /
    [/PHP]
    سینتکس سندسازی توضیحات XML در یک ضمیمه بی قاعده از استاندارد ECMAاز #C وجود دارد. یک استاندارد مشابه قوانینی برای پردازش توضیحات و تبدیل آنها به متون Plain در XML را با کمک قوانین CLI فراهم می کند. این به هر IDE در #C و دیگر ابزار گسترش دهنده امکان پیدا کردن هر نمادی را در کدها می دهد.

    (CLR(Common Language Runtime

    بخش مرکزی .NET Framework ، محیط اجرایی Runtime می باشد که اصطلاحاً به آن CLR یا .NET Runtime می گویند.کدهایی که تحت کنترل CLR اجرا می شوند اغلب به عنوان کدهای مدیریت شده نامیده می شوند.

    اگر چه،پیش از این که کدها(همه زبان های .NET ) به وسیله CLR اجرا شوند،بایستی مورد کامپایل قرار گیرند.در .NET عمل کامپایل در دو مرحله صورت می گیرد:

    1) کامپایل سورس کد به MSIL.

    2) کامپایل MSIL به کد مختص پلتفرم به وسیله CLR


    یک نکته قابل توجه، اشتراک زبان میانی مایکروسافت با کد بایت جاوا(Bytecode)است.ایدة این اشتراک از آنجا سرچشمه گرفت که چون Bytecode یک زیان سطح پایین با یک دستور زبان ساده می باشد(که به جای متن مبتنی بر کدهای عددی است) ،می تواند به سرعت به کدهای بومی(Native) ترجمه شود.


    برخی ویژگی های MSIL

     شی گرایی و بکارگیری واسط ها

     تمایز فراوان بین انواع مقداری و ارجاعی

     تعیین Strong Type(نوع داده Variantدیگر معتبر نیست)

     مدیریت خطا از طریق به کارگیری Exceptio

     بکارگیری صفات



    اشکالات
    پلتفورم


    منبع .NET مایکروسافت برای اجرا فقط ویندوز است .پیاده سازی های دیگری برای اجرای برنامه های سی شارپ در ویندوز، لینوکس،BSD یا Mac OS X[[]] وجود دارند اما هنوز کامل نیستند : Mono و DotGNU در نوامبر سال 2002 توسط مایکروسافت(نسخه 1.0) برای پیاده سازی CLI برای کار در Free BSD و Mac OS X 10.2 ارائه شد ، اما نسخه های بعدی آنها فقط قابل اجرا بر روی ویندوز بود.

    پیشرفت در آینده

    نسخه بعدی این زبان، 4#C است که از اکتبر سال 2008 در حال ساخته شدن است.ماکروسافت لیستی از ویژگی های جدید 4#C را در کنفرانس توسعه دهندگان حرفه ای اعلام کرده است.تمرکز اصلی در ورژن بعدی روی قابلیت هماهنگی فریم ورک ها و نوع زبان هایی است که کامال پویا یا قیمتی پویا هستند، مانند dynamic language runtime و COM. ویژگی های زیر تا کنون اعلام شده اند:

    پارامترهای نوع generic از نوع Covariant و contravariant:

    پارامترهای واسط های generic و deletageها می توانند با استفاده از کلمات out و in از دو نوع Covariant و contravariant باشند.این تعیین نوع ها بعدا برای تبدیل انواع به یکدیگر، چه از نوع صریح یا مجازی و چه از نوع compile-time یا run-time به کار می رود.به عنوان مثال، واسط IEnumerable<T> در زیر دوباره تعریف شده است:
    کد PHP:
    [PHP]
    کد:
     		 			 interface IEnumerable<out T> 
    { 
      IEnumerator<T> GetEnumerator(); 
    }
    [/PHP]
    بنابراین، هر کلاس مشتق شده ای که از IEnumerable<Derived> استفاه کرده باشد، با تمام کلاس های پایه که IEnumerable<Base> را دارند سازگار است.به عنوان تمرین، کد زیر نوشته شده است:
    کد PHP:
    [PHP]
    کد:
     		 			 void PrintAll(IEnumerable<object> objects) 
    { 
      foreach (object o in objects) 
      { 
        Console.WriteLine(o); 
      } 
    } 
     IEnumerable<string> strings = new List<string>(); 
    PrintAll(strings); // IEnumerable<string> is implicitly converted to IEnumerable<object> 
    
    برای contravariance، رابط IComparer<T> به صورت زیر دوباره تعریف شده است: 
    public interface IComparer<in T> 
    { 
        int Compare(T x, T y); 
    }
    [/PHP]
    بنابراین، هر کلاسی که IComparer<Base> را برای یک کلاس پایه بیان می کند، با IComparer<Derived> در تمام واسط ها و کلاس هایی که از آن کلاس پایه مشتق شده اند، سازگار است. این امر نوشتن کد زیر را میسر می سازد:
    کد PHP:
    [PHP]
    کد:
     		 			 IComparer<object> objectComparer = GetComparer(); 
    IComparer<string> stringComparer = objectComparer;
    [/PHP]
    جستجوی عضو پویا

    در سیستم انواع داده های #C یک نوع جدید با نام شبه-نوع معرفی شده است که مانند System.Object رفتار می کند، ولی در ادامه، هر دسترسی به اعضا یا برنامه هایی که از این نوع استفاده می کنند، بدون چک شدن نوع داده هایشان اجازه کار دارند و تجزیه آنها تا زمان اجرا به تعویق می افتد. به عنوان مثال:
    کد PHP:
    [PHP]
    کد:
     		 			   // Returns the value of Length property or field of any object 
      int GetLength(dynamic obj) 
      { 
        return obj.Length; 
      } 
      
      GetLength(«Hello, world»);        // a string has a Length property, 
      GetLength(new int[] { 1, 2, 3 }); // and so does an array, 
      GetLength(42);                    // but not an integer - an exception will be thrown here at run-time
    [/PHP]
    صدا زده شدن های متد پویا، مانند پارامترهای صریح یا مجازی با مقدار نوع dynamic راه اندازی می شوند. به عنوان مثال:
    کد PHP:
    [PHP]
    کد:
     		 			  void Print(dynamic obj) 
      { 
         Console.WriteLine(obj); // which overload of WriteLine() to call is decided at run-time 
      } 
      
      Print(123);   // ends up calling WriteLine(int) 
      Print("abc"); // ends up calling WriteLine(string)
    [/PHP]
    جستجوی پویا تحت سه مکانیزم مشخص اجرا می شود: COM IDispatch برای اشیا COM ، رابط IDynamicObject DLR برای اشیا دارای این واسط و Reflection برای بقیه اشیا.بنابراین هر کلاس #C می تواند صدا زده شدن های پویای خود را با اجرای IDynamicObject در نمونه های خود جدا کند. در مورد متدهای پویا و مشخص کننده صدا زدن ها، تجزیه و تحلیل اضافه بار مطابق انواع اصلی که به عنوان آرگومان ها هستند، در زمان اجرا اتفاق می افتد، در غیر این صورت بر اساس قوانین تجزیه و تحلیل اضافه بار #C عمل خواهد شد.به علاوه، در مواردی که در صدا زدن پویا، گیرنده خودش پویا نیست، تجزیه و اضافه بار زمان اجرا تنها به متدهایی که در زمان کامپایل به صورت گیرنده ظاهر شده اند، رسیدگی می کند. به عنوان مثال:
    کد PHP:
    [PHP]
    کد:
     		 			 class Base 
    { 
      void Foo(double x); 
    } 
      
    class Derived : Base 
    { 
      void Foo(int x); 
    } 
      
    dynamic x = 123; 
    Base b = new Derived(); 
    b.Foo(x); // picks Base.Foo(double) because b is of type Base, and Derived.Foo(int) is not exposed 
    dynamic b1 = b; 
    b1.Foo(x); // picks Derived.Foo(int)
    [/PHP]
    هر مقداری که توسط دستیابی به عضو پویا برگردانده شده باشد، خودش از نوع پویا است.مقادیر نوع پویا به سایر نوع ها و از سایر نوع عا قابل تبدیل هستند. در نمونه کد بالا، این امر به تابع GetLength اجازه با مقدار بازگردانده شده از Length بدون هیچ صریحی به عنوان integer استفاده کند.در زمان اجرا، مقدار واقعی به نوع خواسته شده تبدیل می شود.

    کلمه کلیدی اختیاری ref

    در حال حاظر کلمه کلیدی ref برای متدهای صدا زننده اختیاری است. کد زیر را در نظر بگیرید:
    کد PHP:
    [PHP]
    کد:
     		 			 void Increment(ref int x) 
    { 
      ++x; 
    } 
      
    int x = 0; 
    Increment(ref x); 
    
    به صورت زیر هم می تواند نوشته شود: 
    void Increment(ref int x) 
    { 
      ++x; 
    } 
      
    int x = 0; 
    Increment(x);
    [/PHP]
    آرگومنت های نام گذاری شده و پارامترهای اختیاری

    در 4#C پارامترهای اختیاری ای با مقادیر پیش فرض موجود در ++C معرفی می شوند. به عنوان مثال:
    کد PHP:
    [PHP]
    کد:
     		 			 void Increment(ref int x, int dx = 1) 
    { 
      x += dx; 
    } 
      
    int x = 0; 
    Increment(ref x); // dx takes the default value of 1 
    Increment(x, 2); // dx takes the value 2
    [/PHP]
    به علاوه، برای کامل کردن پارامترهای اختیاری، می توانید صریحا نام پارامترها را در صدازدن های متدها تعیین کنید.این کار به شما اجازه تصویب کردن انتخابی برای هر زیر مجموعه اختیاری از پارامترهای متد را می دهد.تنها محدودیت موجود این است که پارامترهای نام دار باید بعد از پارامترهای بدون نام بیایند.نام پارامترها می توانند برای هر دو نوع پارامترهای اختیاری و ضروری تعیین شوند و می توانند برای بهبود خوانایی و فراخوانی دوباره آرگومان ها مفید باشند. به عنوان مثال:
    کد PHP:
    [PHP]
    کد:
     		 			 Stream OpenFile(string name, FileMode mode = FileMode.Open, FileAccess access = FileAccess.Read) { ... } 
      
    OpenFile(«file.txt»); // use default values for both "mode" and "access"  
    OpenFile(«file.txt», mode: FileMode.Create); // use default value for "access" 
    OpenFile(«file.txt», access: FileAccess.Read); // use default value for "mode" 
    OpenFile(name: «file.txt», access: FileAccess.Read, mode: FileMode.Create); // name all parameters for extra readability, and use order different from method declaration
    [/PHP]
    با پشتیبانی از پارامترهای اختیاری، کد بالا می تواند به صورت زیر خلاصه شود:
    کد PHP:
    [PHP]
    کد:
     		 			 doc.SaveAs(«Test.docx»);
    [/PHP]
    کتابخانه ها

    جزئیات مشخصات #C، حداقل تعداد نوع ها و کتابخانه های کلاس است که کامپایلر نیاز به وجود آن ها دارد.عملا، اغلب #C توسط بیشترین استفاده از CLI را می کند، که استاندارد شده ECMA-335 است.




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  6. #36
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    زبان برنامه نویسی فورترن FORTRAN

    زبان خیلی عجیب و جالبی است - بعدا دربارش حرف میزنم ( شاید هم اموزش دادم )

    فورترن (FORTRAN مخفف FORmula TRANslation) زبان برنامه نویسی مفسری است (ایستای کامپایل شده). زبان برنامه نویسی فورترن زبانی ساده و محاسباتی است و پروژه های بسیاری از رشته های فنی مهندسی به کمک این زبان نوشته و اجرا شده است.

    این زبان در دهه۱۹۵۰ در شرکت آی بی ام توسط ۲۵ نفر از دانشمندان برجستهٔ رایانه به سرپرستی جان بکوس (John Backus) طراحی شد. فورترن اولین زبان برنامه نویسی سطح بالا است. نسخه های اخیر فورترن بر خلاف نسخه های قدیمی دارای قابلیت های شی گرایی هستند. فورترن دومین زبانی بود که از سوی انسی (ANSI) استاندارد شد تکامل آن را می توان در نسخه های پرشمار بعدی آن دید (فورترن ۶۶، فورترن۷۷، فورترن ۹۰، فورترن۹۵ و فورترن ۲۰۰۳). در فورترن سازگاری میان هر نسخه با نسخه پیشین هم چنان حفظ شد. از نسخه های جدید آن می توان به ویژوال فرترن اشاره کرد.


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

    از مزیت های فورترن «تعریف متغیر در این زبان» است. در فرترن بر خلاف سایر زبان های سطح بالا مثل پاسکال یا سی، صحیح یا اعشاری بودن متغیر تعریف نمی شود. در این زبان به طور قراردادی متغیرهایی که با یکی از حروف زیر آغاز میشوند صحیح فرض می شوند و سایر متغیرها اعشاری در نظر گرفته می شوند.

    کد PHP:
    I[PHP]
    J
    K
    L
    M
    N [/PHP]




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  7. #37
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    زبان برنامه نویسی لیسپ Lisp

    لیسپ یک زبان برنامه نویسی رایانه است که در سال ۱۹۵۸ به وسیلهٔ جان مک کارتی ابداع شده است. این زبان، مانند زبان برنامه نویسی پرولوگ، بیشتر برای برنامه نویسی هوش مصنوعی مورد استفاده قرار می گیرد. با توجه به اینکه زبان لیسپ از نحو ساده ای برخوردار است، تجزیه و پیاده سازی آن نسبتاً با سهولت انجام می شود.
    متن برنامه های لیسپ عموماً از نمادها و لیست هایی از نمادها تشکیل می شود و بدین خاطر است که این زبان لیسپ (مخفف پردازش لیست) نامیده شده است. یکی از ویژگی های جالب زبان لیسپ این است که خود برنامه های لیسپ نیز لیست هستند و بنا بر این، می توان با برنامه ها به عنوان داده ها رفتار کرد و یا داده ها را به عنوان برنامه ارزیابی نمود.
    لیسپ دارای گویش های مختلفی است که بعضی از آنها دارای قابلیت های شیءگرا نیز هستند. از این میان می توان به کامن لیسپ اشاره کرد.
    در ابتدا لیسپ به عنوان علامتگذاری و نمادسازی ریاضیات و برای برنامه های کامپیوتری ابداع شد.زبان لیسپ به سرعت مورد توجه برنامه نویسان از جمله برای تحقیقات علمی هوش مصنوعی قرار گرفت.لیسپ یکی از ابتدائی ز بان های برنامه نویسی می باشد،ودر علوم کامپیوتر بر بسیاری از تفکرات و ایده ها پیشگام بود.لیسپ شامل ساختمان دادهٔ درخت،مدریت نگهداری اتوماتیک،برنامه نویسی پویا،برنامه نویسی شی گرا و کامپایلر مستقل می باشد.
    نام لیسپ از زبان پردازش لیسپ گرفته شده است.لینک لیست یکی از قسمت های اصلی ساختمان دادهٔ زبان لیسپ است و سورس کد لیسپ از لیست ها ساخته شده است و می تواند به عنوان ساختمان داده عمل کند.پیشرفت و توسعهٔ سیستم ماکرو به برنامه نویسان اجازه می دهد تا ترکیب های جدید ویا حتی حیطهٔ زبان های برنامه نویسی ویژه ای را ایجاد کرده و در زبان لیسپ تعبیه کنند. قابلیت تبادل کدها و داده ها به زبان لیسپ قابلیت تشخیص ترکیب ها را می دهد،همهٔ کدهای برنامه به صورت عبارت های نمادین یا لیست های پرانتز گذاری شده نوشته شده اند.
    یک تابع می تواند توسط خودش ویا توابع دیگر فراخوانی شود ویا طبق قواعد نحوی نوشتن یک لیست و استفاده از اول نام عملگرها و پیروی کردن از قواعد آرگومان ها ایجاد شود.به عنوان مثال تابع fدارای 3 آرگومان می باشد و به صورت مقابل توانائی فراخوانی را دارد و مورد استفاده قرار می گیرد:

    کد PHP:
    [PHP]
    کد:
     		 			 (f x y z)
    [/PHP]
    زبان برنامه نویسی لیسپ توسط جان مک کارتی در سال 1958 در حالی که در مؤسسهٔ فناوری ماساچوست (MIT) بود ابداع شد.مک کارتی طرح خودش را در یک مقالهٔ مرتبط با انجمن ماشین آلات کامپیوتری در سال 1960 منتشر کرد.طرح وی در ابتدا به صورت «بخش اول:توابع بازگشتی از دید عبارت های نمادین و محاسبهٔ آنها توسط ماشین» ارائه شد و بخش دوم آن هیچگاه منتشر نشد.وی نشان داد که با یک تعداد ساده و کمی از عملگرها و علمتگذاری توابع می توان یک زبان تورینگ کامل برای الگوریتم ها ایجاد کرد. زبان پردازش اطلاعات اولین زبان هوش مصنوعی بود. از سال 1955 یا 1956 و پیش از آن ایده های بسیاری بر زبان لیسپ وارد شد از جمله پردازش لیست و توابع بازگشتی که در زبان لیسپ به کار برده شد. ثبت های اصلی مک کارتی به صورت عبارت های غیر نمادین که خواستار تفسیر کردن و برگرداندن به عبارت های نمادین بود.به عنوان مثال عبارت غیر نمادین car[consA,B معادل عبارت نمادین (car (cons A B)بود که در زبان لیسپ به کار گرفته شده بود.برنامه نویسان به سرعت عبارت نمادین را انتخاب و عبارت های غیر نمادین را ترک کردند.

    لیسپ برای اولین بار توسط استفان راسل روی یک کامپیوتر IBM 704 اجرا شد. راسل مقالهٔ مک کارسی را مطالعه کرد و دریافت که توابع لیسپ می توانند در کد ماشین اجرا شوند. این نتیجه از مطالعه و دریافت راسل نشان می دهد که مفسر لیسپ می توانست برای اجرای برنامه های لیسپ و ارزیابی صحیح عبارت لیسپ استفاده شود.
    دو زبان اسمبلی به عنوان دو عملیات اصلی و ابتدائی تجزیه و جدا کردن عناصر اصلی لیست برای IBM 704 شد.این دو زبان اسمبلی car (مضمون آدرس ثبات) و cdr (محتوای کاهش میزان ثبات ها) نسخهٔ لیسپ هنوز ازcar وcdr برای عملیاتی که اولین عنصر در یک لیست و باقی ماندهٔ لیست را برمی گرداند،استفاده می کند.
    اولین کامپایلر تکمیل شدهٔ لیسپ،در سال 1962توسط تام هارت و مایک لوین در MIT اجرا شد، این کامپالر معرفی شده مدل لیسپ با کامپایلر نحوی در هر کامپایل و ترجمهٔ توابع می تواند به طور رایگان در هم بیامیزد.
    زبان به کار گرفته شده در ثبت هارت و لوین نسبت به کدهای ابتدائی مک کارتی به شیوهٔ لیسپ مدرن و جدید نزدیک تر می باشد.

    پیوستن به هوش مصنوعی:

    بعد از شروع لیسپ ، لیسپ به انجمن تحقیقاتی هوش مصنوعی پیوست ، خصوصا به سیستم های PDP ، زبان لیسپ به عنوان پیاده ساز طرح کوچک زبان برنامه نویسی استفاده می شود که مبنایی برای سیستم معروف هوش مصنوعی SHRLU بود.
    در سال 1970 تحقیقات علمی هوش مصنوعی به شاخه های تجاری انشعاب پیدا کرد که کارایی سیستم لیسپ موجود در این زمینه یک روند رو به رشد شد.

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

    طی شک کوشش بزرگ نسخه های بیشماری از زبان لیسپ را در یک زبان واحد متمرکز و متحد کردند(نسخه های برجسته و قابل ملاحظه ای شامل: اینترلیسپ ، مک لیسپ ، متالیسپ ، و فرانزلیسپ) زبان های جدید (لیسپ عمومی و مشترک ) در اصل یک زیر مجموعهٔ سازگاری از نسخه های تعویض شده بود. در سال 1994 ، ANSI یک لیسپ عمومی و مشترک استاندارد منتشر کرد. لیسپ عمومی و مشترک زبان برنامه نویسی فناوری اطلاعات ANSI X3.226-1994 در آن زمان فروشگاه های جهانی برای لیسپ خیلی کوچکتر از المان بود.

    ترکیب و معنا شناسی:

    لیسپ یک عبارت جهتدار است ، برخلاف بیشتر زبان های دیگر ، بین عبارت ها و جمله ها تمایز و فرقی وجود ندارد . همهٔ کدها و داده ها به عنوان عبارت ها نوشته شده اند – زمانی که یک عبارت ارزیابی می شود یک مقدار ( یا یک لیستی از مقادیر) را می سازد ، که آن هم در داخل عبارات دیگر جاسازی می شود.
    مقالهٔ 1958 مک کارتی دو نوع از ترکیب ها را معرفی کرد: عبارت نمادین Sexps هم نامیده می شود ، که بازتابی از نمایش داخلی کدها و داده هاست و عبارت غیر نمادین هرگز مورد توجه قرار نگرفت و تقریبا همهٔ زبان ها امروزه از عبارات نمادین استفاده می کنند.
    استفاده از پرانتزگذاری ها تفاوت بسیار آشکار و مشهودی میان لیسپ و دیگر زبان های برنامه نویسی ایجاد کرده است . اسم مستعار LISP از Lost In Stupid Parenthese و یا Lost of Irritating Supper fluous parenthese گرفته شده است . هرچند ترکیب عبارت های نمادین مسئولی برای توان لیسپ است ، این ترکیب به شدت با قاعده و منظم است.

    هرچند ترکیبات لیسپ به نمادگذاری قدیمی محدود نشده اند می تواند به سبک های دیگر توسعه پیدا کند. تکیه روی عبارت ها ، قابلیت انعطاف پذیری زیادی به زبان می دهد ، زیرا توابع لیسپ به صورت لیست نوشته شده اند ، آنها دقیقا مانند داده ها می توانند پردازش شوند، این قابلیت اجازه می دهد برنامه های لیسپ به سادگی و راحتی نوشته شوند و به نسبت برنامه های دیگر به راحتی اداره شوند . (برنامه نویسی غیر نمادین)بسیاری از نسخه های زبان لیسپ با عناصر جدا شده توسط فاصله های سفید و پرانتزگذاری شده ها نوشته می شود. برای مثال (1 2 f00 ) یک لیست است که عنصرهای آن سه اتم هستند ( اتم: کوچکترین عضو لیست ) : این مقادیر 1 و 2 و F00 هستند. این مقادیر ضمنا دارای نوع داده ای خاصی هستند ، مثلا این لیست دارای دو عدد صحیح 1 و 2 و یک نوع دادهٔ ویژهٔ لیسپ که یک Symbol یا نماد نامیده می شود.

    همچنین یک لیست خالی () به عنوان یک اتم ویژهٔ صفر و یا پوچ معرفی شده است. موجودیت یک لیسپ از اتم و لیست تشکیل می شود. عبات ها به عنوان لیست نوشته شده اند ، استفاده کردن از ثبت های پیشوندی ، عناصر ابتدایی در لیست نامی از یک شکل تابع ، عملگرها ، ماکروها و یا اپراتورهای ویژه است.
    آرگومان ها باقیمانده هایی از لیست ها هستند ، برای مثال تابع list آرگومان ها را به عنوان یک لیست بر می گرداند ، بنابراین عبارت (list ‘1 ‘2 ‘foo) ارزیابی می شود و حاصل این ارزیابی لیست (1,2,foo) می باشد.
    نیازی به ارزیابی کردن اعداد نیست چون ارزیابی عدد 1 عدد 1 می شود.آرگومان های مثال قبل از اعداد هستند یعنی آرگومان های ویژه که این آرگومان ها از ارزیابی کردن آرگومان ها جلوگیری می کنند چون مقادیر آن ها مشخص است.هر عبارتی که بیان می شود قبل از اینکه با عبارات دیگر پیوست داده شود به صورت بازگشتی ارزیابی می شود.

    (list(1 2 (list(3 4)))) در این مثال حاصل اررزیابی به صورت لیست (1,2(3,4)) می باشد ،توجه کنید این لیست دارای 3 آرگومان می باشد ، لیست ها می توانند به صورت تو در تو باشند . اپراتورهای حسابگر به صورت همسان رفتار می کنند.
    حاصل عبارت (+1 2 3 4 ) عدد 10 می باشد. عبارت معادل عبارت بالا به صورت 1+2+3+4 می باشد که از نشانگذاری میان وندی استفاد شده است. اپراتورهای حسابگر در زبان لیسپ variadic(n-ary) که زبان لیسپ توانایی پذیرفتن هر تعداد آرگومان را داراست.

    عملگرهای ویژه ساختمان کنترل لیسپ را آماده می کنند. برای مثال ، اپراتور ویژه if سه آرگومان می پذیرد،اگر اولین آرگومان صفر و یا خالی باشد دومین آرگومان ارزیابی می شود و در غیر این صورت هٔرگومان سوم بررسی می شود . بنابر این if(nill(list 1 2 “foo”)(list 3 4 “bar”) که تنها آرگومان (list 3 4 “bar”) بررسی می شود.

    عبارت های لاندا(Lambda) :

    دیگر عبارت های ویژه لاندا می باشد که برای وصل کردن متغیرها به مقادیرشان که درون یک عبارت ارزیابی می شوند استفاده می شود. این عملگر همچنین برای ایجاد کردن توابع هم استفاده می شود. آرگومان های درون لاندا یک لیستی از آرگومان ها هستند و عبارت ارزیابی توابع می باشند. مقادیر بازگشتی مقادیری از عبارت قبلی که ارزیابی شده اند هستند.
    عبارت (Lambda(arg)(+arg1)) زمانی که این تابع به کار برده می شود به صورت یک تابع ارزیابی می شود و وظیفهٔ این تابع معرفی کردن یک آرگومان و اتصال دادن آرگومان به arg و در نهایت برگرداندن یک عدد بزرگتر از آرگومان قبلی می باشد عبارت های لاندا خیلی متفاوت با نام تابع رفتار نمی کند بنابراین اگر در عبارت
    کد PHP:
    [PHP]
    کد:
     		 			 (Lambda(arg)(+arg1))5->6
    [/PHP]
    عدد 5 را وارد کنیم خروجی آن 6 می شود.

    اتم ها : در نسخهٔ اصلی لیسپ دو نوع دادهٔ ابتدایی وجود دارد: اتم ها و لیست ها یک لیست یک رشتهٔ منظم و محدودی از عناصر می باشد ، که هر عنصر در درون خودش یکی از این اتم ها و یا لیست ها را دارد و یک اتم یک عدد یا یک نماد می باشد.
    در اصل یک نماد یک رقم منحصر به فرد می باشدو به عنوان یک رشتهٔ عددی در سورس کد نوشته شده و هر دو به عنوان یک نام متغیر و یک رقم داده ای در پردازش نمادین استفاده می شود برای مثال list(foo(BAR 1)2) شامل سه عنصر : Symbol foo و list(BAR 1) و عدد 2 می باشد. تفاوت اصلی بین اتم ها و لیست ها این است که اتم ها تغییر ناپذیر و منحصر به فرد می باشند. دو اتم که دقیقا به یک صورت و به یک روش در یک شی نوشته شده باشد در مکان متفاوتی در سورس کد ظاهر می شوند، هر لیست یک شی مجزا می باشد و به خاطر اینکه مستقل از دیگر لیست هاست و از دیگر لیست ها به وسیلهٔ مقایسهٔ عملگرها مشخص می شود.

    Cons ها و لیست ها:

    یک لیست لیسپ یک لینک لیست جداست، هر ذره از این لیست یک Cons نامیده می شود و از دو اشاره گر که Car و Cdr نامیده می شوند ترکیب شده است این دو اشاره گر به ترتیب معادل دو فیلد Data و Next در مقالهٔ لینک لیست می باشد.
    کد PHP:
    [PHP]
    کد:
     		 			 Car -> Data Cdr -> Next
    [/PHP]
    بسیاری از ساختمان داده ها می توانند ترکیب هایی از خانه های Cons را داشت باشند ، یکی از این ساختمان داده های ابتدایی لیست مخصوص نامیده می شود ، یک لیست مخصوص هر دو نماد لیست خالی nill و یا خانه ها Cons را داراستکه در هر یک از این خانه ها هر اشاره گر Car به یک داده اشاره می کند (که ممکن است این اشاره گر Cons به یک لیست اشاره کند) و یک اشاره گر Cdr به یک لیست مخصوص دیگر اشاره می کند. اگر یک Cons داده به سر یک لینک لیست برده شود سپس اشاره گر Car آن به اولین عنصر از لیست و اشاره گر Cdr آن به انتهای یک لیست اشاره می کند به همین دلیل عملکرد Car و Cdr را به ترتیب first و rest هم نامیده می شود.

    ارایهٔ لیست عبارت نمادین:

    نمایش پرانتزگذلری عبارت نمادین ساختمان لینک لیست . چندین راه برای نمایش لیست یکسان به عنوان یک عبارت نمادین وجود دارد . یک خانه (Cons ) می تواند به صورت نشان گذاری جفت نقطه گذاری شده نوشته شود به عنوان مثال (a.b) که در آن a یک Car و b یک Cdr است. یک لیست مخصوص بلند ممکن است به صورت یک نشان گذاری جفت نقطه گذاری شده نوشته شود .(a.(b.(c.(d.nill))))

    طبق قرارداد کوتاه شدهٔ عبارت بالا به صورت (a b c d ) در نمادسازی لیست می باشد یک لیست مخصوص ممکن است در یک ترکیبی از دو صورت (a b c.d) نوشته شود . برای سیستمی از سه Cons که آخرین Cdr آن d است.

    دستورالعمل های پردازش لیست:

    لیسپ دستورالعمل های زیادی را برای دستیابی و کنترل لیست ها فراهم می کند . لیست ها می توانند مستقیما با پردازهٔ لیست ایجاد شوند .لیست هر تعدادی از آرگومان ها را می پذیرد و تعدادی از آرگومان ها را بر می گرداند.
    کد PHP:
    [PHP]
    کد:
     		 			 (list 1 2 ‘a 3 ); Output : (1 2 a 3 ) (list 1 ‘(2 3) 4 ); Output : (1 (2 3) 4)
    [/PHP]
    به این دلیل راهی که لیست ها ایجادمی شوند از جفت های Cons (Car,Cdr) پردازهٔ Cons می تواند برای اضافه کردن یک عنصر به جلوی یک لیست استفاده شود. توجه کنید که پردازهٔ Cons در هدایت و به کار بردن آرگومان های لیست نامتقارن است ، بدین دلیل روش های لیست ها ایجاد می شوند.

    کد PHP:
    کد:
    [PHP] (Cons 1 ‘(2 3)); Output: (1 2 3 ) (Cons ’(1 2) ‘(3 4)) Output : ((1 2) 3 4) [/PHP]
    پردازهٔ Oppend دو یا چند لیست را با هم ادغام می کند و یک لیست واحد ایجاد می کند زیرا لیست لیسپ یک لینک لیست است و پیچیدگی زمانی الحاق کردن لیست ها از مرتبهٔ پیچیدگی زمانی O(n) می باشد.
    ساختار اشتراکی: لیست های لیسپ لینک لیست های ساده می توانند با یکی دیگر از لیست ها در ساختمان مشترک باشند به عبارت دیگر دو لیست می توانند دم یکسانی داشته باشندیا رشتهٔ پایانی از Cons های یکسانی داشته باشند مثلا:
    کد PHP:
    [PHP] (setf foo (list 'a 'b 'c)) (setf bar (cons 'x (cdr foo))) [/PHP]

    لیست foo و bar به ترتیب به صورت (a b c) و (X b c ) هستند هرچند دم (b c ) در هر دو لیست ساختار یکسانی دارند ولی مانند هم نیستند، خانه های Cons اشاره گر به b و c در محل حافظهٔ یکسانی برای هردو لیست قرار دارد.
    ساختار اشتراکی سریع تر از کپی کردن می تواند به صورت چشمگیری کارایی را بهبود بخشند. هرچند ، این مهارت می تواند متقابلا در راه های نامطلوب با عملکردهایی که تغییرات لیست های گذشته روی آرگومان های آن تاثیر بگذارد ، اثر کند.

    تغییرات یک لیست از قبیل تغییر دادن C با یک goose روی دیگری نیز تاثیر می گذارد setf (third foo) 'goose) که این تغییر نتیجه را به صورت (a b goose) تغییر می دهد اما bar هم تغییر می کند (X b goose) که ممکن است یک نتیجهٔ غیر منتظره باشد.

    زبان های برنامه نویسی Lisp معمولا از یک خط دستور محاوره ای استفاده می کنند،که می تواند با یک محیط پیچیدهٔ گسترش یافته ترکیب شود.کاربر اصطلاحات و دستورات را در خط دستور وارد کرده یا با رهبری IDE آنها را به سیستم Lisp می فرستد. Lisp دستورات را می خواند ، آن ها را ارزیابی می کند و نتایج را چاپ می کند. به این دلیل است که خط دستور زبان Lisp به حلقهٔ Read-Eval-Print یا REPL معروف است.
    نمونهٔ ساده ای از عملیات REPL در زیر آمده است. این یک شرح ساده است که بسیاری از المان های Lispواقعی در آن نمی آید مانند ماکروها و کوئت ها.

    تابع read جملات متنی را به عنوان ورودی می پذیرد و آنها را به ساختار لیست تجزیه می کند. به عنوان مثال ، وقتی شما رشتهٔ (+ 1 2) را در اعلان تایپ می کنید، تابع read آن را به یک لیست پیوندی حاصل از 3 المان ترجمه می کند: علامت + ، عدد 1 و عدد 2 . خیلی اتفاق می افتد که لیست قسمت موثری از یک کد Lisp باشد که قابل ارزیابی است.به همین دلیل است که یک قطار از لیست به یک تابع نام عملگر مع می دهد.

    تابع eval ساختار لیست را ارزیابی می کند و نوعی دیگر از ساختار را به عنوان نتیجه باز می گرداند.ارزیابی کردن لزوما تفسیر کردن معنی نمی دهد؛ بعضی سیستم های Lisp هر عبارتی را به زبان ماشین تبدیل می کنند. خیلی ساده است؛ به هر حال؛ برای تعریف ارزیابی به عنوان تفسیر : برای ارزیابی یک لیست که نام تابع دارد ، eval ابتدا تمام آرگومان های داده شده به cdr اش را ارزیابی می کند و سپس تابع را روی آن آرگومان ها اعمال می کند.در این مثال ، تابع عمل جمع است و به آرگومان های (1 2) اعمال می شود که نتیجه 3 است.این نتیجهٔ ارزیابی است.

    این وظیفهٔ تابع print است که نتیجه را به کاربر نمایش دهد. برای نتیجهٔ سادهٔ 3 این کار ناقابل است. یک عبارت که با قسمتی از ساختار لیست ارزیابی می شود میاز دارد که print لیست را به حرکت در آورد و در خروجی به شکل یک عبارت S نمایش دهد.

    برای اجرا کردن یک REPL در Lisp ، تنها لازم است که این سه تابع را اجرا کنید و یک تابع حلقه بی نهایت را.(به طور طبیعی اجرای eval پس از اجرای عملگرهای ویژه ای مانند if پیچیده خواهد شد.)یک REPL ساده به خودی خود با یک خط کد انجام شد: (loop(print(eval(red))))

    لیست در اصل تعداد کمی ساختار کنترلی دارد. منتها در تکامل و گسترش زبان تعداد زیادی به آن اضافه شدند.(عملگر اصلی شرایط در زبان Lisp که cond بود بعدا متشکل شد از ساختار if-then-else )

    برنامه نویسان در نسخهٔ Scheme حلقه ها را به صورت بازگشت دم( tail recursion ) بیان می کنند. موسسات متعارف علوم کامپیوتر Scheme بعضی دانشجویان را متعاقد می کند که تنها راه تکرار در زبان Lisp استفاده از بازگشت دم است؛ این اشتباه است. تمامی نسخه های متداول دیده شده از Lisp دارای ساختارهای الزامی برای تکرار هستند.درScheme دستور do به عنوان دستور حلقه پیچیدهٔ Lisp است. علاوه بر این مسالهٔ اصلی که شی گرایی را مهمتر از مسالهٔ فاعلی کرده این است که Scheme نیازهای ویژه ای برای کارکردن با فراخوانی دم(tail calls )دارد، در نتیجه دلیل ترغیب Scheme به استفاده از بازگشت دم این است که روش صراحتا با تعریف خود زبان پشتیبانی می شود .
    در مقابل ، ANSI Common Lisp نیازی به بهینه سازی که معمولا به حذف فراخوانی دم گفته می شود ندارد. در نتیجه این حقیقت که بازگشت دم به عنوان یک جایگزین تصادفی برای استفاده از ساختارهای مبتنی بر تکرار ( مانند do dolist loop ) توصیه نمی شود تنها یک مسالهٔ برتری ادبی نیست ، ولی بالقوه یکی از کارآمدهاست ( بعد از این که این روش فقط به عنوان یک پرش ساده به کار نرفت) و به عنوان یک تصحیح برنامه است .

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

    هر دوی Lisp Commonو Scheme دارای عملگرهای کنترلی غیر محلی هستند.تفاوت این عملگرها یکی از عمیق ترین تفاوت ها مابین این دو نسخهٔ زبان است. Scheme از ورودی مستمر با استفاده از روش call/cc پشتیبانی می کند ، که به برنامه اجازهٔ ذخیره ( و بعدا بازیابی کردن) یک عملیات ویژه را می دهد . Common Lisp از ورودی مستمر پشتیبانی نمی کند ولی از راه های زیادی برای انجام رهایی از تکرار پشتیبانی می کند.




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  8. #38
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    زبان برنامه نویسی ایکون

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

    آیکون (Icon)، یک زبان برنامه نویسی بسیار سطح بالا است که برای آسان نمودن نوشتن برنامه هایی با هدف کار با رشته ها و ساختارها، طراحی شده است. این زبان هم مانند بسیاری از زبان ها از زبان دیگری مشتق شده است. زبان اصلی - که این زبان از روی آن طراحی شده است - SNOBOL است. SNOBOL در آزمایشگاه Bell Telephone در اوایل دهه 60 ساخته شد. بعد به زبان SNOBOL4 ارتقا یافت. که هم اکنون نیز از آن استفاده می شود. Icon در ظاهر ساختارش از SNOBOL4 تاثیر برداشته است. Icon یک زبان بسیار سطح بالا با ویژگی اجرای هدف گرا بوده و امکانات زیادی برای پردازش رشته ها و الگوهای متنی دارد. این زبان با SNOBOL که یک زبان پردازش رشته است مرتبط است. Icon شی گرا نیست، اما یک نمونه شی گرا که Idol نامیده می شد در سال 1996 گسترش یافت که سرانجام تبدیل به Unicon شد.

    درباره آیکون

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

    Icon یک زبان برنامه نویسی همه منظوره، با قابلیت های گسترده برای پردازش رشته ها (متن) و ساختارهای داده است. این زبان در دسته بندی زبان ها جز دسته زبان های امری طبقه بندی می شود. یک زبان با گرامری شبیه C و پاسکال. ولی با معنایی در سطح خیلی بالاتر، که با آن می توان کارهای پیچیده ای انجام داد.

    Icon یک روش نو برای ارزیابی عبارات دارد سبب ارزیابی عبارت بر اساس هدف می شود. قابلیت چک کردن تطابق رشته ها را دارد که باعث دور شدن برنامه نویس از مشکلات ملال آور کار با رشته ها می شود. داده ساختارها درونی Icon شامل set ها و جدول ها با قابلیت داشتن لیست هایی است که بتوان از آن به عنوان vector استفاده کرد. سیستم type این زبان قوی است. تبدیل تایپ در این زبان به صورت خودکار انجام می شود. و اگر یک عددی، در جایی که باید رشته به کار رود استفاده شود، به صورت خودکار به رشته تبدیل می شود. چند پیاده سازی از icon قابلیت های سطح بالای گرافیکی، با رابط آسان کاربری وجود دارد. Icon مدیریت حافظه خودکار دارد، اشیا زمانی که به آنها احتیاج هست، در طول اجرا ساخته می شوند. و فضا با garbage collection آزاد می گردد. تنها محدودیت در طول رشته ها و ساختارهای داده، میزان حافظه موجود است.

    کلمه Icon مخفف و بیان گر موضوع خاصی نیست. با این وجود وقتی این اسم را انتخاب می کردند به کلمه iconoclatis –به معنای بت شکنی - نیز اشاره هایی شد. این اسم قبل از این که این کلمه کاربرد کنونی خود را پیدا کند انتخاب شد. ممکن است بعضی ها فکر کنند که این زبان برای طراحی icon(نقشک) ساخته شده، ولی این طور نیست.

    Icon برای چه کارهایی خوب است؟

    یک زبان همه منظوره مثل Icon به درد اکثر کارهای برنامه نویسی می خورد. به خصوص برای ساخت ابزارهای نرم افزاری برای پردازش روی متن، و برای برنامه های تحقیقاتی و مطالعاتی مناسب است.این زبان برای راحت تر ساختن برنامه نویسی درست شده است، روی ارزش زمان برنامه نویس و اهمیت سریع به کار افتادن برنامه توجه می کند. به صورت متداول این زبان برای کارهای کوتاه، کارهایی که یک بار می توان آن ها را انجام داد و انجام آن (نه کیفیت انجام) مهم است و کارهای بیش از حد پیچیده است.

    ویژگی های زبان Icon

    1. [ ]زبان سطح بالا، همه منظوره
      [ ]احتیاجی به ; در آخر خط ها ندارد.
      [ ]توجه به بالا بردن بهره وری برنامه نویس
      [ ]تابعی بودن
      [ ]مقدارها type دارند. متغییرها ندارند. (هر مقداری را قبول می کنند)
      [ ]حوزه ایستا (عمومی یا محلی) static scoping
      [ ]همه اعداد دقت اختیاری دارند.
      [ ]String نوع داده اولیه محسوب می شود.
      [ ]Listهایی دارد که مثل آرایه، صف و یا پشته عمل می کنند.
      [ ]شی گرا نیست.
      [ ]همروندی ندارد.
      [ ]کتابخانه بزرگی از توابع دارد.


    نحو پایه

    زبان Icon از خانواده ALGOL زبانهای برنامه نویسی ساخت یافته است مشتق شده است و بنابراین نحوی شبیه به C یا Pascal دارد. Icon بیشتر شبیه به Pascal است، از نحو := برای تخصیص، کلمه کلیدی procedure و نحو مشابه آن استفاده می کند. از طرف دیگر Icon از سبک پرانتزهای C برای ساخت یافته سازی گروه های اجرایی استفاده می کند و اجرای برنامه ها با رویه ای به نام main آغاز می شود. از خیلی جهات Icon همچنین خصوصیاتی شبیه به بسیاری از زبان های برنامه نویسی اسکریپتی دارد (مانند SNOBOL): الزامی برای تعریف متغیرها نیست، انواع بطور اتوماتیک تعیین می شوند، و اعداد می توانند بطور اتوماتیک به رشته ها تبدیل شوند و برعکس. ویژگی دیگری که در زبان های اسکریپتی رایج است، اما نه در همه آنها، استفاده از کاراکتر پایان خط است، در Icon، خط ها با نقطه و ویرگول پایان نمی یابند و اگر منطقی باشد با نقطه و ویرگول ضمنی پایان می یابند. رویه ها بلوک های پایه برنامه های Icon هستند، و اگرچه آنها از نام گذاری Pascal استفاده می کنند اما بیشتر شبیه توابع C عمل می کنند و می توانند مقادیری را برگردانند، در Icon کلمه کلیدی function وجود ندارد.
    کد PHP:
    [PHP]
    کد:
     		 			 procedure doSomething(aString) 
     write(aString) 
     end
    [/PHP]
    اجرای هدف گرا

    یکی از مفاهیم کلیدی Icon این است که ساختارهای کنترلی، بجای boolean منطقی در بسیاری از دیگر زبان های برنامه نویسی، بر اساس عبارات "success" یا "failure" پایه گذاری شده اند. در این الگو، مقایسه های ساده مانند if a<b مانند دیگر زبان ها، به معنی « اگر عمل سمت راست درست ارزیابی شود » نیست، در عوض چیزی مثل « اگر عملیات سمت راست موفقیت آمیز باشند » معنی می دهد. در این حالت عملگر < موفقیت آمیز است اگر مقایسه درست باشد، بنابراین نتیجه نهایی نیز همین است. علاوه براین، عملگر < اگر موفقیت آمیز باشد، متغیر دومی را برمی گرداند، که اجازه می دهد چیزهایی شبیه if a<b<c، که یک شکل مقایسه رایج است و در اکثر زبانها بطور مستقیم قابل استفاده نیست، نوشته شوند.

    کاربرد این مفهوم در ارتباط با مثالهای دنیای واقعی واضح تر شود. بنابراین Icon از موفقیت یا شکست برای همه جریانهای کنترلی استفاده می کند، مانند این نمونه کد:
    کد PHP:
    [PHP]
    کد:
     		 			  if a := read() then write(a)
    [/PHP]
    این کد یک خط از ورودی استاندارد را در خروجی استاندارد کپی خواهد کرد. چیزی که در مورد مثال مورد توجه است این است که حتی اگر read() ایجاد خطا کند، کد کار خواهد کرد، مثلا اگر فایل موجود نباشد. در این حالت وضعیت a:=read() موفقیت آمیز نخواهد بود و به سادگی، write فراخوانی نخواهد شود. موفقیت و شکست در توابع به سمت بالا منتقل می شوند به این معنی که شکست در یک تابع تو در تو باعث می شود توابعی که آن را فراخوانی می کنند نیز با شکست روبرو شوند. برای نمونه، ما می توانیم در یک خط، برنامه ای بنویسیم که همه یک فایل ورودی را خروجی کپی کند :
    کد PHP:
    [PHP]
    کد:
     		 			  while write(read())
    [/PHP]
    هنگامی که دستور read() شکست می خورد، برای مثال در انتهای فایل، شکست بطور زنجیره ای بالا خواهد آمد و write() نیز به همین ترتیب شکست می خورد. while که یک ساختار کنترلی است، با شکست متوقف می شود، به این معنی که فایل خالی می باشد. برای مقایسه، مثالی مشابه این را در pseudocode براساس Java می بینیم :
    کد PHP:
    [PHP]
    کد:
     		 			  try { 
     while ((a = read()) != EOF) { 
     write(a); 
     } 
     } catch (Exception e) { 
     // do nothing, exit the loop 
     }
    [/PHP]
    در این حالت دو مقایسه نیاز است، یکی برای انتهای فایل (EOF) و دیگری برای تمام دیگر خطاها. چون Java اجازه نمی دهد خطاها مانند عبارات منطقی مقایسه شوند، مانند Icon، باید نحو طولانی try/catch بجای آن استفاده شود. همچنین بلوک های try در عمل یک هزینه اضافی را، حتی اگر خطایی رخ ندهد، تحمیل می کنند، یک هزینه توزیعی که Icon از آن اجتناب می کند. بنابر این مفهوم، اجرای هدف گرا در Icon به این معناست که تا زمانی که برخی اهداف محقق شوند، اجرا ادامه می یابد. در مثال بالا هدف خواندن تمام فایل است. دستور خواندن تا زمانی ادامه می یابد که اطلاعاتی برای خواندن موجود باشد، و وقتی اطلاعاتی نباشد، شکست می خورد. بنابراین در این زبان، بجای استفاده از بررسی وضعیت بازگشت ها یا ساختارهای مشابه، هدف مستقیما در کد آورده می شود.

    مولدها

    عبارات در Icon اغلب فقط یک مقدار برمی گردانند، برای نمونه، x<5 با موفقیتی با مقدار 5 یا شکست ارزیابی خواهد شد. مثال هایی از every و to. every سبب می شود تا to تا زمانی که شکست بخورد به برگرداندن مقادیر ادامه دهد. مولدها یکی از مفاهیم کلیدی در Icon هستند. مولدها بسیاری از ساختارهای حلقه ای را، بصورت بسیار صریح تر، در این زبان هدایت می کنند. برنامه نویس حلقه ای نمی نویسد و نیازی به مقایسه شرط نیست، Icon همه این کارها را برای او انجام می دهد. Icon شامل چندین مولدساز است. نحو alternator اجازه می دهد یک سری از آیتم ها، تا هنگامی که یکی شکست بخورد، به ترتیب تولید شوند: 1 | "hello" | x<5، اگر x از 5 کمتر باشد، می تواند "1"، "hello" و "5" را تولید کند. متناوب سازها می توانند در بسیاری از حالت ها مانند "or" خوانده شوند، برای نمونه :
    کد PHP:
    [PHP]
    کد:
     		 			  if y < (x | 5) then write(«y=», y)
    [/PHP]
    اگر از x یا 5 کوچکتر باشد، این کد مقدار y را در خروجی خواهد نوشت. Icon بصورت ساختاری تمام مقادیر را از چپ به راست چک می کند تا اولین موفقیت رخ دهد یا لیست خالی شود و شکست را برگرداند. یادآوری می شود که توابع فقط تا زمانی که فراخوانی های شامل آنها شکست نخورد، فراخوانی خواهند شد، بنابراین این مثال را می توان بصورت کوتاه تر، به شکل زیر نوشت :
    کد PHP:
    [PHP]
    کد:
     		 			  write(«y=», (x | 5) > y)
    [/PHP]
    یک مولد ساده دیگر to است که می تواند اعداد صحیح تولید کند، every write(1 to 10) دقیقا همانگونه که نشان می دهد عمل خواهد کرد. نحو bang هر آیتم یک لیست را تولید می کنند. every write(!aString) هر کاراکتر aString را در یک خط جدید خواهد نوشت. اثبات قدرت این مفهوم، مقایسه عملگرهای رشته است. اغلب زبانها تابعی با نام find یا indexOf دارند که موقعیت یک رشته را در رشته دیگر برمی گرداند. در مقایسه با :
    کد PHP:
    [PHP]
    کد:
     		 			  s = «All the worlds a stage. And all the men and women merely players»; 
     i = indexOf("the", s)
    [/PHP]
    این کد 4 را به عنوان اولین موقعیت ظاهر شدن کلمه "the" برخواهد گرداند. برای پیدا کردن نمونه بعدی "the" از تناوب استفاده می شود، , i = indexOf("the", s, 5)، 5 در انتها بیان می کند که باید از موقعیت 5 به بعد جستجو شود. برای یافتن تمام دفعات ظاهر شدن "the"، یک حلقه باید استفاده شود...
    کد PHP:
    [PHP]
    کد:
     		 			  s = «All the worlds a stage. And all the men and women merely players»; 
     i = indexOf("the", s) 
     while i != -1 { 
     write(i); 
     i =  indexOf("the", s, i+1); 
     }
    [/PHP]
    در Icon تابع find یک مولد است، و نمونه بعدی از رشته را تا زمانی که در انتهای رشته شکست بخورد در هر دفعه بازخواهد گرداند. همان کد در Icon می تواند اینطور نوشته شود :
    کد PHP:
    کد:
      	 		 			  s := «All the worlds a stage. And all the men and women merely players» 
     every write(find("the",s))
    Find، موقعیت نمونه بعدی "the" را هربار بازخواهد گرداند و تا زمانی که به انتهای رشته برسد ادامه می یابد. البته زمانهایی هست که شما می خواهید عمدا رشته ای را بعد از نقطه ای از ورودی بیابید، برای نمونه، شما ممکن است بخواهید یک فایل متنی را که شامل داده های یک جدول متقاطع است بررسی کنید. اجرای هدفگرا در اینجا بخوبی عمل خواهد کرد و به این صورت می تواند مورد استفاده قرار گیرد :
    کد PHP:
    [PHP]
    کد:
     		 			  write(5 < find("the", s))
    [/PHP]
    اگر "the" بعد از موقعیت 5 ظاهر شود، موقعیت برگردانده خواهد شد، در غیر این صورت مقایسه شکست خواهد خورد و مانند قبل، شکست را به write() منتقل خواهد کرد. در این کد یک ترفند کوچک وجود دارد که نیاز به ملاحظه دارد : مقایسه مقدار سمت راست را برمی گرداند، بنابراین لازم است که find را در سمت راست مقایسه قرار دهیم. اگر 5 در سمت راست قرار گیرد، 5 نوشته خواهد شد. Icon چند ساختار کنترلی را برای حلقه مولدها اضافه می کند. عملگر every شبیه while است، ایجاد حلقه می کند و با رسیدن به شکست، حلقه پایان می یابد.
    کد PHP:
    [PHP]
    کد:
     		 			  every k := i to j do 
     write(someFunction(k))
    [/PHP]
    چرا every را بجای حلقه while در این حالت استفاده می کنیم؟ چون while مجددا نتیجه اولیه را مقداردهی می کند اما every همه نتایج را تولید می کند. نحو every مانند بلوک ها در Smalltalk مقادیر را به تابع می فرستد. برای نمونه، حلقه بالا می تواند بصورت زیر بازنویسی شود :
    کد PHP:
    [PHP]
    کد:
     		 			  every write(someFunction(i to j))
    [/PHP]
    کاربران می توانند با استفاده از کلمه کلیدی suspend به آسانی مولدهای جدید ایجاد کنند :
    کد PHP:
    [PHP]
    کد:
     		 			  procedure findOnlyOdd(pattern, theString) 
     every i := find(pattern, theString) do 
     if i % 2 = 1 then suspend i end
    [/PHP]
    این مثال روی theString که از find برای پیدا کردن الگو استفاده می کند دور می زند. وقتی نمونه ای پیدا شود، و موقعیت فرد باشد، موقعیت از تابع با suspend برگردانده می شود. در غیر این صورت return suspend در جایی که در مولدهای عمومی نوشته می شود.

    رشته ها

    Icon برای حذف عملکرد شبه اسکریپتی خود، قابلیت هایی را برای سهولت کار با رشته ها افزوده است که قابل توجه ترین آنها scanning system است که بطور مکرر در توابع رشته ای فراخوانی می شود :
    کد PHP:
    [PHP]
    کد:
     		 			  s ? write(find("the"))
    [/PHP]
    این کد، حالت کوتاه تر مثال هایی است که قبلا نشان داده شد. در این حالت عنوان تابع find در خارج از پارامترها در جلوی علامت سئوال قرار داده می شود.

    در زبان Icon چند ویژگی به آن اضافه شده است که کارکردن با رشته را آسان تر می کند. بیشترین چیزی که در این زبان جلب توجه می کند، سیستم بررسی رشته آن است که توابع را به صورت پیاپی روی رشته فراخوانی می کند.
    کد PHP:
    [PHP]
    کد:
     		 			 s ? write(find("the"))
    [/PHP]
    صورت ساده شده یکی از مثال های قبلی است. در این جا چیزی که در آن باید تابع find بگردد در بیرون تابع find و قیل از علامت سوال آمده است. زیر رشته ها از یک رشته با استفاده از براکت و مشخص کردن بازه به دست کی آیند. یک بازه می تواند به یک کاراکتر از رشته یا یک تکه از رشته اشاره کند. رشته ها می توانند از راست به چپ یا برعکس index شوند. مهم این است که شمارهٔ این اندیس ها می تواند 1A2B3C4 یا -3A-2B-1C0 باشد. برای مثال:

    کد PHP:
    [PHP]
    کد:
     		 			 "Wikipedia"[1]     ==> "W" 
    "Wikipedia"[3]     ==> "k" 
    "Wikipedia"[0]     ==> "a" 
    "Wikipedia"[1:3]   ==> "Wi" 
    "Wikipedia"[-2:0]  ==> "ia" 
    "Wikipedia"[2+:3]  ==> "iki"
    [/PHP]
    در آخرین مثال بجای بازه طول آن نشان داده شده است.

    در این جا چند کار دیگر که با رشته ها می توان انجام داد را می بینید:
    کد PHP:
    [PHP]
    کد:
     		 			 s := "abc" 
    s[2] := "123"
    [/PHP]
    "a123c"مقدار کنونی s است.
    کد PHP:
    [PHP]
    کد:
     		 			 s := "abcdefg" 
    s[3:5] := "ABCD"
    [/PHP]
    "abABCDefg" مقدار کنونی s است.
    کد PHP:
    کد:
    [PHP] s := "abcdefg" [/PHP] s[3:5] := ""
    "abefg" مقدار کنونی s است.


    ساختارهای دیگر

    رشته های Icon لیست های ساده ای از کاراکترها هستند، مانند معادل آنها در C. علاوه بر این، Icon به کاربر اجازه می دهد به آسانی لیست های خودش را ایجاد کند (یا آرایه ها) :
    کد PHP:
    [PHP]
    کد:
     		 			  aCat := ["muffins", "tabby", 2002, 8]
    [/PHP]
    آیتم های موجود در یک لیست می توانند از هر نوعی باشند، از جمله ساختارهای دیگر. برای ساختن سریع تر لیست های بزرگتر، Icon شامل مولد list است، i := list(10, "word") یک لیست که شامل 10 کپی از "word" است را تولید می کند. مانند آرایه ها در زبانهای دیگر، Icon اجازه می دهد آیتم ها با موقعیت شان جستجو شوند. weight := aCat[4] Icon شامل توابع شبه پشته ای است، push و pop امکان ایجاد پشته ها و صف ها را فراهم می آورند. Icon همچنین شامل توابعی برای مجموعه ها و جدول هاست. (درهم سازی ها، آرایه های انجمنی، لغت نامه ها و...)
    کد PHP:
    [PHP]
    کد:
     		 			  symbols := table(0) 
     symbols["there"] := 1 
     symbols["here"] := 2
    [/PHP]
    این کد جدولی که مقدار پیش فرض هر کلید ناشناخته آن صفر است ایجاد می کند. سپس دو آیتم را با کلیدهای "there" و "here" و مقادیر 1 و 2 به آن اضافه می کند.

    نمونه برنامه های زبان Icon
    کد PHP:
    [PHP]
    کد:
     		 			 procedure main() 
    while write(map(read(), &ucase, &lcase)) 
    end
    [/PHP]
    اولین خط برنامه را شروع می کند.read و write توابعی هستند که یک خط را می خوانند یا می نویسند. map یک رابطه یک به یک با توجه به آرگومان های 2و3 جا به جا می شود.دو کلمه کلیدی &ucase و &lcase شامل کاراکترها ی حروف بزرگ و کوچک است while هم یک حلقه است که تا زمانی که عمل خواندن تمام نشده تکرار می شود.
    کد PHP:
    [PHP]
    کد:
     		 			 s = «All the worlds a stage. And all the men and women merely players»; 
    i = indexOf("the", s)
    [/PHP]
    این کد 4 را برمی گرداند. جای اولین باری که در آن the آمده است.
    کد PHP:
    [PHP]
    کد:
     		 			 i = indexOf("the", s, 5)
    [/PHP]
    این کد از جای 5 به بعد دنبال the می گردد.
    کد PHP:
    [PHP]
    کد:
     		 			 s = «All the worlds a stage. And all the men and women merely players»; 
    i = indexOf("the", s) 
    while i != -1 { 
      write(i); 
      i =  indexOf("the", s, i+1); 
    }
    [/PHP]
    در هر مرحله جای بعدی رشته the را بر می گرداند تا زمانی که پس از تمام کردن رشته s ناموفق باشد که تمام می شود. همین کد تحت Icon می تواند به این صورت نیز نوشته شود:
    کد PHP:
    [PHP]
    کد:
     		 			 s := «All the worlds a stage. And all the men and women merely players» 
    every write(find("the",s))
    [/PHP]
    findهر دفعه که فراخوانی شود، جای بعدی رشته the در s را می دهد.
    کد PHP:
    [PHP] write(5 < find("the", s))
    [/PHP]
    زمانی رشته را برمی گرداند که جایی که در آن the پیدا شده شماره اش از 5 بیشتر باشد.
    کد PHP:
    [PHP]
    کد:
     		 			 every k := i to j do 
    write(someFunction(k))
    [/PHP]
    چرا از every جای while در این مورد استفاده شده؟ چون while نتیجه اول را دوباره ارزیابی می کند در حالی که every همه نتایج را تولید می کند. عبارت every در واقع مقدارهای قبلی را به تابع می دهد، به عنوان مثال کد بالا می تواند به این صورت بازنویسی شود.
    کد PHP:
    کد:
      	 		 			 every write(someFunction(i to j))




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  9. #39
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    زبان برنامه نویسی میراندا

    میراندا یک زبان برنامه سازی غیر اکید، کملاً تابعی است که توسط David Turner به عنوان جانشینی برای زبان برنامه سازی قبلی او یعنی SASL و KRC طراحی شده، که از برخی مفاهیم ML و HOPE استفاده می کند. محصولی از شرکت Research Software انگلستان. کلمه 'Miranda' نام تجاری است. این زبان اولین زبان کاملاً تابعی است که مورد حمایت تجاری قرار گرفت.

    راه حل اکثر مسائل نمونه در Miranda ساده تر و خلاصه تر از راه حل های زبان های برنامه سازی دیگر است به استثنای زبان APL و مانند اکثر زبان های برنامه سازی تابعی دیگر کاربران آن معتقدند که این زبان امکان ایجاد برنامه های قابل اعتمادتری را با زمان ایجاد کمتری نسبت به زبان های امری که قبلاً استفاده می کرده اند فراهم می کند.

    خلاصه:


    Miranda یک زبان کند، کاملاً تابعی است. به این معنی که این زبان اثرات جانبی و خواص برنامه نویسی امری رو نداره. یک برنامه به زبان Miranda(که به عنوان Script شناخته می شه) مجموعه ای از معادلات است که توابع مختلف ریاضی و انواع داده های جبری رو تعریف می کنه. کلمه مجموعه در اینجا مهم است: به طور کل ترتیب معادلات مهم نیست و برای استفاده از موجودیت ها الزامی در تعریف پیشاپیش آنها نیست.

    از آنجایی که الگوریتم تجزیه به صورت هوشمند از آرایش متن (توگذاری) استفاده می کند، به ندارت پیش می آید که استفاده از براکت لازم باشه و استفاده از پایان دهنده به دستورات نیز لازم نیست. این خصیصه که از ISWIM الگو برداری شده در occam و Haskell نیز مورد استفاده قرار گرفت و بعدها نیز توسط Python به شهرت رسید.

    توضیحات در اسکریپت های عادی توسط کاراکتر || ارائه شد طوری که تا انتهای خط ادامه می یابد. قرارداد دیگر برای توضیحات حالتی بود که روی کل سند تحت عنوان «اسکریپت باسواد» تأثیر می گذاشت، به صورتی که هر خطی توضیحات در نظر گرفته می شد مگر اینکه با کاراکتر > شروع می شد.

    پایه Miranda انواع char، num و bool می باشند. یک رشته کاراکتری به طور ساده لیستی از کاراکترهاست، در حالی که نوع num به طور داخلی بین دو فرم تبدیل می شود: اعداد صحیح با دقت دلخواه (به عبارت دیگر اعداد بزرگ) فرم پیش فرض، و در صورت لزوم مقادیر معمول ممیز شناور. چندتایی ها همانند رکوردها در زبان های شبه پاسکال دنباله ای از عناصر مختلط بالقوه هستند، وتوسط پرانتزها نوشته می شوند:


    کد PHP:
    [PHP]
    کد:
     		 			 this_employee = («Folland, Mary», ۱۰۵۶۰, False, ۳۵) 
    
     week_days = ["Mon","Tue","Wed","Thur","Fri"]
    [/PHP]
    در عوض لیستها رایج ترین ساختار داده ای مورد استفاده در Miranda می باشند. لیستها توسط کروشه ها نوشته می شوند و عناصر آنها توسط کاما از هم جدا می شوند. عناصر لیست ها همگی باید از یک نوع باشند:

    کد PHP:
    [PHP]
    کد:
     		 			 week_days = ["Mon","Tue","Wed","Thur","Fri"]
    [/PHP]
    اتصال لیست ها توسط ++، تفاضل آنها توسط --، ایجاد آنها توسط :، اندازه آنها توسط # و اندسی دهی آنها توسط ! انجام می شود بنابراین:
    کد PHP:
    [PHP]
    کد:
     		 			 days = week_days ++ ["Sat","Sun"] 
    days = "Nil":days 
     days!۰ ? "Nil" 
     days = days -- ["Nil"] 
     #days ? ۷
    [/PHP]
    چند راه سریع برای ایجاد لیست ها نیز وجود دارد:.. برای لیستهایی به کار می رود که عناصر آنها سری های ریاضی اند و امکان داشتن گام افزایشی غیر از یک را نیز برای آنها فراهم کرده:

    کد PHP:
    [PHP]
    کد:
     		 			 fac n = product [۱..n] 
     odd_sum = sum [۱٬۳..۱۰۰]
    [/PHP]

    رایج ترین و قوی ترین تسهیلات ایجاد لیست ها در Miranda توسط «list comperhension»ها ارائه می شود (که قبلاً تحت عنوان عبارت های ZF شناخته می شدند)، که به دو صورت عمده استفاده می شود: عبارتی که به دنباله ای از جمله ها اعمال می شود:

    کد PHP:
    [PHP]
    کد:
     		 			 squares = [ n   n | n <- [۱..] ]
    [/PHP]
    که به این صورت خوانده می شود: لیستی از مربع های n که n عضوی از اعداد صحیح مثبت است.

    و به صورت سری های بازگشتی:

    کد PHP:
    [PHP]
    کد:
     		 			 powers_of_۲ = [ n | n <- ۱, ۲ n.. ]
    [/PHP]

    همانطور که در این دو مثال می بینیم Miranda امکان داشتن لیست هایی با طول بی نهایت را می دهد، که ساده ترین مثال لیست اعداد صحیح مثبت است:

    علامتگذاری اجرای توابع به سادگی توسط کنار هم قرار دادن انجام می شود مثل SIN X. در Miranda همانند اکثر زبان های کاملاً تابعی دیگر توابع از نوع first-class (سطح بالا) می باشند که این به این معنی است که توابع می توانند به عنوان پارامتر به توابع دیگر ارسال شوند، به عنوان نتیجه بازگردتنده شوند یا به عنوان عناصر ساختارهای داده ای منظور شوند، و نکته مهم دیگر این است که توابعی که دو یا بیشتر پاررمتر دارند می توانند «partially parameterised» (تا حدودی معیّن) بشوند یا به عبارتی با تعداد کمتری از پارامترهایشان فراخوانی شوند. این کار تابعی می دهد که در صورت تعیین شدن باقی پارامترها نتیجه نهایی را می دهد. به عنوان مثال:

    کد PHP:
    [PHP]
    کد:
     		 			 add a b = a + b 
    increment = add ۱
    [/PHP]
    این مثال تابعی به نام increment ایجاد می کند که مقدار یک را به آرگمانش اضافه خواهد کرد. در واقع add ۴ ۷ تابع دو پارامتری add را می گیرد آنرا به ۴ اعمال می کند و یک تابع تک پارامتری می گیرد که آرگومانش را به ۴ خواهد افزود سپس آنرا به ۷ اعمال می کند.

    هر تابعی با دو پارامتر می تواند به یک عملگر میانوند تبدیل شود(برای مثال در تابع بالا، جمله $add تا حدودی به عملگر + شباهت دارد) و هر تابع میانوندی که دو پارامتر می گیرد می تونه به تابع معادلش تبدیل بشه. بنابراین:

    کد PHP:
    [PHP]
    کد:
     		 			 increment = (+) ۱
    [/PHP]

    راهی ساده برای ایجاد تابعی است که مقدار یک را به آرگومانش اضافه می کند. به طور مشابه در:
    کد PHP:
    [PHP]
    کد:
     		 			 half = (/ ۲) 
    reciprocal = (۱ /)
    [/PHP]
    دو تابع یک پارامتری ایجاد می شوند، مفسر در هر دو حالت بالا می فهمد که کدام یک از دو پارامتر عملگر تقسیم ارسال شده اند. مثلاً در حالت اول تابع حاصل همواره آرگومان خود را نصف خواهد کرد.

    با وجود اینکه Miranda یک زبان برنامه سازی با انواع قوی است (strongly-typed)، بر تعیین نوع به صورت صریح پافشاری زیادی ندارد. در صورتی که نوع یک تابع به صورت صریح مشخص نشود مفسر اون رو با توجه به پارامترهای تابع و اینکه آنها در تابع به چه صورت مورد استفاده قرار گرفته اند استنتاج می کنه. علاوه بر انواع پایه (char, num, bool) این زبان یک نوع "anything" نیز دارد و برای مواقعی استفاده می شود که نوع پارامترها مهم نباشد، مثلاً در معکوس کردن یک لیست.
    کد PHP:
    [PHP]
    کد:
     		 			 rev [] = [] 
    rev (a:x) = rev x ++ [a]
    [/PHP]
    که می تونه به لیستی با هر نوع از عناصر اعمال بشه، در صورتی که اعلان نوع آن به صورت صریح به صورت زیر خواهد بود:

    کد PHP:
    [PHP]
    کد:
     		 			 rev :: [ ] -> [ ]
    [/PHP]
    نهایتاً این که این زبان مکانیزم هایی برای ایجاد و مدیریت ماژول های برنامه، ای را داراست که توابع داخلی آنها از دید برنامه هایی که این ماژول ها را فرا می خوانند پوشیده است.

    کدهای نمونه:

    اسکریپت Mirandی زیر مجموعه همه زیر مجموعه های یک مجموعه از اعداد را تعیین می کند.

    کد PHP:
    [PHP]
    کد:
     		 			 subsets [] = [[]] 
    subsets (x:xs) = [[x] ++ y | y <- ys] ++ ys 
                       where ys = subsets xs
    [/PHP]
    و این یک اسکریپت با سواد برای تابع prime است که لیست همه اعداد اول را تعیین می کند.
    کد PHP:
    > || The infinite list of all prime numbers, by the sieve of Eratosthenes.

    The list of potential prime numbers starts as all integers from ۲ onwards;
    as
    each prime is returned, all the following numbers that can exactly be
    divided by it are filtered out of the
    list of candidates.
    کد:
    [PHP] > primes = sieve [۲..] > sieve (p:x) = p: sieve [n | n <- x; n mod p ~= ۰][/PHP]




    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




  10. #40
    Borna66 آواتار ها
    • 55,397
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    خيام-سهراب
    شغل , تخصص
    طراح و تحلیل گر حرفه ای وب
    رشته تحصیلی
    مهندسي نرم افزار
    راه های ارتباطی

    پیش فرض

    زبان برنامه نویسی فری بیسیک
    Free Basic

    یک مترجم بیسیک 32 بیتی منبع باز برای ویندوز ، حالت معکوس داس ، لینوکس ، ایکس باکس می باشد. FreeBasic اجازهٔ پشتیبانی سطح بالایی را برای برنامه هایی که باQ Basic نوشته شده اند با استفاده از نسخه خاص QB می دهد. بسیاری از برنامه هایی که برای Q Basic نوشته شده اند بدون نیاز به تغییر دراین حالت ترجمه و اجرا می شوند . در هر حال ، بیشتر برنامه های اساسی قبل از اینکه با استفاده از نسخهٔ خاص پیش فرض ترجمه شوند، نیاز به تغییراتی خواهند داشت.

    ویژگی ها

    FreeBasic یک مترجم خود میزبان است که تقریبا 120000 خط کد است ( فقط هستهٔ مترجم و نه شامل کتابخانه ها ). این استفاده از ابزار برنامه نویسی GNU را به عنوان پشت خط امکان پذیر می سازد و می توانند میز فرمان و گرافیک قابل اجرا را بعلاوهٔ کتابخانه های ایستا و پویا تولیدکند . FreeBasic استفادهٔ کامل از کتابخانه های C و بخشی از کتابخانه های C++ را پشتیبانی می کند. این به برنامه نویسان اجازهٔ استفاده و ساخت کتابخانه هایی برای C و بسیاری از زبان های برنامه نویسی دیگر را می دهند. FreeBasic هنوز یک مترجم بهینه سازی نیست ، اما در سرعت، نزدیک به ابزار های مسیر اصلی مانند GCC ارزیابی شده است.

    نحو

    در نحو FreeBasic کوشش شده است تا حد امکان به نحو Basic نزدیک باشد. اگرچه در این نحو تلاش بر این بوده است که با نمونهٔ قبلی خود سازگار بماند ،FreeBasic از معیارها و شیوه های مدرن برنامه نویسی تبعیت می کند. ویژگی های رویه ای استاندارد همراه با ویژگی های شئ گرا مانند نوع ها ، اشیاء ، سربار گذاری عملگرها ، سربارگذاری تابع ، فاصله نام ها و ... به FreeBasic اضافه شده اند. خطهای FreeBasic ، هنگامی که کاراکتر های انتهای خط پیدا شوند ، یا توسط کولن پایان می یابند. به همین خاطر ،خطوط نباید یک کاراکتر ویژه ( مانند سمیکالن در C ) برای آگاه ساختن مترجم از پایان خط داشته باشند . ممکن است چندین دستور که هرکدام با یک کالن جدا شده اند در یک خط نوشته شوند . FreeBasic ازتوضیحات بلوکی همراه با ملاحظات پایان خط پشتیبانی می کند. یک خط کامل توضیحات با یک آپاستروف ساخته می شود درحالی که بلوک های توضیحات برنامه با /’ شروع و با /’ پایان می یابند.

    سازگاری

    FreeBasic جانشین زبان برنامه نویسی Q Basic می باشد. طی گسترش آن تغییراتی داده شد تا آن را با تسهیلات نوین سازگار کند و ویژگی های برنامه نویسی پیشرفته را آسان سازد. به منظور توسعهی کامپایلر ، GCC موافق و همچنین حفظ توانایی استفاده از زبان سازگار Q Basic مجموعه گزینهٔ –lang ساخته شد. هنگامی که مجموعه زبان FB را انتخاب می کنیم( -lang fb به عنوان آرگومان خط فرمان ) ، تمامی ویژگی های جدیدی که FreeBasic پیشنهاد می کند موجود می باشد و ویژگی های هکیش ازQ Basic که با شیوه های نوین برنامه نویسی سازگار بودن پذیرفته نمی شود . مجموعه زبان FB-Light (-lang fblight) دسترسی به بیشتر ویژگی های جدید و غیر شئ گرایFreeBasic را مهیا می سازد، اما سبک برنامه نویسی شبیه نسخه های قدیمی Basic را می پذیرد. قوانین نحو ، مانند پذیرفتن متغییرهای ضمنی ، پسوندها ، GOSUB / RETURN ، برچسب های عددی و ... دراین این گزینهٔ lang مجاز می باشد. مجموعه زبان QB (lang qb) شبیه به lang fb می باشد اما بیشتر روی تکرار شبیه رفتار Q Basic متمرکز شده است. Lang qb برای ساده سازی اجرای برنامه هایی که در اصل برای Q Basic نوشته شده اند طراحی شده است و در حالت هایی که lang fbtile به اندازهٔ کافی سازگار نیست مفید می باشد.

    برنامه نمونه

    همانندQbasicیک برنامه برای نوشتن یک خط از متن در صفحه نمایش، توسط یک دستور ساده انجام می شود.
    کد PHP:
    کد:
       
    print "Hello, World!"
    کتابخانهٔ گرافیکی

    FreeBasic دارای یک کتابخانهٔ نرم افزار گرافیکی دوبعدی داخلی است تا با Q Basic سازگار باشد که نمودار های سادهٔ اولیه ( مانند مستطیل ها ، خطوط و دایره ها ) و ویژگی های اضافی که در کتابخانهٔ گرافیکی Q Basic حاضر نبوده اند را برای کاربر تهیه می کند. این کتابخانه خودش وابسته به سیستم عامل نمی باشد. بنابراین برنامه در سرتاسر پایگاه های دارای کتابخانه قابل حمل است. اگرچه این کتابخانه داخلی است ، تنها زمانی که کسی استفاده از آن را انتخاب کند قرار داده می شودکه این با آسانی با فراخوانی یک دستور FBgfx screen انجام می شود. کتابخانه های رایج مانند +opengl ساختن یک پنجره توسط رابط برنامه کاربردی ( ویندوز ، لینوکس و ... ) برای تسریع سخت افزار می تواند بدون مداخله با کتاب خانه گرافیکی Q Basic استفاده شود.

    توسعه آینده

    FreeBasic به پیشرفت و توسعه خود به سمت هدفش که یک نرمافزار نهایی GCC باشد ادامه می دهد که اجازه خواهد داد بسیاری از ویژگی هایی که در C++ و زبان های برنامه نویسی شئ گرای دیگر پیدا شده اند ، قابلیت حمل به تقریبا هر سامانه نوین و فنون بهینه سازی پیشرفته را داشته باشد. با انتشار نسخه ی0.17 ، برنامه نویسی شئ گرا به علاوهٔ کلاس ها و با توسعهٔ نوع اولیه معرفی شد پیاده سازی های بیشتری انتظار می رود.

    منابع :

    http://www.freebasic.net/
    http://www.freebasic.net/forum





    فروشگاه نمونه سوالات پیام نور با پاسخنامه تستی و تشریحی



    دانلود رایگان نمونه سوالات دانشگاه پیام نور





    http://up.pnu-club.com/images/00ld7yux3ay3itvspd7n.png
    برای دانلود رایگان نمونه سوالات پیام نور با جوابهای تستی و تشریحی در مقطع نمونه سوالات کارشناسی ارشد پیام نور - نمونه سوالات پیام نور کارشناسی - نمونه سوالات پیام نور دکترا- نمونه سوالات آزمونهای فراگیر پیام نور( دانشپذیری)

    به ادرس زیر مراجعه کنید

    نمونه سوالات رایگان پیام نور




صفحه 4 از 5 اولیناولین ... 2345 آخرینآخرین

برچسب برای این موضوع

مجوز های ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
  •