You are on page 1of 50

‫‪Produced with a Trial Version of PDF Annotator - www.PDFAnnotator.

com‬‬

‫دانشکده مهندسی عمران‬

‫جزوه درس‪:‬‬

‫مبانی کامپیوتر و برنامهنویسی‬

‫استاد درس‪:‬‬

‫دکتر عبداالحد چوپانی‬


‫مقدمه‬

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

‫قواعد برنامهنویسی آشنا شوند‪ .‬زبانهای برنامهنویسی فراوانی نظیر‪VBA ,FORTRAN , python, C# :‬‬

‫و ‪ PASCAL‬وجود دارد و میتوان یکی از اینها را برای یادگیری درس مبانی کامپیوتر و برنامهنویسی انتخاب‬

‫کرد‪.‬‬

‫در کنار زبانهای برنامهنویسی‪ ،‬نرمافزارهای تخصصی بسیاری برای اهداف آموزشی یا پژوهشی ارائه‬

‫شدهاست و معموال توابع‪ 1‬و جعبه ابزارهای‪ 2‬این نرم افزارها‪ ،‬نیازهای کاربران را برآورده میکند‪ .‬در مواردی که‬

‫جعبهابزارهای نرم افزار مربوطه پاسخگوی نیاز کاربران نباشد‪ ،‬نیاز به برنامهنویسی پیش میآید و خود این نرم‬

‫افزارها امکاناتی را فراهم میآورند تا با اتصال به یک زبان برنامهنویسی‪ ،‬این نیازها برآوردهشود‪ .‬به عنوان مثال‬

‫صفحه گسترده برای کارهای تحلیلی و آماری‪ ،‬نرم افزار پرکاربردی است‪ .‬اما ‪ EXCEL‬با ‪ VBA‬متصل شده تا‬

‫چنانچه نیاز به برنامهنویسی پیش آید‪ ،‬از ‪ VBA‬استفاده شود‪.‬‬

‫چون بسیاری از دانشجویان پس از یادگیری درس مبانی کامپیوتر و برنامهنویسی و مخصوصا در سطوح‬

‫تحصیلی باالتر‪ ،‬به سراغ نرم افزارهای کاربردی و تخصصی میروند و کمتر سراغ زبانهای برنامهنویسی (نظیر‬

‫‪ )C‬میروند‪ ،‬رویکرد این درس نیز بر این بوده که برنامهنویسی را در بستر یک نرم افزار کاربردی آموزش دهد‪.‬‬

‫یکی از نرمافزارهای کاربردی برای دانشجویان رشتههای فنی مهندسی ‪ MATLAB‬است که دارای‬

‫جعبه ابزارهای فراوان برای اهداف متعدد است‪ .‬به عنوان مثال برای مهندسین عمران و مکانیک جعبه ابزارهای‬

‫اجزاء محدود‪ 3‬و برای مهندسین برق جعبه ابزار پردازش سیگنال‪ 4‬را ارائه کرده است‪.‬‬

‫هدف از این درس‪ ،‬آموزش اصول و قواعد ابتدایی و پایه برنامهنویسی به دانشجویان در بستر نرم افزار‬

‫‪ MATLAB‬است‪ .‬باید توجه داشت ‪ MATLAB‬یک زباننویسی نیست اما یک نرم افزار کاربردی برای‬

‫دانشجویان فنی و مهندسی است که امکان برنامهنویسی در آن وجود دارد‪.‬‬

‫‪1‬‬
‫‪function‬‬
‫‪2‬‬
‫‪toolboxes‬‬
‫‪3‬‬
‫‪finite elements‬‬
‫‪4‬‬
‫‪signal processing‬‬
‫أ‬
‫برخی از مزایای نرم افزار ‪ MATLAB‬در مقایسه با زبانهای کامپیوتری مرسوم‪ ،‬برای حل مسائل فنی‬

‫به شرح ذیل است‪:‬‬

‫‪ .1‬سهولت استفاده‪ :‬از ‪ MATLAB‬میتوان به عنوان چرکنویس برای محاسبه عبارتهایی که در خط‬

‫فرمان نوشته شدهاند یا اجرای برنامههای بزرگ قبال نوشته شده‪ ،‬استفاده کرد‪.‬‬

‫‪ .2‬توابع از پیش تعریف شده‪ MATLAB :‬با وجود کتابخانه بزرگی از توابع از پیش تعریف شده کامل‬

‫میشود‪ .‬در اکثر زبانهای برنامهنویسی الزم است زیر برنامهها یا توابعی مثال برای محاسبه تابع‬

‫میانگین‪ ،‬انحراف معیار و‪ ......‬بنویسیم‪ .‬این توابع و صدها تابع دیگر در زبان ‪ MATLAB‬وجود دارد‬

‫و کار شما را راحت تر میکند‪.‬‬

‫‪ .3‬جعبه ابزارهای متعدد و متنوع‪ MATLAB :‬دایما در حال افزایش جعبهابزارهای خود برای استفاده‬

‫مهندسین رشتههای مختلف است‪.‬‬

‫این نرم افزار دو ایراد عمده دارد که عبارتند از‪:‬‬

‫‪ .1‬ممکن است برنامهها کندتر از سایر زبانها اجرا شود چون زبان ترجمه شده است‪.‬‬

‫‪ .2‬قیمت (نسخه اصلی) آن بسیارگران است‪.‬‬

‫نکته‪ :‬دانشجویان‪ ،‬توجه کنند که برای تمرینهای برنامهنویسی که بعدا در کالس ارائه خواهد شد‪ ،‬حق‬

‫استفاده از برخی توابع ‪ MATLAB‬را ندارند و محدودیتهایی در این زمینه وجود دارد‪ .‬در چنین مواردی‪،‬‬

‫دانشجویان با اتکا به دانش برنامهنویسی خود‪ ،‬باید تمرینات را کدنویسی و اجرا کنند‪ .‬به عنوان مثال‪ ،‬برای‬

‫مرتب کردن یک بردار نامرتب‪ ،‬باید روش مرتب سازی حبابی (یا هر روش دیگری) را کدنویسی کنند و حق‬

‫استفاده از دستور ‪ sort‬را ندارند‪ .‬چرا که هدف اولیه و اصلی این درس‪ ،‬آموزش اصول برنامهنویسی در‬

‫‪ MATLAB‬است و نه یادگیری توابع نرمافزار‪.‬‬

‫درس مبانی کامپیوتر و برنامهنویسی دارای سه بخش است و هر بخش‪ ،‬دارای جزوه جداگانهای است‪.‬‬

‫بخش اول ‪ ،‬که موضوع این جزوه است‪ ،‬به بحث "الگوریتم و فلوچارت" پرداخته میشود و مثالهای زیادی برای‬

‫آن ارائه میشود‪ .‬در بخش دوم درس‪" ،‬مبانی برنامهنویسی در ‪ "MATLAB‬بیان میشود‪ .‬در بخش سوم نیز‪،‬‬

‫"ریاضیات در ‪ "MATLAB‬ارائه میشود که میتواند برای برخی دروس ریاضی دوره دانشگاهی نظیر ریاضی‬

‫‪ ،1‬معادالت دیفرانسیل و محاسبات عددی مفید باشد‪.‬‬


‫ب‬
‫مطالب جزوه حاضر‪ ،‬عمدتا گردآوری از منابع ذیل است‪:‬‬

‫‪ )1‬بخشی از مطالب فصل اول برگرفته از کتاب "آموزش مبانی کامپیوتر و برنامهنویسی به زبان‬

‫‪ "C++‬نوشته ناصر قاسم آقائی‪ ،‬مهدی جابرزاده انصاری‪ ،‬و علی دهقان نشر ناقوس اندیشه سال‬

‫‪ 1331‬است‪.‬‬

‫‪ )2‬مطالب الگوریتم و فلوچارت‪ ،‬برگرفته از کتاب "الگوریتم و فلوچارت" شهریار رسولی نشر ارکان‬

‫دانش چاپ چهاردهم سال ‪1333‬است‪ .‬الگوریتمهای ممتاز این کتاب‪ ،‬انتخاب و در جزوه حاضر‪،‬‬

‫ارائه شده است‪.‬‬

‫ج‬
‫فهرست مطالب‬

‫صفحه‬ ‫عنوان‬

‫فصل‪ 1‬الگوریتم‪9 .......................................................................................................................‬‬


‫‪ 1-1‬الگوریتم و تعریف آن ‪3 ...........................................................................................................‬‬
‫فصل‪ 2‬فلوچارت و الگوریتمهای ساده ‪6 .........................................................................................‬‬
‫الگوریتم جابهجایی دو متغیر ‪3 ..................................................................................................‬‬ ‫‪1-2‬‬
‫الگوریتم ترتیب نزولی سه عدد ‪11 ..............................................................................................‬‬ ‫‪2-2‬‬
‫الگوریتم تعیین قائمالزاویه بودن یک مثلث ‪12 ................................................................................‬‬ ‫‪3-2‬‬
‫الگوریتم تعیین ریشههای چندجملهای درجه دوم ‪13 .......................................................................‬‬ ‫‪4-2‬‬
‫فصل‪ 3‬الگوریتمهای حلقوی ‪41....................................................................................................‬‬
‫‪ 1-3‬الگوریتم مجموع و میانگین تعداد مشخصی عدد ‪11 .........................................................................‬‬
‫‪ 2-3‬الگوریتم اعداد بخشپذیر بر ‪ 3‬یا ‪11 ......................................................................................... 1‬‬
‫‪ 3-3‬الگوریتم حاصلضرب از طریق جمع متوالی ‪11 ...............................................................................‬‬
‫‪ 4-3‬الگوریتم خارجقسمت از طریق تفریق متوالی ‪13 .............................................................................‬‬
‫‪ 1-3‬الگوریتم مقسومعلیههای یک عدد ‪13 ..........................................................................................‬‬
‫‪ 1-3‬الگوریتم بزرگترین مقسومعلیه مشترک ‪22 ..................................................................................‬‬
‫‪ 1-3‬الگوریتم عدد اول ‪21 .............................................................................................................‬‬
‫‪ 3-3‬الگوریتم فاکتوریل یک عدد ‪22 .................................................................................................‬‬
‫‪ 3-3‬الگوریتم تعیین کامل بودن یک عدد ‪23 .......................................................................................‬‬
‫‪ 12-3‬الگوریتم ‪ 22‬عدد از سری فیبوناچی ‪32.....................................................................................................................................‬‬
‫فصل‪ 4‬الگوریتم بردارها و مرتبسازی آنها ‪52.................................................................................‬‬
‫‪ 1-4‬بردارها ‪21 ..........................................................................................................................‬‬
‫‪ 2-4‬الگوریتمهای بردارها ‪21 ..........................................................................................................‬‬
‫‪ 1-2-4‬الگوریتم جدول ضرب ‪21 .....................................................................................................‬‬
‫‪ 2-2-4‬الگوریتم حاصلضرب دو ماتریس ‪23 ........................................................................................‬‬
‫‪ 3-4‬بردارهای مرتب ‪32 ................................................................................................................‬‬
‫‪ 1-3-4‬مرتبسازی تبادلی ‪32 .........................................................................................................‬‬
‫‪ 2-3-4‬مرتبسازی حبابی‪31 ..........................................................................................................‬‬

‫د‬
‫فهرست شكلها‬

‫صفحه‬ ‫عنوان‬

‫شکل ‪ :1-4‬نمای فرضی حافظه و متغیر ذخیرهشده در آن ‪21 ..........................................................‬‬


‫شکل ‪ :2-4‬نمای فرضی حافظه و آرایه ذخیرهشده در آن ‪21 ...........................................................‬‬
‫شکل ‪ :3-4‬اندیس آرایه ‪21 ............................................................................................... A‬‬

‫ه‬
‫فهرست جداول‬

‫صفحه‬ ‫عنوان‬

‫جدول ‪ :1-2‬برخی اشکال استاندارد و رایج برای ترسیم کارنما ‪3 .......................................................‬‬


‫جدول ‪ :1-4‬یک نمونه آرایه ‪1‬تایی ‪31 .....................................................................................‬‬
‫جدول ‪ :2-4‬مرحله اول مرتبسازی تبادلی ‪31 ............................................................................‬‬
‫جدول ‪ :3-4‬مرحله دوم مرتبسازی تبادلی ‪31 ...........................................................................‬‬
‫جدول ‪ :4-4‬مراحل مرتبسازی تبادلی ‪33 ................................................................................‬‬
‫جدول ‪ :1-4‬مراحل مرتبسازی حبابی ‪33 .................................................................................‬‬

‫و‬
‫فصل‪1‬‬

‫الگوریتم‬

‫الگوریتم و فلوچارت‪ ،‬مفهومی مقدماتی و مهم برای برنامه نویسی است‪ .‬الگوریتم روش حل مسایل است به نحوی که برای‬

‫ماشین یعنی همان کامپیوتر قابل درک باشد ‪ .‬شیوه حل مسایل توسط انسان و ماشین باهم تفاوت دارد ‪ .‬چرا که انسان‬

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

‫توسط انسان برای آن پیشبینی شده بهره میبرد و تمامی شرایط و حاالت ممکن برای حل مساله باید پیش بینی شده‬

‫باشد‪.‬‬

‫برای حل مسایل دو روش مکاشفهای و الگوریتمی وجود دارد که در ادامه به کمک مثال ذیل توضیح داده میشود‪.‬‬

‫فرض کنید هدف یافتن ریشههای معادله درجه دو ‪ y=x2- 4‬باشد یک روش مکاشفهای (و کوتاه و سریع) عبارت است از‪:‬‬

‫)‪1‬‬ ‫‪y=0‬‬ ‫‪x2-4=0‬‬ ‫‪x2= 4‬‬ ‫‪x1 =-2, x2=+2‬‬

‫تابع ‪ y‬چون فاقد جملهای بر حسب ‪ x‬و عالمت عدد ثابت منفی است‪ ،‬توانستیم جواب مساله را بهراحتی به دست‬

‫بیاوریم‪ .‬حال اگر تابع به فرم ذیل باشد‪:‬‬

‫)‪2‬‬ ‫‪y=x2-4x+4 = (x-2) 2 = 0‬‬ ‫‪x1,2=2‬‬ ‫ریشه مضاعف‬

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

‫)‪3‬‬ ‫)‪y=x2-5x+6 = (x-2) (x-3‬‬ ‫‪x1=2,‬‬ ‫‪x2=3‬‬

‫‪1‬‬
‫‪2‬‬

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

‫فاقد جمله درجه اول از ‪ x‬بود با بردن عدد منفی به سمت دیگر تساوی و گرفتن جذر جواب را بدست آوردیم‪ .‬این روش‬

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

‫عوامل تجزیه کردیم‪ .‬تشخیص اینکه از کدام روش استفاده کنیم‪ ،‬وابسته به شکل تابع بوده است‪ .‬در واقع روش حل را هر‬

‫بار از طریق مکاشفه بهدستآوردیم‪ .‬اما تمامی این روشها‪ ،‬قابل فهم برای کامپیوتر نیست‪.‬‬

‫راه حل الگوریتمی‪ ،‬استفاده از معادله مشخصه و ‪ ∆= 𝑏2 − 4ac‬است‪ .‬در اینصورت اگر‪:‬‬


‫𝑏‪−‬‬
‫‪ ،∆= 0 .1‬آنگاه معادله مورد نظر ما یک ریشه مضاعف خواهد داشت که از فرمول ‪ X1,2= 2a‬محاسبه میشود‪.‬‬
‫∆√‪−𝑏−‬‬ ‫∆√‪−𝑏+‬‬
‫= ‪X2‬‬ ‫‪2a‬‬
‫=‪ X1‬و‬ ‫‪2a‬‬
‫‪ ∆> 0 .2‬بدست آید معادله مورد نظر ما دارای دو ریشه حقیقی است که از فرمول‬

‫محاسبه میشود‪.‬‬

‫‪ ∆< 0 .3‬معادله مورد نظر ما ریشه حقیقی ندارد و دارای دو ریشه موهومی از مجموعه اعداد مختلط است که از‬

‫فرمول زیر محاسبه میشود‪:‬‬


‫𝑖 ∆√‪−𝑏+‬‬ ‫𝑖∆√‪−𝑏−‬‬
‫‪∆< 0‬‬ ‫=‪x1‬‬ ‫=‪, x2‬‬
‫𝑎‪2‬‬ ‫𝑎‪2‬‬

‫با استفاده از مثال قبل نتایج زیر بدست میآید‪.‬‬

‫‪ )1‬روش حل مکاشفهای روش مناسبی برای حل مسائل توسط انسان است اما روش کاربردی و مناسبی برای حل‬

‫مسائل توسط کامپیوتر نیست‪.‬‬

‫‪ )2‬برای مثال قبل میتوان از اتحادها و تجزیه برای تشخیص ریشههای معادله استفاده کرد اما این روش برای‬

‫کامپیوتر مناسب نیست چرا که تعداد اتحادها زیاد است و مجبور میشویم برای هر کدام از اتحادها‪ ،‬تعدادی‬

‫زیادی رابطه بین ضرایب و عالمتها برقرار کنیم‪ .‬تعریف اینهمه رابطه در کامپیوتر‪ ،‬دشوار و غیرمنطقی است‪.‬‬

‫بهترین روش برای پیدا کردن ریشههای معادله درجه دوم‪ ،‬استفاده از معادله مشخصه و روش دلتا است‪ .‬در واقع‬

‫روش دلتا یک "الگوریتم ریاضی" است که پیاده کردن آن در کامپیوتر نیز راحت است‪.‬‬

‫‪2‬‬
‫‪ 1-1‬الگوریتم و تعریف آن‬

‫الگوریتم برگرفته از کلمه الخوارزمی است که توسط انگلیسی زبانان و با گذشت زمان به کلمه الگوریتم تغییر یافتهاست‪.‬‬

‫خوارزمی برای حل مسائل جبری‪ ،‬به جای حل موردی مساله‪ ،‬سعی در ارائه یک "فرآیند نظام مند و فراگیر" داشت (همانند‬

‫چیزی که در یافتن ریشههای معادله درجه دوم دیدیم)‪ .‬خوارزمی سعی میکرد برای حل یک مساله تمامی حاالت ممکن‬

‫را درنظرگرفته و یک روش عمومی برای حل تمامی حاالت ممکن ارائه کند‪.‬‬

‫تعریف الگوریتم‪ :‬هر دستور العملی که مراحل انجام کاری را به زبان دقیق و با جزئیات کافی بیان کند به طوری‬

‫که ترتیب مراحل و شرط خاتمه در آن کامال مشخص شده باشد‪ ،‬الگوریتم میگوییم‪ .‬منظور از‪:‬‬

‫‪ )1‬جزئیات کافی آن است که در طول الگوریتم عملیات ناشناخته و مبهم پیش نیاید و باعث انحراف از مسیر اصلی‬

‫نگردد‪.‬‬

‫‪ )2‬منظور از زبان دقیق آن است که الگوریتم دقیقا به همان صورتی که مدنظر برنامه نویس است اجرا گردد‪.‬‬

‫‪ )3‬منظور از ترتیب مراحل آن است که مراحل اجرای الگوریتم قدم به قدم و با رعایت تقدم و تاخر مشخص شده‬

‫باشد‪.‬‬

‫‪ )4‬شرط خاتمه‪ ،‬پایانپذیر بودن الگوریتم میباشد و الگوریتم در زمانی دلخواه و تحت شرایط داده شده خاتمه یابد‪.‬‬

‫البته نباید تصور کرد الگوریتمها و روشهای عنوان شده منحصربهفرد است بلکه برای حل هر مسئله ممکن است‬

‫دهها راه حل وجود داشته باشد پس بهتر است دانشجویان برای تفهیم بهتر سعی کنند راه حلهای دیگری را برای خود‬

‫ارائه دهند تا نهایتا نتیجه مطلوب حاصل گردد‪.‬‬

‫برای درک بهتر مفهوم الگوریتم به ارائه یک مثال ساده میپردازیم‪ .‬فرض کنید هدف ما ارائه یک الگوریتم به یک‬

‫ربات برای یک تماس تلفنی است‪ .‬در این مثال با نحوه انتقال دستور آشنا میشویم‪ .‬به مدارهای الکترونیکی و ابزارهای‬

‫مکانیکی ربات کاری نداریم‪ .‬میدانیم باجه تلفن عمومی با سکه کار میکند در برخورد اول ممکن است چنین الگوریتمی‬

‫را تعریف کنیم‪:‬‬

‫‪ )1‬گوشی تلفن را بردار‪.‬‬

‫‪ )2‬سکه را درون دستگاه بنداز‪.‬‬

‫‪3‬‬
‫‪ )3‬شماره مشترک مورد نظرت را با صفحه کلید دستگاه شمارهگیری کن‪.‬‬

‫‪ )4‬منتظر برقرای ارتباط شو و پس ازبرقراری ارتباط مکالمه کن‪.‬‬

‫‪ )1‬گوشی تلفن را سر جایش بگذار‪.‬‬

‫‪ )1‬از باجه خارج شو‪.‬‬

‫‪ )1‬خاتمه‪.‬‬

‫در الگوریتم ارائه شده برای تماس تلفنی عملیات ناشناخته پیش خواهد آمد‪ .‬برای مثال مشخص نیست که ربات‬

‫ما هنگام خرابی باجه یا شنیدن بوق اشغال چه کاری باید انجام دهد‪ .‬همچنین نحوه استفاده از سکههای مختلف (‪ 1‬ریالی‬

‫یا ‪ 12‬ریالی و ‪ )....‬مشخص نیست و به همین علت الگوریتم نوشتهشده الگوریتم جامع و صحیحی نیست و جوابگوی تمامی‬

‫حاالت ممکن نخواهد بود‪.‬‬

‫برای بیان الگوریتم میتوان از روشهای زیر استفاده کرد‪:‬‬

‫‪ )1‬زبانهای محاورهای‪ :‬برخی از الگوریتمها را میتوان به زبان محاورهای (مثال فارسی و انگلیسی) توضیح داد‬

‫(همانند مثال باجه تلفن)‪.‬‬

‫‪ )2‬استفاده از اشکال و نمودار (کارنما‪ :)1‬در کارنما‪ ،‬از اشکال هندسی مختلف و استانداردی استفاده میشود که هر‬

‫کدام نشان دهنده یک عمل خاص هستند‪.‬‬

‫‪ )3‬استفاده از زبانهای برنامهنویسی مرسوم نظیر ‪ c++‬و ‪.pascal‬‬

‫‪ )4‬استفاده از شبهکد‪ :2‬در این روش با کمی دخل و تصرف در دستورات یک زبان برنامهنویسی‪ ،‬الگوریتم را با‬

‫آزادی عمل بیشتری بیان میکنند‪ .‬چنانکه ممکن است دستوراتی را شبیه به یک کد (دستور) برنامهنویسی به‬

‫کار ببرند که اصال در آن زبان وجود نداشته باشد ولی منظورشان را به روشنی برساند و چگونگی پیادهسازی‬

‫آن را به عهده فرد برنامه نویس میگذارند‪.‬‬

‫‪1‬‬
‫‪flowchart‬‬
‫‪2‬‬
‫‪pseudo code‬‬
‫‪4‬‬
‫تفاوت برنامهنویس و کدنویس چیست؟ برای درک تفاوت این دو از یک مثال استفاده میشود‪ .‬در یک ساختمان‬

‫مهندسین معمار‪ ،‬سازه‪ ،‬برق و مکانیک نقشههای معماری‪ ،‬سازه‪ ،‬برق و تاسیسات را ارائه میکنند و گروههای اجرایی نظیر‬

‫اکیپ گود بردار‪ ،‬آرماتوربند‪ ،‬بتنریزی ساختمان را طبق نقشه ارائه شده میسازند‪ .‬در برنامهنویسی هم به همین ترتیب‬

‫است و برنامهنویس نقشهراه و معماری را ارائه میکند و کد نویس با استفاده ار یک زبان برنامهنویسی آن را به "دستورات"‬

‫قابل فهم برای کامپیوتر تبدیل میکند‪ .‬در زمینه مهندسی کامپیوتر‪ ،‬جایگاه برنامهنویس باالتر از کدنویس است‪.‬‬

‫‪1‬‬
‫فصل‪2‬‬

‫فلوچارت و الگوریتمهای ساده‬

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

‫بیان الگوریتمها هستیم معموال الگوریتمها را توسط نمودارهای خاصی به نام کارنما یا روندنما یا شمای عملیات یا نمودار‬

‫گردشی تحت یک سری قوانین استاندارد نشان میدهند‪ .‬مزایای رسم کارنما عبارتند از‪:‬‬

‫‪ )1‬با بکارگیری قدرت بصری افراد‪ ،‬مفاهیم را به سرعت انتقال میدهد و در نتیجه بهره برداری مخاطب در یادگیری‬

‫باال میرود‪.‬‬

‫‪ )2‬با بهرهجویی از قوانین استاندارد برای رسم‪ ،‬کار نما برای هر فردی که با قوانین کارنما آشنایی داشته باشد‪،‬‬

‫قابل فهم میشود‪.‬‬

‫‪ )3‬برای شخص نویسنده الگوریتم نیز پیگیری‪ 1‬الگوریتم و بررسی درستی آن به واسطه نمودار بهمراتب راحتتر‬

‫است‪.‬‬

‫شکلهای استانداردی که در رسم فلوچارت میتوان از آنها استفاده نمود ذیال به همراه توضیح مختصری در مورد‬

‫نحوه استفاده از آنها در جدول (‪ )1-1‬آورده شده است‪.‬‬

‫درباره ترسیم کارنما‪ ،‬نکات ذیل قابل توجه است‪:‬‬

‫‪1‬‬
‫‪trace‬‬
‫‪1‬‬
‫‪ )1‬در هر الگوریتم یک نقطه شروع وجود دارد ولی ممکن است چند نقطه پایان وجود داشته باشد در نتیجه در هر‬

‫کجا که نیاز باشد یک نقطه پایان در نظر میگیریم‪ .‬همچنین میشود تنها یک نقطه پایان در نظر گرفت و‬

‫چندین پیکان به آن وارد شود‪.‬‬

‫‪ )2‬در برخی از کتابها به جای بیضی برای شروع و پایان از دایره استفاده میشود که مسلما تفاوت چندانی ندارد‪.‬‬

‫‪ )3‬در هر مرحله میتوان با یک پیکان خروجی به هریک از مراحل قبلی کارنما (به غیر از شروع ) بازگشت اما از‬

‫دکمههای پایان نمیتوان به هیچ عنوان به مرحله دیگری رفت‪.‬‬

‫در ادامه این فصل‪ ،‬کارنمای چندین الگوریتم ارائه میشود‪.‬‬

‫‪1‬‬
‫جدول ‪ :1-2‬برخی اشكال استاندارد و رایج برای ترسیم کارنما‬

‫مثال‬ ‫شرح‬ ‫شکل‬

‫و خاتمه‬ ‫نشان دادن شروع‬ ‫برای‬


‫‪ Stop‬یا ‪Start‬‬
‫عملیات‬

‫محاسبه و عملیات واگذاری (انتساب)‬


‫‪D‬‬ ‫‪A+B‬‬

‫‪c‬‬ ‫‪1‬‬

‫‪Read A,B‬‬ ‫ورود اطالعات‬

‫خروج اطالعات برروی کاغذ چاپ‬


‫‪Print Sum, P‬‬

‫سوال‪ ،‬تصمیم گیری و شرطهای دلخواه‬


‫‪If A<1000‬‬

‫اتصال و ارتباط‬

‫نشان دادن مسیر عملیات و ارتباط‬


‫شکلها‬

‫‪3‬‬
‫‪ 1-2‬الگوریتم جابهجایی دو متغیر‬

‫برنامهای بنویسید که دو عدد دلخواه را در ‪ A‬و ‪ B‬قرار دهد و سپس مقادیر ‪ A‬و ‪ B‬را باهم جابهجا کند‪.‬‬

‫روش اول‪ :‬استفاده از روش متغیر کمکی ‪T‬‬

‫‪START‬‬ ‫شروع‪.‬‬ ‫‪.1‬‬


‫دو عدد را بخوان و ‪ A,B‬نام گذاری کن‪.‬‬ ‫‪.2‬‬
‫‪A, B‬‬ ‫مقادیر ‪ A,B‬را نمایش بده‪.‬‬ ‫‪.3‬‬
‫مقدار ‪ A‬را در ‪ T‬بگذار‪.‬‬ ‫‪.4‬‬
‫‪A, B‬‬ ‫مقدار ‪ B‬را در ‪ A‬بگذار‪.‬‬ ‫‪.1‬‬
‫مقدار ‪ T‬را در ‪ B‬بگذار‪.‬‬ ‫‪.1‬‬
‫مقادیر‪ A,B‬را نمایش بده‪.‬‬ ‫‪.1‬‬
‫‪T‬‬ ‫‪A‬‬ ‫پایان‪.‬‬ ‫‪.3‬‬
‫‪A‬‬ ‫‪B‬‬
‫‪B‬‬ ‫‪T‬‬

‫‪A,B‬‬

‫‪STOP‬‬
‫مثال‪:‬‬
‫‪A 12‬‬ ‫‪1‬‬
‫‪B‬‬ ‫‪1 12‬‬
‫‪T‬‬ ‫‪12‬‬

‫‪3‬‬
‫روش دوم‪ :‬استفاده از عملیات ریاضی‬

‫شروع‪.‬‬ ‫‪.1‬‬
‫‪START‬‬ ‫دو عدد را بخوان و در ‪ A , B‬قرار بده‪.‬‬ ‫‪.2‬‬
‫مقادیر ‪ A,B‬را نمایش بده‪.‬‬ ‫‪.3‬‬
‫‪A,B‬‬
‫حاصل ‪ A+B‬را در ‪ A‬بگذار‪.‬‬ ‫‪.4‬‬
‫حاصل عبارت ‪ A-B‬را در ‪ B‬بگذار ‪.‬‬ ‫‪.1‬‬
‫‪A, B‬‬
‫حاصل عبارت ‪ A-B‬را در ‪ A‬بگذار‪.‬‬ ‫‪.1‬‬
‫‪A‬‬ ‫‪A+B‬‬ ‫مقادیر ‪ A,B‬را نمایش بده‪.‬‬ ‫‪.1‬‬
‫‪B‬‬ ‫‪A-B‬‬ ‫پایان‪.‬‬ ‫‪.3‬‬
‫‪A‬‬ ‫‪A-B‬‬

‫‪A,B‬‬

‫‪STOP‬‬

‫مثال‪:‬‬
‫‪A 12 11‬‬ ‫‪1‬‬
‫‪B‬‬ ‫‪1 12 12‬‬

‫نکته‪ :‬دستورات کارنما‪ ،‬از باال به پایین اجرا میشود‪ .‬چنانچه در مستطیل‪ ،‬این ترتیب رعایت نشود‪ ،‬نتایج دیگری‬
‫حاصل خواهد شد‪ .‬اگر از پایین به باال‪ ،‬به جدول ذیل‪ ،‬توجه کنید‪.‬‬

‫‪A 12 1 1‬‬
‫‪B‬‬ ‫‪1 2 2‬‬

‫‪12‬‬
‫‪ 2-2‬الگوریتم ترتیب نزولی سه عدد‬

‫الگوریتم برنامهای را بنویسید که ‪ 3‬عدد را خوانده و آنها را به ترتیب نزولی نشان دهد‪.‬‬

‫‪ .1‬شروع‪.‬‬

‫‪START‬‬ ‫‪ .2‬سه عدد را بخوان و ‪ A,B,C‬نام گذاری کن‪.‬‬

‫‪ .3‬اگر ‪ A< B‬است مقادیرآنها را جابه جا کن‪.‬‬


‫‪A,B,C‬‬
‫‪T‬‬ ‫‪A‬‬ ‫‪ .4‬اگر ‪ A< C‬است مقادیر آن را جابجا کن‪.‬‬
‫‪Y‬‬ ‫‪A‬‬ ‫‪B‬‬
‫𝐵<‪A‬‬ ‫‪B‬‬ ‫‪T‬‬ ‫‪ .1‬اگر ‪ B< C‬است مقادیر آنها را جابه جا کن‪.‬‬
‫‪N‬‬

‫‪ .1‬مقادیر ‪ A,B,C‬را نمایش بده‪.‬‬


‫‪T‬‬ ‫‪A‬‬
‫‪Y‬‬
‫‪A <C‬‬ ‫‪A‬‬ ‫‪C‬‬
‫‪C‬‬ ‫‪T‬‬
‫‪ .1‬پایان‪.‬‬
‫‪N‬‬

‫‪T‬‬ ‫‪B‬‬
‫‪Y‬‬
‫‪B< C‬‬ ‫‪B‬‬ ‫‪C‬‬
‫‪N‬‬ ‫‪C‬‬ ‫‪T‬‬

‫‪A,B,C‬‬

‫‪STOP‬‬

‫مثال‪:‬‬
‫‪A 13 24‬‬
‫‪B 24 13‬‬
‫‪C 12 12‬‬
‫‪T‬‬ ‫‪13‬‬

‫‪11‬‬
‫‪ 3-2‬الگوریتم تعیین قائمالزاویه بودن یک مثلث‬

‫شروع‪.‬‬ ‫‪.1‬‬
‫‪START‬‬ ‫سه عدد را بخوان و ‪ A,B,C‬نام گذاری کن‪.‬‬ ‫‪.2‬‬
‫اگر ‪ A2=B2+C2‬بود‪ ،‬برو به مرحله ‪.1‬‬ ‫‪.3‬‬
‫‪A,B,C‬‬ ‫اگر ‪ B2=A2+C2‬بود‪ ،‬برو به مرحله ‪.1‬‬ ‫‪.4‬‬
‫اگر ‪ C2=A2+B2‬بود‪ ،‬برو به مرحله ‪.1‬‬ ‫‪.1‬‬
‫‪Y‬‬ ‫عبارت "‪ "NO‬را نشان بده‪.‬‬ ‫‪.1‬‬
‫‪A2=B2+C2‬‬
‫عبارت ”‪ “YES‬را نمایش بده‪.‬‬ ‫‪.1‬‬
‫‪N‬‬
‫پایان‪.‬‬ ‫‪.3‬‬
‫‪Y‬‬
‫‪B2=A2+ C2‬‬

‫‪N‬‬
‫‪Y‬‬
‫‪C2=A2+ B2‬‬ ‫”‪“YES‬‬

‫‪N‬‬

‫"‪“NO‬‬
‫”‬
‫‪STOP‬‬

‫مثال‪:‬‬
‫‪A 3‬‬
‫‪B 1‬‬
‫‪C 4‬‬

‫‪12‬‬
‫‪ 4-2‬الگوریتم تعیین ریشههای چندجملهای درجه دوم‬

‫(‪)Ax2+Bx+C=0‬‬ ‫معادله درجه دوم‪ ،‬به شکل روبرو است‪:‬‬

‫‪START‬‬ ‫‪ .1‬شروع‪.‬‬
‫‪ .2‬ضرایب معادله را بخوان و ‪ A,B,C‬نام‬
‫‪A,B,C‬‬
‫گذاری کن‪.‬‬
‫‪D‬‬ ‫‪B2-4AC‬‬ ‫‪ .3‬حاصل عبارت ‪ B2-4AC‬را در ‪ D‬بگذار‪.‬‬
‫‪ .4‬اگر ‪ D<0‬است‪ ،‬معادله ریشه حقیقی ندارد و‬
‫‪Y‬‬
‫‪D<0‬‬ ‫”‪“NO ROUT‬‬ ‫به ‪ 3‬برو‪.‬‬
‫‪N‬‬ ‫‪ .1‬اگر ‪ D=0‬مقدار ‪ -B/2A‬را در ‪ X1‬و ‪ X2‬قرار‬
‫‪Y‬‬ ‫‪X1‬‬ ‫‪-B/2A‬‬
‫‪D=0‬‬ ‫بده و به مرحله ‪ 3‬برو‪.‬‬
‫‪X2‬‬ ‫‪X1‬‬
‫‪N‬‬ ‫‪ .1‬اگر ‪ D>0‬مقدار 𝐴‪ (-B+√𝐷)/2‬را در ‪X1‬‬
‫‪X1‬‬ ‫𝐴‪(-B+√𝐷)/2‬‬ ‫قرار بده‪ .‬حاصل عبارت 𝐴‪ (-B-√𝐷)/2‬را در‬
‫‪X2‬‬ ‫𝐴‪(-B-√𝐷)/2‬‬ ‫‪ X2‬قرار بده‪.‬‬
‫‪ .1‬مقدار ‪ X1‬و ‪ X2‬را نمایش بده‪.‬‬
‫‪ .3‬پایان‪.‬‬
‫‪X1,X2‬‬

‫‪STOP‬‬

‫‪13‬‬
‫فصل‪3‬‬
‫الگوریتمهای حلقوی‬

‫در فصل قبل توضیحاتی در مورد فلوچارت و همچنین مسائلی در رابطه با الگوریتمهای ساده داشتیم و دانستیم که‬

‫الگوریتمهای ساده الگوریتمهایی هستند که مراحل آن فقط یک بار و از باال بهطرف پایین اجرا میگردند‪ .‬در این فصل‬

‫شما را با الگوریتمهایی کمی پیچیده تر آشنا میکنیم که در آنها ممکن است مراحلی از الگوریتمها چندین بار اجرا گردد‪.‬‬

‫این الگوریتمها زمانی استفاده میشود که بخواهیم عملیاتی برای تعداد دفعات دلخواه انجام پذیرد‪.‬‬

‫تعریف حلقه‪ :‬به مراحلی از الگوریتم که چندین بار اجرای آنها تکرار میگردد حلقه‪ 1‬میگوییم‪.‬‬

‫برای ساختن حلقه از یک متغیر کمکی استفاده میگردد ( نظیر ‪ )n,i‬این متغیر را قبل از شروع حلقه با یک مقدار‬

‫اولیه آماده میسازیم و سپس معموال در انتهای حلقه و قبل از برگشتن به ابتدای حلقه مقداری را به آن اضافه کرده و‬

‫تحت یک شرط خاص به مراحل قبل پرش میکنیم‪.‬‬

‫تعریف مقدار اولیه‪ :‬مقداری را که قبل از شروع حلقه به متغیر داده میشود‪ ،‬مقدار اولیه یا شرط اولیه گویند‪.‬‬

‫تعریف مقدار اضافه شونده‪ :‬به مقداری که پس از یکبار اجرای حلقه به متغیر حلقه اضافه میشود‪ ،‬مقدار اضافهشونده‬

‫میگوییم‪.‬‬

‫تعریف مقدار پایانی‪ :‬به آخرین مقدار یا شرطی که اجرای حلقه با آن پایان میپذیرد‪ ،‬مقدار شرطی‪ ،‬مقدار پایانی‬

‫یا شرط پایانی میگوییم‪.‬‬

‫در ادامه این فصل‪ ،‬کارنمای چندین الگوریتم حلقوی ارائه میشود‪.‬‬

‫‪1‬‬
‫‪loop‬‬
‫‪14‬‬
‫‪ 1-3‬الگوریتم مجموع و میانگین تعداد مشخصی عدد‬

‫الگوریتم برنامهای را بنویسید یک عدد بزرگتر از صفر را خوانده سپس به تعداد آن عدد‪ ،‬اعداد دیگری را خوانده و‬
‫مجموع و میانگین آنها را نمایش دهد‪.‬‬

‫شروع‪.‬‬ ‫‪.1‬‬
‫‪SRART‬‬ ‫مقدار صفر را در ‪ C‬و‪ S‬قرار بده‪.‬‬ ‫‪.2‬‬
‫یک عدد را بخوان و در ‪ N‬بگذار‪.‬‬ ‫‪.3‬‬
‫‪C‬‬ ‫‪0‬‬
‫اگر ‪ C=N‬است به مرحله ‪ 3‬برو‪.‬‬ ‫‪.4‬‬
‫‪S‬‬ ‫‪0‬‬
‫یک عدد را بخوان و در ‪ A‬قرار بده‪.‬‬ ‫‪.1‬‬
‫‪N‬‬ ‫حاصل عبارت ‪ S+A‬را در ‪ S‬قرار بده‪.‬‬ ‫‪.1‬‬
‫یک واحد به ‪ C‬اضافه کن و به مرحله ‪ 4‬بازگرد‪.‬‬ ‫‪.1‬‬
‫مقادیر ‪ S‬و‪ S/N‬را نمایش بده‪.‬‬ ‫‪.3‬‬
‫‪Y‬‬ ‫‪S, S/N‬‬ ‫پایان‪.‬‬ ‫‪.3‬‬
‫‪C=N‬‬
‫‪N‬‬

‫‪A‬‬ ‫‪STOP‬‬

‫‪S‬‬ ‫‪S+A‬‬

‫‪C‬‬ ‫‪C+1‬‬

‫‪11‬‬
‫‪ 2-3‬الگوریتم اعداد بخشپذیر بر ‪ 3‬یا ‪5‬‬

‫الگوریتم برنامهای را بنویسید که کلیه اعداد از ‪ 12‬تا ‪ 122‬را که بر ‪ 3‬یا ‪ 1‬بخش پذیرند نمایش دهد‪.‬‬

‫‪ .1‬شروع‪.‬‬
‫‪START‬‬ ‫‪ .2‬عدد ‪ 12‬را در ‪ N‬قرار بده‪.‬‬
‫‪ .3‬باقیمانده تقسیم ‪ N‬بر ‪ 3‬را در ‪ K‬بگذار‪.‬‬
‫‪N‬‬ ‫‪50‬‬
‫‪ .4‬اگر ‪ N ،K=0‬را نمایش بده‪.‬‬
‫‪ .1‬باقیمانده تقسیم ‪ N‬بر ‪ 1‬را در‪ K‬بگذار‪.‬‬
‫‪K‬‬ ‫‪N-INT(N/3)× 3‬‬ ‫‪ .1‬اگر ‪ N, K=0‬را نمایش بده‪.‬‬
‫‪ .1‬یک واحد به ‪ N‬اضافه کن‪.‬‬
‫‪K=0‬‬
‫‪Y‬‬ ‫‪N‬‬ ‫‪ .3‬اگر ‪ N≤ 500‬است به مرحله ‪ 3‬برگرد‪.‬‬
‫‪N‬‬ ‫‪ .3‬پایان‪.‬‬
‫‪K‬‬ ‫‪N-INT(N/5)× 5‬‬

‫‪Y‬‬
‫‪K=0‬‬ ‫‪N‬‬
‫‪N‬‬

‫‪N‬‬ ‫‪N+1‬‬

‫‪Y‬‬ ‫‪N≤ 500‬‬

‫‪N‬‬
‫‪STOP‬‬

‫مثال‪:‬‬
‫‪N 12 11 12 13 14 11 11 ...‬‬
‫‪ 12 11‬چاپ‬ ‫‪14 11‬‬ ‫‪...‬‬

‫‪11‬‬
‫‪ 3-3‬الگوریتم حاصلضرب از طریق جمع متوالی‬

‫الگوریتم برنامهای را بنویسید که دو عدد مثبت را خوانده حاصلضرب دو عدد را از طریق جمع متوالی حساب‬
‫کرده و نمایش دهد‪.‬‬

‫شروع‪.‬‬ ‫‪)1‬‬
‫‪START‬‬ ‫دو عدد را بخوان و ‪ N,M‬نام گذاری کن‪.‬‬ ‫‪)2‬‬
‫مقدار صفر را در ‪ S‬قرار بده‪.‬‬ ‫‪)3‬‬
‫‪M, N‬‬
‫اگر ‪ N=0‬است به مرحله ‪ 1‬برو‪.‬‬ ‫‪)4‬‬
‫حاصل عبارت ‪ S+M‬را در ‪ S‬بگذار‪.‬‬ ‫‪)1‬‬
‫‪S‬‬ ‫‪0‬‬
‫یک واحد از ‪ N‬کم کن و به مرحله ‪ 4‬برگرد‪.‬‬ ‫‪)1‬‬
‫مقدار ‪ S‬را به عنوان حاصلضرب دو عدد نمایش بده‪.‬‬ ‫‪)1‬‬
‫پایان‪.‬‬ ‫‪)3‬‬
‫‪N‬‬ ‫‪S‬‬ ‫‪S+M‬‬
‫‪N=0‬‬
‫‪N‬‬ ‫‪N-1‬‬
‫‪Y‬‬
‫‪S‬‬

‫‪STOP‬‬

‫مثال‪:‬‬
‫‪M 2 2 2 2‬‬
‫‪N 3 2 1 2‬‬
‫‪S 2 2 4 1‬‬

‫…‬ ‫‪………………………………………………………………………………………… …..‬‬

‫‪11‬‬
‫…………………………………………………………………………………………… … …‬

‫‪ 4-3‬الگوریتم خارجقسمت از طریق تفریق متوالی‬

‫الگوریتم برنامهای را بنویسید که خارج قسمت و باقیمانده دو عدد را از طریق تفریق متوالی بدست آورد‪ .‬در این الگوریتم‪،‬‬

‫عدد بزرگتر ‪ M‬و عدد کوچکتر ‪ N‬خواهد شد‪.‬‬

‫‪ )1‬شروع‪.‬‬
‫‪START‬‬
‫‪ )2‬دو عدد را بخوان و ‪ N,M‬نام گذاری کن‪.‬‬
‫‪N,M‬‬ ‫‪ )3‬اگر ‪ N>M‬است‪ ،‬مقادیر ‪ M‬و ‪ N‬را جابجا کن‪.‬‬
‫‪T‬‬ ‫‪N‬‬
‫‪ )4‬مقدار صفر را در ‪ A‬قرار بده‪.‬‬
‫‪Y‬‬ ‫‪N‬‬ ‫‪M‬‬
‫‪N> M‬‬ ‫‪ )1‬حاصل عبارت ‪ M-N‬را در ‪ M‬بگذار‪.‬‬
‫‪M‬‬ ‫‪T‬‬
‫‪N‬‬
‫‪ )1‬یک واحد به ‪ A‬اضافه کن‪.‬‬
‫‪ )1‬اگر ‪ M≥N‬است‪ ،‬به مرحله ‪ 1‬برو‪.‬‬
‫‪ )3‬مقادیر ‪ M‬و ‪ A‬را نمایش بده‪.‬‬
‫‪A‬‬ ‫‪0‬‬
‫‪ )3‬پایان‪.‬‬

‫‪M‬‬ ‫‪M-N‬‬

‫‪A‬‬ ‫‪A+1‬‬

‫‪Y‬‬
‫‪M ≥N‬‬
‫‪N‬‬
‫‪A,M‬‬

‫‪STOP‬‬

‫مثال‪:‬‬
‫‪M 1 1 3 1‬‬
‫‪N 2 2 2 2‬‬
‫‪A 2 1 2 3‬‬

‫‪13‬‬
‫‪ 5-3‬الگوریتم مقسوم علیههای یک عدد‬

‫الگوریتم برنامهای را بنویسید که عدد طبیعی ‪ N> 1‬را خوانده و مقسومعلیههای طبیعی آن را نمایش دهد‪.‬‬

‫شروع‪.‬‬ ‫‪)1‬‬
‫‪START‬‬ ‫یک عدد را بخوان و ‪ N‬نام گذاری کن‪.‬‬ ‫‪)2‬‬
‫مقدار یک را در ‪ M‬قرار بده‪.‬‬ ‫‪)3‬‬
‫‪N‬‬
‫باقیمانده تقسیم ‪ N‬بر ‪ M‬را در ‪ K‬قرار بده‪.‬‬ ‫‪)4‬‬
‫‪M‬‬ ‫‪1‬‬
‫اگر ‪ K=0‬است ‪ ,‬مقدار ‪ M‬را نمایش بده‪.‬‬ ‫‪)1‬‬
‫یک واحد به ‪ M‬اضافه کن‪.‬‬ ‫‪)1‬‬
‫اگر ‪ M≤ N‬است به مرحله ‪ 4‬برو‪.‬‬ ‫‪)1‬‬
‫پایان‪.‬‬ ‫‪)3‬‬
‫‪K‬‬ ‫‪N-INT(N/M)× M‬‬

‫‪Y‬‬
‫‪K=0‬‬ ‫‪M‬‬

‫‪N‬‬

‫‪M‬‬ ‫‪M+1‬‬

‫‪Y‬‬
‫‪M≤ N‬‬

‫‪N‬‬
‫‪STOP‬‬

‫مثال‪:‬‬
‫‪N 3 3 3 3 3 3 3 3‬‬
‫‪M 1 2 3 4 1 1 1 3‬‬
‫‪ 1 2‬چاپ‬ ‫‪4‬‬ ‫‪3‬‬

‫‪13‬‬
‫‪ 6-3‬الگوریتم بزرگترین مقسومعلیه مشترک‬

‫الگوریتم برنامهای را بنویسید که دو عدد غیر صفر را خوانده و بزرگترین مقسومعلیه مشترک آنها را نمایش‬
‫دهد (پیش فرض این است که عدد ‪ A‬بزرگتر است)‪.‬‬

‫شروع‪.‬‬ ‫‪)1‬‬
‫‪START‬‬ ‫دو عدد را بخوان و ‪ A,B‬نام گذاری کن‪.‬‬ ‫‪)2‬‬
‫باقیمانده تقسیم ‪ A‬بر ‪ B‬را در ‪ P‬قرار بده‪.‬‬ ‫‪)3‬‬
‫‪A,B‬‬
‫اگر ‪ P=0‬است ‪ B‬بزرگترین مقسوم علیه‬ ‫‪)4‬‬
‫مشترک است‪ ،‬آنرا چاپ کن و به مرحله ‪1‬‬
‫برو‪.‬‬
‫‪P‬‬ ‫‪A-INT(A/B)× B‬‬
‫مقدار ‪ B‬را در ‪ A‬قرار بده‪.‬‬ ‫‪)1‬‬
‫مقدار ‪ P‬را در ‪ B‬بگذار و به مرحله ‪ 1‬برو‪.‬‬ ‫‪)1‬‬
‫‪N‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫پایان‪.‬‬ ‫‪)1‬‬
‫‪P=0‬‬
‫‪B‬‬ ‫‪P‬‬
‫‪Y‬‬
‫‪B‬‬

‫‪STOP‬‬

‫چند مثال‪:‬‬
‫مثال ‪)2‬‬ ‫مثال ‪)1‬‬
‫‪A‬‬ ‫‪13‬‬ ‫‪12‬‬ ‫‪A‬‬ ‫‪11‬‬
‫‪B‬‬ ‫‪12‬‬ ‫‪1‬‬ ‫‪B‬‬ ‫‪3‬‬
‫‪P‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪P‬‬ ‫‪2‬‬

‫‪22‬‬
‫‪ 7-3‬الگوریتم عدد اول‬

‫الگوریتم برنامهای را بنویسید که یک عدد را خوانده و اول بودن آن را تعیین نماید‪.‬‬

‫‪ )1‬شروع‪.‬‬
‫‪START‬‬ ‫‪ )2‬یک عدد را بخوان و در‪ N‬بگذار‪.‬‬
‫‪ )3‬اگر ‪ N=2‬است به مرحله ‪ 3‬برو‪.‬‬
‫‪N‬‬ ‫‪ )4‬مقدار ‪ 2‬را در ‪ P‬بگذار‪.‬‬
‫‪ )1‬باقیمانده تقسیم ‪ N‬بر ‪ P‬را در ‪ K‬قرار بده‪.‬‬
‫‪Y‬‬ ‫‪N=2‬‬ ‫‪ )1‬اگر ‪ K=0‬است‪ N ،‬اول نیست و به مرحله ‪ 12‬برو‪.‬‬
‫‪ )1‬یک واحد به ‪ P‬اضافه کن‪.‬‬
‫‪N‬‬
‫‪ )3‬اگر ‪ P≤ N/2‬است به مرحله ‪ 1‬برگرد در غیر‬
‫‪P‬‬ ‫‪2‬‬ ‫اینصورت به مرحله ‪ 3‬برو‪.‬‬
‫‪ )3‬عدد ‪ N‬اول است‪.‬‬
‫‪ )12‬پایان‪.‬‬
‫‪K‬‬ ‫‪N-INT(N/P)× P‬‬
‫چند مثال‪:‬‬
‫‪Y‬‬ ‫مثال ‪ )2‬عدد غیراول ‪3‬‬ ‫مثال ‪ )1‬عدد اول ‪1‬‬
‫‪K=0‬‬ ‫”‪N,” NO PRIME‬‬
‫‪N‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪N‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪N‬‬ ‫‪P‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪P‬‬ ‫‪2‬‬ ‫‪3‬‬
‫‪P‬‬ ‫‪P+1‬‬ ‫‪K‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪K‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪Y‬‬
‫‪P≤ 𝑁/2‬‬
‫‪N‬‬

‫”‪N,”IS PRIME‬‬

‫‪STOP‬‬

‫‪21‬‬
‫‪ 8-3‬الگوریتم فاکتوریل یک عدد‬

‫الگوریتمی بنویسید که یک عدد مثبت را خوانده و فاکتوریل آن را نمایش دهد‪.‬‬

‫شروع‪.‬‬ ‫‪)1‬‬
‫‪START‬‬ ‫مقدار یک را در ‪ FACT‬قرار بده‪.‬‬ ‫‪)2‬‬
‫‪FACT‬‬ ‫‪1‬‬
‫یک عدد بخوان و ‪ N‬نام گذاری کن‪.‬‬ ‫‪)3‬‬
‫مقدار یک را در ‪ A‬قرار بده‬ ‫‪)4‬‬
‫‪N‬‬ ‫اگر ‪ A> N‬است به مرحله ‪ 3‬برو‪.‬‬ ‫‪)1‬‬
‫حاصل عبارت ‪ FACT×A‬را در ‪ FACT‬بگذار‪.‬‬ ‫‪)1‬‬
‫‪A‬‬ ‫‪1‬‬ ‫یک واحد به ‪ A‬اضافه کن و به مرحله ‪ 1‬برو‪.‬‬ ‫‪)1‬‬
‫مقدار ‪ FACT‬را نمایش بده‪.‬‬ ‫‪)3‬‬
‫پایان‪.‬‬ ‫‪)3‬‬
‫‪Yes‬‬
‫‪A> N‬‬ ‫‪FACT‬‬

‫‪No‬‬

‫‪FACT‬‬ ‫‪FACT × A‬‬ ‫‪STOP‬‬

‫‪A‬‬ ‫‪A+1‬‬

‫مثال‪ :‬فاکتوریل عدد ‪1‬‬


‫‪N‬‬ ‫‪1 1 1 1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪FACT 1 1 2 1 24 122‬‬
‫‪A‬‬ ‫‪1 2 3 4‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪22‬‬
‫‪ 9-3‬الگوریتم تعیین کامل بودن یک عدد‬

‫الگوریتم برنامهای را بنویسید که یک عدد را گرفته و تعیین کند که آیا کامل (تام) است یا خیر‪ .‬عدد کامل عددی‬
‫………………… …‬ ‫است که با مجموع مقسومعلیههای کوچکتر از خودش برابر باشد‪.‬‬
‫‪START‬‬ ‫……‬ ‫……………‬ ‫شروع‪.‬‬ ‫‪)1‬‬
‫یک عدد را بخوان و ‪ N‬نام گذاری کن‪.‬‬ ‫‪)2‬‬
‫‪N‬‬
‫مقدار یک را در ‪ A‬بگذار‪.‬‬ ‫‪)3‬‬
‫‪A‬‬ ‫‪1‬‬ ‫مقدار صفر را در ‪ S‬بگذار‪.‬‬ ‫‪)4‬‬
‫باقیمانده تقسیم ‪ N‬بر‪ A‬را در ‪ P‬بگذار‪.‬‬ ‫‪)1‬‬
‫‪S‬‬ ‫‪0‬‬
‫اگر‪ P=0‬است‪ ،‬مقدار‪A‬را به ‪ S‬اضافه کن‪.‬‬ ‫‪)1‬‬
‫یک واحد به ‪ A‬اضافه کن‪.‬‬ ‫‪)1‬‬
‫𝑁‬
‫‪P‬‬ ‫‪N-INT(N/A)*A‬‬ ‫‪ )3‬اگر ≤‪ A‬است به مرحله ‪ 1‬باز گرد‪.‬‬
‫‪2‬‬
‫‪ )3‬اگر‪ S=N‬است عدد ‪ N‬کامل است درغیر‬
‫‪Y‬‬
‫‪P=0‬‬ ‫‪S‬‬ ‫‪S+A‬‬ ‫اینصورت کامل نیست‪.‬‬
‫‪N‬‬
‫‪ )12‬پایان‪.‬‬

‫‪A‬‬ ‫‪A+1‬‬
‫‪N‬‬
‫‪Y‬‬
‫‪A≤ N/2‬‬
‫‪N‬‬
‫‪Y‬‬ ‫‪N,” IS‬‬
‫‪S=N‬‬ ‫‪COMPLEMENT‬‬
‫‪N‬‬ ‫”‬
‫‪N,”IS NOT‬‬
‫‪COMPLEMENT‬‬
‫”‬

‫‪STOP‬‬
‫مثال‪ :‬کنترل الگوریتم برای عدد کامل ‪.1‬‬
‫‪N 1 1 1 1‬‬
‫‪A 1 2 3 4‬‬
‫‪S 2 1 3 1‬‬
‫_ ‪P 2 2 2‬‬

‫‪23‬‬
‫‪ 11-3‬الگوریتم ‪ 21‬عدد از سری فیبوناچی‬

‫الگوریتم برنامهای را بنویسید که ‪ 22‬جمله اول سری فیبوناچی را نمایش دهد‪ .‬در سری فیبوناچی هرجمله این‬
‫سری برابرست با مجموع دو عدد قبلی خود‪:‬‬

‫‪.... ،34,21,13,3,1,3,2,1,1‬‬

‫‪ .1‬شروع‬
‫‪START‬‬ ‫‪ .2‬مقدار صفر را در ‪ S‬بگذار‪.‬‬
‫‪ .3‬مقدار صفر را در ‪ B‬بگذار‪.‬‬
‫‪S‬‬ ‫‪0‬‬ ‫‪ .4‬مقدار یک را در ‪ A‬بگذار‪.‬‬
‫‪B‬‬ ‫‪0‬‬
‫‪A‬‬ ‫‪1‬‬ ‫‪ .1‬حاصل عبارت ‪ A+B‬را در ‪ C‬بگذار‪.‬‬
‫‪ .1‬مقدار ‪ C‬را نمایش بده‪.‬‬
‫‪ .1‬مقدار ‪ B‬را در ‪ A‬بگذار‪.‬‬
‫‪C‬‬ ‫‪A+B‬‬ ‫‪ .3‬مقدار ‪ C‬را در ‪ B‬بگذار‪.‬‬
‫‪ .3‬یک واحد به ‪ S‬اضافه کن و در ‪ S‬بگذار‪.‬‬
‫‪C‬‬
‫‪ .12‬اگر‪ S< 20‬است به مرحله ‪ 1‬باز گرد‪.‬‬
‫‪ .11‬پایان‪.‬‬
‫‪A‬‬ ‫‪B‬‬
‫‪B‬‬ ‫‪C‬‬
‫‪S‬‬ ‫‪S+1‬‬

‫‪Y‬‬
‫‪S< 20‬‬

‫‪N‬‬
‫‪STOP‬‬
‫مثال‪:‬‬
‫‪S 2 1 2 3 4 1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪12 ...‬‬
‫‪A 1 2 1 1 2 3‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪13 21 34 ...‬‬
‫‪B 2 1 1 2 3 1‬‬ ‫‪3‬‬ ‫‪13 21 34 11 ...‬‬
‫‪C 1 1 2 3 1 3 13 21 34 11 33 ...‬‬

‫‪24‬‬
‫فصل‪4‬‬

‫الگوریتم بردارها و مرتبسازی آنها‬

‫در این فصل‪ ،‬ابتدا به تعریف بردار و سپس به مرتبسازی آنها به کمک دو روش تبادلی و حبابی پرداخته میشود‪.‬‬

‫‪ 1-4‬بردارها‬

‫حتما توجه کردهاید که در اکثر الگوریتم و کارنماها از نام متغیر استفاده میشود‪ .‬وقتی در یک الگوریتم نامی به عنوان یک‬

‫‪ ،)A‬منظور این است که محلی در حافظه‬ ‫متغیر درنظرگرفته شده و مقداری به آن تخصیص مییابد (مثال ‪22‬‬

‫کامپیوتر را به نام ‪ A‬رزرو کرده و سپس مقدار ‪ 22‬را در آن خانه از حافظه قرار دادهایم (شکل ‪ .)1-4‬پس میبینید این نام‬

‫در واقع‪ ،‬آدرس محلی از حافظه بوده که به خاطر سهولت در دسترسی به آن قسمت داده میشود تا ذخیره و بازیابی‬

‫اطالعات کامال تحت کنترل باشد‪.‬‬

‫حافظه‬

‫‪A‬‬ ‫‪22‬‬

‫شكل ‪ :1-4‬نمای فرضی حافظه و متغیر ذخیرهشده در آن‬

‫حال اگر بخواهیم چند خانه دیگر را نیز در حافظه برای عملیات خود‪ ،‬رزرو نماییم‪ ،‬بهسادگی میتوان از نامهای‬

‫دیگری مانند ‪ ،Min ،MAX ،Sum ،D ،C ،B‬و ‪ ...‬استفاده کرد‪ .‬اما زمانیکه تعداد این خانهها زیاد باشد‪ ،‬نامگذاری و‬

‫همچنین استفاده از آنها‪ ،‬کمی دشوار خواهد بود‪ .‬برای این منظور‪ ،‬میتوان از امکانات آرایهها (بردارها)‪ ،‬استفاده کرد‪.‬‬

‫‪21‬‬
‫تعر یف‪ :‬یک آرایه‪ ،‬تعدادی خانه پشت سرهم در حافظه است که تحت نام یک متغیر‪ ،‬ذخیره میگردد‪ .‬مثال‪ ،‬اگر‬

‫آرایهای با نام ‪ A‬و به تعداد ‪ 1‬خانه داشته باشیم‪ ،‬شکل آن در حافظه به صورت زیر خواهد بود (شکل ‪:)2-4‬‬

‫حافظه‬
‫‪1‬‬
‫‪A‬‬ ‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪1‬‬

‫شكل ‪ :2-4‬نمای فرضی حافظه و آرایه ذخیرهشده در آن‬

‫تعریف‪ :‬برای دسترسی به خانههای حافظه که تحت یک نام ذخیره شدهاند‪ ،‬از اعدادی استفده میشود که به آنها‬

‫"اندیس آرایه" گفته میشود‪ .‬این اندیس معموال از یک شروعشده و تا حداکثر تعداد خانههای رزرو شده‪ ،‬ادامه مییابد‪.‬‬

‫مثال در بردار (‪ ،)A‬آدرس و نامگذاری خانهها به صورت شکل ‪ 3-4‬است‪:‬‬

‫حافظه‬
‫(‪A)1‬‬
‫‪A‬‬ ‫(‪A)2‬‬
‫(‪A)3‬‬
‫(‪A)4‬‬
‫(‪A)1‬‬

‫شكل ‪ :3-4‬اندیس آرایه ‪A‬‬

‫بنابراین با آوردن نام آرایه و اندیسهای ‪ 1‬تا ‪ 1‬میتوان به خانههای پنجگانه بردار فوق دسترسی داشت (شکل ‪.)3-4‬‬

‫تعریف بردار‪ :‬به آرایهای که اندیس آن‪ ،‬با یک عدد مشخص میشود‪" ،‬آرایه یکبعدی" یا "بردار" میگویند‪.‬‬

‫‪21‬‬
‫تعریف عناصر بردار‪ :‬به مقادیری که در خانههای یک بردار ذخیره میگردند "عناصر بردار" گفته میشود‪.‬‬

‫تعریف ماتریس یا جدول‪ :‬آرایههای دوبعدی را "ماتریس" یا "جدول" میگویند‪.‬‬

‫‪ 2-4‬الگوریتمهای بردارها‬

‫در ادامه الگوریتم تولید جدول ضرب و ضرب دو ماتریس‪ ،‬ارائه میشود‪.‬‬

‫‪ 1-2-4‬الگوریتم جدول ضرب‬

‫الگوریتم برنامهای را بنویسید که جدول ضرب ) ‪( 10×10‬را در ماتریس ‪ A‬قرار داده و سپس عناصر ماتریس ‪A‬‬

‫را نمایش دهد‪.‬‬

‫‪ .1‬شروع‪.‬‬
‫‪START‬‬ ‫‪ .2‬مقدار یک را در‪ I‬قرار بده‪.‬‬
‫‪ .3‬مقدار یک را در ‪ J‬قرار بده‪.‬‬
‫‪I‬‬ ‫‪1‬‬
‫‪ .4‬حاصل ضرب ‪ I× J‬را در )‪ A (I,J‬بگذار‪.‬‬
‫‪ .1‬مقدار )‪ A(I,J‬را نمایش بده‪.‬‬
‫‪J‬‬ ‫‪1‬‬
‫‪ .1‬یک واحد به ‪ J‬اضافه کن‪.‬‬
‫‪ .1‬اگر ‪ J≤ 10‬است به مرحله ‪ 4‬برگرد‪.‬‬
‫)‪A(I,J‬‬ ‫‪I× J‬‬ ‫‪ .3‬یک واحد به ‪I‬اضافه کرد‪.‬‬
‫‪ .3‬اگر ‪ I≤ 10‬به مرحله ‪ 3‬برگرد‪.‬‬
‫)‪A(I,J‬‬
‫‪ .12‬پایان‪.‬‬
‫‪J‬‬ ‫‪J+1‬‬

‫‪Y‬‬
‫‪J≤ 10‬‬
‫‪N‬‬
‫‪I‬‬ ‫‪I+1‬‬

‫‪Y‬‬
‫‪I≤ 10‬‬
‫‪N‬‬
‫‪STOP‬‬

‫‪21‬‬
‫‪ 2-2-4‬الگوریتم حاصل ضرب دو ماتریس‬

‫الگوریتمی بنویسید که حاصلضرب دو ماتریس )‪ A( N×M‬و )‪ B(M×P‬را محاسبه کرده و ماتریس )‪ C(N ×P‬را‬

‫ساخته و نمایش دهد‪.‬‬

‫‪23‬‬
‫‪START‬‬ ‫‪ .1‬شروع‪.‬‬
‫‪J‬‬ ‫‪1‬‬ ‫‪ .2‬مقدار یک را در ‪ J‬بگذار‪.‬‬
‫‪ .3‬مقدار یک را در ‪ I‬بگذار‪.‬‬
‫‪ .4‬مقدار یک را در ‪ L‬بگذار‪.‬‬
‫‪I‬‬ ‫‪1‬‬
‫‪ .1‬حاصل عبارت )‪ C(I,J)+A(I,,L) × B(L,J‬را در‬
‫)‪ C(I,J‬قرار بده‪.‬‬
‫‪L‬‬ ‫‪1‬‬ ‫‪ .1‬یک واحد به ‪ L‬اضافه کن‪.‬‬
‫‪ .1‬اگر ‪ L≤ M‬به مرحله ‪ 1‬برگرد‪.‬‬
‫)‪C(I,J‬‬ ‫)‪C(I,J)+A(I,L)×B(L,J‬‬ ‫‪ .3‬یک واحد به ‪ I‬اضافه کن‪.‬‬
‫‪ .3‬اگر ‪ I≤ N‬است به مرحله ‪ 4‬برگرد‪.‬‬
‫‪L‬‬ ‫‪L+1‬‬
‫‪ .12‬یک واحد به ‪ J‬اضافه کن‪.‬‬
‫‪L≤ M‬‬
‫‪Y‬‬
‫‪ .11‬اگر‪ J≤ P‬است به مرحله ‪ 3‬برگرد‪.‬‬
‫‪N‬‬ ‫‪ .12‬مقدار یک را در ‪ I‬قرار بده‪.‬‬
‫‪I‬‬ ‫‪I+1‬‬ ‫‪ .13‬مقدار یک را در ‪ J‬بگذار‪.‬‬
‫‪Y‬‬ ‫‪ .14‬مقدار )‪ C(I,J‬را نمایش بده‪.‬‬
‫‪I≤ N‬‬
‫‪N‬‬ ‫‪ .11‬یک واحد به ‪ J‬اضافه کن‪.‬‬
‫‪J‬‬ ‫‪J+1‬‬ ‫‪ .11‬اگر ‪ J≤ P‬است به مرحله ‪ 14‬برگرد‪.‬‬
‫‪ .11‬یک واحد به ‪ I‬اضافه کن‪.‬‬
‫‪J≤ P‬‬
‫‪Y‬‬
‫‪ .13‬اگر ‪ I ≤ N‬به مرحله ‪ 13‬برگرد‪.‬‬
‫‪N‬‬ ‫‪ .13‬پایان‪.‬‬
‫‪I‬‬ ‫‪1‬‬

‫‪J‬‬ ‫‪1‬‬

‫)‪C(I,J‬‬

‫‪J‬‬ ‫‪J+1‬‬
‫‪Y‬‬
‫‪J≤ P‬‬
‫‪N‬‬
‫‪I‬‬ ‫‪I+1‬‬
‫‪Y‬‬
‫‪I>N‬‬
‫‪N‬‬
‫‪STOP‬‬

‫‪23‬‬
‫مثال‪ :‬دو ماتریس ‪ A‬و ‪ B‬را به شرح ذیل‪ ،‬درنظر بگیرید‪.‬‬
‫[‪A=]1 2‬‬ ‫=‪B‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪3‬‬

‫[‪C=]11 13 21‬‬

‫‪N‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬


‫‪M‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬
‫‪P‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪I‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪J‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪L‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬
‫)‪A(I,L‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬
‫)‪B(L,J‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪3‬‬
‫)‪C(I,J‬‬ ‫‪3‬‬ ‫‪11=1*2+3‬‬ ‫‪4‬‬ ‫‪13=1*2+4‬‬ ‫‪1‬‬ ‫‪21=3*2+1‬‬

‫‪ 3-4‬بردارهای مرتب‬

‫از مهمترین مزایای استفاده از آرایهها‪ ،‬انجام عملیاتی مانند مرتبکردن عناصر آنها است که در این فصل سعی شده با حل‬

‫مسائلی چند‪ ،‬شما را با انواع روشهای مرتبسازی آشنا سازیم‪ .‬در ادامه مرتبسازی تبادلی و حبابی تشریح میشود‪.‬‬
‫‪1‬‬
‫‪ 1-3-4‬مرتبسازی تبادلی‬

‫برای درک بهتر عمل مرتبسازی تبادلی‪ ،‬با ارائه مثالی آن را بررسی میکنیم‪.‬‬

‫فرض کنید بردار ‪ 1‬خانه ای ‪ A‬با عناصر از راست به چپ (‪ )1،4،3،3،1‬وجود داشته باشد در اینصورت نمایش بردار‬

‫مورد نظر ما در حافظه کامپیوتر به صورتجدول ‪1-4‬است‪:‬‬

‫‪1‬‬
‫‪exchange sort‬‬
‫‪32‬‬
‫جدول ‪ :1-4‬یک نمونه آرایه ‪5‬تایی‬

‫(‪1 A)1‬‬
‫(‪3 A)2‬‬
‫(‪3 A)3‬‬
‫(‪4 A)4‬‬
‫(‪1 A)1‬‬

‫الگوریتم مرتبسازی بردار ‪ A‬به صورت زیر است‪:‬‬

‫مرحله اول‪ :‬انگشت اشاره دست چپ را کنار اولین عنصر بردار ‪ A‬نگه میداریم و برای سهولت در مراحل بعد آن‬

‫‪( )I‬جدول ‪.)2-4‬‬ ‫را ‪ I‬مینامیم (‪1‬‬

‫*‬
‫جدول ‪ :2-4‬مرحله اول مرتبسازی تبادلی‬
‫انگشت اشاره دست چپ )‪(I‬‬ ‫‪1‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪1‬‬

‫* (در این مرحله چون ‪ I‬عنصر اول بردار ‪ A‬را نشان میدهد میتوان مقدار عددی آن‪ ،‬برابر با یک است)‪.‬‬

‫مرحله دوم‪ :‬انگشت اشاره دست راست را کنار عنصر بعد از عنصری که ‪ I‬نشان میدهد قرار داده آن را ‪ J‬مینامیم‪.‬‬

‫(در این مرحله مقدار عددی ‪ J‬برابر با ‪ I+1‬میباشد (جدول ‪.)3-4‬‬

‫*‬
‫جدول ‪ :3-4‬مرحله دوم مرتبسازی تبادلی‬

‫انگشت اشاره دست چپ(‪)I‬‬ ‫‪1‬‬


‫‪3‬‬ ‫انگشت اشاره دست راست ) ‪( J‬‬
‫‪3‬‬
‫‪4‬‬
‫‪1‬‬

‫‪31‬‬
‫مرحله سوم‪ :‬عناصر دو خانه بردار ‪ A‬که با ‪ I‬و‪ J‬مشخص شده اند را با یکدیگر مقایسه نموده اگر )‪A(I)> A(J‬‬

‫باشد‪ .‬مقادیر آنها را با یکدیگر جابجا مینماییم‪.‬‬

‫مرحله چهارم‪ J :‬را به یک عنصر پایینتر منتقل کرده اگر مقدار ‪ J‬کوچکتر یا مساوی ‪ 1‬باشد (‪ )J≤5‬به مرحله‬

‫سوم باز میگردیم در غیر اینصورت به مرحله پنجم رجوع مینماییم‪.‬‬

‫مرحله پنجم‪ :‬زمانی به این مرحله میرسیم که انگشت اشاره دست راست ‪ J‬به انتهای بردار رسیده باشد در این‬

‫حالت انگشت اشاره دست چپ ‪ I‬را به یک عنصر پایینتر از مکان قبلی آن متقل نموده و اگر در این مثال ‪ I<5‬است از‬

‫مرحله دوم‪ ،‬الگوریتم را ادامه میدهیم در غیر اینصورت به مرحله ششم خواهیم رفت‪.‬‬

‫مرحله ششم‪ :‬پس از رسیدن به این مرحله‪ ،‬عمل مرتب سازی بردار ‪ A‬پایان یافته و بردار کامال مرتب شده است‬

‫(پایان الگوریتم)‪.‬‬

‫نکته‪ :‬در این روش بردار ‪ A‬به صورت صعودی مرتب خواهد شد اگر بخواهیم عناصر بردار ‪ A‬به صورت نزولی مرتب‬

‫شوند در مرحله سوم به جای شرط )‪ A(I)> A(J‬از شرط)‪ A(I) < A(J‬استفاده میکنیم‪.‬‬

‫اجرای مرحله به مرحله روش مرتبسازی تبادلی برای مثال ارائهشده‪ ،‬به صورت زیر است (جدول ‪:)4-4‬‬

‫‪32‬‬
‫جدول ‪ :4-4‬مراحل مرتبسازی تبادلی‬

‫‪ )2‬چون )‪ A(I) > A(J‬است مقادیر آنها جابهجا‬ ‫‪ )1‬در این حالت ‪ I‬عنصر اول و ‪ J‬عنصر دوم را نشان‬
‫میشود‪.‬‬ ‫میدهد‪.‬‬

‫)‪(I‬‬ ‫)‪(I‬‬ ‫‪1‬‬ ‫‪1‬‬


‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫)‪(J‬‬
‫)‪(J‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬

‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬


‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪ )4‬چون)‪ A(I)<A(J‬مقادیر آنها جابهجا نمیشود‪.‬‬ ‫‪ J )3‬به یک عنصر پایینتر منتقل میشود (‪.)J=3‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪3‬‬ ‫)‪(J‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫)‪(J‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪ )1‬چون )‪ A(I)<A(J‬است مقادیر آنها جابهجا نمی‪-‬‬ ‫‪ J )1‬به یک عنصر پایینتر منتقل میشود‪.‬‬
‫شود‪.‬‬ ‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫)‪(J‬‬
‫‪4‬‬ ‫‪4‬‬ ‫)‪(J‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬

‫‪33‬‬
‫جدول ‪ :4-4‬مراحل مرتبسازی تبادلی (ادامه)‬

‫‪ )3‬چون )‪ A(I) > A(J‬مقادیر آنها جابهجا میشود‪.‬‬ ‫‪ J )1‬به یک عنصر پایینتر منتقل میشود‪.‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(J‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫)‪(J‬‬

‫‪ )12‬چون )‪ A(I)< A(J‬مقادیر آنها جابهجا نمی‪-‬‬ ‫‪ )3‬چون ‪ J‬به انتهای بردار رسیده است‪ ،‬بنابراین ‪ I‬را‬
‫شود‪.‬‬ ‫به یک عنصر پایینتر منتقل نموده و ‪ J‬را به عنصر‬
‫‪1‬‬ ‫‪1‬‬ ‫بعد از آن نسبت میدهیم‪.‬‬

‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪1‬‬


‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪3‬‬ ‫)‪(J‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫)‪(J‬‬

‫‪3‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪4‬‬


‫‪3‬‬ ‫‪1‬‬

‫‪ )12‬چون )‪ A(I)> A(J‬مقادیر آنها جابهجا میشود‪.‬‬ ‫‪ J )11‬به یک عنصر پایینتر منتقل میشود‪.‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪4‬‬ ‫)‪(J‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫)‪(J‬‬
‫‪3‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪1‬‬

‫‪34‬‬
‫جدول ‪ :4-4‬مراحل مرتبسازی تبادلی (ادامه)‬

‫‪ )14‬چون )‪ A(I)> A(J‬مقادیر آنها جابهجا میشود‪.‬‬ ‫‪ J )13‬به یک عنصر پایینتر منتقل میشود‪.‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫)‪(I‬‬ ‫‪4‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪4‬‬ ‫‪1‬‬ ‫‪4‬‬
‫‪4‬‬ ‫‪1‬‬ ‫)‪(J‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫)‪(J‬‬

‫‪ )11‬چون )‪ A(I)> A(J‬مقادیر آنها جابهجا میشود‪.‬‬ ‫‪ J )11‬به انتهای بردار رسیده است‪ .‬بنابراین ‪ I‬را به‬
‫‪1‬‬ ‫‪1‬‬ ‫یک عنصر پایینتر منتقل نموده و ‪ J‬را به عنصر‬
‫بعد از آن نسبت میدهیم‪.‬‬
‫‪3‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪4‬‬ ‫)‪(J‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪4‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪4‬‬ ‫)‪(J‬‬
‫‪4‬‬ ‫‪1‬‬

‫‪ )13‬چون )‪ A(I)> A(J‬مقادیر آنها جابهجا میشود‪.‬‬ ‫‪ J )11‬به یک عنصر پایینتر منتقل میگردد‪.‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪2‬‬
‫)‪(I‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫)‪(I‬‬ ‫‪1‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪1‬‬ ‫)‪(J‬‬ ‫‪4‬‬ ‫‪1‬‬ ‫)‪(J‬‬

‫‪31‬‬
‫جدول ‪ :4-4‬مراحل مرتبسازی تبادلی (ادامه)‬
‫‪ )22‬چون )‪ A(I)> A(J‬مقادیر آنها جابهجا میشود‪.‬‬ ‫‪ J )13‬به انتهای بردار رسیده بنابراین ‪ I‬را به یک عنصر‬
‫‪1‬‬ ‫‪1‬‬ ‫پایینتر از مکان قبلی خود منتقل نموده و ‪ J‬را بعد از‬
‫آن قرار میدهیم‪.‬‬
‫‪3‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪2‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪4‬‬
‫‪4‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(J‬‬ ‫)‪(I‬‬ ‫‪3‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪1‬‬ ‫)‪(J‬‬
‫‪ )21‬چون ‪ J‬به انتهای بردار رسیده است باید ‪ I‬را به یک‬
‫عنصر پایینتر بیاوریم اما ‪ I‬نیز به پایان میرسد‬
‫بنابراین عمل مرتبسازی خاتمه یافته و بردار ‪ A‬به‬
‫صورت صعودی مرتب شده است‪.‬‬
‫‪1‬‬
‫‪3‬‬
‫‪4‬‬
‫‪1‬‬
‫‪3‬‬

‫‪1‬‬
‫‪ 2-3-4‬مرتبسازی حبابی‬

‫در این روش عناصر بردار را از ابتدا تا انتها دو به دو و با همان شرط قبل مقایسه نموده و جابجا مینماییم‪ .‬دراین حالت‬

‫الگوریتم زمانی به پایان میرسد که در یک مرحله کلیه عناصر بردار‪ ،‬دو به دو باهم مقایسه شوند ولی هیچکدام از آنها‬

‫جابهجا نگردند‪.‬‬

‫فرض کنید بردار ‪ N‬عنصری ‪ A‬وجود داشته باشد‪ .‬الگوریتم مرتبسازی عناصر بردار فوق به روش زیر خواهد بود‪:‬‬

‫‪1‬‬
‫‪bubble sort‬‬
‫‪31‬‬
‫مرحله اول‪ :‬مقدار یک را در ‪ I‬و‪ SW‬قرار میدهیم‪ .‬متغیر ‪ SW‬در این جا مانند یک سوئیچ عمل میکند‪ ،‬به‬

‫گونهای که اگر در پایان یک مرحله مرتبسازی‪ ،‬مقدار این متغیر یک باقی مانده باشد‪ ،‬الگوریتم به پایان خواهد رسید‪.‬‬

‫مرحله دوم‪ :‬عناصر )‪ A(I+1‬و )‪ A(I‬را باهم مقایسه میکنیم اگر )‪ A (I) >A(I+1‬باشد مقادیر آنها را جابهجا‬

‫کرده و عدد صفر را در متغیر ‪ SW‬قرار میدهیم‪ .‬متغیر ‪ SW‬در این مرحله در صورت جابهجائی دو عنصر بردار مقدار صفر‬

‫را خواهد گرفت‪.‬‬

‫مرحله سوم‪ :‬یک واحد به ‪ I‬اضافه کرده اگر ‪ I< N‬است از مرحله دوم‪ ،‬اجرای الگوریتم را ادامه میدهیم در غیر اینصورت‬

‫به مرحله چهارم رجوع میکنیم‪.‬‬

‫مرحله چهارم‪ :‬اگر مقدار ‪ SW‬برابر یک است نتیجه میگیریم که در یکبار مقایسه کلیه عناصر هیچکدام از آنها‬

‫جابهجا نشدهاند زیرا متغیر ‪ SW‬فقط در مرحله دوم و در صورت برقراری شرط و جابهجایی مقادیر دو عنصر‪ ،‬مقدار صفر‬

‫را خواهد گرفت‪ ،‬بنابراین عمل مرتبسازی بردار خاتمه مییابد‪ .‬در غیراینصورت یعنی اگر مقدار ‪ SW‬برابر صفر است به‬

‫مرحله اول باز میگردیم و الگوریتم را از آن مرحله ادامه میدهیم‪.‬‬

‫نکته‪ :‬در این مثال بردار ‪ A‬به صورت صعودی مرتب خواهد شد‪ .‬اگر بخواهیم عناصر بردار ‪ A‬به صورت نزولی مرتب‬

‫گردند کافی است در مرحله دوم به جای شرط )‪ A(I)> A(I+1‬از شرط)‪ A(I)<A(I+1‬استفاده مینماییم‪.‬‬

‫الگوریتم فوق را برای بردار پنج عنصری ‪ A‬که به ترتیب از راست به چپ دارای عناصر (‪ )1،4،3،3،1‬نشان میدهیم‬
‫(جدول ‪.)1-4‬‬

‫‪31‬‬
‫جدول ‪ :5-4‬مراحل مرتبسازی حبابی‬
‫‪ )2‬چون )‪ A(I)> A(I+1‬است‪ ،‬مقادیر آنها را‬ ‫‪SW‬‬ ‫‪ )1‬مقدار یک را در ‪ SW‬قرار میدهیم (‪1‬‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار میدهیم‬ ‫)‪.‬‬
‫‪.)SW‬‬ ‫(‪2‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬
‫‪1‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪3‬‬
‫‪4‬‬ ‫‪4‬‬
‫‪4‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪ )4‬چون )‪ A(I)<A(I+1‬است مقادیر آنها جابهجا‬ ‫‪ )3‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫نمیشود‪.‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪3‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪3‬‬ ‫)‪(I+1‬‬
‫‪4‬‬ ‫‪4‬‬
‫‪4‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪ )1‬چون )‪ A(I)> A(I+1‬است‪ ،‬مقادیر آنها را‬ ‫‪ )1‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار‬
‫‪3‬‬ ‫‪1‬‬
‫‪.)SW‬‬ ‫میدهیم(‪2‬‬
‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪2‬‬
‫‪4‬‬ ‫‪4‬‬ ‫)‪(I+1‬‬
‫)‪(I‬‬ ‫‪4‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪4‬‬ ‫)‪(I+1‬‬

‫‪1‬‬ ‫‪1‬‬

‫‪33‬‬
‫جدول ‪ :5-4‬مراحل مرتبسازی حبابی (ادامه)‬
‫‪ )3‬چون )‪ A(I)> A(I+1‬است‪ ،‬مقادیر آنها را‬ ‫‪ )1‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار میدهیم‬
‫‪3‬‬ ‫‪1‬‬
‫‪.)SW‬‬ ‫(‪2‬‬
‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪2‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪4‬‬
‫‪4‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪1‬‬ ‫)‪(I+1‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(I+1‬‬

‫‪ )12‬چون )‪ A(I)<A(I+1‬است‪ ،‬مقادیر آنها جابه‪-‬‬ ‫‪ )3‬یک واحد به ‪ I‬اضافه میکنیم‪ ،‬چون ‪ I< 5‬نیست‬
‫جا نمیشود‪.‬‬ ‫و نیز مقدار ‪ SW‬برابر صفر است پس مقدار یک را‬
‫در ‪ I‬و ‪ SW‬قرار میدهیم‪.‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬
‫‪1‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬
‫‪4‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪ )12‬چون )‪ A(I)> A(I+1‬است‪ ،‬مقادیر آنها را‬ ‫‪ )11‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار میدهیم‬
‫‪3‬‬ ‫‪1‬‬
‫‪.)SW‬‬ ‫(‪2‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪3‬‬ ‫)‪(I+1‬‬
‫)‪(I‬‬ ‫‪4‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪3‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬

‫‪33‬‬
‫جدول ‪ :5-4‬مراحل مرتبسازی حبابی (ادامه)‬
‫‪ )14‬چون )‪ A(I)> A(I+1‬است‪ ،‬مقادیر آنها را‬ ‫‪ )13‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار میدهیم‬
‫‪3‬‬ ‫‪1‬‬
‫‪.)SW‬‬ ‫(‪2‬‬
‫‪4‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪3‬‬
‫‪4‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪4‬‬ ‫)‪(I+1‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪3‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪4‬‬ ‫)‪(I+1‬‬

‫‪3‬‬ ‫‪1‬‬
‫‪ )11‬چون )‪ A(I)<A(I+1‬است‪ ،‬مقادیر آنها جابهجا‬ ‫‪ )11‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫نمیشود‪.‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪2‬‬
‫‪4‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪3‬‬ ‫)‪(I‬‬ ‫‪1‬‬ ‫‪4‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(I+1‬‬

‫‪ )13‬چون )‪ A(I)<A(I+1‬است‪ ،‬مقادیر آنها جابهجا‬ ‫‪ )11‬یک واحد به ‪ I‬اضافه میکنیم‪ .‬چون ‪ I< 5‬نیست‬
‫نمیشود‪.‬‬ ‫و نیز مقدار ‪ SW‬برابر صفر است‪ ،‬مقدار یک را در‬
‫‪ I‬و‪ SW‬قرار میدهیم‪.‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬
‫‪4‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬
‫‪1‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪4‬‬ ‫‪1‬‬ ‫‪3‬‬
‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬

‫‪42‬‬
‫جدول ‪ :5-4‬مراحل مرتبسازی حبابی (ادامه)‬
‫‪ )22‬چون )‪ A(I)> A(I+1‬است مقادیر آنها را‬ ‫‪ )13‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار میدهیم‬
‫‪3‬‬ ‫‪1‬‬
‫‪.)SW‬‬ ‫(‪2‬‬
‫)‪(I‬‬ ‫‪4‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪3‬‬ ‫)‪(I+1‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪4‬‬
‫‪4‬‬ ‫‪3‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪ )22‬چون )‪ A(I)<A(I+1‬است مقادیر آنها جابهجا‬ ‫‪ )21‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫نمیشود‪.‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪2‬‬ ‫)‪(I‬‬ ‫‪4‬‬ ‫‪3‬‬
‫)‪(I‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫)‪(I+1‬‬
‫‪1‬‬ ‫‪4‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪ )24‬چون )‪ A(I)<A(I+1‬است مقادیر آنها جابهجا‬ ‫‪ )23‬یک واحد به ‪ I‬اضافه میکنیم‪.‬‬
‫نمیشود‪.‬‬
‫‪3‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪3‬‬
‫‪4‬‬ ‫‪3‬‬ ‫)‪(I‬‬ ‫‪1‬‬ ‫‪4‬‬
‫)‪(I‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫)‪(I+1‬‬
‫‪3‬‬ ‫‪1‬‬ ‫)‪(I+1‬‬

‫‪41‬‬
‫جدول ‪ :5-4‬مراحل مرتبسازی حبابی (ادامه)‬
‫‪ )21‬چون )‪ A(I)> A(I+1‬است‪ ،‬مقادیر آنها را‬ ‫‪ )21‬یک واحد به ‪ I‬اضافه میکنیم‪ .‬چون ‪ I< 5‬نیست‬
‫جابهجا کرده و عدد صفر را در ‪ SW‬قرار میدهیم‬ ‫و نیز مقدار ‪ SW‬برابر صفر است‪ ،‬مقدار یک را در‬
‫‪.)SW‬‬ ‫(‪2‬‬ ‫‪ I‬و‪ SW‬قرار میدهیم‪.‬‬

‫)‪(I‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫)‪(I‬‬ ‫‪3‬‬ ‫‪1‬‬


‫‪3‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫)‪(I+1‬‬

‫‪4‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪3‬‬


‫‪1‬‬ ‫‪4‬‬ ‫‪1‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪1‬‬

‫بعد از مرحله ‪ 21‬چون مقدار ‪ SW‬برابر ‪ 2‬است‪ ،‬عناصر بردار دو به دو تا آخر مقایسه میشوند‪ .‬سپس الگوریتم دوباره‬

‫به خانه اول بازگشته و ‪ SW‬برابر ‪ 1‬قرار میگیرد و مقایسات دوبهدو دوباره تا انتها انجام میشود‪ .‬تا انتهای این مرحله‪،‬‬

‫مقدار ‪ SW‬برابر ‪ 1‬باقی میماند و الگوریتم به پایان میرسد‪ .‬چون مراحل اخیرالذکر‪ ،‬باعث جابجایی مقادیر آرایهها نمیشود‪،‬‬

‫از نمایش آن صرفنظر شد‪.‬‬

‫‪42‬‬

You might also like