0% found this document useful (0 votes)
66 views50 pages

Basics Computer

Uploaded by

Ali
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
66 views50 pages

Basics Computer

Uploaded by

Ali
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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