آشنایی با الگوریتم

آشنایی با الگوریتم

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

الگوریتم چیست ؟

الگوریتم لیستی از دستورعمل هاست  که مراحل مختلف کار را به زبان دقیق و با جزئیات کافی بیان

می کند ودر آن تر تیب  مراحل و خاتمه پذیر بودن عملیات باید کاملا مشخص باشد .

منظور از کلماتی که زیر شان خط کشیده شده است:

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

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

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

شرط خاتمه الگوریتم : اگر این شرایط رعایت نشود انجام عملیات هیچگاه خاتمه نمی یابد و الگوریتم به مدت نا محدودی اجرا می شود .

طراحی  الگوریتم برای مسئله

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

 

الگوریتم ها مراحل زیر را دارند :

1- خواندن داده ها

2- انجام محاسبات

3- چاپ نتایج

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

چگونگی حل مسئله

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

الف)شناخت مسئله

در بر خورد با مسئله باید تمام مراحل زیر در نظر گرفت :

1)  د اده ها یعنی اینکه مفروضات  مسئله کدام ها هستند و چه نتایجی از آنها حاصل می شود .

2)  مجهول ها  یعنی اینکه مسئله چه می خواهد و باید در جستجو ی چه باشیم .

3)  ارتباط بین داده ها ومجهولات یعنی اینکه  در مسائل با بر قر ای  ار تباط منطقی بین داده ها و مجهولات بتوانیم آن مسئله را حل کنیم .

ب)طرح نقشه حل مسئله :

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

ج)تحلیل راه حل مسئله :

روشهای بیان الگوریتم

3روش بیان الگوریتم عبارتند از :

1)                     بیان الگوریتم با جملات فارسی

2)                     بیان ریاضی الگوریتم

3)                     بیان الگوریتم توسط شکل ها مانند (فلوچارت ٬نمودارNS)

بیان الگوریتم با جملات فارسی

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

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

1)   طولانی بودن الگوریتم  است .

2)   از دستور های الگوریتم تفسیر های گوناگونی می شود .

مثال:الگوریتمی بنویسید که مجموع دو عدد را محاسبه کند ؟

1)   اولین عدد را انتخاب وبر روی کاغذ بنویسید .

2)   دومین عدد را انتخاب وزیر همان عدد بر روی کاغذ بنویسید .

3)   دوعدد نوشته شده روی کاغذ راباهم جمع کنید ومجموع را زیر آن دو عدد روی کاغذ بنویسید.

4)   سومین عدد که روی کاغذ نوشته شده مجموع دو عدد است.

5)   پایان

بیان ریاضی الگوریتم

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

اشکالات عمده این روش:

وقتی الگوریتم طولانی باشد و یا پیچیدگی الگوریتم بیشتر شود مراحل الگوریتم دشوار می شود.

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

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

 

زبان های سطح بالا

توضیحات

پاسکال

زبانی آموزشی است که برای فراگیری بر نامه نویس به شکل دقیق و منظم به کارمی رود

فرترن

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

بیسیک

زبان ساده در حد دانش آموزانم طراحی شده است .

کوبول

برای برنامه نویسی تجاری

C

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

C++

نسخه توسعه یافته از Cکه بر نامه سازی شی گرا را حمایت می کند

 

مقدمه ای راجع به برنامه نویسی پاسکال

مقدمه ای راجع به برنامه نویسی پاسکال

pascalدر اوایل سال 1970 بعنوان زبانی برای آموزش مفاهیم اساسی علوم کامپیوتر وطراحی الگوریتم بوجود آمد. این زبان در واقع نسل جدید زبان ALGOL می باشد که با همین حروف در دهه1960 فعال بود .می توان گفت زبانهای جدیدتری چونada Modula2, ریشه گرفته از سبک و ساختار pascal  هستند .تاریخ پیدایش پاسکال بدون بررسی تاریخچه ALGOL ناقص خواهد بود (Algoritmic language)در سال 1958 زمانی که یک کمیته پژوهشی از GAMM(سازمان اروپایی دانشمندان علوم کامپیوتر)وACMمخففAssociation for Computing Machinery) )(انجمن ماشین های محاسباتی که این انجمن در سال 1947 به منظور پیشبرد دانش و عملکرد فنی کارشناسان پردازش اطلاعات تاسیس شد) در زوریخ با یکدیگر دیدار نمودند و گزارشی در مورد زبان بین المللی جبر یا IAL منتشر ساختند( که این زبانها بعد ها تحت نام ALGOL58 مورد توجه زیادی قرار گرفتند و روی ماشین های متعددی قابل اجرا گردیدند و متخصصان آمریکایی و اروپایی برای تکمیل این نسخه در سال 1960 در پاریس با هم ملاقات کردند و نام نسخه جدید را ALGOL60 قرار دادند) ALGOL  در میان دانشمندان و کارشناسان کامپیوتر در اروپا محبوبیت زیادی پیدا نموده و به یک زبان جهانی برای تشریح الگور یتم های مختلف تبدیل گشت .در سالهای 1980 مقالات زیادی برای گسترش ALGOL  ارائه گشت Niklaus Wirth یکی از اعضای اصلی کمیته کاربردی ALGOL ویرایش جدید از این زبان را تحت نام ALGOL-W طراحی کرد و پس از آن کمیته یک نسخه بسیار جالب بنام ALGOL68 طراحی نمود در حالی که نسخه های قدیمی ALGOL زبانی برای برنامه نویسی های علمی و مهندسی بود نسخه جدید ALGOL68 یک زبان با اهداف عمومی با کاربردهای گسترده در مسائل مختلف بود پس از این نسخه متخصصین با هم به مشکل برخوردند و گفتند که این  ALGOL68بیشتراز آنکه یک زبان علمی باشد بلند پروازانه طرح شده در همین زمان Writh در حال طراحی جانشینی به جای ALGOL68 بود که از پیچیدگی کمتری برخوردار باشد و اولین کامپایلر زبان جدید در سال 1971 تکمیل گشت و نسخه تجدید نظر شده در سال 1973 ارائه شد و Wirth نام این برنامه را پاسکال گذاشت, هر چند نسخه های مختلف این زبانpascal را به صورت یک زبان با اهداف عمومی در آورده اند ولی اساساًپاسکال به عنوان زبانی برای آموزش طراحی الگوریتم و روشهای برنامه نویسی , شناخته شده است شبیه به آنچه در مورد ALGOL گفته شد PASCAL نقشی مشابه را به عنوان زبان اصلی بیان و تشریح الگوریتم در ژورنالها بازی می نماید .پس جای تعجب نیست کهPASCAL به عنوان اولین زبان اصلی آموزش کامپیوتر در دانشگاهها استاندارد شده است چون بهترین و مناسبترین زبان است . دلیل این که برتری این است که چون هنوز زبان سطح بالایی به زیبایی و گویایی و خوانایی زبان پاسکال بوجود نیامده است.منظور از گویایی و خوانایی برنامه: (  یعنی هر برنامه نویس دیگری می تواند بدون مشکل منطق برنامه را تعقیب کند  )دستور های پاسکال طوری است که گویی یک متن ساده انگلیسی می نویسید و از قابلیت حمل و جابجایی بسیار بالایی برخوردار است وبراحتی برنامه های نوشته شده با این زبان را ر وی هر کامپیوتر دیگر کامپایل و اجرا کنید هدف از طراحی پاسکال برنامه ساخت یافته ای است که در آن روش طراحی از بالا به پایین, اجرای متوالی دستورها, استفاده از دستورهای شرطی, و حلقه و عدم استفاده از دستور کنترلی غیر شرطیمثل goto توصیه شده است

 

بر نامه چیست؟

بر نامه چیست ؟ به مجموع دستور العمل هایی که برای انجام کار خاصی و با تر تیب خاصی نوشته شده اند گفته می شود توجه داشته باشید این دستوالعمل ها باید به تر تیب اجرا شوند . زبان های بر نامه نویسی کامپیوتر تحت بر نامه ای که به او داده می شود کار می کند اما اینکه چگونه این بر نامه ها به او داده می شود به عهده زبان بر نامه نویسی است به عبار ت دیگر زبان یک سیستم ارتباطی است وهرزبان بر نامه نویسی مجموعه ای ایست از علائم و قواعد و دستور العمل هایی که امکان ارتباط باکامپیوتر را برای کاربر فراهم می کند . به طور کلی این دستور العمل ها را به گروههای زیر تقسیم می کنیم: 1)دستور ورودی و خروجی : این دستور ها ارتباط بین دستگاه های ورودی و خروجی و پردازشگر مرکزی را بر قرار میکند دیسک ها هم ورودی و هم خروجی 2)دستور های محاسبه : دستور هایی هستند امکان عملیات جمع وتفریق وتقسیم و ضرب را فراهم می کند . 3)دستور های منطقی و مقایسه ای : این دستور ها به منظور انتقال کنترل بر نامه و انتخاب کردن و هم چنین ایجاد حلقه های تکرار مورد استفاده قرار می گیرد و همچنین در حین پردازش2 داده بر اثر اجرای یک دستورالعمل که از نوع منطقی می باشد باهم مورد مقایسه قرار می گیرند . 4)دستور های ذخیره و باز یابی : این دستور به منظور ذخیره کردن و باز یابی کردن اطلا عات به کار برده می شود . زبانهای برنامه سازی از نظر کاربردی برای انواع کار ها ی مختلف زبان های بر نامه نویسی خاصی وجود دارد بعضی از موارد کار برد زبانهای بر نامه سازی عبارتند از : 1)امور آموزشی: زبان های بر نامه سازی بیسیک و پاسکال به دلیل داشتن ویژگی های آموزشی به عنوان اولین زبان آموزشی مورد استفاده است . 2)بر نامه نویسی سیستم : زبان های مثل اسمبلی (assembly)٬cوada برای نوشتن نرم افزار های سیستم مورد استفاده قرار می گیرد . 3)هوش مصنوعی : زبان هایی مثل lisp٬ prolog برای این منظور مورد استفاده قرار می گیرد . 4)امور تجاری: در نوشتن بر نامه های کاربردی در زمینه تجاری از زبانهای بر نامه سازی و نرم افزار های خاصی استفاده می شود .بعضی از این نرم افزار هاعبارتند از : foxpro٬paradox 5)امور ویرایش متن ها : در این خصوص از زبانی به نام snobal استفاده می گردد. انواع زبانهای بر نامه سازی 1) زبان های سطح پایین low level: زبان هایی هستند در سطح ماشین و به دور از زبان طبیعی و محاوره ای انسان می باشد این زبان ها به سخت افزار ها وابسته اند به طوریکه هر پردازش گر زبان خاص خود را دارد کار کردن با این زبان ها مشکل بوده و نیاز به تخصص بوده و همچنین خطایابی وبررسی بر نامه ها به راحتی امکان پذیر نیست ولی به علت نزدیکی به سخت افزار سرعت اجرای بر نامه در این زبان بالااست . زبان های سطح پایین low level به دو دسته تقسیم می شوند : A.) زبان ماشین : مجموعه ای از صفر ویک از ان که به سخت افزار نزدیک است سرعت بالا دارد قوی هستند خیلی از کار ها را انجام می دهند .نیاز به مترجم نداردبه دلیل اینکه برنامه های این زبان باید در مبنای 2 نوشته شوند ٬بر نامه نویسی در آن بسیار دشوار است . B.) زبان اسمبلی : زبان ماشین است با این تفاوت که یک سری از دستورات به صورت کد در آمده است . بنابراین این روش بر نامه نویسی برای تبدیل این کد ها به زبان ماشین از نرم افزار خاصی به نام اسمبلر استفاده می شود .در مواقعی که نیاز به سرعت زیاد و زمان واقعی (real time)باشد بیشتر از این زبان بر نامه نویسی استفاده می گردد بر نامه نویسی در این زبان مستلزم آشنایی با سیستم است و دارای دشواری های خاص خودش است. 2) زبان های سطح بالا high level: دارای قواعدی نزدیک به زبان محاوره ای انسان می باشد که در آنها از علائم ٬حروف و کلمات زبان طبیعی استفاده شده پس این زبا ن ها نیاز به متر جم و مفسر دارند به طوریکه بر نامه را برای کامپیوتر قابل در ک نمایند وابستگی این زبان ها به سخت افزار خیلی کم است که می توانیم بگوییم وابستگی ندارد به خاطر اینکه در تمام کامپیوتر ها یی که باهم سازگاری دارند قابل استفاده می باشد به شرط اینکه متر جم ها ی آن برنامه در آن کامپیوتر وجود داشته باشد کار کردن با زبان های سطح بالا آسان تر است ولی سرعت اجرای بر نامه ها پایین تر است حتی خطا بی و بررسی بر نامه ها در این زبان راحتتر است رایج ترین این بر نامه ها عبارتند از :pascal٬c+٬c#٬fortran ٬basic٬……. 3) زبان های بسیار سطح بالا: زبانهای بانک اطلاعاتی و زبان های شبیه سازی مانندgpssزبانهای بسیار سطح بالا نام دارند . تاریخچه زبان های بر نامه سازی سا ل 1950: زبان های بر نامه سازی پیدا شده اند سالهای 1950تا 1955: به اسمبلی بر نامه نویسی می شده است . سالهای 1956تا1960: زبانها فر ترن 2 ٬الگول58(algol58)٬ کوبول(cobol)ولیپ(lisp)طراحی شده اند. سالهای 1960تا1965: یستم عامل و زبان های همه منظوره مطرح شدند.در این سال ها فر ترن4 ٬الگول60( algol60)٬ کوبول67(cobol)بهبود یافته وsnobal٬ aplبه وجود آمدند . سالهای1966تا1970: ماشین های IBM مدل360 370٬ به وجود آمدند و زبانهایPL\I ٬فر ترن66 استاندارد ٬الگول68 ( algol68)٬ کوبول65(cobol) و4_snobal٬ 360_ apl وsmula_67 طراحی شده اند. سالهای1971 تا1975: زبانهای کو بول 76 ٬ pl\iاستاندارد شدند و زبانهای پاسکال و c به وجود آمدند. سالهای 1976تا1980: زبانهایada٬ fortran_77طراحی گردیده اند . سال 1995 : زبان c++ استاندارد شده است.

جنبه های مختلف یک کامپیوتر

جنبه های مختلف یک کامپیوتر  

کامپیوتر از دوبخش اصلی تشکیل شده است :

  1. سخت افزار (HARDWARE):

به اجزای قابل لمس کامپیوتر گفته می شود . این اجزا به هم مرتبط می باشند به طوری که هریک دچار مشکلی شود در دیگری هم  تاثیرخواهد داشت .  در کل سخت افزارکلیه دستگاههای الکتریکی٬الکترونیکی٬مکانیکی ٬سیستم های رابط و وسایل جانبی کامپیوتررا سخت افزاری گویند.مثل :واحد پردازش (CPU)٬صفحه نمایش ٬صفحه کلید ٬چاپگر٬... می باشد .

  1. نرم افزار (SOFTWARE) :

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

انواع نرم افزار ها

نرم افزار ها به دو دسته تقسیم می شوند :

1)   نرم افزار های کار بردی) APPLICATION):

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

2)   نرم افزار های سیستم (SYSTEM):

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

 مهم ترین این نرم افزار ها عبارتند از :

الف)سیستم عامل    OS(OPERATING SYSTEM)

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

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

1)     سیستم عامل های  تک منظوره :

این نوع سیسستم عامل ها در کامپیوتر های شخصی به کار می روند به طوریکه  در آن واحد یک کاربر می تواند از آن استفاده کند مثل سیستم عامل DOS معروفترین سیستم عاملی است که در ریز کامیوتر ها به کار گرفته می شود و مخفف کلمات (DISK OPERTING SYSTEM)به معنی سیستم عاملی که بر روی دیسک وجود دارد٬ است .

 

2)     سیستم عامل های چند کاربره چند منظوره:

این  نوع سیستم عامل ها حالت شبکه دارند به طوریکه در آن واحد چند ین کار بر می توانند از آن استفاده کنند .WINDOWS95به بالا ٬UNIX٬

                   ب) UTILITIESبر نامه های سودمند :

                   NS٬NC2000٬DN  برنامه هارا راحتر اجرا می کند .

                  ج)مترجم ها

 زبانی که کامپیوتر آن را درک می کند زبان ماشین نام دارد بنابراین برنامه هایی که به زبان ماشین نوشته می  شوند برای کا مپیوتر قا بل فهم  بوده  و اجرا می شوند اما بر نا مه هایی که به زبا نهای غیر از زبان ماشین مثل پاسکال و Cنوشته می شوندتوسط ماشین قا بل فهم  نیستند .لذا باید وسیله ای بنام مترجم و جودداشته باشد تا بر نامه های نوشته شده به یک زبان برنامه نویسی را به یک برنامه در زبان ماشین تبدیل کند این وسیله خودش یک بر نامه است ٬مترجم گویند هر زبان بر نامه سازی مترجم خاص خودش را دارد 

 انواع مترجم ها

متر جم ها دو دسته هستند :

   مفسر (interprete):

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

2)   کامپایلر compiler

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