مبانی کامپیوتر
در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونتها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.
- جزئیات
- امتیاز و نظرات
- متن پاورپوینت
مبانی کامپیوتر
اسلاید 1: مبانی کامپیوتر ارائه دهنده : جعفر تنهامولفین : جعفر تنها – مهدی یوسف خانی1گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 2: اهداف كلي این درس الگوریتمی برای حل مسئله ارائه دهداصول و مبانی اولیه نرم افزار و سخت افزار را بشناسد اهداف و مفا هیم زبان های برنامه نویسی را بداندمفاهیم اولیه برنامه نویسی ساخت یافته را بداند و اصول لازم را در مرحله اجراء بکار ببرددستورات زبان پاسکال را در برنامه ها بکار ببرداز توابع و روال های استاندارد زبان پاسکال در صورت لوزم استفاده نماید دانشجو پس از مطالعه اين درس بايد بتواند:2گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 3: از توابع ، روال ها برای جدا کردن قطعات برنامه استفاده کندفایل ها را به عنوان محلی برای ذخیره داده ها در برنامه استفاده کند با استفاده از قابلیت های زبان پاسکال برنامه ای را برای یک سیستم بنویسد.3گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 4: جایگاه این درس در رشته مهندسی کامپیوتراین درس اولین درس دانشگاهی رشته می باشد و نقطه شروعی برای ورود به دنیای جالب برنامه نویسی و علم و فن کامپیوتر هست . بنابراین یاد گیری اصول اولیه برنامه نویسی در این درس از جایگاه ویژه ای برخوردار است.این درس پایه و اساس برنامه نویسی که جزء اصول این رشته می باشد را به فرگیران یاد می دهد .بنابراین یادگیری دقیق این درس به همراه ارائه پروژه های عملی که لازمه این درس می باشد جزء اهم مسائل می باشد .4گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 5: طرح درس توصیه می شود این درس در بیست جلسه بصورت ذیل ارائه شود :بخش اول :( در پنج جلسه ) اهداف درس و فصل اول و دوم کتاب درسیجلسه هفتم :فصل چهارم کتاب درسیجلسه ششم :فصل سوم کتاب درسیبخش دوم :5
اسلاید 6: جلسه سیزدهم:فصل نهم کتاب درسیجلسه دوازدهم :فصل هشتم کتاب درسیجلسه دهم و یازدهم :فصل هفتم کتاب درسیجلسه نهم :فصل ششمکتاب درسیجلسه هشتم :فصل پنجم کتاب درسی6
اسلاید 7: جلسه نوزدهم :فصل چهاردهم کتاب درسیجلسه هیجدهم :فصل سیزدهم کتاب درسیجلسه پانزدهم و شانزدهم :فصل یازدهم کتاب درسیجلسه هفدهم :فصل دوازدهم کتاب درسیجلسه چهاردهم :فصل دهم کتاب درسی7
اسلاید 8: جلسه بیستم :فصل پانزدهم کتاب درسی و ارائه پروژه نهائی درس8
اسلاید 9: فصل 1Algorithm الگوریتم هاهدفهاي كليشناخت اجزاء لازم برای حل مسئله شناخت حل مسئله و ارائه الگوریتم بررسی صحت الگوریتم9
اسلاید 10: هدفهاي رفتاري الگوریتمی را برای حل مسئله ارائه دهد. الگوریتم های مختلف برای یک مسئله را مقایسه کند. شرط ها و حلقه ها را در الگوریتم بکار ببرد . دانشجو پس از مطالعه اين فصل بايد بتواند:10
اسلاید 11: مقدمه در زندگي روزمره، انسان با مسائل مختلفي روبروست و براي هر كدام از اين مسائل (حل مشكلات) راه حلي و روشي را بر ميگزيند. مسائلی از قبيل راه رفتن، غذا خوردن، خوابيدن و غيره كه بشر تقريباً هر روز آنها را پيش روي خود دارد. همه اين مسائل نياز به روشي براي حل كردن دارند مثلا راه رفتن بايد با ترتيب خاصي و مراحل معيني انجام شود. تا مسئله راه رفتن براي بشر حل شود. اصطلاحاً روش انجام كار يا حل مسئله را الگوريتم آن مسئله مينامند11
اسلاید 12: تعريف الگوريتم الگوريتم مجموعهاي از دستورالعمل ها، براي حل مسئله ميباشد كه شرايط زير را بايد دارا باشد: دقيق باشد جزئيات كامل حل مسئله را داشته باشد.پايانپذير باشد.12
اسلاید 13: مراحل الگوريتم براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم). كه اصطلاحاً طراحي الگوريتم براي آن مسئله ناميده ميشود. در طراحي الگوريتم معمولاً سه مرحله زير را از هم جدا ميكنند:خواندن دادههاانجام محاسباتخروجيها13
اسلاید 14: مثال : الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع دو عدد را محاسبه و چاپ نمايد. خروجيها انجام محاسبات وروديها مجموع دو عدد جمع دو عدد a , b 0ـ شروع 1ـ b ,a را بخوان.2ـ مجموع b , a را محاسبه و در sum قرار بده.3ـ sum را در خروجي چاپ كن 4ـ پايان14
اسلاید 15: خروجيها انجام محاسبات وروديها چاپ مجموع محاسبه مجموع a چاپ ميانگين محاسبه ميانگين b c مثال: الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين سه عدد را محاسبه و چاپ كند.0ـ شروع1ـ سه عدد از ورودي بخوان2ـ مجموع سه عدد را محاسبه و در sum قرار بده.3ـ sum را بر سه تقسيم كرده،در ave قرار بده.4ـ ave , sum را در خروجي چاپ كن.5ـ پايان.15
اسلاید 16: معمولا درك يك الگوريتم با شكل راحتر از نوشتن آن بصورت متن ميباشد. لذا الگوريتم را با فلوچارت( flowchart )نمايش ميدهند. فلوچارت از شكلهاي زير تشكيل ميشود.BeginEndخواندن یا Readچاپ کردن writeعلامتهاي شروع و پايان: كه معمولا از يك بيضي استفاده ميكنند: علامتهاي ورودي و خروجي: كه معمولا از متوازيالاضلاع استفاده ميشود:16
اسلاید 17: علامتهاي محاسباتي و جايگزيني: براي نمايش دستورات جايگزيني و محاسباتي از مستطيل استفاده ميكنند:جایگزین یا محاسباتعلامت شرط: براي نمايش شرط از لوزي استفاده ميشود.علامت اتصال: براي اتصال شكلهاي مختلف بهم از فلشهاي جهتدار استفاده ميكنند.17
اسلاید 18: BeginRead(a,b,c)Sum a+b+cAve sum/3Write(sum,ave)Endفلوچارت مجموع سه عدد18
اسلاید 19: مثال: فلوچارتی رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس محتويات دو عدد را با هم جابجا نمايد.براي حل اين مسئله b , a را دو متغير كه در آنها دو عدد خوانده شده، قرار ميگيرند در نظر ميگيريم. سپس با استفاده از يك متغير كمكي محتويات اين دو عدد را جابجا ميكنيم : 19
اسلاید 20: 1215temptempab121512abtemp151512abtemp151212abtemp20
اسلاید 21: BeginRead(a,b)temp aa bWrite(a,b)Endb tempفلوچارت مسئله بالا بصورت زير خواهد بود: 21
اسلاید 22: تمرين1ـ فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت كرده محيط و مساحت آنرا محاسبه و چاپ كند.2ـ فلوچارتي رسم نمائيد كه شعاع دايرهاي را از ورودي دريافت كرده، محيط و مساحت آنرا محاسبه و چاپ نمايد.3ـ فلوچارتي رسم كنيد كه سه عدد Third , second, first را از ورودي دريافت كرده، محتويات آنها را جابجا نموده، حاصل را در خروجيچاپ كند.22گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 23: 4ـ فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده، سپس محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند.5ـ فلوچارتي رسم نمائيد كه عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت كرده سپس آنرا به درجه فارنهايت تبديل كند.23گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 24: دستورالعملهاي شرطي در حل بسياري از مسائل يا تقريباً تمام مسائل نياز به استفاده از شروط جزء، نيازهاي اساسي محسوب ميشود. همانطور كه ما خودمان در زندگي روزمره با اين شرطها سركار داريم. بطور مثال اگر هوا ابري باشد ممكن است چنين سخن بگوييم: اگر هوا باراني باشد سپس چتري برميدارم. در غير اينصورت چتر برنميدارم.24گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 25: در حالت كلي شرط را بصورت زير نمايش ميدهند:If شرط یا شروط thenعمل يا اعمال yes NOعمل يا اعمال بعدي25گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 26: مثال : فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، فرد يا زوج بودن آن را تشخيص دهد.BeginRead(a)R a mod 2Write(‘odd’)Endif R=0 thenNoyesWrite(‘even’)26
اسلاید 27: BeginRead(a,b)max a Write(max)Endif b>maxNoyes max bمثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد را پيدا كرده در خروجي چاپ نمايد.27
اسلاید 28: BeginRead(a,b,c)min a Write(min)Endif b<min thenNoyesmax bif c<min thenyesmin c Noمثال : فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده، كوچكترين عدد را يافته در خروجي چاپ نمايد:28
اسلاید 29: نمونه اجراي فلوچارت بالا بصورت زير ميباشد:29
اسلاید 30: تمرين1- فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده، قدر مطلق عدد را در خروجي چاپ كند.2- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت، منفي يا صفر بودن عدد را تشخيص داده، در خروجي با پيغام مناسب چاپ كند.3- فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، بخشپذيري آن بر 3 و 5 را بررسي نمايد.4ـ فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي دريافت كرده، ريشههاي آن را محاسبه در خروجي چاپ كند.30
اسلاید 31: حلقههادر حل بسياري از مسائل با عملياتي روبرو ميشويم ، كه نياز به تكرار دارند و عمل تكرار آنها به تعداد مشخصي انجام ميگيرد. فرض كنيد، بخواهيم ميانگين 100 عدد را محاسبه كنيم، در اينصورت منطقي بنظر نميرسد كه 100 متغير مختلف را از ورودي دريافت كنيم سپس آنها را جمع كنيم.31
اسلاید 32: انواع حلقه هاحلقه های با تکرار مشخصحلقه های با تکرار نا مشخص32
اسلاید 33: حلقه های با تکرار مشخصدر اين نوع حلقهها تعداد تكرار مشخص ميباشد اين حلقه از اجزاء زير تشكيل ميشود:1ـ انديس حلقه 2ـ مقدار اوليه براي انديس حلقه 3- مقدار افزاينده براي انديس حلقه (معمولا يك واحد در هر مرحله)4ـ مقدار نهايي (تعداد تكرا حلقه)5ـ شرطي براي كنترل تعداد تكرار حلقه33
اسلاید 34: i 1 if i<=n yesNoمجموعه دستورات حلقه i i+1اتمام كار حلقه اين حلقهها را غالباً با فلوچارت بصورت زير نمايش ميدهند:34
اسلاید 35: مثال : فلوچارتي رسم نمائيد كه عدد n را از ورودي دريافت كرده، مجموع اعداد از يك تا n را محاسبه كند.i انديس حلقه n مقدار نهايي 35
اسلاید 36: BeginRead(n)I 1 sum 0if I<=nyesNoWrite(sum)Endsum sum+II I+1حلقه36
اسلاید 37: نمونه اجراي فلوچارت بالا بصورت زير است:37
اسلاید 38: مثال : فلوچارتي رسم كنيد كه n عدد از ورودي دريافت كرده، بزرگترين مقدار از بين n عدد را پيدا كرده در خروجي چاپ نمايد.انديس حلقه iمقدار نهايي nبزرگترين مقدار Max 38
اسلاید 39: BeginI 2 max a if i<=n thenyesNowrite(max)Endi i+1حلقهRead(a)Read(n)if a > maxmax aNoyes39گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 40: مثال : فلوچارتي رسم نمائيد كه n , x ، دو عدد صحيح مثبت را از ورودي دريافت كرده سپس x به توان n را محاسبه كند.انديس حلقه iمقدار نهايي nعدد به توان n pow40گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 41: Begini 1 pow 1 if i<=n thenyesNowrite(pow)Endpow pow*xحلقهRead(n,x)i i+141گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 42: حلقههايي كه تعداد تكرار آنها مشخص نيست (در پاسكال به حلقه while مشهورند.)در اين حلقهها با توجه به ورودي، تعداد تكرار مشخص ميشود. و دقيقاً نميتوان تعداد تكرار حلقه را بدون ورودي معين كرد. اين حلقه ها فقط شامل شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا ميشود.42گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 43: If شرط يا شروطمحموعه دستورالعملها و جاگزينها yesNoدر حالت كلي اين نوع حلقهها بصورت زير نمايش داده ميشوند:43
اسلاید 44: مثال: فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد.عدد خوانده شده N تعداد ارقام count 44
اسلاید 45: Begincount 0 if N>0 thenyesNowrite(count)EndN N div 10حلقهRead(N)count count+145
اسلاید 46: مثال : فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، سري فيبوناچي قبل از آنرا توليد نمايد.در حالت كلي جملات سري بصورت:fk=fk-1+fk-2عدد خوانده شدهNجمله سوم سري f3جمله دوم سري f2جمله اول سري f1 46
اسلاید 47: BeginF1 0f2 1 if f3>N thenyesNoEndحلقهRead(N)f1 f2f2 f3f3 f1+f2f3 f1+f2 write(f3)47
اسلاید 48: تمرين 1- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، كامل بودن آنرا بررسي نمايد. (عدد كامل، عددي است كه مجموع مقسومعليههاي آن با خودش برابر باشد.)2- فلوچارتي رسم كنيد كه N را از ورودي دريافت كرده، N جمله سري فيبوناچي را توليد نماید.3ـ فلوچارتي رسم نمائيد كه دو عدد N , M را از ورودي خوانده، بزرگترين مقسومعليه مشترك دو عدد را محاسبه و چاپ كند.48
اسلاید 49: حلقههاي تودرتو الگوريتمهايي كه تا حال بكار برديم، فقط شامل يك حلقه بودند.در صورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چندحلقه در داخل هم باشيم. در اين نوع حلقهها بايد دقت بيشتري به خرج دهيم، تا مشكلي پيش نيايد. اگر از حلقههاي نوع اول بصورت تودرتو استفاده كنيم در اينصورت براي هر حلقه شرط نهايي و انديس اوليه جداگانه بايد تعريف كنيم .49
اسلاید 50: در حلقههاي تودرتو به ازاي يكبار تكرار حلقه اوليه، حلقه داخلي به اندازه مقدار نهايي خود تكرار ميشود. در كل اگر حلقه اوليه n بار تكرار شود و حلقه داخلي m بار، در اينصورت كل حلقه : بار تكرار خواهد شد.50
اسلاید 51: فلوچارت حلقههاي تودرتو را ميتوان بصورت زير نشان داد:i 1 if j<=m thenNoحلقهj j+1yes...if i<=n thenj 1مجموعه دستورات و جايگزيني ها مجموعه دستورات و جايگزيني ها i i+1AAyesNoاتمام كار حلقه هاي تو در تو51
اسلاید 52: انديس حلقه اول I ورودي N محاسبه فاكتوريل fact انديس حلقه داخلي j مجموع Sum مثال : فلوچارتي رسم نمائيد كه N را از ورودي دريافت كرده، مجموع سري زير را محاسبه نمايد:52
اسلاید 53: i 2sum 1 Aif j<=i Nofact fact*jyesif i<=N fact 1j 2i i+1yesNoRead(N)Endsum sum+i/factAj j+1Write(sum)53
اسلاید 54: تمرينات آخر فصل1- فلوچارتي رسم نمائيد كه N عدد از ورودي دريافت كرده تعداد اعداد اول و كامل را شمرده در خروجي چاپ نمايد.2- فلوچارتي رسم نمائيد كه N , X را از ورودي خوانده مقدار سري زير را محاسبه كند:54
اسلاید 55: 3- فلوچارتي رسم نمائيد كه عددی را از ورودي دريافت كرده مقلوب عدد را محاسبه و در خروجي چاپ كند.4ـ فلوچارتي رسم كنيد كه تاريخ تولد شخصي را از ورودي خوانده، سن شخص را با تاريخ روز، محاسبه نموده در خروجي چاپ كند.5- فلوچارتي رسم نمائيد كه (m>n) N ,M را از ورودي دريافت كرده سري فيبوناچي بين N ,M را توليد كرده، در خروجي چاپ كند.55
اسلاید 56: فصل 2كاربرد آرايه ها در الگوريتم ها هدفهاي كليشناخت الگوریتم های لازم برای جستجو و مرتب سازیشناخت آرایه ها و مفهوم آن مقایسه انواع روش های جستجو با هم56
اسلاید 57: هدفهاي رفتاري از آرایه ها در حل مسئله استفاده کند . با استفاده از آرایه ها لیستی را مرتب نماید . در صورت لزوم در لیستی جستجو انجام دهد . دانشجو پس از مطالعه اين فصل بايد بتواند:57
اسلاید 58: مقدمهفرض كنيد بخواهيم اطلاعات 100 كارمند را از ورودي بخوانيم و سپس آنها را مرتب كنيم، در اينصورت بايد وروديها را در جايي از حافظه ذخيره كنيم. در زبانهاي برنامهنويسي معمولا از آرايه براي ذخيره اطلاعات در حافظه استفاده ميكنند. در آرايهها ما با توجه به تعداد وروديها، طول آن را مشخص ميكنيم. سپس دادهها را خوانده در آن قرار ميدهيم.58
اسلاید 59: تعريف آرايهخانههاي پشت سر هم از حافظه، كه همنوع بوده و توسط يك اسم معرفي ميشوند، آرايه نام دارد. نحوه دسترسي به هر يك از اعضاء آرايه، از طريق انديس آرايه امكانپذير است . براي تعريف آرايه ابتدا طول آرايه كه در حقيقت تعداد خانههاي آن را مشخص ميكند، معين ميكنيم. سپس نوع خانهها بايد معين شوند.در فلوچارتها آرايهها را بصورت زير نمايش ميدهيم:Name[ 1 .. Length ] طول آرايه اسم آرايه59
اسلاید 60: براي خواندن يك آرايه از ورودي از حلقهها استفاده ميكنيم. فلوچارت خواندن آرايه از ورودي بصورت زير ميباشد:a[1..100]if i<=100 Noyes Read(a[i])i i+1i 160
اسلاید 61: با توجه به فلوچارت بالا براي دسترسي به عنصر iام آرايه در حالت كلي بصورت : Nam [ index ] انديس آرايه اسم آرايه عمل ميكنند.مثال: فلوچارتي رسم كنيد كه يك آرايه حداكثر 100 عنصري را از ورودي دريافت كرده، سپس آن را خروجي نمايش دهد.61
اسلاید 62: a[1..100]i 1if i<=N Noyes Read(a[i])i i+1BeginRead(N)i 1if i<=N yes write(a[i])i i+1NoEnd62
اسلاید 63: مثال : فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده آن را به مبناي 2 ببرد.a[1..20]i 1if N>0 NoyesN N div 2Read(N)i i-1if i >0 yes write(a[i])i i-1NoEnd a[i] N mod 2i i+163
اسلاید 64: a[1..100]i 1k 3a[1] 2a[2] 1 Read(N)مثال : فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده سپس اعداد اول قبل از آن را توليد نموده ، در يك آرايه قرار دهد.64
اسلاید 65: Noif j<=i div 2 yesj j+1if i<=N j 2k 0i 1if i<k End write(a[i])i i+1if I mod j = 0 yesNoif k=0 a[k] ik k+1yesi i+1NoAyesk 1NoyesNoA65
اسلاید 66: جستجو و مرتب سازي ( search and sort )يكي از مسائلي كه در بحث طراحي الگوريتم بسيار مهم است، بحث مرتبسازي و جستجو ميباشد. منظور از جستجو اينست كه يك مقداري را از يك ليست جستجو كنيم و منظور از مرتبسازي اينست كه يك ليست مرتب از دادهها را توليد كنيم.براي جستجو و مرتبسازي الگوريتمهاي مختلفي وجود دارد در زير الگوريتمهای اوليه، براي جستجو و مرتبسازي را بررسي ميكنيم.66
اسلاید 67: الگوریتم های جستجو ( search)دو الگوريتم زير غالباً براي جستجو بكار ميروند:جستجوي خطي linear searchجستجوي دودوئی binary search67
اسلاید 68: در جستجوي خطي عبارت مورد جستجو را به ترتيب با اولين، دومين و … عنصرآرايه مقايسه ميكنيم اگر عنصر مورد جستجو پيدا شد اندیس آن را نمايش ميدهيم. جستجوي خطي linear search68گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 69: فلوچارت جستجوي خطي بصورت زير است:list[1..100]i 1index 0falg 0 Read(x)i 1if (i<=N) and (flag=0) Noif list[i]=x i i+1index iflag 1write(index)Endyesyes69گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 70: جستجوي دودوئی binary searchدر جستجوي دودوئی ، ليست مورد جستجو، مرتب ميباشد. لذا براي جستجو اعمال زير انجام ميشود:1- عنصر X با عنصر وسط آرايه كه انديس آن برابر middle (low+high)/2 مقايسه ميشود.70گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 71: 2ـ اگر x از عنصر وسط كوچكتر باشد، عنصر مورد نظر احتمالاً در قسمت بالای ليست قرار دارد. لذا آرايه با انديس، جديد در نظر گرفته ميشود و قسمت پايين ليست از فضاي جستجو حذف ميشود.3ـ اگر x از عنصر وسط آرايه بزرگتر باشد قسمت بالاي ليست حذف ميشود و فضاي جستجو، قسمت پايين آرايه خواهد بود.4- اگر x برابر عنصر وسط باشد عمل جستجو خاتمه ميپذيرد.71گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 72: مرتبسازي بحث بعدي اين فصل ميباشد. براي مرتب كردن دادهها نيز الگوريتمهاي مختلفي وجود دارد، كه هر كدام مزايا و معايب خاص خود را دارد. بحث مفصل در اين مورد را به فصلهاي بعد واگذار ميكنيم.مرتب سازي (sort )72گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 73: تمرين فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، اعداد كامل قبل از خود را توليد و در يك آرايه قرار دهد.فلوچارتي رسم نمائيد كه يك آرايه حداكثر 100 عنصري از ورودي دريافت كرده، عناصري از آن كه اول هستند را با صفر كردن حذف نمايد.فلوچارتي رسم نمائيد كه يك عدد حداكثر 20 رقمي را توسط آرايهاي از ورودي دريافت نمايد. سپس يك عدد تک رقمي را از ورودي خوانده در عدد 20 رقمي ضرب نموده، حاصل را در خروجي چاپ نمايد.73
اسلاید 74: فصل 3آشنايي با كامپيوترهدفهاي كليشناخت سختافزارهاي لازم براي كامپيوترهاي شخصي شناخت كامپيوترهاي نسل قديم و امروزي بررسي نرمافزارها و انواع آن74
اسلاید 75: هدفهاي رفتاري كامپيوترهاي نسل جديد را با كامپيوترهاي نسل قديم مقايسه كند. سختافزارهاي لازم براي كامپيوترهاي شخصي را بشناسد. انواع حافظه، مزايا و معايب آنها را شناخته و با هم مقايسه نمايد. سيستم عامل و انواع آن را مقايسه نمايد. نرمافزار و زبانهاي برنامهنويسي را تعريف كند.دانشجو پس از مطالعه اين فصل بايد بتواند:75
اسلاید 76: كامپيوترهاي قديمياولين كامپيوتر بزرگ (Super Computer) همه منظوره ديجيتال الكترونيك، تحت عنوان ENIAC در سال 1946 ميلادي در دانشگاه پنسيلوانيا ساخته شد. اين كامپيوتر با سرمايه ارتش آمريكا طراحي شد. وزن اين كامپيوتر 30 تن و ابعاد آن 50×30 فوت بود. اين كامپيوتر براي محاسبه جدول پرتابهها، پيشگويي وضع آب و هوا و محاسبات انرژي اتمي بكار ميرفت.76
اسلاید 77: در كامپيوترهاي اوليه از لامپهاي خلاء بعنوان عنصر الكترونيكي پايه استفاده ميكردند. در اين ماشينها 19000 لامپ خلاء استفاده شده بود و براي انرژي مصرفي لامپها و همچنين دستگاههاي تهويه و خنككننده ماشين حدود kw 130 انرژي الكتريكي مصرف ميشد. اين ماشينها داراي حجم زيادي بودند و سطحي را معادل 9015 مترمربع اشغال ميكردند. اين كامپيوترها به كامپيوترهاي نسل اول معروف شدند. 77
اسلاید 78: كامپيوترهاي امروزي با بكارگيري ريزپردازنده به كامپيوترهاي نسل چهارم معروفند. البته نسلهاي جديد ديگر كامپيوترها نيز به بازار ارائه ميشود. در كامپيوترهاي امروزي سرعت پردازش بسيار بالا، حجم اجزاء سختافزاري بسيار كوچك، حجم حافظه بالا و غيره آنها را از نسل هاي ديگر متمايز ميسازد. كامپيوترهاي امروزي78
اسلاید 79: اجزاء تشکيل دهنده کامپيوتر عبارتند از : سخت افزار نرم افزار79
اسلاید 80: سخت افزارInputOut putprocessپردازشوروديخروجي80
اسلاید 81: كامپيوترهاي امروزي معمولاً از قطعات زير تشكيل ميشوند: دستگاههاي ورودي حافظههاي جانبي حافظههاي اصلي واحد پردازشگر مركزي دستگاههاي خروجي 81
اسلاید 82: نرمافزار يكي از بخشهاي اساسي كامپيوتر به شمار ميآيد، كه در واقع سختافزار را بكار ميگيرد. بعبارت ديگر رابط بين كاربر و سختافزار را نرمافزار مينامند. نرمافزار در حقيقت روح و جان يك كامپيوتر است، كه به سختافزار هويت ميبخشد. نرم افزار82
اسلاید 83: سيستم عامل (OS: Operating System) مشهورترين نوع نرمافزارهاي سيستمي ميباشد. كه مديريت منابع سيستمي را بر عهده دارد. سيستمعامل، همچنين ارتباط بين كاربر و اجزاء سختافزاري و نرمافزاري ديگر را برقرار ميكند. نرم افزار سيستم عامل83
اسلاید 84: سختافزارسيستمعاملبرنامه كاربرديكاربر84
اسلاید 85: زبانهاي برنامهنويسي نرمافزارها توسط زبانهاي برنامهنويسي نوشته ميشوند. زبانهاي برنامهنويسي، يك سيستم ارتباطي هستند كه توسط آنها ميتوان دستورات لازم را به ماشين انتقال داد.هرزبان برنامهنويسي به مجموعهأي از علايم، قواعد و دستورالعملها گفته ميشود كه امكان ارتباط با كامپيوتر را جهت بيان كاري يا حل مسئلهاي فراهم ميكند. 85
اسلاید 86: زبانهاي سطح بالازبانهاي سطح پايينزبانهاي سطح ميانيدر حالت كلي زبانهاي برنامهنويسي را به سه دسته زير تقسيمبندي ميكنند:86
اسلاید 87: Source programObject programCompilerكامپايلر برنامه نوشته در يك زبان سطح بالا را به برنامه مقصد تبديل ميكند. 87
اسلاید 88: زبان Pascal در اين كتاب زبان پاسكال (Pascal) را براي آموزش و نوشتن برنامهها انتخاب كرديم. اين زبان كه به افتخار بلز پاسكال دانشمند فرانسوي قرن هفدهم ميلادي، پاسكال نامگذاري شده است، در اواخر سال 1960 و اوايل 1970 توسط پروفسور نيكلاس ويژت در انستيتو فني فدرال سوئيس مطرح گرديد 88
اسلاید 89: فصل 4 ساختار برنامه در زبان پاسکال هدفهاي كليشناخت ساختار يك برنامه در زبان پاسكال شناخت اجزاي تشكيل دهنده يك برنامه بررسي دستگاههاي خروجي و دستورات لازم در زبان پاسكال براي توليد خروجي 89
اسلاید 90: هدفهاي رفتاري اجزاء لازم براي نوشتن برنامه در زبان پاسكال را بداند. يك شناسه صحيح در زبان پاسكال را تعريف كند. ساختار يك برنامه در زبان پاسكال و اعلانهاي مربوط به برنامه را تعريف نمايد. يك برنامه ساده به زبان پاسكال كه فقط خاصيت خروجي دارد، بنويسد. دانشجو پس از مطالعه اين فصل بايد بتواند:90
اسلاید 91: کلمات ذخيرهشده ( Reserved Words )شناسهها ( identifier ) اجزاي تشکيلدهنده يک برنامه 91
اسلاید 92: کلمات ذخيره شده، کلماتي هستند که مترجم زبان آنها را ميشناسد و معناي خاصي براي زبان دارند. مترجم زبان به محض مشاهده اين کلمات اعمال خاصي را انجام ميدهد. هر زبان داراي تعداد مشخصي کلمات ذخيره شده ميباشد و اين تعداد قابل افزايش توسط برنامهنويس نيست. کلمات ذخيرهشده ( Reserved Words )92
اسلاید 93: ليست کلمات ذخيره شده در پاسکال عبارتند از: and exports mod shrasm file nil stringarray for not thenbegin function object tocase goto of typeconcat if or unitconstructor implementation packed untildestructor in procedure usesdiv inherited program vardo inline record withdownto interface repeat whileelse label set xorend library shl93
اسلاید 94: شناسه در پاسکال براي نامگذاري ثابتها، تايپها، پروسيجروها، توابع، ميدانهاي يک رکورد، برنامه و همچنين يونيت مورد استفاده قرار ميگيرد. شناسهها ( identifier )94
اسلاید 95: در حالت کلي دو نوع شناسه وجود دارد :id هاي استاندارد: اين نوع id ها از قبل در زبان پاسکال تعريف شدهاند و در برنامهها، معناي خاصي دارند . id هاي غيراستاندارد: اين نوع id ها بوسيله کاربر بطور مجزا تعريف ميشوند و اصطلاحاً به آنها userdefined گفته ميشود.95گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 96: ساختار برنامه در زبان پاسکال اجزاء اصلي يک برنامه به زبان پاسکال بصورت زير ميباشد:عنوان برنامهقسمت تعاريف برنامه قسمت دستور العملها 96گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 97: قسمت تعاريف برنامهاعلان ثابتها Constant Declarationاعلان انواع Type Declarationاعلان متغيرها Declaration Variable اعلان برچسبها Declaration Label 97گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 98: درحالت کلي ميتوان شکل يک برنامه در زبان پاسکال را بصورت زير بيان کرد:استفاده از کلمه ذخيره شده Program و اسم برنامه ( که ميتواند بکار برده نشود ) قسمت تعاريف شناسهها بلوک اصلي برنامه که با Begin شروع و به End همراه نقطه ( . ) ختم ميشود.هر دستور در پاسکال به ( ; ) ختم ميشود.98گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 99: نمودارهاي يک برنامه و بلوک بترتيب به صور ت زير ميباشد: Programشناسه)شناسه(;block0,BeginStatementEnd.;99گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 100: مشهورترين دستگاههاي خروجي عبارتنداز: خروجي ( Output ) صفحه نمايش Monitor چاپگر Printer ترمينال Terminale رسام Plotter 100
اسلاید 101: مثال هاي حل شده Program Print ( output ) ;Begin Writeln ( Pascal Language ) ; Writeln ( Hello ) ;End.101
اسلاید 102: خروجي برنامه بالا بصورت زير ميباشد: Pascal Language Hello 102
اسلاید 103: فصل 5انواع عملگرها و دادهها در زبان پاسکالهدفهاي كليشناخت انواع دادههامعرفي انواع عملگرها در زبان پاسكال بررسي اولويت عملگرهامعرفي دستورات جايگزيني در پاسكال103
اسلاید 104: دانشجو پس از مطالعه اين فصل بايد بتواند: هدفهاي رفتاريانواع عملگرها در زبان پاسكال را بكار ببرد انواع دادهها براي يك برنامه را تعريف كند.اولويت عملگرها در يك عبارت را تشخيص دهد.يك برنامه ساده با عمليات معمولي را بنويسد.104
اسلاید 105: عملگرها عملگرها نمادهايي هستند که براي انجام اعمال خاصي مورد استفاده قرار ميگيرند.عملگرها براي انجام اعمال خاصي روي عملوندها ( Operands ) بکار ميروند. با توجه به نوع عملگر ممکن است يک يا دو عملوند وجود داشته باشد. عملگرها در زبان پاسکال از تنوع زيادي برخوردارند. 105
اسلاید 106: در پاسکال چهار دسته عملگر وجود دارند :محاسباتي رابطه اي منطقي بيتي106
اسلاید 107: عملگرهاي محاسباتي107
اسلاید 108: عملگرهاي رابطه اي108
اسلاید 109: عملگرهاي منطقي 109
اسلاید 110: عملگرهاي بيتي110
اسلاید 111: تقدم عملگرها111
اسلاید 112: انواع دادهها ( data types ) دادههاي ساده (Simple data type) دادههاي ساختيافته ( ( Structural Data Types دادههاي اشارهگر (Pointer Data Types)112
اسلاید 113: دادههاي ساده (Simple data type)صحيح ( integer )اعشاري (حقيقي) نوع منطقي (Boolean type) نوع کاراکتري (Char type) نوع رشته اي (String type) 113
اسلاید 114: صحيح ( integer )114
اسلاید 115: اعشاري (حقيقي)115
اسلاید 116: دادههاي ساختيافته ( ( Structural Data Types انواع دادههاي ساختيافته عبارتند از:آرايههارکوردهامجموعههافايلها116
اسلاید 117: دادههاي اشارهگر (Pointer Data Types)ممکن است در نوشتن برنامه، نوع دادههاي بحث شده در بالا به دلايل مختلف از جمله مشخص نبودن تعداد وروديهاي مسئله و غيره مشخص نباشد لذا نياز به متغيرهايي هست که بتوانند آدرس متغيرهاي ديگر را در. خود نگه دارند، اين نوع دادهها، دادههاي اشارهگر نام دارند117
اسلاید 118: متغيرها (Variables) متغير، محلي از حافظه است که داراي نوع و اسم ميباشد. نوع متغير همان نوع داده بوده و اسم متغير از قواعد اسمگذاري شناسه تبعيت ميکند.در پاسکال براي معرفي متغيرها بصورت زير عمل ميکنند:Var (کلمه ذخيره شده) نوع متغير: اسم متغير ;118
اسلاید 119: ثابتها (Constants) يک ثابت نام شناسهاي است که در آغاز يک برنامه، يک مقدار در آن جاگزين ميشود. درست مانند متغيرها. ثابتها را ميتوان بعنوان خانههايي از حافظه در نظر بگيريم که مقدار دادهها در آنها ذخيره ميشود ولي مقدار ثابت مشخص ميباشد، طوري که نميتوان مقدار يک ثابت را در برنامه خود بوسيله يک دستور تغيير داد.: براي تعريف يک ثابت بصورت زيرعمل ميکنيم مقدار ثابت = اسم متغير Const 119
اسلاید 120: دستور جايگزيني براي قرار دادن يک مقدار يا مقدار يک متغير داخل يک متغير ديگر، از دستور جايگزيني استفاده ميکنند. شکل کلي يک دستور جايگزيني در پاسکال بصورت زير است: عبارت محاسباتي = : اسم شناسه عبارت قياسي يا عبارت منطقي 120
اسلاید 121: افزودن توضيحات به برنامه (Comment) افزودن مطلب توضيحي در درون خود برنامه عملي پسنديده و مطلوب است بدين ترتيب که بعد از مدتي امکان فراموشي کار با برنامه از بين ميرود و در کل ميتوان گفت که نوشتن توضيحات در برنامه خوانايي آن را بالا ميبرد. در پاسکال توضيحات بين دو آکولاد محصور ميشوند.{ This is comment } { This program written by A. Pascal }121
اسلاید 122: مثال جابجا کردن مقدار دو متغير 151715 17151715171715aa ab bb temptempab122
اسلاید 123: Program Example4 ; Var a , b , temp : integer Begin a : = 15 ; b : = 17 ; temp : = 0 ; temp : = a ; a : = b ; b : = temp ; Writeln ( a = , a , b = , b ) ; End . { End . of program } خروجي برنامه : a = 17 b = 15 123
اسلاید 124: نکاتي چند در مورد برنامهنويسي استفاده از اسامي با مفهوم براي متغيرها استفاده از دستور Const در صورتي که مقدار ثابت در برنامه وجود داشته باشد.سوال جوابي بودن برنامه (وروديها و خروجيها بايد داراي پيغام مناسب باشند)نوشتن برنامه با فرمت مناسب (رعايت قرار گرفتن خطوط مختلف برنامه زير هم و فاصله گذاشتن آنها از اول سطر و غيره)124
اسلاید 125: تمرينات حاصل عبارتهاي زير را بدست آوريد:3 * 13 Mod 3 div 3 = ? 7.3 * 5 / 3 = ?( 3 + 4 < 6 ) and ( 4 + 7 < 13 ) = ?33 – 8 * 3 div 3 mod ( 5 div 3 ) = ?NOT ((( 3 – 4 MOD 3 ) < 5 ) and (( 6 div 4 ) < > 3 ))125
اسلاید 126: : حاصل عبارتهاي منطقي را به ازاء مقادير زير مشخص کنيدA: = true ; B: = false ; C: = true ;( A AND B ) OR ( A AND C ) = ?( A OR NOT B ) and ( Not A OR C ) = ?A OR B AND C = ?D) NOT ( A OR B ) AND C = ?126
اسلاید 127: تمرينات برنامهنويسي برنامهاي بنويسيد که ابعاد مثلث که عبارتند از 3 , 1.3 را در نظر گرفته محيط و مساحت آن را محاسبه و با پيغام مناسب در خروجي چاپ کند.برنامهاي بنويسيد که دو متغير صحيح با مقادير 3 , 15 را در نظر گرفته محتويات دو عدد را بدون استفاده از متغير کمکي جابجا نمايد.برنامهاي بنويسيد که سه عدد بنام هاي Third , Second , First بترتيب با مقادير 17 , 15 , 13 را در نظر گرفته بطور چرخشي مقادير آنها را جابجا نموده در خروجي با پيغام مناسب چاپ کند.127گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 128: فصل 6ورودي و خروجي هدفهاي كليمعرفي خروجي فرمتبندي شدهWriteln معرفي دستورات خروجي بررسي دستورات ورودي Read و ReadLn 128گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 129: هدفهاي رفتاريعبارات مورد نظر را در خروجي نمايش دهد.عبارات خروجي را با فرمت مناسب چاپ كند.متغيرهاي مورد نياز برنامه را از ورودي دريافت نمايد.برنامههاي ساده به زبان پاسكال بنويسد.دانشجو پس از مطالعه اين فصل بايد بتواند:129گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 130: خروجي با دستور Write اين دستور براي نوشتن اطلاعات در خروجي بکار ميرود. اطلاعات خروجي ميتوانند ثابتهاي عددي، مقادير متغيرها، عبارات و غيره باشند. شکل دستور در حالت کلي بصورت زير است: (....... و متغير2 و متغير1 )write يا (....... و عبارت 2 وعبارت1 ) يا (....... و ثابت 2 وثابت 1 )130گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 131: مثال Var A , B: integer ; Ch: char ; R: Real ;Begin A: = 10 ; B: = 15 ; Ch: = T ; R: = 12.25 Write ( A = , A, B = , B ) ; Write ( ch = , ch , R= , R ) ; Write ( sum of A and B = , A + B ) ; End. { end of program }بعد از اجراي برنامه فوق در خروجي خواهيم داشت: A = 10 B = 15 ch = TR = 1.2250000000 e + 01 sum of A and B = 25131گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 132: خروجي با دستور Writeln اين دستور همانند دستور Write عمل ميکند با اين تفاوت که بعد از اجرا، کنترل را به ابتداي سطر بعد منتقل ميکند در نتيجه موجب چاپ دادههاي بعدي در ابتداي سطر بعد ميشود.132
اسلاید 133: Var A , B: integer ; Ch: char ; R: Real ;Begin A: = 10 ; B: = 15 ; Ch: = T ; R: = 12.25 ; Writeln ; { new line } Writeln ( A = , A , B = , B ) ; Writeln ( Ch = , ch , R = , R ) ; Writeln ( Sum of A and B = , A + B ) ;End. { End of program } مثال خروجي برنامه بصورت زير ميباشد: A = 10 B = 15Ch = T R = 1.225000000 e + 01Sum of A and B = 25 133
اسلاید 134: خروجي فرمتبندي شده اگر بخواهيم اطلاعات با فاصله هاي مشخص يا در مکان مشخصي در صفحه نمايش قرار گيرند، بايد فرمت چاپ را در دستورات بيان شده مشخص کنيم.134
اسلاید 135: طريقه تعيين فرمت چاپ براي اعداد صحيح فرمت اعداد صحيح بصورت زير مشخص ميشود: ( طول ميدان: داده صحيح ) Writeln يا Write135
اسلاید 136: اگر طول ميدان از طول ارقام عدد صحيح بيشتر تعريف شود، عدد در منتهياليه سمت راست ميدان نوشته ميشود.اگر طول ميدان از طول ارقام عدد صحيح کمتر تعريف شود، طول ميدان به اندازه تعداد ارقام در نظر گرفته ميشود و طول ميدان تعريف شده بياثر خواهد بود.در تعريف طول ميدان براي متغيرها يا دادههايي از نوع صحيح به نکات زير توجه کنيد:136
اسلاید 137: X:= 3200 ; A: = 12 ;B: = 217 ;Write ( X:3 , A:5 , B:5 ) ; مثال : خروجي 320012217137
اسلاید 138: طول ميدان اعداد اعشاري براي نمايش اعداد اعشاري بصورت دلخواه، مي توان با تعريف طول ميدان و تعداد ارقام اعشاري، عدد مزبور را نمايش داد. : در حالت کلي طول ميدان را ميتوان به صورت زير تعريف کرد Write ( تعداد ارقام بعد از مميز: طول ميدان: متغير اعشاري ) يا Writeln138
اسلاید 139: در تعريف فرمت براي اعداد اعشاري به نکات زير بايد توجه کرد: اگر طول ميدان بزرگتر از تعداد ارقام عدد ذکر شود، عدد در منتهي اليه سمت راست ميدان چاپ ميشود.اگر فقط طول ميدان ذکر شود، عدد به صورت نماد علمي در طول ميدان مشخص شده چاپ می شود .از آنجائي که براي نمايش اعداد در نماد علمي حداقل 8 محل مورد نياز است، لذا هنگامي که تنها طول ميدان ذکر شده باشد، اگر از 8 رقم کمتر باشد، حداقل 8 رقم در نظر گرفته ميشود.139
اسلاید 140: هنگامي که طول ميدان همراه با تعداد ارقام بعد از مميز ذکر شود، اگر طول ميدان کوچکتر از مقدار عدد باشد، پاسکال تنها طول ميدان را به اندازهاي که مورد نياز است تصحيح کرده و آنرا برابر اندازه واقعي که عدد در آن قرار ميگيرد، اصلاح ميکند. اگر تعداد ارقام بعد از مميز زياد باشد و تعداد ارقام بعد از مميز ذکر شده در طول ميدان کمتر از تعداد ارقام اعشاري عدد باشد، تعداد ارقام اعشار مطابق درخواست برنامهنويس نشان داده خواهد شد و رقم آخر اعشار آن نسبت به عدد بعدي گرد ميشود.140
اسلاید 141: طول ميدان کاراکترها و رشتهها براي نمايش رشتهها و کاراکترهاي با طول ميدان بصورت زير عمل ميکنيم. Write ( طول ميدان: متغير يا عبارت رشتهاي يا کاراکتري )در توربو پاسکال، کليه موارد گفته شده در مورد اعداد صحيح براي رشتهها نيز صادق است.141
اسلاید 142: ورودي با Readln , Read از اين دستور براي خواندن داده ها و اختصاص آنها به متغيرها استفاده ميشود. در خواندن داده ها به دو موضوع بايد دقت شود: 1- منبع دادهها يعني دستگاه ورودي که از آن دادهها خوانده ميشود.. 2- متغيري که دادههاي خوانده شده در آن قرار ميگيرد142
اسلاید 143: شکل کلي دستور ورودي Read بصورت زير ميباشد:;( ..... و متغير 2 و متغير 1Read ( اين دستور عمل خواندن دادهها و ذخيره آنها در متغيرها را انجام ميدهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتنهاي بعدي. در همان خط نگه ميدارد143
اسلاید 144: program Example_1 ( input , output ) ;Var first , second , temp: integer ;Begin Writeln ; Writeln ( Please Enter two numbers ) ; Readln ( first , second ) ; Temp: = first ; First: = second ; Second: = temp ; Write ( first = , first , second = : 10 , second ) ;End. { end of program }مثال جابجا کردن محتويات دو عدد144
اسلاید 145: خروجي برنامه بالا به صورت زير ميباشد:Please Enter two numbers 15 17First = 17 second = 15 145
اسلاید 146: تمرينات Value1: = 27.3 ;Value2: = -8.5 ;Writeln ( Value1 is , Value1 ) ;Writeln ( Value2 is , Value2 ) ;Sum: = Value1 + Value2 ;Writeln ( Sum of Two Values = , Sum: 6: 2 ) ;: خروجي قطعه برنامه زير را تعيين کنيد146
اسلاید 147: اگر متغير X از نوع real و مقدار آن 12.235 و متغير 3 از نوع صحيح و مقدار آن 100 باشد خروجي دستورات زير را تعيين کنيد؟Writeln ( X is : 10 , X: 6: 2 , I is : 4 , I: 5 ) ;Writeln ( I is : 10 , I: 1 ) ;Writeln ( X is : 10 , X: 2: 1 ) ;Writeln ( X is : 15 , X: 7: 1 ) ;Writeln ( I is : 10 , X is : 10 , X: 7: 3 ) ; 147
اسلاید 148: تمرينات برنامه نويسيبرنامهاي بنويسيد که دو عدد را از ورودي دريافت کرده و محتويات آنها را بدون استفاده از متغير کمکي جابجا نمايد. برنامهاي بنويسيد که سه عدد صحيح Third , Second , first را از ورودي با پيغام مناسب دريافت کرده سپس محتويات اين سه متغير را بصورت چرخشي جابجا نموده با پيغام مناسب در خروجي چاپ کند.148
اسلاید 149: برنامهاي براي يک حسابدار اداره جمع آوري ماليات بنويسيد که صورت حسابهاي ماليات را محاسبه نمايد.ورودي: شماره شناسايي ماليات دهنده بهاي ارزيابي شده نرخ ماليات خروجي: صورت حساب بافرمت مناسب شامل تمام دادههاي ورودي و ميزان بدهي 149گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 150: فصل 7ساختارهاي شرطي و كنترلي هدفهاي كليمعرفي دستور caseIf and Elseمعرفي دستور شرطي بررسي دستورات تكرار for ، while ، repeat untilمعرفي دستورات شرطي متداخلبررسي چند تابع و روال استاندارد زبان پاسکال150گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 151: ÷ هدفهاي رفتاري برنامههايي را بنويسد كه در آنها نياز به استفاده از شرط وجود دارد. تفاوتهاي بين دستورات مختلف با if و else- if را تشخيص دهد. برنامههايي كه نياز به تكرار تعدادي عمليات داشته باشند را بنويسد. در صورت نياز بتواند در برنامهها، از روالها و توابع استاندارد زبان استفاده نمايد.دانشجو پس از مطالعه اين فصل بايد بتواند:151گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 152: دستورات شرطي بطور کلي توسط اينگونه دستورات ميتوان بر حسب شرايط مختلف، تصميمات متفاوتي را اتخاذ نمود و برحسب برقرار بودن يا نبودن شرايط دستورات متفاوتي را اجرا نمود. دستورات شرطي در حالت کلي به دو نوع تقسيم ميشوند:if دستورCase دستور152
اسلاید 153: دستور if هرگاه در طول برنامه نياز به استفاده از شرط يا شروط داشته باشيم، از دستور ستفاده ميکنيم. If دستور if بطور کلي به سه شکل بر حسب نياز ممکن است ظاهر شود: ساده ifElse همراه if هاي متداخل if153
اسلاید 154: If – then در اين نوع دستور شرطي اگر شرط خاصي تحقق يافته باشد، عمل يا اعمال خاصي انجام ميشود. در غير اينصورت برنامه روال عادي خود را طي ميکند، در صورتي که شرط برقرار باشد ارزش منطقي Ture به خود ميگيرد و اگر شرط برقرار نباشد، ارزش منطقي False به خود خواهد گرفت.154
اسلاید 155: If – then ( ادامه )ifشرط ياشروطدستورThenشناسه ;شکل کلي دستور if بصورت زير ميباشد: then شرط يا شروط if ; دستور دياگرام دستور بالا بصورت زير ميباشد: 155
اسلاید 156: Program Example ;Var Number: integer ; Begin Write ( Please enter Number: ) ; Readln ( Number ) ; if Number > 0 then Write ( Number is positive ) ; End . مثالخروجي برنامه بالا بصورت زير است: Please enter Number: 12Number is positive156
اسلاید 157: در اين دستور ابتدا شرط بررسي ميشود، در صورتي که شرط برقرار باشد، عمل يا اعمال خاصي را انجام ميدهد و در صورتي که شرط برقرار نباشد، عمل يا اعمال بخصوص ديگري را انجام خواهد داد. اينگونه دستورات در واقع حالت توسعه يافته دستورات if ميباشند. دستور if همراه else 157
اسلاید 158: شکل کلي اين دستور بصورت زير است:if عبارت يا عبارات منطقي thenدستور1 ;else دستور2 ;ifعبارت يا عبارات منطقيthenدستورelse دستور;دياگرام دستور بصورت:158
اسلاید 159: Program Example ;Var Number: integer ;Begin Writeln ( Please enter Number: ) ; Readln ( Number ) ; if ( Number mod 2 ) = 0 Then Write ( even ) else Write ( odd ) ;End. { end of program } مثالخروجي برنامه بالا بصورت زير است: Please enter Number: 17odd 159
اسلاید 160: If عبارت منطقيThen Begin دستور 1 ; دستور 2 ; . . .End Else Begin دستور 1 ; دستور 2 ; . . . End ; صورت ديگر دستور160
اسلاید 161: If هاي متداخلهرگاه در نوشتن برنامه نياز به انتخاب يک شرط از بين چند شرط داشته باشيم، معمولاً از If متداخل استفاده ميکنند. در چنين مواقعي استفاده از If متداخل کارائي برنامه را بالا ميبرد زيرا بجاي کنترل تمام شروط فقط تا زمانيکه شرط برقرار نشده، If ها بررسي ميشوند. بعد از برقرار شدن يکي از شروط، کنترل برنامه به بعد از If منتقل ميشود و اين در بهبود کارائي يک برنامه ميتواند بسيار موثر باشد.161
اسلاید 162: در حالت کلي If متداخل به صورت هاي زير ممکن است، در برنامه ظاهر شود.... elseدستور 3 ;دستور2then عبارت شرطي3 else Ifelseدستور2دستور 1then عبارت شرطي 2 else ifthen عبارت شرطي2 if دستور 1then عبارت شرطي 1 ifthen عبارت شرطي1 if ( 2162
اسلاید 163: مثال : برنامهاي بنويسيد که نمره دانشجوئي را از ورودي دريافت کرده، با توجه به مقدار نمره يکي از خروجي هاي زير را نمايش دهد:Grade خروجي17 – 20 A 14 - 17 B12 – 14 C10 – 12 D0 – 10 F 163
اسلاید 164: Var Grade : Real ;Begin Write ( please enter a Real Number : ) ; Readln ( Grade ) ; if Grade > = 17.0 Then Writeln ( Grade is A ) Else If Grade > = 14.0 Then Writeln ( Grade is B ) Else If Grade > = 12.0 Then Writeln ( Grade is C ) Else If Grade > = 10 Writeln ( Grade is D ) Else Writeln ( Grade is F ‘(; Writeln ( Press any Key … : 30 ) ; Readln ;End . { end of program }164
اسلاید 165: دستور Case زبان پاسکال دستورCase را بصورت زير در نظر ميگيرد: Of عبارت Case; دستور 1 : مقدار 1; دستور 2 : مقدار 2 ; دستور 3 : مقدار3 . . . Otherwise ; دستورEnd ; { End of case } 165
اسلاید 166: مثال : برنامهاي بنويسيد که دو عدد به همراه يک عملگر را از ورودي دريافت کرده، کار يک ماشين حساب ساده را شبيهسازي نمايد.Var a , b: Real ; op: char ;Begin Write ( please enter two Numbers: ) ; Readln ( a , b ) ; Write ( please Enter A operator: ) Readeln ( op ) ; Case op of + : Writeln ( Sum = , ( a + b ): 6: 2 ) ; - : Writeln ( Subtract = , ( a - b ): 6: 2 ) ; * : Writeln ( Multiple = , ( a * b ): 6: 2 ) / : Writeln ( divide = , ( a / b ): 6: 2 ) ; End; { End of Case }End. { end of program }166
اسلاید 167: دياگرام دستور Case بصورت زير ميباشد: CaseعبارتثابتofدستوراتEnd;:,167
اسلاید 168: ساختارهاي کنترلي بسياري از مواقع لازم است عمل يا اعمال به تعداد دفعات معين يا نامعين انجام شوند. در چنين مواقعي زبانهاي برنامهنويسي دستوراتي دارند که ميتوان اين اعمال تکراري را انجام داد. در حالت کلي ساختارهاي کنترلي شامل يک يا چند شرط و همچنين متغير يا اصطلاحاً شمارندهاي براي پايان دادن به شرط ميباشند 168
اسلاید 169: شکل کلي حلقه بصورت زير ميباشد: Do مقدار نهايي To مقدار اوليه =: انديس For ; دستوربايد توجه داشته باشيد که در حلقه تعداد تکرار کاملاً مشخص است و حلقه دقيقاً به تعداد تکرار مشخص اجرا ميشود.169
اسلاید 170: حلقه for اين دستور براي انجام عمل يا اعمالي مشخص به تعداد تکرار معين بکار برده ميشود. حلقه for شامل يک انديس ( index ) مقدار اوليه ( initial value ) مقدار نهايي ( final value ) و مقدار افزاينده ميباشد. اين حلقه با قرار دادن مقدار اوليه در انديس حلقه شروع شده و بعد از هر تکرار يک واحد به انديس حلقه اضافه ميکند تا در نهايت به مقدار نهايي برسد. شکل کلي حلقه بصورت زير ميباشد:170
اسلاید 171: Var i , number , Sum: integer ;Begin Writeln ( please enter 100 Numbers: ) ; For I: = 1 to 100 do Begin Readln ( number ) ; Sum:= Sum + number ; End ; Writeln ( Sum = , Sum ) ; End. { end of program } مثال : برنامهاي بنويسيد که 100 عدد از ورودي دريافت کرده، مجموع 100 عدد را محاسبه و چاپ نمايد. 171
اسلاید 172: دستور for را بصورت زير هم ميتوان بکار برد.do مقدار نهايي downto مقدار اوليه = : انديس for ; دستوردر اين شکل از دستور For ابتدا مقدار اوليه در انديس حلقه قرار داده مي شود و بعد از آن در هر تکرار حلقه يک واحد از انديس حلقه کم مي شود تا به مقدار نهايي برسد .172
اسلاید 173: مثال : برنامهاي بنويسيد که عدد صحيحي را از ورودي دريافت کرده و فاکتوريل آن را محاسبه نمايد.Var i , n , Fact : integer ;Begin Fact : = 1 ; Write ( please enter A Number ) ; Readln ( n ) ; For I : = n downto 1 do Fact : = Fact * i ; Writeln ( Fact = , Fact ) ; End .173گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 174: do مقدار نهايي to مقدار اوليه = : انديس1 for do مقدار نهايي to مقدار اوليه = : انديس for 2 ; دستور هاي متداخل For 174گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 175: For i: = 1 to 3 do Begin For j: = 1 to 3 do Write ( pascal : 8 ) ; Writeln ; End ; مثال :خروجي Pascal Pascal Pascal مرحله اول ( i = 1 ) Pascal Pascal Pascal مرحله دوم ( i = 2 ) Pascal Pascal Pascal مرحله سوم ( i = 3 )175
اسلاید 176: دياگرام دستور for Forانديسdoمقدار اوليه:=مقدار نهاييDowntoدستورTo 176
اسلاید 177: حلقه While در حالت کلي هدف از بکار بردن اين دستور انجام عملياتي مشخص به تعداد دفعات نامعين است :اين حلقه به صورت زير بکار برده مي شود Do عبارت منطقي While ; دستور177
اسلاید 178: Var m , n , r: integer ;Begin Writeln ( Please Enter Two Numbers ) ; Readln ( m, n ) ; While ( m Mod n ) < > 0 Do Begin r: = m MOD n ; m: = n ; n: = r ; End ; { end of while } Writeln ( B. M. M = , n ) ; End. { end of program }مثال : بزرگترين مقسوم عليه دو عدد178
اسلاید 179: دياگرام دستور While بصورت زير مي باشد:Whileعبارت شرطيdoدستورBeginدستورEnd;و در صورتي که دستور مرکب باشد دياگرام بصورت زیر است : 179
اسلاید 180: دستور Repeat اين دستور نيز از نوع دستورات تکراري ميباشد و به کمک آن ميتوان يک يا چند دستور را به تعداد نامعين بار اجرا کرد. while اين دستور مشابه دستوراست، با تفاوتهايي که در زير عنوان ميکنيم:While برعکس دستور Repeat 1) در دستورشرط حلقه در انتهاي حلقه بررسي ميشود لذا حلقه حداقل يکبار اجرا ميشود. 180
اسلاید 181: 2) دستور Repeate تا زماني اجرا ميشود که شرط خاصي تحقق پيدا نکرده است در حاليکه دستور While تا زماني که شرط برقرار باشد، اجرا ميشود.3) دستور Repeat نياز به بلوک ندارد و همراه Until ظاهر ميشود.181
اسلاید 182: شکل کلي اين دستور بصورت زير ميباشد: Repeat ; دستور1; دستور2 ..; شرط يا شروط until182
اسلاید 183: Var i , Sum , Number : integer ; ave: Real ;Begin Writeln ( please enter Numbers While is Not Negative ) ; Sum: = 0 ; Ave: = 0 ; Repeat Readln ( Number ) ; Sum: = sum + Number ; i: = i + 1 ; Until number = 0 ; { End of Repeat } i: = i - 1 ave: = Sum / i ; Writeln ( Sum = , Sum , average = : 12 , ave: 7: 2 ) ;end.{ end of program }برنامه مجموع و ميانگين تعدادي عدد صحيح مثبت183
اسلاید 184: دياگرام دستور Repeat بصورت زير ميباشد: Repeatدستور;Untilشرط يا شروط184
اسلاید 185: معرفي چند پروسيجر ( Procedure ) پروسيجرها يا زير روالها قسمتهاي مستقلي از برنامه اصلي ميباشند که به تنهايي اعمال خاصي را انجام داده و وظايف مستقل و بخصوصي بر عهده آنها گذاشته ميشود. يک مزيت بزرگ پروسيجرها اينست که يکبار در برنامه گنجانده شده ولي در محلهاي مختلف ازآن استفاده به عمل ميآيد و از اصول برنامهنويسي ساخت يافتهاست. 185
اسلاید 186: پروسيجر Exit هدف: انتقال کنترل برنامه به خارج از بلوک فعليProcedure Exit ; استفاده از اين پروسيجر در هر بلوک از برنامه باعث ميشود که کنترل برنامه بلافاصله به خارج از آن بلوک انتقال يابد. 186
اسلاید 187: پروسيجر Break هدف: خاتمه دادن به اجراي يک حلقه Procedure Break ; استفاده از پروسيجر فوق باعث ميشود که اجراي يک حلقه خاتمه يافته و کنترل برنامه به دستورالعمل بعدي انتقال يابد. 187
اسلاید 188: پروسيجر continue هدف: بازگشت به ابتداي حلقه Procedure continue ; وقتي اين پروسيجر در حلقه ظاهر ميشود کنترل برنامه به اول حلقه انتقال مييابد و دستورات بعد از پروسيجر اجرا نميشوند.188
اسلاید 189: ارائه چند مثال از کاربرد حلقه ها و شرطها مثال : برنامهاي بنويسيد که يک عدد صحيح در مبناي ده را از ورودي دريافت کرده، به يک عدد در مبناي 2 ببرد. 189
اسلاید 190: Var Number , N , Power , R: integer ; Begin Power: = 1 ; N: = 0 ; Write ( enter A Number: ) ; Readln ( Number ) ; Repeat R: = Number MOD 2 ; Number: = Number DIV 2 ; N: = N + Power * R ; Power: = Power * 10 ; Until Number < 2 ; N: = N + Number * Power ; Writeln ( Number In Base 2 = , N ) ; End. { end of program } 190
اسلاید 191: Var F1 , F2 , F3 , N: integer ; Begin Write ( please enter A Number: ) ; Readln ( N ) ; F1: = 0 ; F2: = 1 ; Write ( F1: 5 , F2: 5 ) ; For i: = 3 to N do Begin F3: = F1 + F2; If ( i mod 10 ) = 0 Then Writeln ; Write ( F3: 5 ) ; F1: = F2 ; F2: = F3 ; End ; { end of for }End. { end of program }مثال : برنامهاي بنويسيد که n عدد را از ورودي دريافت کرده، n جمله سري زير که به سري فيبوناچي معروف است را چاپ نمايد. 191
اسلاید 192: تمرينات a) Sum : = 0 ; While i < = 120 do Begin Sum : = Sum + i ; i : = i + 1 ; end ; b) i : = 0 ; Sum : = 0 ; While i < = 20 do Begin i : = i + 1 ; Sum : = Sum + i ; end ; 1- خروجي قطعه برنامههاي زير را تعيين کنيد: 192
اسلاید 193: c) b : = 5 ; Repeat Writeln ( b , ( b div 5 ) : 3 ) ; b : = b – 1 ; Until ( b div 3 ) = 5 ; d) Count : = 0 ; Stop : = 4 ; While Count < Stop Do Begin For K : = 1 to Count Do Write ( K : 3 ) ; Writeln ; Count : = Count + 1 ; End ; 193
اسلاید 194: تمرينات برنامه نویسی 1- برنامهاي بنويسيد که با استفاده از حلقه ها خروجي زير را توليد کند. 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 194
اسلاید 195: 2- برنامهاي بنويسيد که تعدادي عدد از ورودي دريافت کرده مجموع ارقام هر عدد را در خروجي چاپ نمايد. ( پايان داده ها به 1- ختم مي شود ) 3- برنامهاي بنويسيد که دو عدد صحيح را از ورودي دريافت کرده سپس:اعداد فيبوناچي بين اين دو عدد را چاپ کند.4- برنامهاي بنويسيد که يک اسکناس 1000 توماني را به حالتهاي مختلف يعني به اسکناس 200 توماني، 100 توماني، 50 توماني، 20 توماني، 10 توماني و سکه هاي 5 توماني و 2 توماني و يک توماني خرد نمايد.195
اسلاید 196: فصل 8Arrayآرایه ها هدفهاي كليشناخت انواع آرايهها و موارد استفاده از آنهاشناخت لزوم استفاده از ساختار داده اي به نام آرايه شناخت مفاهيم مرتبسازي و جستجوشناخت الگوريتمهاي مرتبسازي و جستجو196
اسلاید 197: ÷ هدفهاي رفتاري آرايهها يك بعدي را در برنامههاي خود بكار ببرد. ماتريسها را پيادهسازي نمايد. عمل جستجو در آرايه انجام دهد.يك ليست را توسط روشهاي مرتب سازي حبابی، انتخابي و غيره مرتب كند.دانشجو پس از مطالعه اين فصل بايد بتواند:197
اسلاید 198: آرايه و انواع آن خانههاي پشت سرهم از حافظه که همنوع بوده و توسط يک اسم معرفي ميشوند، آرايه نام دارد. نحوه دسترسي به هر يک از اعضاء آرايه از طريق انديس آرايه امکانپذير است.براي تعريف آرايه ابتدا طول آرايه که درحقيقت تعداد خانههاي آنرا مشخص ميکند، معين ميگردد. سپس نوع خانههايي که دادهها در آن قرار خواهند گرفت را تعيين مي کنند 198
اسلاید 199: آرايههاي يک بعدي آرايههاي يک بعدي بصورت زير تعريف ميشوند: Name : array [ 1 . . Length ] of type ; نوع آرايه کلمه ذخيره شده طول آرايه کلمه ذخيره شده اسم آرايه 199
اسلاید 200: برای مثال : Var No: Array [ 1.. 50 ] of integer ; id: Array [ 1.. 20 ] of Byte ; Name , Fam: Array [ 1.. 30 ] of char ;200
اسلاید 201: مقداردهي آرايهها مثل متغيرها به دو صورت امکانپذير است :1- با استفاده از دستورات ورودي2- مقداردهي در طول برنامهطريقه دسترسي به عناصر آرايه بصورت زير ميباشد: Name [ index ] انديس آرايه اسم آرايه 201
اسلاید 202: مثال : برنامهاي بنويسيد که 100 عدد صحيح از ورودي دريافت کرده، بيشترين مقدار و محل وقوع آن را در خروجي چاپ نمايد. Var No: array [ 1.. 100 ] of integer ;Max , i , index: integer ;Begin Writeln ( please enter TEN Numbers ) ; For i: = 1 to 100 do Readln ( No [ i ] ) ; Max: = No [ 1 ] ; Index: = 1 ; For i: = 2 to 100 do If No [ i ] > Max Then Begin Max: = No [ i ] ; Index: = i ; End ; Writeln ( The Maximum is = , Max ) ; Writeln ( And Index = , Index ) ;End. { End of program }202
اسلاید 203: مثال: برنامهاي بنويسيد که يک آرايه 100 عنصري را از ورودي دريافت کرده عناصر آرايه را معکوس نمايد. Var i , temp : integer ; a : array [1 .. 100 ] of integer ;Begin Writeln ( please enter 100 Numbers : ) ; For i : = 1 to 100 do Begin Read ( a [ i ] ) ; If ( i Mod 10 ) = 0 Then Writeln ; End ; For i : = 1 to 50 do Begin Temp : = a [ 101 – i ] ; a [ 101 – i ] : = a [ i ] ; a [ i ] : = temp ; End ; End . 203
اسلاید 204: آرايههاي دو بعدي براي نمايش ماتريس درحافظه معمولاً از آرايههايي بنام آرايههاي دوبعدي استفاده ميکنند براي درک بيشتر اين آرايهها آنها را بصورت ماتريس در نظر ميگيرند. آرايههاي دو بعدي بصورت زير معرفي ميشوند: Name : array [ 1 .. row , 1 .. column ] of type ; نوع عناصر آرايه کلمه ذخيره شده تعداد ستونها تعداد سطرها کلمه ذخيره شده اسم آرايه204
اسلاید 205: مثال : برنامهاي بنويسيد که يک ماتريس 5*5 را از ورودي دريافت کرده، سپس آنرا در خروجي چاپ نمايد. Var a : array [ 1 .. 5 , 1 .. 5 ] of integer ; i , j : integer ; Begin For i : = 1 to 5 do Begin For j : = 1 to 5 do Read ( a [ i , j ] ) ; Writeln ; End ; Writeln ; For i : = 1 to 5 do Begin For j : = 1 to 5 do Write ( a [ i , j ] : 5 ) ; Writeln ; End ;End. 205
اسلاید 206: آرايههاي چند بعدي ميتوان آرايههايي با ابعاد بيشتر از دو نيز تعريف کرد. بطور کلي براي معرفي يک آرايه چند بعدي مي توان بصورت زيرعمل کرد :Name : array [ 1.. length1 ] of array [ 1.. length2 ] …. Of array [ 1.. lengthN ] of Type و ياName: array [ 1.. length1 , 1.. length2 , …. 1.. lengthN ] of Type206
اسلاید 207: نکاتي چند در مورد آرايهها تعريف آرايه با محدوده منفي براي مثال: A: array [ -10.. 10 ] of Real ; تعريف آرايه از نوع منطقي ( Boolean ) براي مثال: A: array [1.. 20 ] of Boolean ;207
اسلاید 208: آرايههاي با محدوده منطقي: براي مثال A: array [ Boolean ] of integer;آرايهاي با محدوده کاراکتري: براي مثال A: array [ A.. Z ] of Real ;آرايهاي که براي اعضاي آن محدوديت قائل شويم براي مثال: A: array [ 1.. 20 ] of 1.. 30 208
اسلاید 209: جستجو و مرتبسازي ( Search and Sort ) يکي از مسائلي که در بحث طراحي الگوريتم بسيار مهم است، بحث مرتبسازي و جستجو مي باشد. منظور از جستجو اينست که يک مقداري را از يک ليست جستجو کنيم و منظور از مرتب سازي اينست که يک ليست مرتب از داده ها را ايجاد کنيم. حال تعدادی الگوريتم که براي مرتبسازي و جستجو بکار ميروند. را بررسي ميکنيم بخصوص زمانيکه ساختار داده ما يک آرايه باشد209
اسلاید 210: جستجو در آرايه در کل دو نوع عمل جستجو را در اين کتاب بررسي ميکنيم :جستجوي خطي Linear search جستجو دودويي Binary search 210
اسلاید 211: جستجوي خطي Linear search در جستجوي خطي عبارت مورد جستجو را نخست با اولين عضو آرايه مقايسه ميکنيم، اگر برابر بود عمل جستجو با موفقيت همراه بوده و عمل جستجو خاتمه مييابد در غير اينصورت روند را ادامه داده و عبارت مورد جستجو را بترتيب با عضو دوم، سوم ... مقايسه ميکنيم تا اينکه حالت تساوي حاصل شود و اگر اين حالت حاصل نشد، عباريت مورد جستجو در ليست قرار ندارد.211
اسلاید 212: قطعه برنامه زير را مي توان در حالت کلي براي جستجوي خطي بکار برد:Flag: = True ;i: = 0 ;While ( i < = N ) and ( flag ) Do Begin i: = i + 1 ; if A [ i ] = x Then Begin Index: = i ; Flag: = false ; End ; End ;If flag Then Writeln ( The Element is found )Else Writeln ( The Element is not found ) ;212
اسلاید 213: جستجو دودويي Binary search درجستجوي دودوئي ليست اوليه بايدمرتب باشد. براي جستجو در چنين آرايهاي نخست انديس وسط آرايه را پيدا ميکنيم و عنصر واقع در اين انديس را با عبارت مورد جستجو مقايسه ميکنيم و حالات زير ممکن است حاصل شود:(Low انديس ابتداي آرايه و upper انديس آخرين عناصرآرايه و middle انديس عنصر وسط ميباشد.) 213
اسلاید 214: if A [ middle ] < X Then حالت اول : در اينصورت Low : = middle و مقدار جديد middle را که عبارتست از:Middle : = ( low + middle ) / 2 214
اسلاید 215: if A [ middle ] < X Then حالت دوم : در اينصورت upper : = middle و مقدار جديد middle را که عبارتست از:Middle : = ( low + middle ) / 2 215
اسلاید 216: if A [ middle ] = X Then حالت سوم : در اينصورت Write ( The Eiement is found ) Low < upper در صورتي که حالتهاي الف يا ب اتفاق بيفتد، عمل جستجو را تا زمانيکهمي باشد ادامه ميدهيم و در هر مرحله که حالت سوم رخ دهد عمل جستجو خاتمه مييابد.216
اسلاید 217: مرتبسازي براي مرتبسازي دادهها روشهاي متفاوتي وجود دارد . تفاوت روشهاي مرتبسازي در زمان اجراي آنها مي باشد. در حالت کلي با توجه به تعداد وروديها (داده ها) و نوع مسئله مرتبسازي مي توان از انواع روشهاي مرتبسازي استفاده نمود.حال بعضي از روش هاي مرتب سازي عمومي را بررسي ميکنيم. مرتبسازي حبابي ( Bubble sort ) مرتبسازي انتخابي ( Selection sort )217گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 218: مرتبسازي حبابي ( Bubble sort ) سادهترين روش مرتبسازي روش مرتبسازي حبابي ميباشد. يکي از خصوصيات بارز اين نوع مرتبسازي اين است که فهم آن ساده بوده و برنامهنويسي آن به سهولت انجام مي گيرد.مرتبسازي حبابي نخست عنصر اول و دوم را با هم مقايسه ميکند و در صورت نياز، آنها را جابجا ميکند، سپس عنصر دوم و سوم را مقايسه ميکند. اين عمل را تا زمانيکه به انتهاي آرايه نرسيده تکرار ميکند، در پايان مرحله اول بزرگترين عنصر در آخرين خانه آرايه قرار ميگيرد. در مرحله دوم از خانه اول تا خانه N – 1 عمل بالا را انجام ميدهد. اين روند را تا زمانيکه تمام عناصر آرايه مرتب نشدهاند ادامه ميدهد و در نهايت يک ليست مرتب شده بصورت صعودي در خروجي توليد ميشود. 218گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 219: For i: = 1 to n do For j: = 1 to n - 1 do If x [ j ] > x [ j + 1 ] Then Begin Temp: = x [ j ] ; X [ j ]: = x [ j + 1 ] ; X [ j + 1 ]: = temp ; End ; تعداد مقايسهها در اين روش بصورت زير محاسبه ميشود: n – 1 + n – 2 + … + 1 = N(N-1)/2219گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 220: مرتبسازي انتخابي ( Selection sort )در اين روش مرتبسازي نخست کوچکترين عنصر را در کل آرايه پيدا کرده در خانه اول آرايه قرار ميدهيم سپس عنصر کوچکتر بعدي را يافته در خانه دوم قرار ميدهيم اين روند را تا زمانيکه کل آرايه مرتب نشده ادامه ميدهيم220
اسلاید 221: For i: = 1 to n doBegin Min: = x [ i ] ; Index: = i ; For j: = i +1 to n do If x [ j ] < Min Then Begin Min: = x [ j ] ; Index: = j ; End ; { find The smallest Element } X [ index ]: = x [ i ] ; X [ i ]: = Min ; { swap Minimum With other Element }End ; { end of selection sort }قطعه برنامهاي که براي مرتبسازي انتخابي ميتوان نوشت بصورت زير ميباشد:221
اسلاید 222: چند مثال در مورد آرايهها مثال : برنامهاي بنويسيد که يک عدد صحيح از ورودي دريافت کرده سپس اعداد اول قبل از آن را توليد و در آرايه قرار دهد.Var a : array [ 1 .. 50 ] of integer ; i , j , N : integer ; k : Byte ; flag : Boolean ;Begin Write ( Enter A Number : ) ; Readln ( N ) ; a [1] : = 2 ; a [2] : = 3 ; flag : = True ; k : = 2 ; 222
اسلاید 223: For i : = 4 to N do Begin For j : = 2 to ( i div 2 ) do If ( i mod j ) = 0 Then Flag : = false ; If flag Then Begin K : = k + 1 ; A [ k ] : = i ; End ; Flag : = Ture ; End ; { end of for } Writeln ( The prime Numbers before N ) ; For j : = 1 to K do Writeln ( a [ i ] : 5 ) ;End . { End of program }223
اسلاید 224: مثال : برنامهاي بنويسيد که يک ماتريس 3*3 را از ورودي دريافت کرده و مجموع هر سطر را انتهاي همان سطر به همراه خود ماتريس در خروجي چاپ نمايد.Var a: array [ 1.. 3 , 1.. 3 ] of Real ; sum: Real ; i , j: byte ;Begin Writeln ( Enter Array ) ; for i: = 1 to 3 do for j: = 1 to 3 do Read ( a [ i , j ] ) ; Writeln ; Writeln ( The result matrix ) ; For i: = 1 to 3 do Begin For j: = 1 to 3 do Begin Write ( a [ i , j ]: 8: 2 ) ; Sum: = sum + a [ i , j ];{ calculate sum of any row } End ; Writeln ( sum: 8: 2 ) ; Sum : = 0 ; End ;End. { End of program }224
اسلاید 225: مثال : برنامهاي بنويسيد که از ادغام دو آرايه مرتب ،آرايه سومي بنام L3 ايجاد کند بطوريکه آرايه سوم مرتب باشد.Var L1 , L2: array [ 1.. 30 ] of integer ; L3: array [ 1.. 60 ] of integer ; M , N , i , j , k: Byte ;Begin Write ( Enter Dimention of arrays: ) ; Readln ( N , M ) ; Writeln ( Enter first Array ) ; for i: = 1 to N do Read ( L1 [ i ] ) ; Writeln ( Enter second Array ) ; for j: = 1 to M do Read ( L2 [ i ] ) ; 225
اسلاید 226: i: = 1 ; j: = 1 ; k: = 1 ; while ( i < = N ) and ( j < = M ) Do Begin If L1 [ i ] > L2 [ j ] Then Begin L3 [ k ]: = L2 [ j ] ; J: = j + 1 ; End Else if L1 [ i ] < L2 [j ] Then Begin L3 [ k ]: = L1 [ i ] ; i: = i + 1 ; End Else Begin L3 [ k ]: = L1 [ i ] ; k: = k + 1 ; L3 [ k ]: = L2 [ j ] ; i: = i + 1 ; j: = j + 1 ; end ; k: = k + 1 ; End ; { end of while }226
اسلاید 227: if i < = N Then for p: = i to n do Begin L3 [ k ]: = L1 [ p ] ; k: = k + 1 ; end Else if j < = M Then for p: = j to M do Begin L3 [ k ]: = L2 [ p ] ; k: = k + 1 ; end ; Writeln ; Writeln ( The result of merge is ) ; for i: = 1 to k - 1 do Begin Write ( L3 [ i ] : 5 ) ; If ( i mod 10 ) = 0 Then Writeln ; End ; { end of merge }End. { End of program }227
اسلاید 228: مثال : برنامه ای بنويسيد که يک جمله حداکثر 80 کاراکتري را از ورودي دريافت کرده وسپس کاراکترهاي فضاي خالي را با کاراکترستاره جايگزين کند. Var state: array [ 1.. 80 ] of char ; i , N : integer ;Begin Writeln ( Enter Number of sentence: ) ; Readln ( N ) ; Writeln ( Enter sentence ) ; for i: = 1 to N do Read ( state [ i ] ) ; for i: = 1 to N do if state [ i ] = ‘ Then state [ i ]: = * ; Writeln ; Writeln ( The output sentence ) ; for i: = 1 to N do Write ( state [ i ] ) ; End. { End of program } 228
اسلاید 229: تمرينات - کداميک از دستورات زير در مورد اعلان زير صحيح است: الف- a [ A ]: = Z ب- a [ a ]: = A ج- a [ A ]: = 1 د- a [ I ]: = 12 ح- a [ i ]: = 12 a: array [ A .. Z ] of char 229
اسلاید 230: a: array [ -20.. 10 ] of char a: array [ -20.. -20 , 0.. -20 ] of A .. Z a: array [ Booleam ] of char a: array [ 1.. 10 , A .. Z ] of integer - تعداد بايتهايي که هر کدام از اعلانهاي زير اشغال مي کنند را محاسبه نمائيد.230
اسلاید 231: تمرينات برنامهنويسی برنامهاي بنويسيد که که يک آرايه حداکثر 50 عنصري را از ورودي دريافت کرده و سپس عناصري از آرايه که اول هستند را با صفر جايگزين کرده آرايه حاصل را در خروجي چاپ کند.برنامهاي بنويسيد که عددي از ورودي دريافت کرده سپس آن را به عامل هاي اول تجزيه نمايد و حاصل را بصورت زير در خروجي چاپ نمايد:براي مثال: 21 = ( 3 ^ 1 ) * ( 7 ^ 1 ) 231
اسلاید 232: برنامهاي بنويسيد که يک عدد از ورودي دريافت کرده سپس در صورت وجود صفرهاي آن را حذف نموده، نتيجه را در خروجي چاپ نمايد.برنامه اي بنويسد که يک ماتريس 5 * 5 را از ورودي دريافت کرده سپس مجموع هر سطر را انتهاي همان سطر و مجموع هر ستون را در انتهاي همان ستون چاپ نمايد.232
اسلاید 233: برنامهاي بنويسيد که يک ماتريس حداکثر 10 * 10 را از ورودي دريافت کرده ماتريس هم بر حسب ستون و هم بر حسب سطر مرتب نموده به همراه ماتريس اوليه در يک سطر چاپ نمايد.برنامهاي بنويسيد که يک آرايه 200 عنصري ازنوع صحيح که 150 عنصرمرتب درآن قرار ميگيرد را از ورودي دريافت کرده سپس آرايه دومي با 50 عنصر را از ورودي بخواند.233
اسلاید 234: فصل 9هاي كتابخانه ای توابع و روالهدفهاي كليشناخت توابع و روالهاي استاندارد براي نوعهاي صحيحشناخت ساختار تابع و روال شناخت توابع و روالهاي استاندارد براي نوعهاي اعشاري و كاركتريشناخت توابع و روالهاي استاندارد رياضي234
اسلاید 235: ÷ هدفهاي رفتاري توابع و روالهاي استاندارد را در صورت نياز در برنامه استفاده كند. ساختار توابع و خروجيهاي آنها را تشخيص داده و در برنامه خود از آنها استفاده كند. ساختار روالها و خروجيهاي آنها را تشخيص داده و نتايج حاصل از آنها را مورد استفاده قرار دهد.توابع رياضي را براي محاسبه عبارت رياضي در برنامه بكار ببرد.دانشجو پس از مطالعه اين فصل بايد بتواند:235
اسلاید 236: ساختار تابع در کل هدف تابع اينست که متغير يا متغيرهايي را بعنوان پارامتر از برنامه اصلي دريافت کرد. عمل خاصي را روي پارامترها انجام داده و نتيجه را به برنامه اصلي برگرداند. شکل کلي فراخواني توابع در برنامه اصلي بصورت زير ميباشد:ساختار تابع: Function Name ( parameters ) : Type نوع تابع پارامترها اسم تابع کلمه ذخيره شده236
اسلاید 237: توابعي براي اعداد صحيح و اعشاري تابع Abs هدف: باز گرداندن قدر مطلق ( absolute ) پارامتري که به آن ارسال ميشود: Function Abs ( x: Integer ): Integer ; Function Abs ( x: Real ): Real ; اين تابع يک عبارت از نوع حقيقي يا صحيح را بعنوان آراگون دريافت کرده سپس قدر مطلق آن را محاسبه و حاصل را برگرداند.237
اسلاید 238: مثال : Var f : Real ; I : Integer ; Begin F : = Abs ( - 191.15 ) ; I : = Abs ( - 171 ) ; Writeln ( f = , f : 8 : 2 , I = , I ) ; End . : خروجي حاصل F = 191.15 I = 171 238
اسلاید 239: تابع Sin هدف: باز گرداندن سينوس يک عدد از نوع اعشاري شکل تابع: Function Sin ( X: Real ): Real ; X يک عبارت يا عدد از نوع اعشاري بوده و حاصل مقدار سينوس X ميباشد.239
اسلاید 240: مثال : Var X : Real ; Begin X : = sin ( 10 ) ; Write ( sin ( 10 ) = , x :8 : 2 ) ;End.240
اسلاید 241: تابع Cos هدف: باز گرداندن کسينوس يک عدد از نوع اعشاري.شکل تابع: Function cos ( X: Real ): Real ; X يک عبارت با عدد از نوع اعشاري بوده و حاصل مقدار کسينوس X ميباشد.241
اسلاید 242: Var X : Real ; Begin X : = cos ( 10 ) ; Write ( cos ( 10 ) = , x : 8 : 2 ) ;End . مثال : 242گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 243: تابع ArcTanهدف: بازگرداندن آرک تانژانت يک عدد از نوع اعشاريشکل تابع: Function ArcTan ( X: Real ): Real ; X يک عبارت يا عدد از نوع اعشاري بوده حاصل مقدار آرک تانژانت X ميباشد.243گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 244: Var X : Real ; Begin X : = ArcTan ( 10 ) ; Write ( ArcTan ( 10 ) = , x : 8 : 2 ) ;End . توجه: در صورتي که در توابع مثلثاتي زاویه از نوع درجه ارائه شود ميتوان با فرمول زير معادل راديان آن را محاسبه کرد: Real = Dey * 3.14159 / 180 244گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 245: تابع Exp هدف: عدد نپر ( e = 2.71828 … ) را به توان يک عدد ميرساند.شکل تابع: Function Exp ( X: Real ): Real ; X عبارت يا متغيري از نوع اعشاري بوده و حاصل تابع نيز يک عدد اعشاري ميباشد اين تابع مقدار eبه توان X را محاسبه ميکند.245گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 246: Var X : Real ; i : integer ; Begin For i : = 1 to 10 do Begin X : = exp ( i ) ; Writeln ( x : 8 : 2 ) ; End ;End . مثال : 246
اسلاید 247: تابع frac هدف: قسمت اعشاري يک عدد اعشاري را برميگرداند.شکل تابع: Function frac ( X: Real ): Real ; X عددي از نوع اعشاري و حاصل تابع يک عدد اعشاري که قسمت اعشاريعدد X است مي باشد و بعبارت ديگر اين تابع قسمت اعشاري عدد ورودي را به عنوان خروجي باز ميگرداند.247
اسلاید 248: Var Y , X : Real ; Begin X : = frac ( 24.769 ) ; Y : = frac ( - 12.75 ) ; Write ( x = , 8 : 3 , y = , 8 : 2 ) ; End .مثال : خروجي : X = 0.769 Y = - 0.75 248
اسلاید 249: تابع Int هدف: قسمت صحيح يک عدد اعشاري را برميگرداند.شکل تابع: Function Int ( X: Real ): Real ; X يک عبارت يا متغير از نوع اعشاري و خروجي تابع فيزيک عدد اعشاري است اين تابع مقدار صحيح يک عدد اعشاري در خروجي نشان ميدهد. 249
اسلاید 250: Var y , x : Real ; Begin X : = Int ( 2.87 ) ; { 2.0 } Y : = Int ( - 8.76 ) ; { - 8.0 } End . مثال : 250
اسلاید 251: تابع Lnهدف: محاسبه لگاريتم يک عدد اعشاري در مبناي e.شکل تابع: Function Ln ( X: Real ): Real ; X يک عبارت يا متغير ازنوع اعشاري بوده وحاصل تابع فيزيک عدداعشاري ميباشد.251
اسلاید 252: Var X : Real ; Begin X : = Ln ( 2.87 ) ; { x = 3.73767 } Write ( x = , x : 10 : 5 ) ; End . مثال : 252
اسلاید 253: تابع Odd هدف: فرد بودن عدد صحيح را بررسي مي کند.شکل تابع: Function odd ( X: logint ): Booleam ; X يک عبارت از نوع longint است و تابع ،فرد بودن عبارت را بررسي مي کند اگر مقدار خروجي تابع True باشد X فرد است و اگر مقدار خروجي تابع False باشد X فرد نيست. 253
اسلاید 254: Var i : integer ; Begin For i : = 1 to 100 do If odd ( i ) Then Writeln ( i = , j : 3 ) ; End . مثال : 254
اسلاید 255: تابع Ord هدف: غالباً براي پيدا کردن کد اسکي يک متغير کاراکتري بکار ميرود.شکل تابع: Function Ord ( x: char ): Longint ; عبارت x از نوع کارکتري را بعنوان پارامتر دريافت و کد اسکي آن را برمي گرداند. اگر x از نوع اسکالر باشد تابع بعنوان خروجي ترتيب قرار گرفتن x را در مجموعه اي که ابتدا به عنوان اسکالر اعلان شده، باز ميگرداند.255
اسلاید 256: Var ch : char ; Begin For ch : = A to Z do Write ( ord ( ch ) : 5 ) ; End .مثال : کد اسکي A تا Z را درخروجي چاپ ميکند کد اسکي A عدد 65 ميباشد.خروجی :256
اسلاید 257: تابع pi هدف: عدد پي را بر ميگرداند.شکل تابع: Function pi: Real ; اين تابع براي بازگرداندن عددي پي ( 3.141592 … ) مورد استفاده قرار ميگيرد.257
اسلاید 258: تابع Pred هدف: مقدار قبل مقدار پارامتر را بر مي گرداند.پارامتر تابع مي تواند از هر نوع باشد و با توجه به نوع پارامتر تابع نياز از هم نوع ميباشد و خروجي تابع مقدار قبل از x ميباشد.Function pred ( x ): < same type of parameter > ; شکل تابع: 258
اسلاید 259: Ch: = pred ( d ) ; { ch = c }i: = pred ( 15 ) ; { i = 14 }flag: = pred ( True ) ; { flag = false } i: = pred ( - 30 ) ; { i = - 31 } مثال : 259
اسلاید 260: تابع Random هدف: براي توليد عدد تصادفي شکل تابع: Function Random: Real ; Function Random ( x: word ): word ; اگر تابع Random به شکل يک يعني بدون آرگومان مورد استفاده قرار گيرد يک عدد تساوي از نوع اعشاري بين صفر و يک توليد مي کند و اگر به شکل دو بکار رود باعث توليد يک عدد تصادفي از نوع word که بزرگتر يا مساوي صفر و کوچکتر از x است خواهد شد.260
اسلاید 261: Var i : integer ; Begin For i : = 1 to 10 do Begin Writeln ( Random : 8 : 7 ) ; Writeln ( Random ) 20 ( : 8 ) ; End ;End . مثال : خروجی : 10 عدد تصادفي بين صفر و يک، و 10 عدد تصادفي بين 0 و 40 توليد نمايد. 261
اسلاید 262: تابع Round هدف: براي گرد کردن اعداد اعشاري بکار مي رود.شکل تابع: Function Round ( x: Real ): Longint ; X يک عبارت يامتغير اعشاري بوده وخروجي تابع يک عدد ازنوع Longint ميباشد که نتيجه گرد کردنX ميباشد. اين تابع X را به نزديکترين مقدارصحيح گرد ميکند. 262
اسلاید 263: i : = Round ( 57.4 ) { i = 57 } i : = Round ( 59.5 ) { i = 60 }i : = Round ( 12.7 ) { i = 13 }i : = Round ( 12.25 ) { i = 12 } i : = Round ( 17.75 ) { i = 18 } i : = Round ( 17.45 ) { i = 18 } i : = Round ( -2.5 ) { i = -3 } مثال : 263
اسلاید 264: تابع sqr هدف: براي محاسبه مجذور يک عدد صحيح يا اعشاري بکار ميرود.شکل تابع: Function sqr ( x: Integer ): Integer ; Function sqr ( x: Real ): Real ; X عبارتي يا متغييري از نوع صحيح يا اعشاري بوده و خروجي تابع فيزيک يک عدد صحيح يا اعشاري مي باشد اين تابع مجذور X را بعنوان خروجي بر ميگرداند.264
اسلاید 265: Var i : integer ; Begin For i : = 1 to 10 do Writeln ( I ^ 2 = , sqr ( I ) ) ; End . مثال : 265
اسلاید 266: تابع sqrt هدف: براي محاسبه جذر يک عدد بکار ميرود.شکل تابع: Function sqrt ( x: Real ): Real ;X يک عبارت از نوع اعشاري بوده و خروجي تابع فيزيک عدد اعشاري ميباشد اين تابع جذر X را بعنوان خروجي بر ميگرداند.266
اسلاید 267: Var Y , X : Real ; Begin Y : = sqrt ( 64 ) ; { y = 8 } Z : = sqrt ( 0.16 ) ; { z = 0.4 } Write ( x = , x : 8 : 2 , y = , y : 8 : 2 ) ; End .مثال : 267
اسلاید 268: تابع succ هدف: مقدار بعد از مقدار فعلي را برمي گرداند.شکل تابع: Function succ ( x ): same type of parameters ; X يک عبارت از نوع صحيح، اولين و غيره بوده و خروجي تابع نيز از همان نوع X مي باشد اين تابع مقدار بعد از X را بعنوان خروجي بر ميگرداند.268
اسلاید 269: ch : = suce ( a ) { ch = b } ch : = suce ( A ) { ch = B } i : = suce ( 15 ) { i = 16 } flag : = suce ( false ) { flag = True }flag : = suce ( True ) { تعريف نشده } مثال : 269
اسلاید 270: تابع Trunc هدف: قسمت صحيح يک عدد اعشار را بر ميگرداند. شکل تابع: Function Trunc ( x: Real ): Longint ;X يک عبارت يا متغير از نوع اعشاري بوده و خروجي تابع يک عدد از نوع Longint ميباشد. اين تابع قسمت صحيح عدد اعشاري X را بعنوان خروجي بر ميگرداند.270
اسلاید 271: Var x , i , j : Longint ; Begin i : = trunc ( 12.5 ) ; { i = 12 } j : = trunc ( 12.4 ) ; { i = 12 } k : = trunc ( 13.5 ) ; { k = 13 } Writeln ( I = , i : 5 , j = , j : 5 , k = , k : 5 ) ; End . مثال : 271
اسلاید 272: توابع از نوع کاراکتري در اين بخش توابعي را بررسي مي کنيم که خروجي آنها از نوع کاراکتري باشد. تابع chr هدف: معادل کاراکتري يک کد اسکي را بر ميگرداند.شکل تابع: Function chr ( X: Byte ): char ; X يک عبارت يا متغير از نوع بايت بوده و خروجي تابع يک کارکتر ميباشد. اين تابع کد اسکي را دريافت کرده و معادل کارکتري آن را بر ميگرداند.272
اسلاید 273: Var i : Byte ; Begin For i : = 65 to 91 do Writeln ( chr ( I ) ) ; End . مثال : خروجی :برنامه بالا حروف A تا Z را در خروجي چاپ ميکند.273
اسلاید 274: تابع Upcase هدف: براي تبديل يک کاراکتر به حرف بزرگتر بکار ميرود.شکل تابع: Function Upcase ( ch: char ): char ; ch يک عبارت يا متغير از نوع کاراکتر بوده و خروجي تابع فيزيک کاراکتري باشد اين تابع حرف کوچک را به حرف بزرگ تبديل کرده و بعنوان خروجي حروف بزرگ را بر ميگرداند.274
اسلاید 275: مثال : Var Sent: array [ 1.. 80 ] of char ; i , N: Byte ;Begin Write ( enter Numbers: ) ; Readln ( N ) ; For i: = 1 to N do Read ( Sen [ i ] ) ; Writeln ; For i: = 1 to N do If ( sen [ i ] > = a ) and ( sen [ i ] < = z ) Then ; sen [ i ]: = Upcase ( sen [ i ] ) ; Writeln ( Out pot of program ) ; For i: = 1 to N do Writeln ( sen [ i ] ) ;End. { End of program } 275
اسلاید 276: روالهاي استاندارد در بخش هاي قبل ديديد که در توابع پارامترها به تابع ارسال مي شود و تابع نيز مقداري را بعنوان خروجي برميگرداند روالها نيز مشابه توابع عمل ميکنند با اين تفاوت که خروجي روالها از طريق پارامتر برميگردانده ميشود يا اعلان به سيستم عامل ميباشد. بنابراين روالها بدون نوع هستند. شکل کلي روالها بصورت زير ميباشد:Procedure Name ( Parameturs ) ; پارامترهاي روال اسم روال کلمه ذخيره شده276
اسلاید 277: روال Dec هدف: يک يا چند واحد از پارامتر ارسالي کم مي کند.شکل روال: Procedure Dec ( Var X: longint ) ; Procedure Dec ( Var X: longint , N: longint ) ;X يک متغير از نوع longint و بصورت متغيري ميباشد اين روال يک واحد از پارامتر ارسالي کم ميکند.277
اسلاید 278: Var N : integer Begin N : = 1201 ; Dec ( N ) ; { N = 1200 } Writeln ( N ) ; Dec ( N , 200 ) ; { W = 1000 } Writeln ( N ) ; End .مثال : 278
اسلاید 279: روال Exit هدف: کنترل برنامه را به خارج از بلوک جاري منتقل مي کند.شکل روال: Procedure Exit ; اين روال باعث مي شود که کنترل برنامه از بلوک جاري خارج شود. اگر اين روال در برنامه اصلي بکار رود باعث خروج از برنامه ميشود. و اگر در يک روال يا تابع بکار رود باعث خروج از روال يا تابع شده و کنترل برنامه به برنامه اصلي منتقل ميشود.279
اسلاید 280: Var i , j : integer ;Begin i : = 100 ; j : = 20 ; Dec ( i , j ) ; Write ( i ) ; Exit ;End . مثال : خروجی :بعد از اتمام عمليات تابع Exit باعث خروج از برنامه مي شود.280
اسلاید 281: روال Halt هدف: خاتمه دادن به اجراي برنامه شکل روال: Procedure Halt ; اين روال باعث خاتمه اجراي برنامه شده و کنترل برنامه به سيستم عامل بر ميگردد.281
اسلاید 282: روال Inc هدف: اضافه کردن يک يا چند واحد به يک متغير شکل تابع:X يک عبارت يا متغير از نوع Longint مي باشد اين روال به مقدار متغير x يک يا چند واحد اضافه ميکند.Procedure Inc ( Var X: longint ) Procedure Inc ( Var X: longint , N: longint ) ; 282گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 283: Var N , i , j : integer ; Begin i : = 100 ; j : = 200 ; N : = 10 ; inc ( i ) ; { i = 101 } inc ( j , N ) ; { j = 210 } Writeln ( i = , i , j = , j ) ; End .مثال : 283گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 284: روال Randomize هدف: باعث تغير نحوه توليد اعداد تصادفي مي شود.شکل روال: Procedure Randomize ; وقتي در برنامه از تابع Random استفاده ميکنيم اعداد تصادفي توليد شده در اجراهاي مختلف يکسان مي باشد براي جلوگيري از اين وضعيت قبل از استفاده از تابع Random روال Rondomize را بکار ميبريم. تا باعث توليد اعداد تصادفي متفاوت در اجراهاي مختلف گردد.284
اسلاید 285: Var i : word ;Begin Randomize; For i : = 1 to 10 do Writeln ( Random ( 50 ) ) ; End .مثال : 285گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 286: حل چند مثال برنامهنويسي مثال : برنامه اي بنويسيد که يک ماتريس مربع ( n < = 10 ) n * n از مقادير صحيح را از ورودي دريافت کرده آنگاه عناصري که مربع کامل نيستند را صفر کرده و در نهايت ماتريس حاصل را در خروجي چاپ مي کند.Var n , i , j : integer a : array [ 1 .. 10 , 1 .. 10 ] of integer ;Begin Write ( enter Number : ) ; For i : = 1 to N do For j : = 1 to N do Read ( a [ i , j ] ) ; 286
اسلاید 287: For i : = 1 to N do For j : = 1 to N do If a [ i , j ] sqr ( Trunc (sqrt (Abs ( a[ i , j ] ))) ) < > 0 Then a [ i , j ] : = 0 ; Writeln ( The oupput Mafrix ) ; For i : = 1 to N do Begin For j : = 1 to N do Write ( a [ i , j ] : 5 ) ; Writeln ; End ;End . { End of program } 287
اسلاید 288: مثال : برنامهاي بنويسيد که يک جمله از ورودي دريافت کرده سپس حروف بزرگ جمله را به حروف کوچک تبديل نمائيد.Var sen : array [ 1 .. 80 ] of char ; Ch : char ; i : word ; Begin Write ( enter sentence ) ; Repeat Read ( sen [ i ] ) ; Inc ( i ) ; Until sen [ i ] = . ; Writeln ; n : = Dec ( i ) ; For i : = 1 to n do If ( sen [ i ] > = A ) and ( sen [ i ] < = B ) Then sen [ i ] = chr ( ord ( sen [ i ] ) + ( ord ( a ) – ord ( A )) ) Writeln ( The result sentence ) ; For i : = 1 to n do Write ( sen [ i ] ) ;End . { End of program } 288
اسلاید 289: تمرينات خروجي تمرينات زير را تعيين کنيد:a) Var i , j : integer Begin i : = 100 ; j : = 20 ; inc ( i ) ; Dec ( j , 10 ) ; inc ( i , j ) ; Writeln ( i : 5 , j : 5 ) ; End .b) Var y : integer ; Begin y : =Round ( 18.31 ) MoD 5 ; Writeln ( y ) ; End . 289
اسلاید 290: .2خروجي دستورات زير را محاسبه نمائيد:a) Ch: = A ; Ch: = chr ( ord ( ch ) + 3 ) ; Write ( ch ) ; b) X: = 12 ; Succ ( x ) ; Ch: = B ; Pred ( ch ) ; Write ( x , ch ) ; 290
اسلاید 291: تمرينات برنامهنويسي 1- برنامهاي بنويسيد که تعداد 1000 شماره حساب بانکي 7 رقمي بطور تصادفي بين 5119432 و 9981711 را توليد کرده و چاپ کند.2- برنامه اي بنويسيد تا تعداد 38 عدد تصادفي صحيح بين 10 تا 99 راتوليد کرده، سپس آن را در خروجي به شکل مربع وسط صفحه نمايش چاپ کند.3- برنامهاي بنويسيد که يک عدد 20 رقمي از ورودي دريافت کرده آن را در يک عدد تک رقمي ضرب نموده و حاصل را در خروجي چاپ نمائيد.291
اسلاید 292: فصل 10(String) متغيرهاي كاراكتري و رشتههاهدفهاي كلي بررسي ساختار آرايه هايي از نوع كاراكتر معرفي نوع دادة جديد به نام رشتهمقايسه آرايه اي از كاراكتر و رشته شناخت توابع و روالهاي استاندارد براي رشته ها 292
اسلاید 293: ÷ هدفهاي رفتاري آرايهاي از كاراكترها را در برنامه بكار ببرد. آرايهاي از كاراكترها را با رشته مقايسه كند. اسمي افراد و غيره را با استفاده از آرايهاي از رشته مرتب نمايد. توابع و روالهاي استاندارد مربوط به رشتهها را در برنامه خود بكار ببرد.دانشجو پس از مطالعه اين فصل بايد بتواند:293
اسلاید 294: متغيرهايي از نوع کاراکتر متغيرهاي کاراکتري ظرفيت پذيرش يک کاراکتر ( شامل يک رقم، يک حرف از حروف و يا يک کاراکتر ديگر ) را دارا ميباشند.: مقدار دهي اين متغير ها به صورت زير ميباشدch: = A ; اگر بخواهيم متغير هاي کاراکتري را از ورودي بخوانيم بايد دقت بيشتري به .خرج دهيم براي اينکه فضاهاي خالي کاراکتر محسوب مي شوند294
اسلاید 295: مثال : خروجي قطعه برنامه زير را تعيين کنيد. Ch: = A ;C: = a ;If ch = c Then Writeln ( equal ) Else Writeln ( Not equal ) ;خروجي حاصل از قطعه برنامه بالا بصورت زير است: Not equal295
اسلاید 296: درکل ميتوان کاراکترها را از لحاظ اردينال (مرتبه) بصورت زير دستهبندي کرد: 1- رقم ها بصورت زير مقايسه ميشوند: 0 < 1 < 2 < 3 < … < 9 رقمها از لحاظ کد اسکي پشت سر هم قرار گرفتهاند. 2- حروف بصورت زير مقايسه مي شوند: A < B < … < Z < … < a < b < … < z 296
اسلاید 297: متغيرهاي رشتهاي ( String ) تعريف: مجموعهاي از کاراکتر را يک رشته ناميده و متغير از نوع آن را يک متغير رشتهاي مينامند.اين متغير نيز مانند ساير متغيرها در قسمت تعاريف متغيرها ( Var ) معرفي ميشود. در تعريف يک متغير رشتهاي معمولاً طول آن را مشخص ميکنند. اگر طول تعيين نشود بطور قراردادي کامپايلر حداکثر طول را براي آن در نظر ميگيرد. حداکثر طول رشته 255 کاراکتر ميباشد.297
اسلاید 298: نحوه تعريف متغير رشته اي بصورت زير ميباشد: Name : string [ length ] طول رشته کلمه ذخيره شده اسم رشته 298
اسلاید 299: متغيرهاي رشتهاي را بصورت زير ميتوان مقداردهي کرد: Var S : string [ 10 ] ; . . .Begin . . S : = pascal ; Write ( s ) ; . . End .299
اسلاید 300: براي خواندن متغيرهايرشتهاي ازدستورRead يا Readln بصورت زيرميتواناستفاده کرد:Read ( s ) ; هنگام خواندن متغيرهاي رشتهاي اگر طول رشته ورودي از طول تعريف شده بيشتر باشد فقط به اندازه طول تعريف شده خوانده مي شود و اگر طول رشته ورودي کمتر از طول تعريف شده باشد، رشته ورودي در منتهياليه سمت چپ متغير رشتهاي قرار گرفته و بقيه متغير رشته اي بدون محتوا باقي مي ماند، 300
اسلاید 301: براي چاپ يک متغير رشتهاي نيز ازدستور Write يا Writeln ميتوان استفاده کرد: Write ( s ) ;مثال : برنامهاي بنويسيد که شماره دانشجوئي، اسم و فاميل دانشجوئي را از ورودي دريافت کرده سپس در خروجي نمايش دهد.301
اسلاید 302: Var Name , family: string [ 40 ] ; Id: longintBegin writeln ( Enter student number ) ; Readln ( Id ) ; writeln ( Enter Name ) ; Readln ( Name ) ; writeln ( Enter family ) ; Readln ( family ) ; writeln ( Id Name Family ) ; writeln ( Id: 7 , Name , Family ) ; End. 302
اسلاید 303: آرايهاي از رشته بصورت زير تعريف ميشود: Name : Array [ 1 .. length ] of string نوع رشته اي طول آرايه اسم آرايه 303
اسلاید 304: براي خواندن چنين آرايهاي بصورت زير عمل ميکنيم:For i : = 1 to 50 do Readln ( Name [ i ] ) ; براي نمايش آرايه در خروجي بصورت:For i: = 1 to 50 do Writeln ( Name [ i ] ) 304
اسلاید 305: مثال : برنامهاي بنويسيد که اسم 10 نفر از ورودي دريافت کرده و آنها را برحسب حروف الفبا مرتب نمايد. Var Name : Array [ 1 .. 10 ] of string [ 10 ] ; string [ 10 ] ; temp : i , j : Byte;Begin writeln ( Enter Ten Names ) ; for i : = 1 to 10 do Readln ( Name [ i ] ) ; for j : = 1 to 9 do for j : = i +1 to 10 do if Name [ i ] > Name [ j ] Then Begin Temp : = name [ i ] ; Name [ i ] : = Name [ j ] ; Name [ j ] : = temp ; End ; { sort Algrithm } writeln ( The sorted list ) ; for i : = 1 to 10 do writeln ( Name [ i ] ) ; end . { End of program }305
اسلاید 306: مثال : برنامهاي بنويسيد که اسم، فاميلي و شماره دانشجوئي حداکثر 50 دانشجو را از ورودي دريافت نمايد.سپس با خواندن اسمي از ورودي، ساير اطلاعات اسم خوانده شده را در صورت وجود در خروجي نمايش دهد.Var Name , Family : array [ 1 .. 50 ] of string [ 30 ] ; id : array [ 1 .. 50 ] of longint ; Nam : string [ 30 ] ; 306
اسلاید 307: Begin write ( Enter Number : ) ; Readln ( N ) ; for i : = 1 to N Do Begin write ( Enter Name : ) ; Readln ( Name ) ; write ( Enter family : ) ; Readln ( family ) ; write ( Enter student Number : ) ; Readln ( Id ) ; end ; writeln ; write ( Enter Name : ) ; Readln ( Nam ) ; i := 0 ; flag : = Ture ;307
اسلاید 308: while ( i < = n ) and flag Do Begin inc ( i ) ; if Name [ i ] = Nam then flag : = false ; end ; If flag then writeln ( Not found ) ; Else Begin writeln ( Id Name family ) write ( Id , Name : 30 , family : 30 ) ; end ; End . { End of program } 308
اسلاید 309: توابع و روالهاي کتابخانهاي براي متغيرهاي رشتهاي تابع Concat هدف: الحاق دو يا چند رشته به يکديگر شکل تابع: Function concat ( S1 , S2 , … , Sn ): string ; Sn , … , S2 , S1 متغيرهايي از نوع رشته هستند و خروجي تابع نيز يک متغير رشتهاي است اين تابع دويا چندتابع را به هم پيوند داده، و رشته حاصل را برميگرداند.309
اسلاید 310: : مثال Var Str3 , str1 , str2 : string Begin Str1 : = Pascal ; Str2 : = Book ; Str3 : = Concat ( Str1 , Str2 ) ; write ( Str3 ) ; End.با اجراي برنامه فوق، عبارت Pascal Book نشان داده خواهد شد.310
اسلاید 311: تابع Copy هدف: استخراج يک زير رشته ( substring ) از يک رشته شکلتابع:Function copy (S:string ; Index:Integer; count: Integer): string; S يک عبارت يا متغير رشته اي که مي خواهيم از آن زير رشته اي که نقطه شروع آن Index و طول آن Count مي باشد جدا کنيم. لذا زير رشته حاصل، يک رشته که طول آن به اندازه Count است، ميباشد.311
اسلاید 312: : مثال Var Str , str1: string ; Begin Str: = Pascal Book ; Str1: = Copy ( Str , 7 , 4 ) ; { Str1 = Book } write ( Str1 ) ; End. 312
اسلاید 313: روال Delete هدف: حذف يک زير رشته از يک رشته شکلروال:Procedure delete (Var str: string; Index:integer;length: integer ) ; Str يک متغر رشته اي، Index يک عبارت يا متغير صحيح و Length نيز يک عبارت يا متغير صحيح ميباشد. روال Delete يک زير رشته را از يک رشته حذف ميکند اين روال از محل Index بطول Length از رشته Str حذف ميکند و رشته حاصل بعنوان خروجي روال برگردانده ميشود.313
اسلاید 314: : مثال Var St : string ; Begin St: = Pascal.Book ; Delete ( St , 7 , 5 ) ; writeln ( St ) ; End. خروجي حاصل از برنامه فوق Pascal ميباشد.314
اسلاید 315: روال Insert هدف: درج ( وارد کردن ) يک رشته در يک رشته ديگر شکل روال: Procedure Insert ( Str1: string ;Var Str2: string ; Index: Byte ) ; Str1 عبارت يا متغير رشته اي، Str2 متغير رشته اي و Index عبارتي عدد از نوع صحيح ميباشد. روال Insert ، رشته Str1 رادر رشته Str2 از خانه Index درج ميکند و رشته حاصل خروجي روال خواهد بود. 315
اسلاید 316: : مثال Var Str1 , str2: string ; Begin Str1: = Pascal 7 ; Str2: = Turbo ; Insert ( Str1 , Str2 , 6 ) ; End. خروجي حاصل از برنامه بالا Turbo pascal 7 خواهد بود.316
اسلاید 317: تابع Length هدف: محاسبه طول رشته شکل تابع: Function length ( Str: string ): Integer ; Str يک عبارت رشته اي بوده و خروجي تابع يک عدد صحيح ميباشد. اين تابع طول رشته ورودي را محاسبه و بعنوان خروجي بر ميگرداند.317
اسلاید 318: : مثال Var St: string ; n: integer ; Begin St: = Turbo Pascal 7 ; n: = length ( S4 ) ; { n = 14 } Write ( The length of string is: , n ) ; End. 318
اسلاید 319: تابع Pos هدف: براي جستجوي يک رشته داخل رشته ديگر شکل تابع: Function pos ( Str1: string ; Str2: string ): Byte ; Str1 يک عبارت يا متغير رشته اي و Str2 نيز يک عبارت يا متغير رشته اي ميباشد و خروجي تابع يک عدد صحيح مي باشد. اين تابع محل اولين وقوع رشته Str1 در رشته Str2 را بعنوان خروجي بر ميگرداند.319
اسلاید 320: : مثال Var Str1 , Str2: string ; i: integer ; Begin Str1: = Book ; Str2: = Pascal Book ; i: = Pos ( Str1 , Str2 ) ; { i = 8 } Write ( i = , i ) ; End. نکته: توجه کنيد که اگر عمل جستجو با موفقيت انجام نشود ( يعني رشته اول در رشته دوم وجود نداشته باشد ) تابع مقدار صفر بر ميگرداند.320
اسلاید 321: روال Str هدف: براي تبديل عدد به يک رشته عددي بکار مي رود.درشکل 1، I يک عبارت يا متغيرعددي بوده و Str يک متغير رشتهاي ميباشد اين روال يک عدد صحيح با فرمت مشخص را به يک رشته عددي تبديل مي کند.درشکل 2 ، F يک عبارت يا متغير رشتهاي و Str يک متغير رشتهاي ميباشد.شکل روال: 1: Procedure Str( I: integer: format , Str: string ) ; 2: Procedure Str ( F: Real: format , Str: string ) ; 321
اسلاید 322: : مثال Var Number , Str: String ;Begin Str ( 543: 5 , Str ) ; { Str = 543 } Str ( 12.25: 7: 2 ,Str ) ; { Str = 12.25 } Str ( 127: 3: Str ) ; { Str = 127 } Str ( 3.1239: 7: 3 , Str ) ; { Str = 3.124 }End. 322
اسلاید 323: روال Val هدف: تبديل يک رشته عددي به يک عددS يک عبارت يا متغير رشته اي، N يک متغير از نوع صحيح يا اعشاري و Error نيز يک متغير از نوع صحيح مي باشد. اين روال يک رشته عددي را به يک عدد صحيح يا اعشاري تبديل مي کند و آن را توسط متغير N برميگرداند. اگر عمل تبديل بطور صحيح انجام شود، مقدار متغير Error برابر صفر در غير اينصورت محل وجود اشکال را مشخص ميکند.شکل روال: 1: Procedure Val ( S: String ; Var N: integer ; Var Error: integer ) ; 2: Procedure Val ( S: String ; Var N: Real ; Var Error: integer ) ;323
اسلاید 324: : مثال Var St: string ; E , N: integer ; F: Real ;Begin St = 475 ; Val ( St , N , E ) ; { N = 475 , E = 0 } St = 475 ; Val ( St , F , E ) ; { F = , E = 3 } St = 3.1716 ; Val ( St , F , E ) ; { F = 3.1716 , E = 0 }End. 324
اسلاید 325: ارائه چند مثال در مورد رشتهها و کاراکترها مثال : برنامهاي بنويسيد که يک جمله از ورودي دريافت کرده سپس در صورتي که کلمه IS وجود داشته باشد آنها را به are تبديل نمايد و در نهايت رشته حاصل را در خروجي نمايش دهد.توجه کنيد که ممکن است بيش از يک بار کلمه IS تکرار شده باشد در اينصورت همه کلمات IS را با are تبديل کند. 325
اسلاید 326: Var St : string ; Begin Writeln ( Enter sentence ) ; Readln ( St ) ; Repeat i : = Pos ( is , St ) ; if i > 0 Then Begin Delete ( St , i , 2 ) ; Insert ( are , St , i ) ; end ; Until i = 0 ; Writeln ( The result sentence ) ; Write ( St ) ; End . { End of program } 326
اسلاید 327: مثال : برنامهاي بنويسيد که يک رشته از ورودي دريافت کرده، سپس معکوس رشته را بدست آورده بهمراه خود رشته در دو سطر جداگانه چاپ نمايد. Var St1 , St2 : string ; i , j : integer ;Begin Writeln ( Enter sentence ) ; Readln ( St1 ) ; j : = 1 ; For i : = length ( St1 ) downto 1 do Begin St2 [ j ] : = St1 [ i ] ; Inc ( j ) ; End ; Writeln ( The result ) ; Writeln ( St1 ) ; Writeln ( St2 ) ; End . { End of program } 327
اسلاید 328: تمرينات با فرض اينکه S3 , S2 , S1 متغير هاي رشته اي هستند خروجي عبارتهاي زير را تعيين کنيد.a)S3 = copy ( S1 , 1 , 6 ) ; b)S3 = concat ( S3 , S2 , S1 ) ;c)S3 = copy ( S2 , 1 , pos( S1 , S2 ) – 1 ) ;d)Delete ( S2 , pos( S1 , S2 ) , length ( S1 ) ) ; 328
اسلاید 329: خروجي قطعه برنامه زير را تعيين کنيد: Var S1: string ; i: integer ;Begin S1: = ABCDEF ; For i: = 1 to length ( S1 ) ; Delete ( S1 , i , 1 ) ; Writeln ( S1 ) ;.End 329
اسلاید 330: خروجي قطعه برنامه زير را تعيين کنيد: Var St: string ; i: integer ;Begin Readln ( St ) ; For i: = 1 to length ( St ) Do If ( St [ i ] > = 0 ) and ( St [ i ] < = 9 ) then Delete ( St , i , 1 ) ; Writeln ( St ) ;.End330
اسلاید 331: Insert ( S1 , S2 , pos ( S1 , S2 ) ) ; S3 : = copy ( S2 , pos ( S1 , S2 ) , length ( S1 ) ;S3 : = copy ( S2 , pos ( St , S2 ) , length ( S2 ) ; Delete ( S1 , pos ( S2 , S1 ) , length ( S2 ); e) S1 [ 0 ] := # 6 ; با فرض اينکه S2 = Book , S1 = pascal Book هستند خروجي عبارت زير را تعيين کنيد.331
اسلاید 332: تمرينات برنامهنويسی برنامهاي بنويسيد که يک پاراگراف را از ورودي دريافت کرده ( حداکثر 10 خط ) سپس:الف) تعداد کلمات هر سطر را شمرده و انتهاي سطر نمايش دهد.ب) تعداد حروف صدا دار را شمرده چاپ نمايد.ج) تعداد خطوط برنامه را شمرده در خروجي چاپ کند.د) تعداد جملات هر خط را محاسبه و در سطر هاي جداگانه نمايش دهد.332
اسلاید 333: برنامهاي بنويسيد که يک عدد در مبناي مشخص را از ورودي دريافت کرده سپس آن را به مبناي m که از ورودي خوانده مي شود ببرد.برنامهاي بنويسيد که يک پاراگراف را از ورودي دريافت کرده کلمات تکراري هر سطر را حذف نموده و پاراگراف حاصل را بهمراه پاراگراف اوليه در خروجي با پيغام مناسب نمايش دهد.333گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 334: برنامهاي بنويسيد که دو عدد 20 رقمي ( بصورت رشته بايد خوانده شود ) را از ورودي دريافت کرده سپس مجموع و حاصل ضرب اين دو عدد را محاسبه و در خروجي با پيغام مناسب چاپ نمايد.برنامهاي بنويسيد که يک رشته از ورودي دريافت کرده سپس کلمات داخل آن را بصورت عمودي کاراکتر به کاراکتر نمايش دهد:برنامهاي بنويسيد که يک پاراگراف با حداکثر 5 خط را از ورودي دريافت نمايد. سپس مجموع ارقام يا اعداد ( در صورت وجود ) هر خط را محاسبه نموده در انتهاي همان سطر نمايش دهد.334گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 335: فصل 11برنامههاي فرعيهدفهاي كلي شناخت اجزاء تشكيلدهنده توابع و روالها بررسي انواع پارامترها و متغيرها در برنامههاي فرعي شناخت تفاوتهاي روالها و توابع معرفي مزاياي استفاده از زير برنامهها335گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 336: ÷ هدفهاي رفتاري برنامه خود را به چندين زيربرنامه تقسيمبندي نمايد. زيربرنامهها را با توجه به قوانين موجود، در ساختار برنامه جا دهد. باتوجه به مزاياي استفاده از آنها را در برنامه خود بكار ببرد. دانشجو پس از مطالعه اين فصل بايد بتواند:336
اسلاید 337: روالها روالها نوعي از برنامههاي فرعي هستند، که به طور مستقل و جداگانه وظيفه يا وظايف خاصي از برنامه اصلي را انجام ميدهند. روال ها در صورت نياز اطلاعات خود را از طريق پارامترها دريافت و همچنين در صورت نياز نتايج را از طريق پارامترها به برنامه اصلي باز ميگردانند. پارامترها در حقيقت خطوط ارتباطي بين برنامه اصلي و برنامههاي فرعي هستند. پارامترها باعث مي شوند، که توابع و روال ها روانتر عمل کنند، زيرا آنها به برنامه هاي فرعي اين قابليت را مي دهند که با هر فراخواني، دادههاي مختلفي را مورد پردازش قرار دهند.337
اسلاید 338: شکل کلي روالها بصورت زير مي باشد: Procedure Name ( parameters list ) ; ليست پارامترها اسم روال کلمه ذخيره شدهVar { List of locad variable }Begin . . { Procedure Body } . .End ; { End of procedure }338
اسلاید 339: در حالت کلي روال ها در برنامه اصلي بصورت زير ظاهر ميشوند:; اسم برنامه اصلي Program ; تعاريف برنامه اصلي Procedure ..... ; Begin { main program } . . . فراخواني روال ها . .End. { End of program }339
اسلاید 340: پارامترها با توجه به محل وقوع آنها به دو دسته تقسيم مي شوند:پارامترهاي صوري ( Formal parameters ) .2پارامترهاي واقعي ( Actual parameters ) از پارامترهاي صوري هنگام اعلان روال و از پارامترهاي واقعي هنگام . فراخواني روال ها استفاده ميشود340
اسلاید 341: پارامترهاي صوري در حالت کلي 2 نوعند، که با توجه به نوع روال و تصميم برنامه نويس مورد استفاده قرار مي گيرند: پارامترهاي مقداري ( Value parameters ) پارامترهاي متغيري ( Variable parameters ) 341
اسلاید 342: پارامترهاي مقداري ( Value parameters ) پارامترهاي مقداري، پارامترهايي هستند که مقدار متغيرهاي فرستاده شده از برنامه اصلي را دريافت مي کنند و وظيفه آنها فقط عبور دادن مقدار به روال ميباشد. لذا تغیيرات پارامترهاي مقداري در روال به برنامه اصلي انتقال نمييابد: پارامترهاي مقداري بصورت زير تعريف مي شوندProcedure Name ( var1 : type ; var2 : type , . . . . ) ; ليست پارامترهاي از نوع مقداري اسم روال کلمه ذخيره شده 342
اسلاید 343: مثال : به برنامه زير توجه کنيد:Program main ;Var x1 , x2 , y1 , y2 : integer ;Procedure test (A1,A2,B1,B2:integer);{formal parameters } ......Begin { main } .... test ( x1 , x2 , y1 , y2 ) ; { Actual parameters } ...... End. { End of program }343
اسلاید 344: نکته: پارامترهايي که در روال بکار برده مي شود، هيچ ارتباطي به پارامترهاي ارسالي از برنامه اصلي ندارند و فقط مقادير اين متغيرها از برنامه اصلي ارسال مي شود. لذا اسامي پارامترهاي صوري ممکن است هم اسم با پارامترهاي واقعي برنامه اصلي انتخاب شوند، اين به معناي اين نيست که اين پارامترها ( پارامترهاي صوري ) همان پارامترهاي واقعي هستند.در مثال بالا اين تناظر برقرار است:پارامترهاي واقعي متناظر است با پارامترهاي صوريX1 A1X2 A2Y1 B1Y2 B2344
اسلاید 345: متغيرهاي … , Var2 , Var1 پارامترهاي مقداري هستند. توجه کنيد، که اين پارامترها صوري هستند و نوع و ترتيب آنها بايد با نوع و ترتيب پارامترهاي واقعي در تناظر يک به يک باشند.345
اسلاید 346: مثال : به برنامه زير توجه کنيد:Program main ;Var x1 , x2 , y1 , y2 : integer ;Procedure test ( A1 , A2 , B1 , B2: integer ); {formal parameters } ......Begin { main } .... test ( x1 , x2 , y1 , y2 ) ; { Actual parameters } ...... End. { End of program }346
اسلاید 347: همانطور که ملاحظه مي کنيد، روالي بنام test با 4 پارامتر مقداري در برنامه استفاده شده است. متغيرهاي y2 , y1 , x2 , x1 از برنامه اصلي به روال test ارسال شده و بترتيب مقادير اين متغيرها در متغيرهاي با همان نوع در B2 , B1 , A2 , A1 قرار مي گيرند.347
اسلاید 348: پارامترهاي متغيري ( Variable parameters ) يك پارامتر متغيري، تغييرات يك پارامتر واقعي را بعنوان خروجي به برنامه اصلي برميگرداند. تفاوت اين گونه پارامترها با پارامترهاي مقداري در ارسال تغييرات ايجاد شده در پارامترها ميباشد. وقتي نياز است، كه نتايج روال به برنامه اصلي برگردد، از پارامترهاي متغيري استفاده ميكنند. اعلان پارامترهاي متغيري به صورت زير ميباشد: procedure Name ( var id1 : type ; var id2 : type , … ); ليست پارامترهاي متغيري اسم رواال كلمه ذخيره شده متغيرهاي id1 , id2 و … پارامترهاي متغيري ميباشند كه نتايج روال، توسط آنها به برنامه اصلي بازگردانده ميشود.348
اسلاید 349: مثال : روالي بنام ComputeSumAve بنويسيد كه مجموع و ميانگين دو عدد را محاسبه و نتيجه را در برنامه اصلي چاپ نمايد.Program Example;Var Num1, Num2: integer; Total,average: Real;Procedure ComputeSumAve(Num1 , Num2: integer ; Var sum , ave : Real); Begin Sum:=Num1+Num2; Ave:=sum/2;End; {End of procedure}Begin {Main} WriteLn( Enter Two Numbers);ReadLn(Num1,Num2); ComputeSumAve (Num1, Num2, total, average); WriteLn(The Sum is= , sum:8:2 , The average is= , average:8:2);End. {End of program }349
اسلاید 350: پارامترهاي واقعي و صوري عبارتند از:پارامتر واقعي متناظر است با پارامترهاي صوريNum1 Num1Num2 Num2Total sumAverage aveNum1 , Num2 پارامترهاي مقداري و sum , ave پارامترهاي متغيري ميباشند، كه توسط آنها نتايج به برنامه اصلي برگردانده ميشود.350
اسلاید 351: متغيرهاي محلي و سراسري ( Local and Global Variable) در برنامههاي فرعي دو نوع متغير علاوه از پارامترها مورد استفاده قرار ميگيرند. اين متغيرها متغيرهاي محلي يا متغيرهاي سراسر هستند.متغيرهاي محلي، متغيرهايي هستند كه در بلاك مربوط به خود قابل استفاده هستند. ولي متغيرهاي سراسري در تمام برنامههاي فرعي قابل دسترس ميباشند.متغيرهاي محلي در داخل برنامههاي فرعي در قسمت تعاريف معرفي ميشوند و در خارج از روال قابل دسترسي نيستند.351
اسلاید 352: مثال : روالي براي محاسبه مجموع و ميانگين دو عدد بنويسيد.Procedure CalcSumAve ( Num1 , Num2: Read );Var Sum , Ave: Real ;Begin Sum:= Num1 + Num2 ; Ave:= Sum / 2 ; WriteLn( The Sum is = , sum:8:2 ) ; WriteLn( The average is =,ave:8:2);End;{End of procedure} 352
اسلاید 353: در مثال بالا sum , Ave متغيرهاي محلي ميباشند. براي فراخواني روال CalcSumAve(x.y); كه درآن x.y دو متغير ازنوع Real ميباشند. به شكل زيرتوجهكنيد:پارامترهاي واقعيX Y پارامترهاي صوريNum1 Num2 متغيرهاي محلي Sum Ave 353
اسلاید 354: مثال : خروجي برنامه زير را تعيين كنيد.Program Example6;Var A , b , c: integer ; {Global Variables}Procedure test(var b: integer ; a: integer );Var D: integer ; {local variable}Begin D:= 12 ; a:= b + d ; b:= a + c ; c:= c+ 2 ;End;Begin {Main} A:=1; b:=2; c:=3; Test(a,b); WriteLn( a = , a , b = , b , c = , c ) ;End.{End of program}خروجي برنامه بالا بصورت زير است:a =16 b=2 c=5354
اسلاید 355: روالها معمولاً به سه شكل ظاهر ميشوند: بكارگيري روالهاي بدون پارامتر بكارگيري روال همراه پارامترهاي با خاصيت ورودي بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي 355
اسلاید 356: بكارگيري روالهاي بدون پارامترگاهي لازم است تا برنامه فرعي كاملاً مستقل (بينياز از مقادير برنامه اصلي) در بخشهاي مختلف يك برنامه اجرا شود. در اين صورت نياز به استفاده از پارامتر بيمفهوم ميباشد و از روالهاي بدون پارامتر استفاده ميكنند.غالباً زمانيكه بخواهيم پيغامهاي خاصي را در قسمتهاي مختلف برنامه نمايش دهيم، اين پيغامها را در يك روال قرار داده و در صورت نياز، روالمربوطه را فراخواني ميكنيم.356
اسلاید 357: مثال : روال Head بدون دريافت پارامتري فراخواني ميشود.Program Example ;Procedure Head ; Begin WriteL(Name Family Age No); WriteLe(……………………………...); End;Begin{Main} WriteLn( open university ) ; Head;End.357
اسلاید 358: بكارگيري روال همراه پارامترهاي با خاصيت ورودي همانطور كه قبلاً اشاره كرديم، هدف از بكارگيري پارامترها انتقال مقادير از برنامه اصلي به روالها ميباشد. اگر اين انتقال يك طرفه باشد يعني فقط از برنامه اصلي به روال باشد، اين نوع پارامترها فقط خاصيت ورودي خواهند داشت. (قبلا در اين مورد توضيح داده شده است) در اين نوع روالها از پارامترهاي مقداري استفاده ميكنند.358
اسلاید 359: مثال : روالي بنويسيد كه توسط آن مربعات اعداد1 تا N را درخروجي چاپ نمايد.Program Example ;Var N , I: integer ; Procedure sq ( M: integer ) ; Begin WriteLn ( sqart is = , M * M ) ; End;Begin {Main} Write( Enter Number = ) ; RealLn ( N ) ; For I:= 1 to N do Sq (i) ;End. {End of program}359
اسلاید 360: بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي در اين نوع روالها پارامترها دو خاصيت مهم دارند يكي انتقال دادهها از برنامه اصلي به روال و ديگري انتقال يا ارجاع نتايج از روال به برنامهاصلي ميباشد. در اين نوع روالها از پارامترهاي متغيري استفاده ميكنند.360
اسلاید 361: مثال : روالي بنام change بنويسيد كه توسط آن دوعدد بعنوان پارامتر دريافت كرده، مقادير اين دو متغير را جابجا نموده و نتيجه را در برنامه اصلي چاپ نمايد.Program Example ;Var A , b: integer ;Procedure change (var x , y: integer) ;var temp:integer;Begin Temp:=x; X:=y; Y:=temp;End;361
اسلاید 362: Begin { Main } ReadLn( a , b ) ; Change( a , b ); WriteLn ( a= , a , b= , b ) ;End.{End of program}362گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 363: ارتباط روالها با يكديگر در پاسكال زير برنامهها نه تنها از طريق برنامه اصلي بلكه از داخل يكديگر نيز .فراخواني ميشوندفراخواني روالها از داخل يكديگر تابع قوانين كلي زير است: قانون اول قانون دوم قانون سوم 363گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 364: قانون اول از هر برنامه (اصلي يا فرعي) به برنامه فرعي در صورتي ميتوان، دسترسي داشت، كه در بخش تعاريف آن برنامه (اصلي يا فرعي) قرار داشته باشد. بطور مثال در شكل زير برنامه اصلي M ميتواند، به كليه برنامههاي فرعي p1,p2 و… كه در بخش تعاريف برنامه اصلي قرار دارند، مراجعه كند364گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 365: Main . . . .Proc1Proc2ProcN برنامه اصليبرنامه هاي فرعي365
اسلاید 366: مثال : به برنامه زير توجه كنيد:program Main;var ……..procedure proc1;var ……..Begin ………End;Procedure proc2;Var ………Begin ……end;Begin {Main} Proc1; Proc2;End. 366
اسلاید 367: روالهاي proc1 , proc2 داخل برنامه اصلي Main تعريف شدهاند. لذا براحتي ميتوان در برنامه اصلي به آنها دسترسي پيدا كرد. روالها خود نيز داخل هم ميتوانند قرار بگيرند. دقيقاً مثل روالهاي معمولي با اين تفاوت كه در داخل روال بايد تعريف شوند. به اينگونه روالها، اصطلاحاً روالهاي متداخل يا تودرتو ميگويند. 367
اسلاید 368: اگر روالها در بخش تعاريف يك برنامه به موازات يكديگر تعريف شوند و نه در داخل هم، در روالهاي بعدي امكان رجوع به روالهاي قبلي وجود خواهد داشت. بعبارت ديگر به روالي ميتوان دسترسي پيدا كرد كه قبلاً تعريف شده باشد. قانون دوم 368
اسلاید 369: بطور مثال اگرp1,p2,p3 سه روال باشند دراينصورت ميتوان بصورت زيرعمل كرد: Main P1P2P3 P2روال هابرنامه اصليدر شكل بالا چون p2 قبلاً معرفي شده است ميتوان آنرا داخل p3 فراخواني كرد.369
اسلاید 370: اگر روالها در بخش تعاريف برنامهأي بصورت متداخل باشند، در اينصورت از روال دروني ميتوان به روالهاي بيروني كه قبلاً تعريف شده، مراجعه كرد و همچنين از روال دروني به روالهاي بيروني كه به موازات يكديگر قرار گرفتهاند، نيز ميتوان دسترسي پيدا كرد. بطور مثال در شكل زير روال p1 ميتواند به روالهاي p2,p3 دسترسي پيدا كند. وهمچنين روال دروني p4 ميتواند بهروالهاي p2 , p3 مراجعه كند. قانون سوم 370
اسلاید 371: Main P3P2P1روال هابرنامه اصلي371
اسلاید 372: اعلان روالها به روش forward همانطور كه قبلاً اشاره كرديم از روالي ميتوان در روال ديگر استفاده كرد، كه قبلاً تعريف شده باشد. در توربوپاسكال نقيصه فوق به كمك اعلان forward قابل حل است. بدين صورت كه اگر روالي به هنگام تعريف با اعلان forward همراه باشد، بدون رعايت از پيش تعريف شدن ميتواند، در روالهاي ديگر ظاهر شود.372
اسلاید 373: شكل اعلان به روش forward بصورت زير ميباشد:Procedure Name ( parameters ) ; forward ; كلمه ذخيره شده ليست پارامترها اسم روال كلمه ذخيره شده373
اسلاید 374: مثال :Program forward_Main ;Var ………Procedure proc3 ; forward ;Procedure proc1;var ……..Begin ………end;Procedure proc2;var ………Begin ……… proc3; ……end;374
اسلاید 375: Procedure proc3;var ……..Begin …….End;Begin {Main program} ……… proc1; proc2; proc3; ………End. {End of program}همانطور كه ملاحظه ميكنيد با اعلان روال proc3 بصورت forward، بقيه روالها ميتوانند به آن دسترسي پيدا كنند.375
اسلاید 376: توابع (Functions) نوع ديگري از برنامههاي فرعي، توابع ميباشند. توابع مانند روالها، پيمانههاي مستقلي هستند. با اين تفاوت كه روالها ميتوانند، تعدادي خروجي داشته باشند، در حالي که توابع فقط يك خروجي دارند. در روالها معمولاً خروجيها توسط پارامتر به برنامه اصلي ارجاع داده ميشود. ولي در توابع اينكار به نحو ديگر انجام ميگيرد.376
اسلاید 377: شكل كلي اعلان يك تابع بصورت زير ميباشد: Function Name ( List Of Parameters ) : Function Type ; نوع تابع ليست پارامترها اسم تابع کلمه ذخيره شده 377
اسلاید 378: تابع فقط ميتواند، يك خروجي داشته باشد. نوع خروجي تابع، همان نوع تابع محسوب ميشود. لذا با توجه به نوع خروجي تابع، نوع تابع تشخيص داده ميشود. ذكر اين نكته خالي از لطف نيست كه، نوع پارامترهاي صوري توابع معمولاً مقداري هستند چرا كه توابع نوعي برنامههاي فرعي هستند كه فقط يك خروجي برميگردانند. لذا استفاده از پارامترهاي از نوع متغيري پسنديده نميباشد. (اشكال كامپايلري در توربوپاسكال ندارد ولي در پاسكال استاندارد اين كار اشكال كامپايلري دارد.)نکته :مقدار خروجي توابع توسط اسم تابع برگردانده ميشود. توابع مثل روالها بعد از قسمت تعاريف برنامه اصلي ظاهر ميشود. 378
اسلاید 379: شكل كلي توابع بصورت زير ميباشد: Function Name ( Parameters ) : Type ;Var ………..Begin …………….. …………….. …………….. Name := Resualt Of Function ;End ;379
اسلاید 380: توجه به نكات زير در بكارگيري توابع ضروري بنظر ميرسد:تمام پارامترهاي تابع بايد از نوع مقداري باشند.نوع داده نتيجه تابع در انتهاي عنوان تابع و بعد از ليست پارامترهاي صوريقرار ميگيرد.در بدنه تابع، خروجي تابع با نسبت دادن مقدار به نام تابع مشخص ميشود.380
اسلاید 381: مثال : برنامهأي بنويسيد كه يك عدد از ورودي دريافت كرده سپس توسط تابعي بنام fact، فاكتوريل عدد را محاسبه در برنامه اصلي چاپ نمايد.Program Example ;Var N: Integer ;Function Fact ( M : Integer ) : longint ;Var P , I : Integer ;Begin P:= 1 ; For i:= 2 To M do P:= P * I ; Fact:= P ;End ;Begin { Main } Write ( Enter Number = ) ; Readln ( N ) ; Writeln ( Factorial is = , Fact ( N ) ) ; {Call Function}End.381
اسلاید 382: ناحيه دادهها بعد از فراخواني بشكل زير ميباشد: پارامترهاي واقعيN نتيجه تابعپارامترهاي صوريMمتغيرهاي محليPIنتيجه تابع?? ناحيه داده هاي Fact ناحيه داده هاي اصلي382
اسلاید 383: توابع بازگشتي (Recursion Functions) در پاسكال يك تابع يا روال ميتواند، خودش را فراخواني نمايد. پيمانهاي كه خودش را فراخواني ميكند يك پيمانه بازگشتي نام دارد. اين نوع توابع در بدنه خود، خودشان را فراخواني ميكنند. اين فراخواني تا برقراري يك شرط خاص كه غالباً به يك عدد ثابت ختم ميشود، ادامه پيدا ميكند. سپس مقدار تابع از پايين به بالا محاسبه ميشود و در نهايت نتيجه تابع حاصل ميشود.383
اسلاید 384: هنگامي كه تابع بازگشتي به خود مراجعه ميكند، مقادير فعلي متغيرهاي خود را در محلي از حافظه بنام پشته (stack) قرار ميدهد، اگر بازگشت به تابع بازگشتي مجدداً صورت گيرد، مقادير فعلي متغيرها مجدداً بدنبال مقادير قبلي و اصطلاحاً در پشت مقادير اوليه قرار ميگيرند. هنگامي كه شرط پاياني در تابع بازگشتي رخ مي دهد، در اولين بازگشت مقاديري را كه هنگام مراجعه به خود، در پشته نگهداري كرده، مجدداً در دسترس قرار ميدهد و بهمين ترتيب در بازگشتهاي بعدي اين عمل تكرار ميشود تا مقدار تابع محاسبه شود. 384
اسلاید 385: شكل زير نحوه قرار گفتن مراجعههاي يك تابع بازگشتي به پشته را نمايش ميدهد.مقادير متغيرها درآخرين بازگشت به تابع.....مقادير متغيرها در سومين بازگشت به تابعمقادير متغيرها در دومين بازگشت به تابعمقادير متغيرها در اولين بازگشت به تابعشرط پاياني385
اسلاید 386: ترتيب دسترسي به مقادير هنگام بازگشت از تابع بازگشتي از بالا به پايين ميباشد و ميتوان آنرا بصورت زير نمايش داد:مقادير متغيرها درآخرين بازگشت به تابع.....مقادير متغيرها در سومين بازگشت به تابعمقادير متغيرها در دومين بازگشت به تابعمقادير متغيرها در اولين بازگشت به تابع386
اسلاید 387: مثال : برنامهأي بنويسيد كه با استفاده از توابع بازگشتي فاكتوريل عدد صحيح N را محاسبه نمايد.Program Example ;Var N : integer ;Function Fact ( N : integer ) : Longint ;Begin If N = 1 Then Fact:= 1 Else Fact:= N * Fact ( N – 1 ) ;End ; Begin Writeln ( Enter Number ) ; Writeln ( Factorial is = , Fact ( N ) ); {Call Function}. End387
اسلاید 388: Fact := 12 * Fact ( 1 )3 * Fact ( 2 )4 * Fact ( 3 )5 * Fact ( 4 )N = 1 N = 5 در برنامه بالا ترتيب قرار گرفتن مقادير در پشته بصورت زير ميباشد:388
اسلاید 389: مثال : تابعي براي محاسبه بزرگترين مقسوم عليه مشترك دو عدد صحيح N , M بنويسيد. Function GCD ( N , M: integer ) : Integer ;Begin If ( N <= M ) and ( M Mod N = 0 ) Then GCD:= N Else GCD:= GCD ( M ,N mod M ) ;End ; 389
اسلاید 390: مقايسه توابع و روالها توابع و روالها هر دو برنامههاي فرعي هستند، كه بطور مستقل وظايفي را بر عهده دارند. ولي در اين ميان از بعضي جنبهها متفاوت ميباشند كه عبارتند از: 1. نحوه فراخواني آنها با هم متفاوت است. روالها از طريق عبارات روال فراخوانده ميشوند، درصورتي كه فراخواني تابع توسط عبارات مقايسهأي و يا تخصيص نتيجه به يك متغير صورت ميگيرد.2. هنگام اعلان يك تابع، نوع تابع يا نوع نتيجه حاصل از تابع بايد ذكر شود، در صورتي كه روالها نيازي به اين كار ندارند.3. توابع فقط يك خروجي برميگردانند، ولي روالها ميتوانند، چندين خروجيبرگردانند. درضمن نتيجه توابع توسط اسم تابع فرستاده ميشود ولي روالها از طريق پارامترها، نتايج را برميگردانند.390
اسلاید 391: طريقه ارسال آرايهها به توابع و روالها آرايهها خود مجموعهأي از دادهها ميباشند، لذا براي ارسال آنها نميتوانيم از روش معمولي ارسال پارامترها استفاده كنيم. و بطور مستقيم نميتوان آنها را به برنامههاي فرعي انتقال داد. براي ارسال آرايهها به عنوان پارامتر به برنامههاي فرعي از دستور Type استفاده ميكنند. دستور Type قبل از تعاريف برنامه اصلي بكار ميرود و توسط اين دستور در واقع يك نوع سادهسازي در تعاريف فراهم ميشود. و با اين سادهسازي ميتوان دادههاي ساخت يافته را به برنامههاي فرعي منتقل كرد.391
اسلاید 392: فرم كلي دستور Type در بخش تعاريف بصورت زير است: تعريف داده ساخت يافته = شناسه Type براي مثال يك ارايه از نوع صحيح را تعريف ميكنيم:Type No = array [1…100] of integer ; در اينصورت تعريف آرايه به، No نسبت داده ميشود. اگر بخواهيم متغيري از نوع آرايه بالا تعريف كنيم، آنرا از نوع No تعريف ميكنيم:Var Number: No ;392
اسلاید 393: مثال : برنامهاي بنويسيد كه يك آرايه حداكثر 100 عنصري را از ورودي دريافت كرده، سپس عدد را از ورودي خوانده، توسط تابعي بنام Search محل وقوع عدد در آرايه را نمايش دهد.Program Example ;Type a = array [1.. 100] of integer ;Var B: a ; N : Word ;Function Search (b:a; N: Word ; x: integer ) : Word ;Var I , Index: Word ; Flag: Boolean ; { local variable } Begin Index:= 0 ; Flag:= TRUE ; 393
اسلاید 394: While ( I <= N ) And ( flag ) do Begin If b[ I ] = x Then Begin Index:= I ; Flag:= FALSE ; End ; Inc ( I ) ; End ; Search:= Index ; End ; {*********************************************}394
اسلاید 395: Begin { Main } Writeln ( Enter Number ) ; Readln ( N ) ; For I:= 1 To N Do Readln ( b[ I ] ) ; Writeln ( Enter Number ) ; Readln ( x ) ; If Search ( b , N , x ) = 0 Then Writeln ( Not Found ) ; Else Writeln ( Search( b , N , x ) ) ;End. { End Of Program }395
اسلاید 396: تمرينات روال Down را در نظر بگيريد:Procedure Down ( N: Integer ) ;Begin While N > 0 do Begin Write ( N: 3 ) ; Dec ( N ) ; End ;End ;الف) وقتي روال بصورت down (5) فراخواني شود، چه چيزي چاپ ميشود. ب) مقدار پارامتر واقعي N بعد از اجراي روال چيست؟396
اسلاید 397: تابع بازگشتي زير را در نظر بگيريد: Function MyStery ( M , N: Integer ) : integer ;Begin If N = 1 Then MyStery:= 1 Else MyStery:= M * MyStery ( M , N – 1 ) ;End ; { End Of Function }الف) تابع بازگشتي بالا را به ازاء مقادير N=4 , M=5 فراخواني كنيد.ب) تابع بازگشتي بالا را به ازاء مقادير N=5 , M=3 فراخواني كنيد.397
اسلاید 398: تمرينات برنامهنويسي برنامهاي بنويسيد كه اطلاعات حداكثر 100 دانشجو كه عبارتند از: Name اسم Family فاميلي St_No شماره دانشجوئيرا از ورودي دريافت كرده سپس:الف) توسط روالي بنام sort اطلاعات را برحسب شماره دانشجوئي مرتب كند.ب) توسط تابعي بنام search شماره دانشجوئي فردي را از ورودي دريافت نمايد، در صورتي كه شخص موردنظر در ليست باشد، ساير اطلاعات آنرا نمايش دهد.398
اسلاید 399: آرايهأي از نوع صحيح با حداكثر 100 عنصر را در نظر بگيريد. برنامهأي بنويسيد كه ابتدا آرايه را از ورودي دريافت كرده سپس با استفاده از يك تابع بازگشتي بيشترين مقدار آرايه را محاسبه نمايد. دو آرايه مرتب حداكثر100 عنصري كه شامل اسامي افراد ميباشد را درنظر بگيريد. برنامهاي بنويسيد كه نخست دو آرايه را از ورودي دريافت نموده سپس توسط روالي بنام merge اين دو آرايه در هم ادغام نموده و در آرايه سومي قرار دهد.399
اسلاید 400: فصل 12مجموعهها و دادههاي شمارشيهدفهاي كلي مفهوم مجموعه و دادههاي شمارشي در زبان پاسكال مجموعه و دادههاي شمارشي به عنوان متغير استفاده از مجموعهها و دادههاي شمارشي در برنامه 400
اسلاید 401: ÷ هدفهاي رفتاري مفهوم مجموعه و دادههاي شمارشي را درك كند. بتواند در صورت لزوم از مجموعه و دادههاي شمارشي استفاده كند.دانشجو پس از مطالعه اين فصل بايد بتواند:401گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 402: تعداد محدودي از دادهها كه از نظر نوع يكسان هستند، در غالب مجموعه و يا گونههاي شمارشي نگهداري ميشوند كه مفهومي شبيه در رياضيات دارند. براي استفاده در مواردي خاص نظير روزهاي هفته و يا نوع ماشينها و... كه ترتيبي هستند و يا يك مجموعه از دادههاي پشت سر هم ميباشند، استفاده از اين ساختارها كار را بسيار راحت ميكند. هر چند وجود آنها به عنوان ساختارهاي دادهاي، الزامينيست. بهرحال به عنوان ابزارهايي از زبان پاسكال هستند كه در مواقعي، ضروري بنظر ميرسند و مسئله را به صورتي قابلفهم و راحت حل ميكند.مقدمه402گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 403: مجموعهها (Sets) در زبان پاسكال مجموعه، مفهومي شبيه به مفهوم مجموعه در رياضيات جديد دارد. متغيري است كه شامل ليستي از اعداد صحيح، كاراكتر، بولين و يا از نوع شمارشي ميباشد كه داراي تعداد عناصر محدود به حداكثر 256 تا ميباشد. از اين جهت بسيار شبيه به يك آرايه در زبان پاسكال است كه شامل دادههايي از يك نوع ميباشد، ولي آرايه داراي عناصر محدودي نيست و در ضمن مانند آرايه تعريف نميشود.403
اسلاید 404: تعريف مجموعهبراي تعريف يك مجموعه از كلمات كليدي set of بصورت زیر استفاده ميكنيم: TypeName= Set of Type Of Set; Type Digit_type = 0..9; Digit = Set of Digit_type مثلا : 404
اسلاید 405: Varch: set of char; #0..#255bool: set of boolean; false..truenum: set of byte; 0..255x: set of 100..200;y: set of a..z;z: set of 0..9;مثال :405
اسلاید 406: عمليات روي مجموعهها در رياضيات عمل عضويت وجود دارد كه به اين معني است كه متغيري عضو مجموعه ميباشد يا خير. اين عمل در زبان پاسكال با كلمه كليدي in صورت ميگيرد. اگر عضويت صحيح باشد جواب True وگرنه False ميباشد. همچنين دو مجموعه را ميتوان با علامات شرطي =، <>، <= و >= مقايسه كرد كه همگي داراي خروجي درست يا غلط ميباشند. وليعلامات شرطي < و > در مورد مجموعهها كاربردي ندارد.406
اسلاید 407: Vara: set of byte;Begina:= [1..3,4];if 3 in a then write(3 is in set a) چاپ ميشودelse write(3 is not in set a); write(3 in a); True write(8 in a); Falsewrite([1,2,3,4,] = a); Truewrite([1,2,3,4] = [2,2,1,1,1,3,4,4]); Truewrite([1,2] = [1,2,3]); Falsewrite([1,2] <= [1,2,3]); Truewrite([] >= [1]); FalseEnd.مثال :407
اسلاید 408: در رياضيات ميتوانيم مجموعهها را با هم اجتماع، اشتراك و تفاضل كنيم كه اين عمليات در پاسكال با عملگرهاي +، * و - به ترتيب ميباشد. اجتماع دو مجموعه تركيبي از همه عضوهاي آنها است و اشتراك يعني عضوهايي كه در هر دو مجموعه مشترك است و تفاضل يعني اعضايي كه در مجموعه اول ميباشد و در مجموعه دوم وجود ندارد. عملگرها روي مجموعهها 408
اسلاید 409: مثال :Var a: set of byte; b: set of 0..10; c, d, e: set of byte;Begin a:=[0,1,2,3]; b:=[2,3,4,5]; c:= a+b;c=[0,1,2,3,4,5]=[0..5] d:= a*b;d=[2,3] e:= a-b;e=[0,1]End.409
اسلاید 410: در استفاده از مجموعه ها به نکات زیر توجه کنید :1. آرگومان ورودي روالها ميتواند مجموعه باشد كه قبلاً در تايپ تعريف شده باشد، نه اينكه مستقيم در روال به عنوان آرگومان بيايد. ولي خروجي يك تابع نميتواند از نوع مجموعه باشد.2. براي نوشتن يا خواندن مجموعهها بايد عضو به عضو عمليات صورتبگيرد و مستقيماً توابع Write، Read روي آنها كار نميكنند. 410
اسلاید 411: مثال : برنامهاي بنويسيد كه تعداد محدودي عدد مختوم به 1- را از ورودي بخواند و در يك مجموعه از اعداد صحيح قرار بدهد. سپس اعضاي اين مجموعه را با توجه به مجموعه ساخته شده در خروجي چاپ كند:Program test ;Var num , temp : set of byte; I , c : integer ;Begin Writln (Enter numbers: ); Readln( I ) ; Num := [ ] ; c := 0 ;411
اسلاید 412: while ( i > -1) do begin c := c + 1 ; temp := [ I ] ; num := num + temp ; Readln( I ) ; end; for I := 0 to 255 do if ( i in num ) then write( i:5 ) ;End.{ End Of Program }412
اسلاید 413: دادههاي شمارشي (Enumeration) دادههاي شمارشي، يك مجموعه مرتب از اعداد است كه در برنامه، هر عدد داراي نام بخصوصي است. اين نامها در داخل دو پرانتز باز و بسته قرار ميگيرند و بترتيب از صفر مقدار ميگيرند مگر اينكه برنامهنويس به آنها مقدار مخصوصي بدهد. 413
اسلاید 414: به مثال زير توجه كنيد : Type Cars_type = (Peykan, Pride, Pegout, PK);Var Cars: cars_type;حال در برنامه cars ميتواند مقادير داخل دادههاي شمارشي را بگيرد:cars:= Pride;cars:= PK;414
اسلاید 415: Type Days_type = ( sat, sun, mon, tue, wed, thu, fri );Var Day: Days_type;Begin Day:= Mon; i:= ord (sat) + ord (day) + (succ(sat)); j:= ord ( pred (sun) + ord (pred (fri)); writeln(i:5, j:5);End.به مثال زير توجه كنيد : خروجی : i = 3 j = 5 415
اسلاید 416: متغير داده شمارشي شبيه مجموعهها حداكثر داراي 256 عضو ميتواند باشد كه از صفر تا 255 شمارهگذاري ميشود و لذا يك بايت حافظه را اشغال ميكند.نکته : 416
اسلاید 417: عمليات روي دادههاي شمارشيدادههاي شمارشي همانند هر نوع تايپي ميتوانند در type برنامه تعريف شود و به عنوان آرگومانهاي روالها و يا خروجي توابع ميتواند درنظر گرفته شود ولي حتماً بايد در type تعريف شده باشد و مستقيماً نميتوان بكار برد. اين عمل مشابه مجموعهها و آرايهها نيز ميباشند، لذا ابتدا در type تعريف ميشود، سپس به عنوان ورودي و يا خروجي روالها استفاده ميشود وگرنه خطاي كامپايلري پيش خواهد آمد. همچنين ميتوان در آرايهها از دادهها شمارشي استفاده كرد.417
اسلاید 418: مثال : مشابه مجموعهها نميتوان دادههاي شمارشي را مستقيماً Read يا Write كرد. برنامهاي بنويسيد كه اعداد صفر تا شش را به مراتب دريافت كرده و به كمك دادههاي شمارشي روزهاي متناظر با آنها را از شنبه تا جمعه را حساب كند.Program test:Type days_type = ( sat,sun,mon,tue,wed,thu,fri ) ;Var day: days_type; i: byte;Begin Write(Enter your days number: ); Readln(i); While (i>=0) and (i<=6) do begin Case I Of418
اسلاید 419: 0: day:= sat; 1: day:= sun; 2: day:= mon; 3: day:= tue; 4: day:= wed; 5: day:= thu; 6:day:= fri; end; Case day Of sat: writeln (your day is sat); sun: writeln (your day is sun); : end; Readln(i);End; {while} End.419
اسلاید 420: تمرينات اگر A=[1,3,5,7] و B=[2,4,6] و C=[1,2,3] باشد عبارات زير راارزيابی کنيد.الف- A + (B –C) ب- A + (B*C)ج- A + B + Cد – 2 in A420
اسلاید 421: برنامهاي بنويسيد تا مجموعه اي از كاراكترهاي كوچك را گرفته و به يك مجموعه از كاراكترهاي حروف بزرگ متناظر با آن تبديل كند. به كمك دادههاي شمارشي، برنامه اي بنويسيد كه نام دانشجويان يك كلاس را در برگيرد و هر دانشجو نيز يك شماره داشته باشد. سپس با دريافت نام او شماره او در نمايشگر چاپ شود.421
اسلاید 422: فصل 13(Records) ركوردها هدفهاي كلي مفهوم ركورد و اجزاي آن انواع ركوردها و استفاده از آن در برنامه معرفي مزاياي ركوردها در برنامه422
اسلاید 423: ÷ هدفهاي رفتاري مواقع لزوم ركورد را تشخيص دهد. از ركوردها در برنامهاش استفاده كند. برنامههاي بزرگ و با دادههاي زياد بنويسد.دانشجو پس از مطالعه اين فصل بايد بتواند:423گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 424: مقدمه نوع داده ساختيافتهاي كه در اينجا مطرح ميشود، ركورد نام دارد كه جهت نگهداري دادههاي مختلف نظير نام، نام خانوادگي، سن و آدرس براي يك دانشجو بكار ميرود. ركوردها برخلاف آرايهها كه داراي عناصر از يك جنس و نوع هستند، داراي عناصر از انواع مختلف ميباشند. اطلاعات ازنوع مختلف را نميتوان در آرايه نگهداري كرد چرا كه داراي جنس مشابه نيستند و لذا از ساختاري به نام ركورد استفاده ميشود.424گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 425: تعريف ركوردها نوع داده ساختيافته ای که از یک سری داده ها یا اطلاعات مرتبط به هم تشکیل می شود.هر کدام از اطلاعات را یک فیلد می نامند .بطور كلي تعريف نوع ركورد در زير آمده است:TypeName = RecordField1-list : type1;Field2-list : type2;....Fieldn-list : typen; End;425
اسلاید 426: براي ساختن ركورد، از كلمه كليدي Record استفاده ميشود كه مطابق زيرميباشد:Type Student = Record Name: String [10]; Family: String [15]; Age: integer; Address: String; End;در اين تعريف Student از نوع Record است. حال ميتوان در var برنامه تعريف كرد:VarS: Student;426
اسلاید 427: دسترسي به فيلدهاي ركوردبراي دسترسي به فيلدهاي ركورد ازعلامت . استفاده ميشود. يعني بصورتزير: نام فيلد . نام متغير ركورد مثال: برنامهاي بنويسيد كه ركوردي از نوع اعداد ايجاد كرده و مقادير آنرا مقدارهي كند.427
اسلاید 428: TypeNumbers = record a, b, c = integer; x, y, z = Real;end;Var Num = Numbers;beginNum. a: = 2;Num. b: = 3;Num. x: = 2.5;Num. y: = 3.5;Num. z: = 10;Write (Num.a + Num.b + Num.x + Num.y + Num.z);End.428
اسلاید 429: مثال : برنامهاي بنويسيد كه ركورد يك دانشجو را داشته باشد و با توجه به جنس او كلمه آقا و يا خانم را به همراه نام و نام خانوادگياش را چاپ كند.Type Student = recordId: integer;Name: string[10];Family: string[15];Sex: char;Age: integer; End;Var Stu: student;429
اسلاید 430: Begin Stu.id:= 80132; Stu.name:=Ali; Stu.family:=Ahmadi; Stu.sex:=M; Stu.sge:=18; Case sex of M: write(Mr.); F: write(Mrs.); end; write(stu.name, , stu.family);End.430
اسلاید 431: بدست آوردن حجم يك ركوردبراي بدست آوردن فضاي اشغال شده توسط ركورد ابتدا بايد فضاي اشغال شده توسط تماميفيلدها را بدست آورده و سپس باهم جمع كنيم. مثال زير را درنظر بگيريد:431
اسلاید 432: Type List1 = Array [1… 5] of integer;List2 = Array [1… 5] of char;Rectype = RecordA, B: Real; 6*2C, D: String [10]; 10+1F: Array [1… 10] of Boolean; 1*10G: list1; 2*5End;Varx: Rectype; 43=10+10+11+12 بايت فضا اشغال ميشود.432
اسلاید 433: ركوردهاي تودرتو فيلدهاي يك ركورد ميتوانند از هر نوعي باشد، از جمله ميتوانند از نوع ركورد ديگري باشند. در اينجا نيز مشابه قبل دسترسي به همان صورت ميباشد فقط به تعداد ركوردهاي تودرتو، . پيش ميآيد. به مثال زيرتوجه كنيد:TypeRec = record a, b: integer; c: char; x: Record p: integer; q: integer; End; End;433
اسلاید 434: Var r: Rec;دراينجا يك ركورد تودرتو به نام Rec تعريف شده است كه متغير r از آن نوع تعريف شده است. سپس براي دسترسي به فيلدهاي a , b ,c ميتوان به صورت زير عمل كرد:r.ar.bولي براي دسترسي به فيلدهاي p ,q چون متعلق به ركورد x نيز هستند داريم:r.x.pr.x.q434
اسلاید 435: آرايهاي از ركوردها هنگاميكه ما تعدادي داده مشابه داريم ولي در هريك، دادههاي مختلفي وجود دارد ميتوانيم يك ركورد تعريف كرده، سپس آرايهاي از آن تعريف كنيم. Type Student = recordName: string[10];Id: integer;Age: integer; End; Arr_stu: array[1..10] of student;Var S: Arr_stu;435
اسلاید 436: در بالا ابتدا يك ركورد دانشجو تعريف شده است، سپس به تعداد 10 نفر دانشجو تحت آرايه Arr_stu شكل گرفته است و سرانجام متغيري به نام S از نوع آن تعريف شده است. مشابه ساختار آرايه، چيزي عوض نشده است و فقط هر عنصر آرايه، يک ركورد ميباشد كه داراي سه فيلد مطابق جدول فوق ميباشد. براي دسترسي به آرایه فوق داريم:S[1].name S[1].idS[1].ageS[2].nameS[2].id...... 436
اسلاید 437: ارسال ركورد به زيربرنامهها ركوردها را ميتوان مشابه انواع تعاريف ساده ديگر به صورت پارامترهاي متغير و مقدار به زيربرنامه ارسال كرد. ولي نوع برگشتي توابع نميتواند از نوع ركورد باشد، يعني حتماً بايد از نوع ساده نظير integer، char و... باشد و از انواع تركيبي نظير ركورد، آرايه، مجموعه و فايل نميتواند باشد.اگر بخواهيم ركوردي را بصورت پارامتر به زيربرنامه ارسال كنيم، ابتدا بايد آنرا در type تعريف كرده و سپس ارسال شود وگرنه كامپايلر خطا صادر ميكند. 437
اسلاید 438: مثال : ميخواهيم برنامهاي بنويسيم كه ركورد stu را براي 30 دانشجو ايجاد كرده، به كمك زيربرنامه مقداردهي شده و چاپ شوند.Program test;Const no = 30;TypeStu-rec = RecordName: string [10];ID: integer;Age: record Day: integer; Month: integer; Year: integer;End;End;Stu_arr=array[1..no] of stu_rec;438
اسلاید 439: VarStu: stu_rec;Procedure ReadStu(Var S: Stu_rec);Vari: integer;Begin for i:= 1 to no do Readln(S[i].name, S[i].id, S[i].age.day, S[i].age.month, S[i].age.year);End;439
اسلاید 440: Procedure WriteStu(S: Stu_rec);Vari: integer;Begin for i:= 1 to no do Writeln(S[i].name, , S[i].id, , S[i].age.day, , S[i].age.month, , S[i].age.year);End;Begin ReadStu(Stu); WriteStu(Stu);End. 440
اسلاید 441: تمرينات براي گونههاي حيوانات يك پارك نظير پرندگان وحشي ركوردي شامل نام، دسته، محيط زندگي، سن بسازيد. در نظر بگيريد كه در پارك 100 گونه از يك پرنده وحشي وجود دارد (راهنمايي: آرايهاي از ركورد با فيلدهاي گفته شده بسازيد). برنامهاي بنويسيد كه براي نگهداري تاريخ به صورت روز، ماه و سال براي 100 سال بكار رود. در واقع به صورت تقويم باشد و جملهاي در مورد آن تاريخ را نگهداري كنيد؟ (راهنمايي: آرايهاي 366 تايي از روز بهمراه آرايهاي از 12 ماه و يك سال و يك رشته را به صورت يك ركورد در نظر گرفته سپس براي 100 سال بصورت يك آرايه صدتايي در نظر بگيريد.)441
اسلاید 442: فصل 14(Files) فــايـلهاهدفهاي كلي مفهوم فايل و انواع آن موارد استفاده از فايلها442گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 443: ÷ هدفهاي رفتاري در برنامهاش از فايلها استفاده كند.. براي برنامههاي با دادههاي زياد از فايل استفاده كند.. با فايلهای دادهاي و بايزي برنامهنويسي كند.دانشجو پس از مطالعه اين فصل بايد بتواند:443گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 444: مقدمهبراي ذخيره دائمي دادهها از ساختاري به نام فايل (File) استفاده ميكنيم. تاكنون همه عمليات لازم در حافظه اصلي انجام ميگرفت كه گذرا و فقط به زمان اجراي برنامه و روشن بودن كامپيوتر بستگي داشت. ولي در فايلها چنين نيست، بلكه دادهها در فايلهايي قرار دارند كه حتي بعد از خاموش كردن كامپيوتر، بعدها قابل دسترسي است.444گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 445: فايلهاي متني (Text) يك فايل متني از تعداد كاراكتر تشكيل شده است كه با يك اسم در روي ديسك ذخيره شده است. چون فايل از نوع متني است ميتوانيد دادههاي داخل آنرا مشاهده كنيد.ساختار دادهها در يك فايل متني بدين صورت است كه تعدادي خط وجود دارد كه به علامت EOLN ختم ميشوند و در انتهاي فايل نيز علامت EOF قرار دارد. طول خطوط نامشخص است و اندازه فايل ممكن است بسيار بزرگ يا كوچك و يا تهي باشد. 445گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 446: طريقه ایجاد يك فايل متنيتعریف یک متغیر فایلی نسبت دادن اسم فایل به متغیر فایلی ایجاد فایل با دستور Rewrite446
اسلاید 447: تعریف یک متغیر فایلیName : Text;نسبت دادن اسم فایل به متغیر فایلیAssign(FileVar , ‘NameFile’ )ایجاد فایل با دستور RewriteRewrite( FileVar )447
اسلاید 448: مثال : برنامهاي بنويسيد كه از ورودي 10 عدد دريافت كند و آنها را به ترتيب هر كدام دريك خط ازيك فايل خروجي بريزد و در انتها تعداد و مجموع آنها را بنويسد.Var f: Text;A: Array [ 1.. 10] of integer;Sum, i: integer;Begin Sum: = 0;Writeln ( Enter 10 numbers: ); For i: = 1 to 10 do begin Read (A [i]); Sum: = sum + A[i]; end; Assign (f, out.dat); Rewrite (f);448
اسلاید 449: For i: = 1 to 10 do Writeln (f, A[i]); Writeln (f, Sum); Close (f);End.بعد از نوشته شدن اطلاعات در فایل ، فایل باید بسته شود برای اینکار از روال زیر استفاده می شود :Close(FileName)449
اسلاید 450: طريقه خواندن اطلاعات از يك فايل متنيتعریف یک متغیر فایلی نسبت دادن اسم فایل به متغیر فایلی باز کردن فایل برای خواندن با دستورReset450
اسلاید 451: باز کردن فایل برای خواندن با دستورReset ( FileName )دستور Read وReadln برای خواندن اطلاعات از فایل بکار می روند .Readln بعد از خواندن دادههاي مورد نظر به سطر بعد ميرود. اين عمل براي Writeln نيز چنين ميباشد. ولي قبل از استفاده از اين دستورات بايد فايل متني براي خواندن يا نوشتن باز شود. دستور Reset فايل متني را براي خواندن باز ميكند و مكان نما را ابتداي فايل ميبرد. دستور Rewrite فايل متني را براي نوشتن در آن باز كرده، و مكان نما را به ابتداي آن ميبرد.451
اسلاید 452: حال بافرض موجود بودن فایل متني test.dat ميخواهيم اعداد داخل فايل را كه پنج تا هستند را از فایل خوانده باهم جمع كنیم :Program usefile ;Varf: Text;str1, str2: string; a, b, c, d, e: integer;beginAssign (f, Test. dat );Reset (f);Readln (f, str1);Readln (f, a, b, c);Readln (f, d, e, str2);Write (str2, : , a + b + c + d + e );Close (f);End.452
اسلاید 453: مثال : برنامهاي بنويسيد كه يك فايل متني شامل چند جمله را از ورودي دريافت كرده و يك كپي از فايل درخروجي بسازد.var f1,f2: Text; str1,str2 : string ; ch : char ;begin write(Enter Input file: ); readln(str1); write(Enter output (copy) file: ); readln(str2); assign(f1,strl); reset(f1); assign(f2,str2); rewrite(f2);453
اسلاید 454: در اين برنامه ابتدا دو فايل به نامهايشان نسبت داده ميشوند و ترتيب براي خواندن و نوشتن باز ميشوند. سپس توسط eof شرط خاتمه فايل ورودي يعني f1 بررسي ميشوند و در يك حلقه تو در تو while شرط خاتمه خطوط نيز توسطeoln بررسي شده و كاراكترها از فايل ورودي خوانده شده و در فايل خروجي نوشته ميشوند. 454
اسلاید 455: while not eof ( f1 ) do begin while not eoln( f1 ) do begin read(f1,ch); write(f2,ch); end; readln(f1); writeln(f2); end; Close(f1); Close(f2);End.455
اسلاید 456: فايلهاي دودويي و نوعدار(Binary & Typed ) اين نوع فايلها در زبان پاسكال از تايپهاي مختلف record ,array ,read ,integer ,char و … تشكيل شده است كه نياز به پردازش متنوعشبيه مرتبسازي، جستجو، حذف و… دارند. اين فايلها پس از ايجاد توسط برنامه، قابل رؤيت توسط ويراشگرها نيستند، بلكه به صورت كدهاي اسكي ميباشند يعني دودويي ميباشند. نحوه دسترسي به اطلاعات آنها نيز به صورت تصادفي (Random) است.456
اسلاید 457: طريقه ایجاد يك فايل نوع دارتعریف یک متغیر فایلی نسبت دادن اسم فایل به متغیر فایلی ایجاد فایل با دستور Rewrite457
اسلاید 458: تعریف یک متغیر فایلیName : File Of FileType ;نسبت دادن اسم فایل به متغیر فایلیAssign(FileVar , ‘NameFile’ )ایجاد فایل با دستور RewriteRewrite( FileVar )458
اسلاید 459: نحوه تعريف يك فايل دودويي نوعدار از انواع مختلف در زير آورده شده است:Const n=100;Type Student = Record Name: string[10]; Family: String[15]; Age: integer; ID: integer; end;Sarray = Array [1..n] of student;459
اسلاید 460: Varفايل دودويي از نوع كاراكتر Bf1: file of char;فايل دودويي از نوع صحيح Bf2: file of integer;فايل دودويي از نوع ركورد دانشجو Bf3: file of student;فايل دودويي از مجموعهA تا Z Bf6: file of set of A..Z; مثال : 460
اسلاید 461: مثال : برنامهاي بنويسيد كه تعداد رشته (حداكثر 10 تايي) از ورودي خوانده و در يك فايل دودويي بنويسيد.Const n= 10;Var Bf: file of strin[10]; Str: string [10]; i: integer;Begin Assign (Bf,out.dat); Rewrite (Bf); For i:=1 to n do Begin Readln (str); Write (Bf,str); End; Close (Bf);End.461
اسلاید 462: در جدول صفحه بعد تمام روالهاي كتابخانهاي پاسكال جهت كار با فايلها آورده شده است كه به همراه توضيحات لازمه جهت كار با آنها ميباشد. همچنين براي هر تابع و رويه محل مورد استفاده آن در ستونی مشخص شده است . 462
اسلاید 463: 463
اسلاید 464: 464
اسلاید 465: مثال های حل شده مثال : برنامهاي بنويسيد كه تعداد خطوط يك فايل متني را بدست آورد.Var F: text ; ch : char ; str: string[20]; count: integer;Begin Write (Enter the file name: ); Readln(str); Assign(f,str); Reset(f);465
اسلاید 466: count:=0; While not eof(f) do begin While not eoln(f) do Read(f,ch); Readln(f); count:=count+1; end; Write(the number of lines in file is: ,count);End.466
اسلاید 467: مثال : ركوردي از كتابها در نظر گرفته، تعداد10 كتاب را در يك فايل نوع دار ذخيره كنيد.Const n = 10;Type Booktype = Record name: string[20]; ID: integer; end;Var Bf: file of Booktype; I , ID : integer; name: string[20]; Book: Book type;467
اسلاید 468: Begin Assign (Bf,book.dat); Rewrite (Bf); For I := 1 to n do begin Write (Enter the name & ID of book: ); Readln (name, ID); Book.name:= name; Book.ID:= ID; Write (Bf, Book); End; Close (Bf);End. 468
اسلاید 469: تمرينات برنامهاي بنويسيد كه از يك فايل متني از اعداد حقيقي كه در سطرها و ستونها مختلف قرار دارند، ميانگين دادهها را بدست آورده و در مانيتور چاپ كند.برنامهاي بنويسيد كه در انتهاي يك فايل متني، همان فايل متني را اضافه كند. برنامهاي بنويسيد كه در يك فايل نوع دار از كاراكترها، اطلاعات آماري هر كاراكتر را بدست آورده، يعني تعداد هر كاراكتر را بدست آورد. مثلاً كاراكتر A به تعداد 45 تا و كاراكتر B به تعداد 36 تا و…469گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 470: فصل 15تحليل الگوريتمها هدفهاي كلي مفهوم و تعريف الگوريتم مفهوم كارايي يك الگوريتم مرتبه يك الگوريتم470گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 471: ÷ هدفهاي رفتاري برنامه خود را تحليل زماني نمايد. مرتبه الگوريتم را بدست آورد. الگوريتمهاي بازگشتي را تحليل نمايد.دانشجو پس از مطالعه اين فصل بايد بتواند:471گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 472: مقدمه تحليل يك الگوريتم يعني ارزيابي روشهاي مختلف حل آن مسئله، بررسي و محاسبه بهترين و بدترين حالتها، بصورتي كه با توجه به شرايط بهترين حالت را بتوان انتخاب كرد. الگوريتم در واقع تعداد محدودي از دستورالعملها می باشد كه بترتيب اجرا ميشوند و هدف خاصي را دنبال ميكنند472گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 473: تعريف مرتبه يا پيچيدگي الگوريتم (O بزرگ) براي بدست آوردن بدترين حالت اجراي يك الگوريتم يا مرتبه پيچيدگي الگوريتم از O بزرگ استفاده ميكنيم و بنا به تعريف عبارتست از f(n)=O(g(n)) و ميخوانيم f(x) از مرتبه g(x) ميباشد، اگر و تنها 473گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 474: رمثال : 1+n2=f(n) ميتوان با در نظرگرفتن g(n)=n و3=c رابطه زیر حاصل می شود :1n n>=3 <= cg(n)=1n+2f(n)=لذا ميتوان گفت، پيچيدگي زماني f(n) از مرتبه O(n) ميباشد.474گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 475: بدست آوردن مرتبه الگوريتمها براي بدست آوردن مرتبه اجراي الگوريتمها بايد به دقت بررسي شود و تعداد تكرار آن الگوريتم بدست آورده شود. يعني در واقع تعداد تكرارها بدست آورده شود و سپس با هم جمع شده و مطابق مثالهاي قبلي به پيچيدگي زمان واقعي رسيد. براي اين منظور از الگوريتمهاي ساده شروع كرده و به پيچيده ميرسيم.475گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 476: فرض كنيد الگوريتمي داراي حلقههاي ساده به شكل زير باشد:x:= 0;For I :=1 to n do x:=x+1; كه در آن n تعداد ورودي ميباشد. يعني حلقه for بستگي به پارامتر n دارد. همان طور كه از تعريف حلقه for برميآيد تعداد 1+1-n تكرار يعني n تكرار وجود دارد و لذا قطعه برنامه فوق از مرتبهO(n) ميباشد.476گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 477: مثال : مرتبه تابع زير را بدست آوريد:Function fact ( n : integer ) : integer ;var f,i: integer;begin f:=1; for I := 1 to n do f:=f*i; fact:=f;end;477گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 478: تابع فوق فاكتوريل عدد n را بر ميگرداند. همانطور كه ميبينيد تابع شامل يك حلقه for ساده بوده كه از يك تا n متغير بوده و لذا n بار تكرار ميشود. 2 جمله ساده نيز وجود دارد که زمان های ثابتی دارند. بنابراین مرتبه تابع بالا برابر است با : O(n)478گروه آموزشی مهندسی ایران Iranian Engineering Group WWW.MOHANDE30.COM
اسلاید 479: تمرينات پيچيدگي زماني توابع زير را بدست آوريد:479
اسلاید 480: پيچيدگي زماني تابع زير را بدست آوريد:Function test( n : integer ) : integer ;var i,x: integer;Begin x:=0; for i:=1 to n do x:=x+1; for i:=1 to n do for j:=1 to n do x:=x+1; test:=x;End.480
خرید پاورپوینت توسط کلیه کارتهای شتاب امکانپذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.
در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.
در صورت بروز هر گونه مشکل به شماره 09353405883 در ایتا پیام دهید یا با ای دی poshtibani_ppt_ir در تلگرام ارتباط بگیرید.
- پاورپوینتهای مشابه
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.