Professional Documents
Culture Documents
com
جزوه درس:
استاد درس:
هدف درس مبانی کامپیوتر و برنامهنویسی آن است که به کمک یک زبان برنامهنویسی دانشجویان با اصول و
قواعد برنامهنویسی آشنا شوند .زبانهای برنامهنویسی فراوانی نظیرVBA ,FORTRAN , python, C# :
و PASCALوجود دارد و میتوان یکی از اینها را برای یادگیری درس مبانی کامپیوتر و برنامهنویسی انتخاب
کرد.
در کنار زبانهای برنامهنویسی ،نرمافزارهای تخصصی بسیاری برای اهداف آموزشی یا پژوهشی ارائه
شدهاست و معموال توابع 1و جعبه ابزارهای 2این نرم افزارها ،نیازهای کاربران را برآورده میکند .در مواردی که
جعبهابزارهای نرم افزار مربوطه پاسخگوی نیاز کاربران نباشد ،نیاز به برنامهنویسی پیش میآید و خود این نرم
افزارها امکاناتی را فراهم میآورند تا با اتصال به یک زبان برنامهنویسی ،این نیازها برآوردهشود .به عنوان مثال
صفحه گسترده برای کارهای تحلیلی و آماری ،نرم افزار پرکاربردی است .اما EXCELبا 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ممکن است برنامهها کندتر از سایر زبانها اجرا شود چون زبان ترجمه شده است.
نکته :دانشجویان ،توجه کنند که برای تمرینهای برنامهنویسی که بعدا در کالس ارائه خواهد شد ،حق
استفاده از برخی توابع MATLABرا ندارند و محدودیتهایی در این زمینه وجود دارد .در چنین مواردی،
دانشجویان با اتکا به دانش برنامهنویسی خود ،باید تمرینات را کدنویسی و اجرا کنند .به عنوان مثال ،برای
مرتب کردن یک بردار نامرتب ،باید روش مرتب سازی حبابی (یا هر روش دیگری) را کدنویسی کنند و حق
استفاده از دستور sortرا ندارند .چرا که هدف اولیه و اصلی این درس ،آموزش اصول برنامهنویسی در
درس مبانی کامپیوتر و برنامهنویسی دارای سه بخش است و هر بخش ،دارای جزوه جداگانهای است.
بخش اول ،که موضوع این جزوه است ،به بحث "الگوریتم و فلوچارت" پرداخته میشود و مثالهای زیادی برای
آن ارائه میشود .در بخش دوم درس" ،مبانی برنامهنویسی در "MATLABبیان میشود .در بخش سوم نیز،
"ریاضیات در "MATLABارائه میشود که میتواند برای برخی دروس ریاضی دوره دانشگاهی نظیر ریاضی
)1بخشی از مطالب فصل اول برگرفته از کتاب "آموزش مبانی کامپیوتر و برنامهنویسی به زبان
"C++نوشته ناصر قاسم آقائی ،مهدی جابرزاده انصاری ،و علی دهقان نشر ناقوس اندیشه سال
1331است.
)2مطالب الگوریتم و فلوچارت ،برگرفته از کتاب "الگوریتم و فلوچارت" شهریار رسولی نشر ارکان
دانش چاپ چهاردهم سال 1333است .الگوریتمهای ممتاز این کتاب ،انتخاب و در جزوه حاضر،
ج
فهرست مطالب
صفحه عنوان
د
فهرست شكلها
صفحه عنوان
ه
فهرست جداول
صفحه عنوان
و
فصل1
الگوریتم
الگوریتم و فلوچارت ،مفهومی مقدماتی و مهم برای برنامه نویسی است .الگوریتم روش حل مسایل است به نحوی که برای
ماشین یعنی همان کامپیوتر قابل درک باشد .شیوه حل مسایل توسط انسان و ماشین باهم تفاوت دارد .چرا که انسان
قدرت تصمیمگیری از خود دارد و برای حل مسایل از روشهای متنوعی بهره میبرد اما ماشین دقیقا از همان روشی که
توسط انسان برای آن پیشبینی شده بهره میبرد و تمامی شرایط و حاالت ممکن برای حل مساله باید پیش بینی شده
باشد.
برای حل مسایل دو روش مکاشفهای و الگوریتمی وجود دارد که در ادامه به کمک مثال ذیل توضیح داده میشود.
فرض کنید هدف یافتن ریشههای معادله درجه دو y=x2- 4باشد یک روش مکاشفهای (و کوتاه و سریع) عبارت است از:
تابع yچون فاقد جملهای بر حسب xو عالمت عدد ثابت منفی است ،توانستیم جواب مساله را بهراحتی به دست
از اتحاد دوم برای تعیین ریشه استفاده کردیم .حال اگر تابع به فرم ذیل باشد:
1
2
برای تعیین ریشههای سه معادله فوق ،از روش های مختلف استفاده شد .در معادله اول به خاطر این که معادله
فاقد جمله درجه اول از xبود با بردن عدد منفی به سمت دیگر تساوی و گرفتن جذر جواب را بدست آوردیم .این روش
روشی سریع وکوتاه بود .برای حل معادلههای دوم و سوم نیز از اتحادهای جبری استفاده و معادالت را به حاصل ضرب
عوامل تجزیه کردیم .تشخیص اینکه از کدام روش استفاده کنیم ،وابسته به شکل تابع بوده است .در واقع روش حل را هر
بار از طریق مکاشفه بهدستآوردیم .اما تمامی این روشها ،قابل فهم برای کامپیوتر نیست.
محاسبه میشود.
∆< 0 .3معادله مورد نظر ما ریشه حقیقی ندارد و دارای دو ریشه موهومی از مجموعه اعداد مختلط است که از
)1روش حل مکاشفهای روش مناسبی برای حل مسائل توسط انسان است اما روش کاربردی و مناسبی برای حل
)2برای مثال قبل میتوان از اتحادها و تجزیه برای تشخیص ریشههای معادله استفاده کرد اما این روش برای
کامپیوتر مناسب نیست چرا که تعداد اتحادها زیاد است و مجبور میشویم برای هر کدام از اتحادها ،تعدادی
زیادی رابطه بین ضرایب و عالمتها برقرار کنیم .تعریف اینهمه رابطه در کامپیوتر ،دشوار و غیرمنطقی است.
بهترین روش برای پیدا کردن ریشههای معادله درجه دوم ،استفاده از معادله مشخصه و روش دلتا است .در واقع
روش دلتا یک "الگوریتم ریاضی" است که پیاده کردن آن در کامپیوتر نیز راحت است.
2
1-1الگوریتم و تعریف آن
الگوریتم برگرفته از کلمه الخوارزمی است که توسط انگلیسی زبانان و با گذشت زمان به کلمه الگوریتم تغییر یافتهاست.
خوارزمی برای حل مسائل جبری ،به جای حل موردی مساله ،سعی در ارائه یک "فرآیند نظام مند و فراگیر" داشت (همانند
چیزی که در یافتن ریشههای معادله درجه دوم دیدیم) .خوارزمی سعی میکرد برای حل یک مساله تمامی حاالت ممکن
را درنظرگرفته و یک روش عمومی برای حل تمامی حاالت ممکن ارائه کند.
تعریف الگوریتم :هر دستور العملی که مراحل انجام کاری را به زبان دقیق و با جزئیات کافی بیان کند به طوری
که ترتیب مراحل و شرط خاتمه در آن کامال مشخص شده باشد ،الگوریتم میگوییم .منظور از:
)1جزئیات کافی آن است که در طول الگوریتم عملیات ناشناخته و مبهم پیش نیاید و باعث انحراف از مسیر اصلی
نگردد.
)2منظور از زبان دقیق آن است که الگوریتم دقیقا به همان صورتی که مدنظر برنامه نویس است اجرا گردد.
)3منظور از ترتیب مراحل آن است که مراحل اجرای الگوریتم قدم به قدم و با رعایت تقدم و تاخر مشخص شده
باشد.
)4شرط خاتمه ،پایانپذیر بودن الگوریتم میباشد و الگوریتم در زمانی دلخواه و تحت شرایط داده شده خاتمه یابد.
البته نباید تصور کرد الگوریتمها و روشهای عنوان شده منحصربهفرد است بلکه برای حل هر مسئله ممکن است
دهها راه حل وجود داشته باشد پس بهتر است دانشجویان برای تفهیم بهتر سعی کنند راه حلهای دیگری را برای خود
برای درک بهتر مفهوم الگوریتم به ارائه یک مثال ساده میپردازیم .فرض کنید هدف ما ارائه یک الگوریتم به یک
ربات برای یک تماس تلفنی است .در این مثال با نحوه انتقال دستور آشنا میشویم .به مدارهای الکترونیکی و ابزارهای
مکانیکی ربات کاری نداریم .میدانیم باجه تلفن عمومی با سکه کار میکند در برخورد اول ممکن است چنین الگوریتمی
3
)3شماره مشترک مورد نظرت را با صفحه کلید دستگاه شمارهگیری کن.
)1خاتمه.
در الگوریتم ارائه شده برای تماس تلفنی عملیات ناشناخته پیش خواهد آمد .برای مثال مشخص نیست که ربات
ما هنگام خرابی باجه یا شنیدن بوق اشغال چه کاری باید انجام دهد .همچنین نحوه استفاده از سکههای مختلف ( 1ریالی
یا 12ریالی و )....مشخص نیست و به همین علت الگوریتم نوشتهشده الگوریتم جامع و صحیحی نیست و جوابگوی تمامی
)1زبانهای محاورهای :برخی از الگوریتمها را میتوان به زبان محاورهای (مثال فارسی و انگلیسی) توضیح داد
)2استفاده از اشکال و نمودار (کارنما :)1در کارنما ،از اشکال هندسی مختلف و استانداردی استفاده میشود که هر
)4استفاده از شبهکد :2در این روش با کمی دخل و تصرف در دستورات یک زبان برنامهنویسی ،الگوریتم را با
آزادی عمل بیشتری بیان میکنند .چنانکه ممکن است دستوراتی را شبیه به یک کد (دستور) برنامهنویسی به
کار ببرند که اصال در آن زبان وجود نداشته باشد ولی منظورشان را به روشنی برساند و چگونگی پیادهسازی
1
flowchart
2
pseudo code
4
تفاوت برنامهنویس و کدنویس چیست؟ برای درک تفاوت این دو از یک مثال استفاده میشود .در یک ساختمان
مهندسین معمار ،سازه ،برق و مکانیک نقشههای معماری ،سازه ،برق و تاسیسات را ارائه میکنند و گروههای اجرایی نظیر
اکیپ گود بردار ،آرماتوربند ،بتنریزی ساختمان را طبق نقشه ارائه شده میسازند .در برنامهنویسی هم به همین ترتیب
است و برنامهنویس نقشهراه و معماری را ارائه میکند و کد نویس با استفاده ار یک زبان برنامهنویسی آن را به "دستورات"
قابل فهم برای کامپیوتر تبدیل میکند .در زمینه مهندسی کامپیوتر ،جایگاه برنامهنویس باالتر از کدنویس است.
1
فصل2
در فصل گذشته با کلیاتی در خصوص الگوریتمها به زبان فارسی آشنا شدیم .در این فصل به دنبال روش استاندارد برای
بیان الگوریتمها هستیم معموال الگوریتمها را توسط نمودارهای خاصی به نام کارنما یا روندنما یا شمای عملیات یا نمودار
گردشی تحت یک سری قوانین استاندارد نشان میدهند .مزایای رسم کارنما عبارتند از:
)1با بکارگیری قدرت بصری افراد ،مفاهیم را به سرعت انتقال میدهد و در نتیجه بهره برداری مخاطب در یادگیری
باال میرود.
)2با بهرهجویی از قوانین استاندارد برای رسم ،کار نما برای هر فردی که با قوانین کارنما آشنایی داشته باشد،
)3برای شخص نویسنده الگوریتم نیز پیگیری 1الگوریتم و بررسی درستی آن به واسطه نمودار بهمراتب راحتتر
است.
شکلهای استانداردی که در رسم فلوچارت میتوان از آنها استفاده نمود ذیال به همراه توضیح مختصری در مورد
1
trace
1
)1در هر الگوریتم یک نقطه شروع وجود دارد ولی ممکن است چند نقطه پایان وجود داشته باشد در نتیجه در هر
کجا که نیاز باشد یک نقطه پایان در نظر میگیریم .همچنین میشود تنها یک نقطه پایان در نظر گرفت و
)2در برخی از کتابها به جای بیضی برای شروع و پایان از دایره استفاده میشود که مسلما تفاوت چندانی ندارد.
)3در هر مرحله میتوان با یک پیکان خروجی به هریک از مراحل قبلی کارنما (به غیر از شروع ) بازگشت اما از
1
جدول :1-2برخی اشكال استاندارد و رایج برای ترسیم کارنما
c 1
اتصال و ارتباط
3
1-2الگوریتم جابهجایی دو متغیر
برنامهای بنویسید که دو عدد دلخواه را در Aو Bقرار دهد و سپس مقادیر Aو Bرا باهم جابهجا کند.
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شروع.
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الگوریتم تعیین ریشههای چندجملهای درجه دوم
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
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
…………………………………………………………………………………………… … …
الگوریتم برنامهای را بنویسید که خارج قسمت و باقیمانده دو عدد را از طریق تفریق متوالی بدست آورد .در این الگوریتم،
)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
A A+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
حال اگر بخواهیم چند خانه دیگر را نیز در حافظه برای عملیات خود ،رزرو نماییم ،بهسادگی میتوان از نامهای
دیگری مانند ،Min ،MAX ،Sum ،D ،C ،Bو ...استفاده کرد .اما زمانیکه تعداد این خانهها زیاد باشد ،نامگذاری و
همچنین استفاده از آنها ،کمی دشوار خواهد بود .برای این منظور ،میتوان از امکانات آرایهها (بردارها) ،استفاده کرد.
21
تعر یف :یک آرایه ،تعدادی خانه پشت سرهم در حافظه است که تحت نام یک متغیر ،ذخیره میگردد .مثال ،اگر
آرایهای با نام Aو به تعداد 1خانه داشته باشیم ،شکل آن در حافظه به صورت زیر خواهد بود (شکل :)2-4
حافظه
1
A 2
3
4
1
تعریف :برای دسترسی به خانههای حافظه که تحت یک نام ذخیره شدهاند ،از اعدادی استفده میشود که به آنها
"اندیس آرایه" گفته میشود .این اندیس معموال از یک شروعشده و تا حداکثر تعداد خانههای رزرو شده ،ادامه مییابد.
حافظه
(A)1
A (A)2
(A)3
(A)4
(A)1
بنابراین با آوردن نام آرایه و اندیسهای 1تا 1میتوان به خانههای پنجگانه بردار فوق دسترسی داشت (شکل .)3-4
تعریف بردار :به آرایهای که اندیس آن ،با یک عدد مشخص میشود" ،آرایه یکبعدی" یا "بردار" میگویند.
21
تعریف عناصر بردار :به مقادیری که در خانههای یک بردار ذخیره میگردند "عناصر بردار" گفته میشود.
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
3-4بردارهای مرتب
از مهمترین مزایای استفاده از آرایهها ،انجام عملیاتی مانند مرتبکردن عناصر آنها است که در این فصل سعی شده با حل
مسائلی چند ،شما را با انواع روشهای مرتبسازی آشنا سازیم .در ادامه مرتبسازی تبادلی و حبابی تشریح میشود.
1
1-3-4مرتبسازی تبادلی
برای درک بهتر عمل مرتبسازی تبادلی ،با ارائه مثالی آن را بررسی میکنیم.
فرض کنید بردار 1خانه ای Aبا عناصر از راست به چپ ( )1،4،3،3،1وجود داشته باشد در اینصورت نمایش بردار
1
exchange sort
32
جدول :1-4یک نمونه آرایه 5تایی
(1 A)1
(3 A)2
(3 A)3
(4 A)4
(1 A)1
مرحله اول :انگشت اشاره دست چپ را کنار اولین عنصر بردار Aنگه میداریم و برای سهولت در مراحل بعد آن
*
جدول :2-4مرحله اول مرتبسازی تبادلی
انگشت اشاره دست چپ )(I 1
3
3
4
1
* (در این مرحله چون Iعنصر اول بردار Aرا نشان میدهد میتوان مقدار عددی آن ،برابر با یک است).
مرحله دوم :انگشت اشاره دست راست را کنار عنصر بعد از عنصری که Iنشان میدهد قرار داده آن را Jمینامیم.
*
جدول :3-4مرحله دوم مرتبسازی تبادلی
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عنصر دوم را نشان
میشود. میدهد.
)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 بعد از آن نسبت میدهیم.
)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قرار میدهیم.
بعد از مرحله 21چون مقدار SWبرابر 2است ،عناصر بردار دو به دو تا آخر مقایسه میشوند .سپس الگوریتم دوباره
به خانه اول بازگشته و SWبرابر 1قرار میگیرد و مقایسات دوبهدو دوباره تا انتها انجام میشود .تا انتهای این مرحله،
مقدار SWبرابر 1باقی میماند و الگوریتم به پایان میرسد .چون مراحل اخیرالذکر ،باعث جابجایی مقادیر آرایهها نمیشود،
42