الگوریتم ها
در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونتها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.
- جزئیات
- امتیاز و نظرات
- متن پاورپوینت
الگوریتم ها
اسلاید 1: فصل 1Algorithm الگوریتم هاهدفهاي كلي: شناخت حل مسئله و ارائه الگوریتم شناخت اجزاء لازم برای حل مسئله بررسی صحت الگوریتم
اسلاید 2: هدفهاي رفتاري الگوریتمی را برای حل مسئله ارائه دهد. الگوریتم های مختلف برای یک مسئله را مقایسه کند. شرط ها و حلقه ها را در الگوریتم بکار ببرد . دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 3: تعريف الگوريتم الگوريتم مجموعهاي از دستورالعمل ها، براي حل مسئله ميباشد كه شرايط زير را بايد دارا باشد: دقيق باشد جزئيات كامل حل مسئله را داشته باشد. پايانپذير باشد.
اسلاید 4: مقدمه در زندگي روزمره، انسان با مسائل مختلفي روبروست و براي هر كدام از اين مسائل (حل مشكلات) راه حلي و روشي را بر ميگزيند. مسائلی از قبيل راه رفتن، غذا خوردن، خوابيدن و غيره كه بشر تقريباً هر روز آنها را پيش روي خود دارد.همه اين مسائل نياز به روشي براي حل كردن دارند مثلا راه رفتن بايد با ترتيب خاصي و مراحل معيني انجام شود. تا مسئله راه رفتن براي بشر حل شود. اصطلاحاً روش انجام كار يا حل مسئله را الگوريتم آن مسئله مينامند
اسلاید 5: مراحل الگوريتم براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم) كه اصطلاحاً طراحي الگوريتم براي آن مسئله ناميده ميشود. در طراحي الگوريتم معمولاً سه مرحله زير را از هم جدا ميكنند: خواندن دادهها انجام محاسبات خروجيها
اسلاید 6: مثال :الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع دو عدد را محاسبه و چاپ نمايد. خروجيها انجام محاسبات وروديها مجموع دو عدد جمع دو عدد a , b شروع b ,a را بخوان.مجموع b , a را محاسبه و در sum قرار بده.sum را در خروجي چاپ كن پايان
اسلاید 7: خروجيها انجام محاسبات وروديها چاپ مجموع محاسبه مجموع a چاپ ميانگين محاسبه ميانگين b c مثال: الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين سه عدد را محاسبه و چاپ كند. شروع سه عدد از ورودي بخوان مجموع سه عدد را محاسبه و در Sum قرار بده.Sum را بر سه تقسيم كرده،در Ave قرار بده.Ave , Sum را در خروجي چاپ كن. پايان.
اسلاید 8: معمولا درك يك الگوريتم با شكل راحتر از نوشتن آن بصورت متن ميباشد. لذا الگوريتم را با فلوچارت(flowchart)نمايش ميدهند. فلوچارت از شكلهاي زير تشكيل ميشود.Begin شروعخاتمهEndخواندن Readچاپ کردن write علامتهاي شروع و پايان: كه معمولا از يك بيضي استفاده ميكنند: علامتهاي ورودي و خروجي: كه معمولا از متوازيالاضلاع استفاده ميشود:
اسلاید 9: علامتهاي محاسباتي و جايگزيني: براي نمايش دستورات جايگزيني و محاسباتي از مستطيل استفاده ميكنند:جایگزین یا محاسبات علامت شرط: براي نمايش شرط از لوزي استفاده ميشود. علامت اتصال: براي اتصال شكلهاي مختلف بهم از فلشهاي جهتدار استفاده ميكنند.
اسلاید 10: BeginRead(a,b,c)Sum a+b+cAve sum/3Write(sum,ave)Endفلوچارت مجموع سه عدد
اسلاید 11: مثال: فلوچارتی رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس محتويات دو عدد را با هم جابجا نمايد.براي حل اين مسئله b , a را دو متغير كه در آنها دو عدد خوانده شده، قرار ميگيرند در نظر ميگيريم. سپس با استفاده از يك متغير كمكي محتويات اين دو عدد را جابجا ميكنيم :
اسلاید 12: 1215temptempab121512abtemp151512abtemp151212abtemp
اسلاید 13: BeginRead(a,b)temp aa bWrite(a,b)Endb tempفلوچارت مسئله بالا بصورت زير خواهد بود:
اسلاید 14: تمرين1ـ فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت كرده محيط و مساحت آنرا محاسبه و چاپ كند.2ـ فلوچارتي رسم نمائيد كه شعاع دايرهاي را از ورودي دريافت كرده، محيط و مساحت آنرا محاسبه و چاپ نمايد.3ـ فلوچارتي رسم كنيد كه سه عدد Third , second, first را از ورودي دريافت كرده، محتويات آنها را جابجا نموده، حاصل را در خروجيچاپ كند.
اسلاید 15: 4ـ فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده، سپس محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند.5ـ فلوچارتي رسم نمائيد كه عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت كرده سپس آنرا به درجه فارنهايت تبديل كند.
اسلاید 16: دستورالعملهاي شرطي در حل بسياري از مسائل يا تقريباً تمام مسائل نياز به استفاده از شروط جزء، نيازهاي اساسي محسوب ميشود. همانطور كه ما خودمان در زندگي روزمره با اين شرطها سركار داريم. بطور مثال اگر هوا ابري باشد ممكن است چنين سخن بگوييم: اگر هوا باراني باشد سپس چتري برميدارم. در غير اينصورت چتر برنميدارم.
اسلاید 17: در حالت كلي شرط را بصورت زير نمايش ميدهند:If شرط یا شروط thenعمل يا اعمال yes NOعمل يا اعمال بعدي
اسلاید 18: مثال : فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، فرد يا زوج بودن آن را تشخيص دهد.BeginRead(a)R a mod 2Write(‘odd’)Endif R=0 thenNoyesWrite(‘even’)
اسلاید 19: BeginRead(a,b)max a Write(max)Endif b>maxNoyes max bمثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد را پيدا كرده در خروجي چاپ نمايد.
اسلاید 20: BeginRead(a,b,c)min a Write(min)Endif b<min thenNoyesmax bif c<min thenyesmin c Noمثال : فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده، كوچكترين عدد را يافته در خروجي چاپ نمايد:
اسلاید 21: نمونه اجراي فلوچارت بالا بصورت زير ميباشد:
اسلاید 22: تمرين1- فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده، قدر مطلق عدد را در خروجي چاپ كند.2- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت، منفي يا صفر بودن عدد را تشخيص داده، در خروجي با پيغام مناسب چاپ كند.3- فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده، بخشپذيري آن بر 3 و 5 را بررسي نمايد.4ـ فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي دريافت كرده، ريشههاي آن را محاسبه در خروجي چاپ كند.
اسلاید 23: حلقههادر حل بسياري از مسائل با عملياتي روبرو ميشويم ، كه نياز به تكرار دارند و عمل تكرار آنها به تعداد مشخصي انجام ميگيرد. فرض كنيد، بخواهيم ميانگين 100 عدد را محاسبه كنيم، در اينصورت منطقي بنظر نميرسد كه 100 متغير مختلف را از ورودي دريافت كنيم سپس آنها را جمع كنيم.
اسلاید 24: انواع حلقه هاحلقه های با تکرار مشخصحلقه های با تکرار نا مشخص
اسلاید 25: حلقه های با تکرار مشخصدر اين نوع حلقهها تعداد تكرار مشخص ميباشد اين حلقه از اجزاء زير تشكيل ميشود:1ـ انديس حلقه 2ـ مقدار اوليه براي انديس حلقه 3- مقدار افزاينده براي انديس حلقه (معمولا يك واحد در هر مرحله)4ـ مقدار نهايي (تعداد تكرا حلقه)5ـ شرطي براي كنترل تعداد تكرار حلقه
اسلاید 26: i 1 if i<=n yesNoمجموعه دستورات حلقه i i+1اتمام كار حلقه اين حلقهها را غالباً با فلوچارت بصورت زير نمايش ميدهند:
اسلاید 27: مثال : فلوچارتي رسم نمائيد كه عدد n را از ورودي دريافت كرده، مجموع اعداد از يك تا n را محاسبه كند.i انديس حلقه n مقدار نهايي
اسلاید 28: BeginRead(n)I 1 sum 0if I<=nyesNoWrite(sum)Endsum sum+II I+1حلقه
اسلاید 29: نمونه اجراي فلوچارت بالا بصورت زير است:
اسلاید 30: مثال : فلوچارتي رسم كنيد كه n عدد از ورودي دريافت كرده، بزرگترين مقدار از بين n عدد را پيدا كرده در خروجي چاپ نمايد.انديس حلقه iمقدار نهايي nبزرگترين مقدار Max
اسلاید 31: BeginI 2 max a if i<=n thenyesNowrite(max)Endi i+1حلقهRead(a)Read(n)if a > maxmax aNoyes
اسلاید 32: مثال : فلوچارتي رسم نمائيد كه n , x ، دو عدد صحيح مثبت را از ورودي دريافت كرده سپس x به توان n را محاسبه كند.انديس حلقه iمقدار نهايي nعدد به توان n pow
اسلاید 33: Begini 1 pow 1 if i<=n thenyesNowrite(pow)Endpow pow*xحلقهRead(n,x)i i+1
اسلاید 34: حلقههايي كه تعداد تكرار آنها مشخص نيست (در پاسكال به حلقه while مشهورند.)در اين حلقهها با توجه به ورودي، تعداد تكرار مشخص ميشود. و دقيقاً نميتوان تعداد تكرار حلقه را بدون ورودي معين كرد. اين حلقه ها فقط شامل شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا ميشود.
اسلاید 35: If شرط يا شروطمحموعه دستورالعملها و جاگزينها yesNoدر حالت كلي اين نوع حلقهها بصورت زير نمايش داده ميشوند:
اسلاید 36: مثال: فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد.عدد خوانده شده N تعداد ارقام count
اسلاید 37: Begincount 0 if N>0 thenyesNowrite(count)EndN N div 10حلقهRead(N)count count+1
اسلاید 38: مثال : فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، سري فيبوناچي قبل از آنرا توليد نمايد.در حالت كلي جملات سري بصورت:fk=fk-1+fk-2عدد خوانده شدهNجمله سوم سري f3جمله دوم سري f2جمله اول سري f1
اسلاید 39: BeginF1 0f2 1 if f3>N thenyesNoEndحلقهRead(N)f1 f2f2 f3f3 f1+f2f3 f1+f2 write(f3)
اسلاید 40: تمرين 1- فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، كامل بودن آنرا بررسي نمايد. (عدد كامل، عددي است كه مجموع مقسومعليههاي آن با خودش برابر باشد.)2- فلوچارتي رسم كنيد كه N را از ورودي دريافت كرده، N جمله سري فيبوناچي را توليد نماید.3ـ فلوچارتي رسم نمائيد كه دو عدد N , M را از ورودي خوانده، بزرگترين مقسومعليه مشترك دو عدد را محاسبه و چاپ كند.
اسلاید 41: حلقههاي تودرتو الگوريتمهايي كه تا حال بكار برديم، فقط شامل يك حلقه بودند.در صورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چندحلقه در داخل هم باشيم. در اين نوع حلقهها بايد دقت بيشتري به خرج دهيم، تا مشكلي پيش نيايد. اگر از حلقههاي نوع اول بصورت تودرتو استفاده كنيم در اينصورت براي هر حلقه شرط نهايي و انديس اوليه جداگانه بايد تعريف كنيم .
اسلاید 42: در حلقههاي تودرتو به ازاي يكبار تكرار حلقه اوليه، حلقه داخلي به اندازه مقدار نهايي خود تكرار ميشود. در كل اگر حلقه اوليه n بار تكرار شود و حلقه داخلي m بار، در اينصورت كل حلقه : بار تكرار خواهد شد.
اسلاید 43: فلوچارت حلقههاي تودرتو را ميتوان بصورت زير نشان داد:i 1 if j<=m thenNoحلقهj j+1yes...if i<=n thenj 1مجموعه دستورات و جايگزيني ها مجموعه دستورات و جايگزيني ها i i+1AAyesNoاتمام كار حلقه هاي تو در تو
اسلاید 44: انديس حلقه اول I ورودي N محاسبه فاكتوريل fact انديس حلقه داخلي j مجموع Sum مثال : فلوچارتي رسم نمائيد كه N را از ورودي دريافت كرده، مجموع سري زير را محاسبه نمايد:
اسلاید 45: i 2sum 1 Aif j<=i Nofact fact*jyesif i<=N fact 1j 2i i+1yesNoRead(N)Endsum sum+i/factAj j+1Write(sum)
اسلاید 46: تمرينات آخر فصل1- فلوچارتي رسم نمائيد كه N عدد از ورودي دريافت كرده تعداد اعداد اول و كامل را شمرده در خروجي چاپ نمايد.2- فلوچارتي رسم نمائيد كه N , X را از ورودي خوانده مقدار سري زير را محاسبه كند:
اسلاید 47: 3- فلوچارتي رسم نمائيد كه عددی را از ورودي دريافت كرده مقلوب عدد را محاسبه و در خروجي چاپ كند.4ـ فلوچارتي رسم كنيد كه تاريخ تولد شخصي را از ورودي خوانده، سن شخص را با تاريخ روز، محاسبه نموده در خروجي چاپ كند.5- فلوچارتي رسم نمائيد كه (m>n) N ,M را از ورودي دريافت كرده سري فيبوناچي بين N ,M را توليد كرده، در خروجي چاپ كند.
اسلاید 48: فصل 2كاربرد آرايه ها در الگوريتم ها هدفهاي كليشناخت الگوریتم های لازم برای جستجو و مرتب سازیشناخت آرایه ها و مفهوم آن مقایسه انواع روش های جستجو با هم
اسلاید 49: هدفهاي رفتاري از آرایه ها در حل مسئله استفاده کند . با استفاده از آرایه ها لیستی را مرتب نماید . در صورت لزوم در لیستی جستجو انجام دهد . دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 50: مقدمهفرض كنيد بخواهيم اطلاعات 100 كارمند را از ورودي بخوانيم و سپس آنها را مرتب كنيم، در اينصورت بايد وروديها را در جايي از حافظه ذخيره كنيم. در زبانهاي برنامهنويسي معمولا از آرايه براي ذخيره اطلاعات در حافظه استفاده ميكنند. در آرايهها ما با توجه به تعداد وروديها، طول آن را مشخص ميكنيم. سپس دادهها را خوانده در آن قرار ميدهيم.
اسلاید 51: تعريف آرايهخانههاي پشت سر هم از حافظه، كه همنوع بوده و توسط يك اسم معرفي ميشوند، آرايه نام دارد. نحوه دسترسي به هر يك از اعضاء آرايه، از طريق انديس آرايه امكانپذير است . براي تعريف آرايه ابتدا طول آرايه كه در حقيقت تعداد خانههاي آن را مشخص ميكند، معين ميكنيم. سپس نوع خانهها بايد معين شوند.در فلوچارتها آرايهها را بصورت زير نمايش ميدهيم:Name[ 1 .. Length ] طول آرايه اسم آرايه
اسلاید 52: براي خواندن يك آرايه از ورودي از حلقهها استفاده ميكنيم. فلوچارت خواندن آرايه از ورودي بصورت زير ميباشد:a[1..100]if i<=100 Noyes Read(a[i])i i+1i 1
اسلاید 53: با توجه به فلوچارت بالا براي دسترسي به عنصر iام آرايه در حالت كلي بصورت : Nam [ index ] انديس آرايه اسم آرايه عمل ميكنند.مثال: فلوچارتي رسم كنيد كه يك آرايه حداكثر 100 عنصري را از ورودي دريافت كرده، سپس آن را خروجي نمايش دهد.
اسلاید 54: 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+1NoEnd
اسلاید 55: مثال : فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده آن را به مبناي 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+1
اسلاید 56: a[1..100]i 1k 3a[1] 2a[2] 1 Read(N)مثال : فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده سپس اعداد اول قبل از آن را توليد نموده ، در يك آرايه قرار دهد.
اسلاید 57: 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 1NoyesNoA
اسلاید 58: جستجو و مرتب سازي ( search and sort )يكي از مسائلي كه در بحث طراحي الگوريتم بسيار مهم است، بحث مرتبسازي و جستجو ميباشد. منظور از جستجو اينست كه يك مقداري را از يك ليست جستجو كنيم و منظور از مرتبسازي اينست كه يك ليست مرتب از دادهها را توليد كنيم.براي جستجو و مرتبسازي الگوريتمهاي مختلفي وجود دارد در زير الگوريتمهای اوليه، براي جستجو و مرتبسازي را بررسي ميكنيم.
اسلاید 59: الگوریتم های جستجو ( search)دو الگوريتم زير غالباً براي جستجو بكار ميروند:جستجوي خطي linear searchجستجوي دودوئی binary search
اسلاید 60: در جستجوي خطي عبارت مورد جستجو را به ترتيب با اولين، دومين و … عنصرآرايه مقايسه ميكنيم اگر عنصر مورد جستجو پيدا شد اندیس آن را نمايش ميدهيم. جستجوي خطي linear search
اسلاید 61: فلوچارت جستجوي خطي بصورت زير است: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)Endyesyes
اسلاید 62: جستجوي دودوئی binary searchدر جستجوي دودوئی ، ليست مورد جستجو، مرتب ميباشد. لذا براي جستجو اعمال زير انجام ميشود:1- عنصر X با عنصر وسط آرايه كه انديس آن برابر middle (low+high)/2 مقايسه ميشود.
اسلاید 63: 2ـ اگر x از عنصر وسط كوچكتر باشد، عنصر مورد نظر احتمالاً در قسمت بالای ليست قرار دارد. لذا آرايه با انديس، جديد در نظر گرفته ميشود و قسمت پايين ليست از فضاي جستجو حذف ميشود.3ـ اگر x از عنصر وسط آرايه بزرگتر باشد قسمت بالاي ليست حذف ميشود و فضاي جستجو، قسمت پايين آرايه خواهد بود.4- اگر x برابر عنصر وسط باشد عمل جستجو خاتمه ميپذيرد.
اسلاید 64: مرتبسازي بحث بعدي اين فصل ميباشد. براي مرتب كردن دادهها نيز الگوريتمهاي مختلفي وجود دارد، كه هر كدام مزايا و معايب خاص خود را دارد. بحث مفصل در اين مورد را به فصلهاي بعد واگذار ميكنيم.مرتب سازي (sort )
اسلاید 65: تمرين فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده، اعداد كامل قبل از خود را توليد و در يك آرايه قرار دهد.فلوچارتي رسم نمائيد كه يك آرايه حداكثر 100 عنصري از ورودي دريافت كرده، عناصري از آن كه اول هستند را با صفر كردن حذف نمايد.فلوچارتي رسم نمائيد كه يك عدد حداكثر 20 رقمي را توسط آرايهاي از ورودي دريافت نمايد. سپس يك عدد تک رقمي را از ورودي خوانده در عدد 20 رقمي ضرب نموده، حاصل را در خروجي چاپ نمايد.
اسلاید 66: فصل 4 ساختار برنامه در زبان پاسکال هدفهاي كليشناخت ساختار يك برنامه در زبان پاسكال شناخت اجزاي تشكيل دهنده يك برنامه بررسي دستگاههاي خروجي و دستورات لازم در زبان پاسكال براي توليد خروجي
اسلاید 67: هدفهاي رفتاري اجزاء لازم براي نوشتن برنامه در زبان پاسكال را بداند. يك شناسه صحيح در زبان پاسكال را تعريف كند. ساختار يك برنامه در زبان پاسكال و اعلانهاي مربوط به برنامه را تعريف نمايد. يك برنامه ساده به زبان پاسكال كه فقط خاصيت خروجي دارد، بنويسد. دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 68: کلمات ذخيرهشده ( Reserved Words )شناسهها ( identifier ) اجزاي تشکيلدهنده يک برنامه
اسلاید 69: کلمات ذخيره شده، کلماتي هستند که مترجم زبان آنها را ميشناسد و معناي خاصي براي زبان دارند. مترجم زبان به محض مشاهده اين کلمات اعمال خاصي را انجام ميدهد. هر زبان داراي تعداد مشخصي کلمات ذخيره شده ميباشد و اين تعداد قابل افزايش توسط برنامهنويس نيست. کلمات ذخيرهشده ( Reserved Words )
اسلاید 70: ليست کلمات ذخيره شده در پاسکال عبارتند از: 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 shl
اسلاید 71: شناسه در پاسکال براي نامگذاري ثابتها، تايپها، پروسيجروها، توابع، ميدانهاي يک رکورد، برنامه و همچنين يونيت مورد استفاده قرار ميگيرد. شناسهها ( identifier )
اسلاید 72: در حالت کلي دو نوع شناسه وجود دارد :id هاي استاندارد: اين نوع id ها از قبل در زبان پاسکال تعريف شدهاند و در برنامهها، معناي خاصي دارند . id هاي غيراستاندارد: اين نوع id ها بوسيله کاربر بطور مجزا تعريف ميشوند و اصطلاحاً به آنها userdefined گفته ميشود.
اسلاید 73: ساختار برنامه در زبان پاسکال اجزاء اصلي يک برنامه به زبان پاسکال بصورت زير ميباشد:عنوان برنامهقسمت تعاريف برنامه قسمت دستور العملها
اسلاید 74: قسمت تعاريف برنامهاعلان ثابتها Constant Declarationاعلان انواع Type Declarationاعلان متغيرها Declaration Variable اعلان برچسبها Declaration Label
اسلاید 75: درحالت کلي ميتوان شکل يک برنامه در زبان پاسکال را بصورت زير بيان کرد:استفاده از کلمه ذخيره شده Program و اسم برنامه ( که ميتواند بکار برده نشود ) قسمت تعاريف شناسهها بلوک اصلي برنامه که با Begin شروع و به End همراه نقطه ( . ) ختم ميشود.هر دستور در پاسکال به ( ; ) ختم ميشود.
اسلاید 76: نمودارهاي يک برنامه و بلوک بترتيب به صور ت زير ميباشد: Programشناسه)شناسه(;block0,BeginStatementEnd.;
اسلاید 77: مثال هاي حل شده Program Print ( output ) ;Begin Writeln ( Pascal Language ) ; Writeln ( Hello ) ;End.
اسلاید 78: خروجي برنامه بالا بصورت زير ميباشد: Pascal Language Hello
اسلاید 79: فصل 5انواع عملگرها و دادهها در زبان پاسکالهدفهاي كليشناخت انواع دادههامعرفي انواع عملگرها در زبان پاسكال بررسي اولويت عملگرهامعرفي دستورات جايگزيني در پاسكال
اسلاید 80: دانشجو پس از مطالعه اين فصل بايد بتواند: هدفهاي رفتاريانواع عملگرها در زبان پاسكال را بكار ببرد انواع دادهها براي يك برنامه را تعريف كند.اولويت عملگرها در يك عبارت را تشخيص دهد.يك برنامه ساده با عمليات معمولي را بنويسد.
اسلاید 81: عملگرها عملگرها نمادهايي هستند که براي انجام اعمال خاصي مورد استفاده قرار ميگيرند.عملگرها براي انجام اعمال خاصي روي عملوندها ( Operands ) بکار ميروند. با توجه به نوع عملگر ممکن است يک يا دو عملوند وجود داشته باشد. عملگرها در زبان پاسکال از تنوع زيادي برخوردارند.
اسلاید 82: در پاسکال چهار دسته عملگر وجود دارند :محاسباتي رابطه اي منطقي بيتي
اسلاید 83: عملگرهاي محاسباتي
اسلاید 84: عملگرهاي رابطه اي
اسلاید 85: عملگرهاي منطقي
اسلاید 86: عملگرهاي بيتي
اسلاید 87: تقدم عملگرها
اسلاید 88: انواع دادهها ( data types ) دادههاي ساده (Simple data type) دادههاي ساختيافته ( ( Structural Data Types دادههاي اشارهگر (Pointer Data Types)
اسلاید 89: دادههاي ساده (Simple data type)صحيح ( integer )اعشاري (حقيقي) نوع منطقي (Boolean type) نوع کاراکتري (Char type) نوع رشته اي (String type)
اسلاید 90: صحيح ( integer )
اسلاید 91: اعشاري (حقيقي)
اسلاید 92: دادههاي ساختيافته ( ( Structural Data Types انواع دادههاي ساختيافته عبارتند از:آرايههارکوردهامجموعههافايلها
اسلاید 93: متغيرها (Variables) متغير، محلي از حافظه است که داراي نوع و اسم ميباشد. نوع متغير همان نوع داده بوده و اسم متغير از قواعد اسمگذاري شناسه تبعيت ميکند.در پاسکال براي معرفي متغيرها بصورت زير عمل ميکنند:Var (کلمه ذخيره شده) نوع متغير: اسم متغير ;
اسلاید 94: ثابتها (Constants) يک ثابت نام شناسهاي است که در آغاز يک برنامه، يک مقدار در آن جاگزين ميشود. درست مانند متغيرها. ثابتها را ميتوان بعنوان خانههايي از حافظه در نظر بگيريم که مقدار دادهها در آنها ذخيره ميشود ولي مقدار ثابت مشخص ميباشد، طوري که نميتوان مقدار يک ثابت را در برنامه خود بوسيله يک دستور تغيير داد.: براي تعريف يک ثابت بصورت زيرعمل ميکنيم مقدار ثابت = اسم متغير Const
اسلاید 95: دستور جايگزيني براي قرار دادن يک مقدار يا مقدار يک متغير داخل يک متغير ديگر، از دستور جايگزيني استفاده ميکنند. شکل کلي يک دستور جايگزيني در پاسکال بصورت زير است: عبارت محاسباتي = : اسم شناسه عبارت قياسي يا عبارت منطقي
اسلاید 96: افزودن توضيحات به برنامه (Comment) افزودن مطلب توضيحي در درون خود برنامه عملي پسنديده و مطلوب است بدين ترتيب که بعد از مدتي امکان فراموشي کار با برنامه از بين ميرود و در کل ميتوان گفت که نوشتن توضيحات در برنامه خوانايي آن را بالا ميبرد. در پاسکال توضيحات بين دو آکولاد محصور ميشوند.{ This is comment } { This program written by A. Pascal }
اسلاید 97: مثال جابجا کردن مقدار دو متغير 151715 17151715171715aa ab bb temptempab
اسلاید 98: 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
اسلاید 99: چند نکته در مورد برنامهنويسي استفاده از اسامي با مفهوم براي متغيرها استفاده از دستور Const در صورتي که مقدار ثابت در برنامه وجود داشته باشد.سوال جوابي بودن برنامه (وروديها و خروجيها بايد داراي پيغام مناسب باشند)نوشتن برنامه با فرمت مناسب (رعايت قرار گرفتن خطوط مختلف برنامه زير هم و فاصله گذاشتن آنها از اول سطر و غيره)
اسلاید 100: تمرينات حاصل عبارتهاي زير را بدست آوريد: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 ))
اسلاید 101: : حاصل عبارتهاي منطقي را به ازاء مقادير زير مشخص کنيد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 = ?
اسلاید 102: تمرينات برنامهنويسي برنامهاي بنويسيد که ابعاد مثلث که عبارتند از 3 , 1.3 را در نظر گرفته محيط و مساحت آن را محاسبه و با پيغام مناسب در خروجي چاپ کند.برنامهاي بنويسيد که دو متغير صحيح با مقادير 3 , 15 را در نظر گرفته محتويات دو عدد را بدون استفاده از متغير کمکي جابجا نمايد.برنامهاي بنويسيد که سه عدد بنام هاي Third , Second , First بترتيب با مقادير 17 , 15 , 13 را در نظر گرفته بطور چرخشي مقادير آنها را جابجا نموده در خروجي با پيغام مناسب چاپ کند.
اسلاید 103: qفصل 6ورودي و خروجي هدفهاي كليمعرفي خروجي فرمتبندي شدهWriteln معرفي دستورات خروجي بررسي دستورات ورودي Read و ReadLn
اسلاید 104: هدفهاي رفتاريعبارات مورد نظر را در خروجي نمايش دهد.عبارات خروجي را با فرمت مناسب چاپ كند.متغيرهاي مورد نياز برنامه را از ورودي دريافت نمايد.برنامههاي ساده به زبان پاسكال بنويسد.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 105: خروجي با دستور Write اين دستور براي نوشتن اطلاعات در خروجي بکار ميرود. اطلاعات خروجي ميتوانند ثابتهاي عددي، مقادير متغيرها، عبارات و غيره باشند. شکل دستور در حالت کلي بصورت زير است: (....... و متغير2 و متغير1 )write يا (....... و عبارت 2 وعبارت1 ) يا (....... و ثابت 2 وثابت 1 )
اسلاید 106: مثال 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 = 25
اسلاید 107: خروجي با دستور Writeln اين دستور همانند دستور Write عمل ميکند با اين تفاوت که بعد از اجرا، کنترل را به ابتداي سطر بعد منتقل ميکند در نتيجه موجب چاپ دادههاي بعدي در ابتداي سطر بعد ميشود.
اسلاید 108: 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
اسلاید 109: خروجي فرمتبندي شده اگر بخواهيم اطلاعات با فاصله هاي مشخص يا در مکان مشخصي در صفحه نمايش قرار گيرند، بايد فرمت چاپ را در دستورات بيان شده مشخص کنيم.
اسلاید 110: طريقه تعيين فرمت چاپ براي اعداد صحيح فرمت اعداد صحيح بصورت زير مشخص ميشود: ( طول ميدان: داده صحيح ) Writeln يا Write
اسلاید 111: اگر طول ميدان از طول ارقام عدد صحيح بيشتر تعريف شود، عدد در منتهياليه سمت راست ميدان نوشته ميشود.اگر طول ميدان از طول ارقام عدد صحيح کمتر تعريف شود، طول ميدان به اندازه تعداد ارقام در نظر گرفته ميشود و طول ميدان تعريف شده بياثر خواهد بود.در تعريف طول ميدان براي متغيرها يا دادههايي از نوع صحيح به نکات زير توجه کنيد:
اسلاید 112: X:= 3200 ; A: = 12 ;B: = 217 ;Write ( X:3 , A:5 , B:5 ) ; مثال : خروجي 320012217
اسلاید 113: طول ميدان اعداد اعشاري براي نمايش اعداد اعشاري بصورت دلخواه، مي توان با تعريف طول ميدان و تعداد ارقام اعشاري، عدد مزبور را نمايش داد. : در حالت کلي طول ميدان را ميتوان به صورت زير تعريف کرد Write ( تعداد ارقام بعد از مميز: طول ميدان: متغير اعشاري ) يا Writeln
اسلاید 114: در تعريف فرمت براي اعداد اعشاري به نکات زير بايد توجه کرد: اگر طول ميدان بزرگتر از تعداد ارقام عدد ذکر شود، عدد در منتهي اليه سمت راست ميدان چاپ ميشود.اگر فقط طول ميدان ذکر شود، عدد به صورت نماد علمي در طول ميدان مشخص شده چاپ می شود .از آنجائي که براي نمايش اعداد در نماد علمي حداقل 8 محل مورد نياز است، لذا هنگامي که تنها طول ميدان ذکر شده باشد، اگر از 8 رقم کمتر باشد، حداقل 8 رقم در نظر گرفته ميشود.
اسلاید 115: هنگامي که طول ميدان همراه با تعداد ارقام بعد از مميز ذکر شود، اگر طول ميدان کوچکتر از مقدار عدد باشد، پاسکال تنها طول ميدان را به اندازهاي که مورد نياز است تصحيح کرده و آنرا برابر اندازه واقعي که عدد در آن قرار ميگيرد، اصلاح ميکند. اگر تعداد ارقام بعد از مميز زياد باشد و تعداد ارقام بعد از مميز ذکر شده در طول ميدان کمتر از تعداد ارقام اعشاري عدد باشد، تعداد ارقام اعشار مطابق درخواست برنامهنويس نشان داده خواهد شد و رقم آخر اعشار آن نسبت به عدد بعدي گرد ميشود.
اسلاید 116: طول ميدان کاراکترها و رشتهها براي نمايش رشتهها و کاراکترهاي با طول ميدان بصورت زير عمل ميکنيم. Write ( طول ميدان: متغير يا عبارت رشتهاي يا کاراکتري )در توربو پاسکال، کليه موارد گفته شده در مورد اعداد صحيح براي رشتهها نيز صادق است.
اسلاید 117: ورودي با Readln , Read از اين دستور براي خواندن داده ها و اختصاص آنها به متغيرها استفاده ميشود. در خواندن داده ها به دو موضوع بايد دقت شود: 1- منبع دادهها يعني دستگاه ورودي که از آن دادهها خوانده ميشود.. 2- متغيري که دادههاي خوانده شده در آن قرار ميگيرد
اسلاید 118: شکل کلي دستور ورودي Read بصورت زير ميباشد:;( ..... و متغير 2 و متغير 1Read ( اين دستور عمل خواندن دادهها و ذخيره آنها در متغيرها را انجام ميدهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتنهاي بعدي. در همان خط نگه ميدارد
اسلاید 119: 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 }مثال جابجا کردن محتويات دو عدد
اسلاید 120: خروجي برنامه بالا به صورت زير ميباشد:Please Enter two numbers 15 17First = 17 second = 15
اسلاید 121: تمرينات 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 ) ;: خروجي قطعه برنامه زير را تعيين کنيد
اسلاید 122: اگر متغير 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 ) ;
اسلاید 123: تمرينات برنامه نويسيبرنامهاي بنويسيد که دو عدد را از ورودي دريافت کرده و محتويات آنها را بدون استفاده از متغير کمکي جابجا نمايد. برنامهاي بنويسيد که سه عدد صحيح Third , Second , first را از ورودي با پيغام مناسب دريافت کرده سپس محتويات اين سه متغير را بصورت چرخشي جابجا نموده با پيغام مناسب در خروجي چاپ کند.
اسلاید 124: برنامهاي براي يک حسابدار اداره جمع آوري ماليات بنويسيد که صورت حسابهاي ماليات را محاسبه نمايد.ورودي: شماره شناسايي ماليات دهنده بهاي ارزيابي شده نرخ ماليات خروجي: صورت حساب بافرمت مناسب شامل تمام دادههاي ورودي و ميزان بدهي
اسلاید 125: فصل 7ساختارهاي شرطي و كنترلي هدفهاي كليمعرفي دستور caseIf and Elseمعرفي دستور شرطي بررسي دستورات تكرار for ، while ، repeat untilمعرفي دستورات شرطي متداخلبررسي چند تابع و روال استاندارد زبان پاسکال
اسلاید 126: ÷ هدفهاي رفتاري برنامههايي را بنويسد كه در آنها نياز به استفاده از شرط وجود دارد. تفاوتهاي بين دستورات مختلف با if و else- if را تشخيص دهد. برنامههايي كه نياز به تكرار تعدادي عمليات داشته باشند را بنويسد. در صورت نياز بتواند در برنامهها، از روالها و توابع استاندارد زبان استفاده نمايد.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 127: دستورات شرطي بطور کلي توسط اينگونه دستورات ميتوان بر حسب شرايط مختلف، تصميمات متفاوتي را اتخاذ نمود و برحسب برقرار بودن يا نبودن شرايط دستورات متفاوتي را اجرا نمود. دستورات شرطي در حالت کلي به دو نوع تقسيم ميشوند:if دستورCase دستور
اسلاید 128: دستور if هرگاه در طول برنامه نياز به استفاده از شرط يا شروط داشته باشيم، از دستور ستفاده ميکنيم. If دستور if بطور کلي به سه شکل بر حسب نياز ممکن است ظاهر شود: ساده ifElse همراه if هاي متداخل if
اسلاید 129: If – then در اين نوع دستور شرطي اگر شرط خاصي تحقق يافته باشد، عمل يا اعمال خاصي انجام ميشود. در غير اينصورت برنامه روال عادي خود را طي ميکند، در صورتي که شرط برقرار باشد ارزش منطقي Ture به خود ميگيرد و اگر شرط برقرار نباشد، ارزش منطقي False به خود خواهد گرفت.
اسلاید 130: If – then ( ادامه )ifشرط ياشروطدستورThenشناسه ;شکل کلي دستور if بصورت زير ميباشد: then شرط يا شروط if ; دستور دياگرام دستور بالا بصورت زير ميباشد:
اسلاید 131: 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 positive
اسلاید 132: در اين دستور ابتدا شرط بررسي ميشود، در صورتي که شرط برقرار باشد، عمل يا اعمال خاصي را انجام ميدهد و در صورتي که شرط برقرار نباشد، عمل يا اعمال بخصوص ديگري را انجام خواهد داد. اينگونه دستورات در واقع حالت توسعه يافته دستورات if ميباشند. دستور if همراه else
اسلاید 133: شکل کلي اين دستور بصورت زير است:if عبارت يا عبارات منطقي thenدستور1 ;else دستور2 ;ifعبارت يا عبارات منطقيthenدستورelse دستور;دياگرام دستور بصورت:
اسلاید 134: 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
اسلاید 135: If عبارت منطقيThen Begin دستور 1 ; دستور 2 ; . . .End Else Begin دستور 1 ; دستور 2 ; . . . End ; صورت ديگر دستور
اسلاید 136: If هاي متداخلهرگاه در نوشتن برنامه نياز به انتخاب يک شرط از بين چند شرط داشته باشيم، معمولاً از If متداخل استفاده ميکنند. در چنين مواقعي استفاده از If متداخل کارائي برنامه را بالا ميبرد زيرا بجاي کنترل تمام شروط فقط تا زمانيکه شرط برقرار نشده، If ها بررسي ميشوند. بعد از برقرار شدن يکي از شروط، کنترل برنامه به بعد از If منتقل ميشود و اين در بهبود کارائي يک برنامه ميتواند بسيار موثر باشد.
اسلاید 137: در حالت کلي If متداخل به صورت هاي زير ممکن است، در برنامه ظاهر شود.... elseدستور 3 ;دستور2then عبارت شرطي3 else Ifelseدستور2دستور 1then عبارت شرطي 2 else ifthen عبارت شرطي2 if دستور 1then عبارت شرطي 1 ifthen عبارت شرطي1 if ( 2
اسلاید 138: مثال : برنامهاي بنويسيد که نمره دانشجوئي را از ورودي دريافت کرده، با توجه به مقدار نمره يکي از خروجي هاي زير را نمايش دهد:Grade خروجي17 – 20 A 14 - 17 B12 – 14 C10 – 12 D0 – 10 F
اسلاید 139: 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 }
اسلاید 140: دستور Case زبان پاسکال دستورCase را بصورت زير در نظر ميگيرد: Of عبارت Case; دستور 1 : مقدار 1; دستور 2 : مقدار 2 ; دستور 3 : مقدار3 . . . Otherwise ; دستورEnd ; { End of case }
اسلاید 141: مثال : برنامهاي بنويسيد که دو عدد به همراه يک عملگر را از ورودي دريافت کرده، کار يک ماشين حساب ساده را شبيهسازي نمايد.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 }
اسلاید 142: دياگرام دستور Case بصورت زير ميباشد: CaseعبارتثابتofدستوراتEnd;:,
اسلاید 143: ساختارهاي کنترلي بسياري از مواقع لازم است عمل يا اعمال به تعداد دفعات معين يا نامعين انجام شوند. در چنين مواقعي زبانهاي برنامهنويسي دستوراتي دارند که ميتوان اين اعمال تکراري را انجام داد. در حالت کلي ساختارهاي کنترلي شامل يک يا چند شرط و همچنين متغير يا اصطلاحاً شمارندهاي براي پايان دادن به شرط ميباشند
اسلاید 144: شکل کلي حلقه بصورت زير ميباشد: Do مقدار نهايي To مقدار اوليه =: انديس For ; دستوربايد توجه داشته باشيد که در حلقه تعداد تکرار کاملاً مشخص است و حلقه دقيقاً به تعداد تکرار مشخص اجرا ميشود.
اسلاید 145: حلقه for اين دستور براي انجام عمل يا اعمالي مشخص به تعداد تکرار معين بکار برده ميشود. حلقه for شامل يک انديس ( index ) مقدار اوليه ( initial value ) مقدار نهايي ( final value ) و مقدار افزاينده ميباشد. اين حلقه با قرار دادن مقدار اوليه در انديس حلقه شروع شده و بعد از هر تکرار يک واحد به انديس حلقه اضافه ميکند تا در نهايت به مقدار نهايي برسد. شکل کلي حلقه بصورت زير ميباشد:
اسلاید 146: 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 عدد را محاسبه و چاپ نمايد.
اسلاید 147: دستور for را بصورت زير هم ميتوان بکار برد.do مقدار نهايي downto مقدار اوليه = : انديس for ; دستوردر اين شکل از دستور For ابتدا مقدار اوليه در انديس حلقه قرار داده مي شود و بعد از آن در هر تکرار حلقه يک واحد از انديس حلقه کم مي شود تا به مقدار نهايي برسد .
اسلاید 148: مثال : برنامهاي بنويسيد که عدد صحيحي را از ورودي دريافت کرده و فاکتوريل آن را محاسبه نمايد.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 .
اسلاید 149: do مقدار نهايي to مقدار اوليه = : انديس1 for do مقدار نهايي to مقدار اوليه = : انديس for 2 ; دستور هاي متداخل For
اسلاید 150: 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 )
اسلاید 151: دياگرام دستور for Forانديسdoمقدار اوليه:=مقدار نهاييDowntoدستورTo
اسلاید 152: حلقه While در حالت کلي هدف از بکار بردن اين دستور انجام عملياتي مشخص به تعداد دفعات نامعين است :اين حلقه به صورت زير بکار برده مي شود Do عبارت منطقي While ; دستور
اسلاید 153: 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 }مثال : بزرگترين مقسوم عليه دو عدد
اسلاید 154: دياگرام دستور While بصورت زير مي باشد:Whileعبارت شرطيdoدستورBeginدستورEnd;و در صورتي که دستور مرکب باشد دياگرام بصورت زیر است :
اسلاید 155: دستور Repeat اين دستور نيز از نوع دستورات تکراري ميباشد و به کمک آن ميتوان يک يا چند دستور را به تعداد نامعين بار اجرا کرد. while اين دستور مشابه دستوراست، با تفاوتهايي که در زير عنوان ميکنيم:While برعکس دستور Repeat 1) در دستورشرط حلقه در انتهاي حلقه بررسي ميشود لذا حلقه حداقل يکبار اجرا ميشود.
اسلاید 156: 2) دستور Repeate تا زماني اجرا ميشود که شرط خاصي تحقق پيدا نکرده است در حاليکه دستور While تا زماني که شرط برقرار باشد، اجرا ميشود.3) دستور Repeat نياز به بلوک ندارد و همراه Until ظاهر ميشود.
اسلاید 157: شکل کلي اين دستور بصورت زير ميباشد: Repeat ; دستور1; دستور2 ..; شرط يا شروط until
اسلاید 158: 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 }برنامه مجموع و ميانگين تعدادي عدد صحيح مثبت
اسلاید 159: دياگرام دستور Repeat بصورت زير ميباشد: Repeatدستور;Untilشرط يا شروط
اسلاید 160: معرفي چند پروسيجر ( Procedure ) پروسيجرها يا زير روالها قسمتهاي مستقلي از برنامه اصلي ميباشند که به تنهايي اعمال خاصي را انجام داده و وظايف مستقل و بخصوصي بر عهده آنها گذاشته ميشود. يک مزيت بزرگ پروسيجرها اينست که يکبار در برنامه گنجانده شده ولي در محلهاي مختلف ازآن استفاده به عمل ميآيد و از اصول برنامهنويسي ساخت يافتهاست.
اسلاید 161: پروسيجر Exit هدف: انتقال کنترل برنامه به خارج از بلوک فعليProcedure Exit ; استفاده از اين پروسيجر در هر بلوک از برنامه باعث ميشود که کنترل برنامه بلافاصله به خارج از آن بلوک انتقال يابد.
اسلاید 162: پروسيجر Break هدف: خاتمه دادن به اجراي يک حلقه Procedure Break ; استفاده از پروسيجر فوق باعث ميشود که اجراي يک حلقه خاتمه يافته و کنترل برنامه به دستورالعمل بعدي انتقال يابد.
اسلاید 163: پروسيجر continue هدف: بازگشت به ابتداي حلقه Procedure continue ; وقتي اين پروسيجر در حلقه ظاهر ميشود کنترل برنامه به اول حلقه انتقال مييابد و دستورات بعد از پروسيجر اجرا نميشوند.
اسلاید 164: ارائه چند مثال از کاربرد حلقه ها و شرطها مثال : برنامهاي بنويسيد که يک عدد صحيح در مبناي ده را از ورودي دريافت کرده، به يک عدد در مبناي 2 ببرد.
اسلاید 165: 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 }
اسلاید 166: 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 جمله سري زير که به سري فيبوناچي معروف است را چاپ نمايد.
اسلاید 167: تمرينات 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- خروجي قطعه برنامههاي زير را تعيين کنيد:
اسلاید 168: 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 ;
اسلاید 169: تمرينات برنامه نویسی 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
اسلاید 170: 2- برنامهاي بنويسيد که تعدادي عدد از ورودي دريافت کرده مجموع ارقام هر عدد را در خروجي چاپ نمايد. ( پايان داده ها به 1- ختم مي شود ) 3- برنامهاي بنويسيد که دو عدد صحيح را از ورودي دريافت کرده سپس:اعداد فيبوناچي بين اين دو عدد را چاپ کند.4- برنامهاي بنويسيد که يک اسکناس 1000 توماني را به حالتهاي مختلف يعني به اسکناس 200 توماني، 100 توماني، 50 توماني، 20 توماني، 10 توماني و سکه هاي 5 توماني و 2 توماني و يک توماني خرد نمايد.
اسلاید 171: فصل 8Arrayآرایه ها هدفهاي كليشناخت انواع آرايهها و موارد استفاده از آنهاشناخت لزوم استفاده از ساختار داده اي به نام آرايه شناخت مفاهيم مرتبسازي و جستجوشناخت الگوريتمهاي مرتبسازي و جستجو
اسلاید 172: ÷ هدفهاي رفتاري آرايهها يك بعدي را در برنامههاي خود بكار ببرد. ماتريسها را پيادهسازي نمايد. عمل جستجو در آرايه انجام دهد.يك ليست را توسط روشهاي مرتب سازي حبابی، انتخابي و غيره مرتب كند.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 173: آرايه و انواع آن خانههاي پشت سرهم از حافظه که همنوع بوده و توسط يک اسم معرفي ميشوند، آرايه نام دارد. نحوه دسترسي به هر يک از اعضاء آرايه از طريق انديس آرايه امکانپذير است.براي تعريف آرايه ابتدا طول آرايه که درحقيقت تعداد خانههاي آنرا مشخص ميکند، معين ميگردد. سپس نوع خانههايي که دادهها در آن قرار خواهند گرفت را تعيين مي کنند
اسلاید 174: آرايههاي يک بعدي آرايههاي يک بعدي بصورت زير تعريف ميشوند: Name : array [ 1 . . Length ] of type ; نوع آرايه کلمه ذخيره شده طول آرايه کلمه ذخيره شده اسم آرايه
اسلاید 175: برای مثال : Var No: Array [ 1.. 50 ] of integer ; id: Array [ 1.. 20 ] of Byte ; Name , Fam: Array [ 1.. 30 ] of char ;
اسلاید 176: مقداردهي آرايهها مثل متغيرها به دو صورت امکانپذير است :1- با استفاده از دستورات ورودي2- مقداردهي در طول برنامهطريقه دسترسي به عناصر آرايه بصورت زير ميباشد: Name [ index ] انديس آرايه اسم آرايه
اسلاید 177: مثال : برنامهاي بنويسيد که 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 }
اسلاید 178: مثال: برنامهاي بنويسيد که يک آرايه 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 .
اسلاید 179: آرايههاي دو بعدي براي نمايش ماتريس درحافظه معمولاً از آرايههايي بنام آرايههاي دوبعدي استفاده ميکنند براي درک بيشتر اين آرايهها آنها را بصورت ماتريس در نظر ميگيرند. آرايههاي دو بعدي بصورت زير معرفي ميشوند: Name : array [ 1 .. row , 1 .. column ] of type ; نوع عناصر آرايه کلمه ذخيره شده تعداد ستونها تعداد سطرها کلمه ذخيره شده اسم آرايه
اسلاید 180: مثال : برنامهاي بنويسيد که يک ماتريس 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.
اسلاید 181: آرايههاي چند بعدي ميتوان آرايههايي با ابعاد بيشتر از دو نيز تعريف کرد. بطور کلي براي معرفي يک آرايه چند بعدي مي توان بصورت زيرعمل کرد :Name : array [ 1.. length1 ] of array [ 1.. length2 ] …. Of array [ 1.. lengthN ] of Type و ياName: array [ 1.. length1 , 1.. length2 , …. 1.. lengthN ] of Type
اسلاید 182: نکاتي چند در مورد آرايهها تعريف آرايه با محدوده منفي براي مثال: A: array [ -10.. 10 ] of Real ; تعريف آرايه از نوع منطقي ( Boolean ) براي مثال: A: array [1.. 20 ] of Boolean ;
اسلاید 183: آرايههاي با محدوده منطقي: براي مثال A: array [ Boolean ] of integer;آرايهاي با محدوده کاراکتري: براي مثال A: array [ A.. Z ] of Real ;آرايهاي که براي اعضاي آن محدوديت قائل شويم براي مثال: A: array [ 1.. 20 ] of 1.. 30
اسلاید 184: جستجو و مرتبسازي ( Search and Sort ) يکي از مسائلي که در بحث طراحي الگوريتم بسيار مهم است، بحث مرتبسازي و جستجو مي باشد. منظور از جستجو اينست که يک مقداري را از يک ليست جستجو کنيم و منظور از مرتب سازي اينست که يک ليست مرتب از داده ها را ايجاد کنيم. حال تعدادی الگوريتم که براي مرتبسازي و جستجو بکار ميروند. را بررسي ميکنيم بخصوص زمانيکه ساختار داده ما يک آرايه باشد
اسلاید 185: جستجو در آرايه در کل دو نوع عمل جستجو را در اين کتاب بررسي ميکنيم :جستجوي خطي Linear search جستجو دودويي Binary search
اسلاید 186: جستجوي خطي Linear search در جستجوي خطي عبارت مورد جستجو را نخست با اولين عضو آرايه مقايسه ميکنيم، اگر برابر بود عمل جستجو با موفقيت همراه بوده و عمل جستجو خاتمه مييابد در غير اينصورت روند را ادامه داده و عبارت مورد جستجو را بترتيب با عضو دوم، سوم ... مقايسه ميکنيم تا اينکه حالت تساوي حاصل شود و اگر اين حالت حاصل نشد، عباريت مورد جستجو در ليست قرار ندارد.
اسلاید 187: قطعه برنامه زير را مي توان در حالت کلي براي جستجوي خطي بکار برد: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 ) ;
اسلاید 188: جستجو دودويي Binary search درجستجوي دودوئي ليست اوليه بايدمرتب باشد. براي جستجو در چنين آرايهاي نخست انديس وسط آرايه را پيدا ميکنيم و عنصر واقع در اين انديس را با عبارت مورد جستجو مقايسه ميکنيم و حالات زير ممکن است حاصل شود:(Low انديس ابتداي آرايه و upper انديس آخرين عناصرآرايه و middle انديس عنصر وسط ميباشد.)
اسلاید 189: if A [ middle ] < X Then حالت اول : در اينصورت Low : = middle و مقدار جديد middle را که عبارتست از:Middle : = ( low + middle ) / 2
اسلاید 190: if A [ middle ] < X Then حالت دوم : در اينصورت upper : = middle و مقدار جديد middle را که عبارتست از:Middle : = ( low + middle ) / 2
اسلاید 191: if A [ middle ] = X Then حالت سوم : در اينصورت Write ( The Eiement is found ) Low < upper در صورتي که حالتهاي الف يا ب اتفاق بيفتد، عمل جستجو را تا زمانيکهمي باشد ادامه ميدهيم و در هر مرحله که حالت سوم رخ دهد عمل جستجو خاتمه مييابد.
اسلاید 192: مرتبسازي براي مرتبسازي دادهها روشهاي متفاوتي وجود دارد . تفاوت روشهاي مرتبسازي در زمان اجراي آنها مي باشد. در حالت کلي با توجه به تعداد وروديها (داده ها) و نوع مسئله مرتبسازي مي توان از انواع روشهاي مرتبسازي استفاده نمود.حال بعضي از روش هاي مرتب سازي عمومي را بررسي ميکنيم. مرتبسازي حبابي ( Bubble sort ) مرتبسازي انتخابي ( Selection sort )
اسلاید 193: مرتبسازي حبابي ( Bubble sort ) سادهترين روش مرتبسازي روش مرتبسازي حبابي ميباشد. يکي از خصوصيات بارز اين نوع مرتبسازي اين است که فهم آن ساده بوده و برنامهنويسي آن به سهولت انجام مي گيرد.مرتبسازي حبابي نخست عنصر اول و دوم را با هم مقايسه ميکند و در صورت نياز، آنها را جابجا ميکند، سپس عنصر دوم و سوم را مقايسه ميکند. اين عمل را تا زمانيکه به انتهاي آرايه نرسيده تکرار ميکند، در پايان مرحله اول بزرگترين عنصر در آخرين خانه آرايه قرار ميگيرد. در مرحله دوم از خانه اول تا خانه N – 1 عمل بالا را انجام ميدهد. اين روند را تا زمانيکه تمام عناصر آرايه مرتب نشدهاند ادامه ميدهد و در نهايت يک ليست مرتب شده بصورت صعودي در خروجي توليد ميشود.
اسلاید 194: 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)/2
اسلاید 195: مرتبسازي انتخابي ( Selection sort )در اين روش مرتبسازي نخست کوچکترين عنصر را در کل آرايه پيدا کرده در خانه اول آرايه قرار ميدهيم سپس عنصر کوچکتر بعدي را يافته در خانه دوم قرار ميدهيم اين روند را تا زمانيکه کل آرايه مرتب نشده ادامه ميدهيم
اسلاید 196: 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 }قطعه برنامهاي که براي مرتبسازي انتخابي ميتوان نوشت بصورت زير ميباشد:
اسلاید 197: چند مثال در مورد آرايهها مثال : برنامهاي بنويسيد که يک عدد صحيح از ورودي دريافت کرده سپس اعداد اول قبل از آن را توليد و در آرايه قرار دهد.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 ;
اسلاید 198: 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 }
اسلاید 199: مثال : برنامهاي بنويسيد که يک ماتريس 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 }
اسلاید 200: مثال : برنامهاي بنويسيد که از ادغام دو آرايه مرتب ،آرايه سومي بنام 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 ] ) ;
اسلاید 201: 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 }
اسلاید 202: 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 }
اسلاید 203: مثال : برنامه ای بنويسيد که يک جمله حداکثر 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 }
اسلاید 204: تمرينات - کداميک از دستورات زير در مورد اعلان زير صحيح است: الف- a [ A ]: = Z ب- a [ a ]: = A ج- a [ A ]: = 1 د- a [ I ]: = 12 ح- a [ i ]: = 12 a: array [ A .. Z ] of char
اسلاید 205: 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 - تعداد بايتهايي که هر کدام از اعلانهاي زير اشغال مي کنند را محاسبه نمائيد.
اسلاید 206: تمرينات برنامهنويسی برنامهاي بنويسيد که که يک آرايه حداکثر 50 عنصري را از ورودي دريافت کرده و سپس عناصري از آرايه که اول هستند را با صفر جايگزين کرده آرايه حاصل را در خروجي چاپ کند.برنامهاي بنويسيد که عددي از ورودي دريافت کرده سپس آن را به عامل هاي اول تجزيه نمايد و حاصل را بصورت زير در خروجي چاپ نمايد:براي مثال: 21 = ( 3 ^ 1 ) * ( 7 ^ 1 )
اسلاید 207: برنامهاي بنويسيد که يک عدد از ورودي دريافت کرده سپس در صورت وجود صفرهاي آن را حذف نموده، نتيجه را در خروجي چاپ نمايد.برنامه اي بنويسد که يک ماتريس 5 * 5 را از ورودي دريافت کرده سپس مجموع هر سطر را انتهاي همان سطر و مجموع هر ستون را در انتهاي همان ستون چاپ نمايد.
اسلاید 208: برنامهاي بنويسيد که يک ماتريس حداکثر 10 * 10 را از ورودي دريافت کرده ماتريس هم بر حسب ستون و هم بر حسب سطر مرتب نموده به همراه ماتريس اوليه در يک سطر چاپ نمايد.برنامهاي بنويسيد که يک آرايه 200 عنصري ازنوع صحيح که 150 عنصرمرتب درآن قرار ميگيرد را از ورودي دريافت کرده سپس آرايه دومي با 50 عنصر را از ورودي بخواند.
اسلاید 209: فصل 9هاي كتابخانه ای توابع و روالهدفهاي كليشناخت توابع و روالهاي استاندارد براي نوعهاي صحيحشناخت ساختار تابع و روال شناخت توابع و روالهاي استاندارد براي نوعهاي اعشاري و كاركتريشناخت توابع و روالهاي استاندارد رياضي
اسلاید 210: ÷ هدفهاي رفتاري توابع و روالهاي استاندارد را در صورت نياز در برنامه استفاده كند. ساختار توابع و خروجيهاي آنها را تشخيص داده و در برنامه خود از آنها استفاده كند. ساختار روالها و خروجيهاي آنها را تشخيص داده و نتايج حاصل از آنها را مورد استفاده قرار دهد.توابع رياضي را براي محاسبه عبارت رياضي در برنامه بكار ببرد.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 211: ساختار تابع در کل هدف تابع اينست که متغير يا متغيرهايي را بعنوان پارامتر از برنامه اصلي دريافت کرد. عمل خاصي را روي پارامترها انجام داده و نتيجه را به برنامه اصلي برگرداند. شکل کلي فراخواني توابع در برنامه اصلي بصورت زير ميباشد:ساختار تابع: Function Name ( parameters ) : Type نوع تابع پارامترها اسم تابع کلمه ذخيره شده
اسلاید 212: توابعي براي اعداد صحيح و اعشاري تابع Abs هدف: باز گرداندن قدر مطلق ( absolute ) پارامتري که به آن ارسال ميشود: Function Abs ( x: Integer ): Integer ; Function Abs ( x: Real ): Real ; اين تابع يک عبارت از نوع حقيقي يا صحيح را بعنوان آراگون دريافت کرده سپس قدر مطلق آن را محاسبه و حاصل را برگرداند.
اسلاید 213: مثال : 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
اسلاید 214: تابع Sin هدف: باز گرداندن سينوس يک عدد از نوع اعشاري شکل تابع: Function Sin ( X: Real ): Real ; X يک عبارت يا عدد از نوع اعشاري بوده و حاصل مقدار سينوس X ميباشد.
اسلاید 215: مثال : Var X : Real ; Begin X : = sin ( 10 ) ; Write ( sin ( 10 ) = , x :8 : 2 ) ;End.
اسلاید 216: تابع Cos هدف: باز گرداندن کسينوس يک عدد از نوع اعشاري.شکل تابع: Function cos ( X: Real ): Real ; X يک عبارت با عدد از نوع اعشاري بوده و حاصل مقدار کسينوس X ميباشد.
اسلاید 217: Var X : Real ; Begin X : = cos ( 10 ) ; Write ( cos ( 10 ) = , x : 8 : 2 ) ;End . مثال :
اسلاید 218: تابع ArcTanهدف: بازگرداندن آرک تانژانت يک عدد از نوع اعشاريشکل تابع: Function ArcTan ( X: Real ): Real ; X يک عبارت يا عدد از نوع اعشاري بوده حاصل مقدار آرک تانژانت X ميباشد.
اسلاید 219: Var X : Real ; Begin X : = ArcTan ( 10 ) ; Write ( ArcTan ( 10 ) = , x : 8 : 2 ) ;End . توجه: در صورتي که در توابع مثلثاتي زاویه از نوع درجه ارائه شود ميتوان با فرمول زير معادل راديان آن را محاسبه کرد: Real = Dey * 3.14159 / 180
اسلاید 220: تابع Exp هدف: عدد نپر ( e = 2.71828 … ) را به توان يک عدد ميرساند.شکل تابع: Function Exp ( X: Real ): Real ; X عبارت يا متغيري از نوع اعشاري بوده و حاصل تابع نيز يک عدد اعشاري ميباشد اين تابع مقدار eبه توان X را محاسبه ميکند.
اسلاید 221: Var X : Real ; i : integer ; Begin For i : = 1 to 10 do Begin X : = exp ( i ) ; Writeln ( x : 8 : 2 ) ; End ;End . مثال :
اسلاید 222: تابع frac هدف: قسمت اعشاري يک عدد اعشاري را برميگرداند.شکل تابع: Function frac ( X: Real ): Real ; X عددي از نوع اعشاري و حاصل تابع يک عدد اعشاري که قسمت اعشاريعدد X است مي باشد و بعبارت ديگر اين تابع قسمت اعشاري عدد ورودي را به عنوان خروجي باز ميگرداند.
اسلاید 223: 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
اسلاید 224: تابع Int هدف: قسمت صحيح يک عدد اعشاري را برميگرداند.شکل تابع: Function Int ( X: Real ): Real ; X يک عبارت يا متغير از نوع اعشاري و خروجي تابع فيزيک عدد اعشاري است اين تابع مقدار صحيح يک عدد اعشاري در خروجي نشان ميدهد.
اسلاید 225: Var y , x : Real ; Begin X : = Int ( 2.87 ) ; { 2.0 } Y : = Int ( - 8.76 ) ; { - 8.0 } End . مثال :
اسلاید 226: تابع Lnهدف: محاسبه لگاريتم يک عدد اعشاري در مبناي e.شکل تابع: Function Ln ( X: Real ): Real ; X يک عبارت يا متغير ازنوع اعشاري بوده وحاصل تابع فيزيک عدداعشاري ميباشد.
اسلاید 227: Var X : Real ; Begin X : = Ln ( 2.87 ) ; { x = 3.73767 } Write ( x = , x : 10 : 5 ) ; End . مثال :
اسلاید 228: تابع Odd هدف: فرد بودن عدد صحيح را بررسي مي کند.شکل تابع: Function odd ( X: logint ): Booleam ; X يک عبارت از نوع longint است و تابع ،فرد بودن عبارت را بررسي مي کند اگر مقدار خروجي تابع True باشد X فرد است و اگر مقدار خروجي تابع False باشد X فرد نيست.
اسلاید 229: Var i : integer ; Begin For i : = 1 to 100 do If odd ( i ) Then Writeln ( i = , j : 3 ) ; End . مثال :
اسلاید 230: تابع Ord هدف: غالباً براي پيدا کردن کد اسکي يک متغير کاراکتري بکار ميرود.شکل تابع: Function Ord ( x: char ): Longint ; عبارت x از نوع کارکتري را بعنوان پارامتر دريافت و کد اسکي آن را برمي گرداند. اگر x از نوع اسکالر باشد تابع بعنوان خروجي ترتيب قرار گرفتن x را در مجموعه اي که ابتدا به عنوان اسکالر اعلان شده، باز ميگرداند.
اسلاید 231: Var ch : char ; Begin For ch : = A to Z do Write ( ord ( ch ) : 5 ) ; End .مثال : کد اسکي A تا Z را درخروجي چاپ ميکند کد اسکي A عدد 65 ميباشد.خروجی :
اسلاید 232: تابع pi هدف: عدد پي را بر ميگرداند.شکل تابع: Function pi: Real ; اين تابع براي بازگرداندن عددي پي ( 3.141592 … ) مورد استفاده قرار ميگيرد.
اسلاید 233: تابع Pred هدف: مقدار قبل مقدار پارامتر را بر مي گرداند.پارامتر تابع مي تواند از هر نوع باشد و با توجه به نوع پارامتر تابع نياز از هم نوع ميباشد و خروجي تابع مقدار قبل از x ميباشد.Function pred ( x ): < same type of parameter > ; شکل تابع:
اسلاید 234: Ch: = pred ( d ) ; { ch = c }i: = pred ( 15 ) ; { i = 14 }flag: = pred ( True ) ; { flag = false } i: = pred ( - 30 ) ; { i = - 31 } مثال :
اسلاید 235: تابع Random هدف: براي توليد عدد تصادفي شکل تابع: Function Random: Real ; Function Random ( x: word ): word ; اگر تابع Random به شکل يک يعني بدون آرگومان مورد استفاده قرار گيرد يک عدد تساوي از نوع اعشاري بين صفر و يک توليد مي کند و اگر به شکل دو بکار رود باعث توليد يک عدد تصادفي از نوع word که بزرگتر يا مساوي صفر و کوچکتر از x است خواهد شد.
اسلاید 236: 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 توليد نمايد.
اسلاید 237: تابع Round هدف: براي گرد کردن اعداد اعشاري بکار مي رود.شکل تابع: Function Round ( x: Real ): Longint ; X يک عبارت يامتغير اعشاري بوده وخروجي تابع يک عدد ازنوع Longint ميباشد که نتيجه گرد کردنX ميباشد. اين تابع X را به نزديکترين مقدارصحيح گرد ميکند.
اسلاید 238: 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 } مثال :
اسلاید 239: تابع sqr هدف: براي محاسبه مجذور يک عدد صحيح يا اعشاري بکار ميرود.شکل تابع: Function sqr ( x: Integer ): Integer ; Function sqr ( x: Real ): Real ; X عبارتي يا متغييري از نوع صحيح يا اعشاري بوده و خروجي تابع فيزيک يک عدد صحيح يا اعشاري مي باشد اين تابع مجذور X را بعنوان خروجي بر ميگرداند.
اسلاید 240: Var i : integer ; Begin For i : = 1 to 10 do Writeln ( I ^ 2 = , sqr ( I ) ) ; End . مثال :
اسلاید 241: تابع sqrt هدف: براي محاسبه جذر يک عدد بکار ميرود.شکل تابع: Function sqrt ( x: Real ): Real ;X يک عبارت از نوع اعشاري بوده و خروجي تابع فيزيک عدد اعشاري ميباشد اين تابع جذر X را بعنوان خروجي بر ميگرداند.
اسلاید 242: 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 .مثال :
اسلاید 243: تابع succ هدف: مقدار بعد از مقدار فعلي را برمي گرداند.شکل تابع: Function succ ( x ): same type of parameters ; X يک عبارت از نوع صحيح، اولين و غيره بوده و خروجي تابع نيز از همان نوع X مي باشد اين تابع مقدار بعد از X را بعنوان خروجي بر ميگرداند.
اسلاید 244: ch : = suce ( a ) { ch = b } ch : = suce ( A ) { ch = B } i : = suce ( 15 ) { i = 16 } flag : = suce ( false ) { flag = True }flag : = suce ( True ) { تعريف نشده } مثال :
اسلاید 245: تابع Trunc هدف: قسمت صحيح يک عدد اعشار را بر ميگرداند. شکل تابع: Function Trunc ( x: Real ): Longint ;X يک عبارت يا متغير از نوع اعشاري بوده و خروجي تابع يک عدد از نوع Longint ميباشد. اين تابع قسمت صحيح عدد اعشاري X را بعنوان خروجي بر ميگرداند.
اسلاید 246: 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 . مثال :
اسلاید 247: توابع از نوع کاراکتري در اين بخش توابعي را بررسي مي کنيم که خروجي آنها از نوع کاراکتري باشد. تابع chr هدف: معادل کاراکتري يک کد اسکي را بر ميگرداند.شکل تابع: Function chr ( X: Byte ): char ; X يک عبارت يا متغير از نوع بايت بوده و خروجي تابع يک کارکتر ميباشد. اين تابع کد اسکي را دريافت کرده و معادل کارکتري آن را بر ميگرداند.
اسلاید 248: Var i : Byte ; Begin For i : = 65 to 91 do Writeln ( chr ( I ) ) ; End . مثال : خروجی :برنامه بالا حروف A تا Z را در خروجي چاپ ميکند.
اسلاید 249: تابع Upcase هدف: براي تبديل يک کاراکتر به حرف بزرگتر بکار ميرود.شکل تابع: Function Upcase ( ch: char ): char ; ch يک عبارت يا متغير از نوع کاراکتر بوده و خروجي تابع فيزيک کاراکتري باشد اين تابع حرف کوچک را به حرف بزرگ تبديل کرده و بعنوان خروجي حروف بزرگ را بر ميگرداند.
اسلاید 250: مثال : 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 }
اسلاید 251: روالهاي استاندارد در بخش هاي قبل ديديد که در توابع پارامترها به تابع ارسال مي شود و تابع نيز مقداري را بعنوان خروجي برميگرداند روالها نيز مشابه توابع عمل ميکنند با اين تفاوت که خروجي روالها از طريق پارامتر برميگردانده ميشود يا اعلان به سيستم عامل ميباشد. بنابراين روالها بدون نوع هستند. شکل کلي روالها بصورت زير ميباشد:Procedure Name ( Parameturs ) ; پارامترهاي روال اسم روال کلمه ذخيره شده
اسلاید 252: روال Dec هدف: يک يا چند واحد از پارامتر ارسالي کم مي کند.شکل روال: Procedure Dec ( Var X: longint ) ; Procedure Dec ( Var X: longint , N: longint ) ;X يک متغير از نوع longint و بصورت متغيري ميباشد اين روال يک واحد از پارامتر ارسالي کم ميکند.
اسلاید 253: Var N : integer Begin N : = 1201 ; Dec ( N ) ; { N = 1200 } Writeln ( N ) ; Dec ( N , 200 ) ; { W = 1000 } Writeln ( N ) ; End .مثال :
اسلاید 254: روال Exit هدف: کنترل برنامه را به خارج از بلوک جاري منتقل مي کند.شکل روال: Procedure Exit ; اين روال باعث مي شود که کنترل برنامه از بلوک جاري خارج شود. اگر اين روال در برنامه اصلي بکار رود باعث خروج از برنامه ميشود. و اگر در يک روال يا تابع بکار رود باعث خروج از روال يا تابع شده و کنترل برنامه به برنامه اصلي منتقل ميشود.
اسلاید 255: Var i , j : integer ;Begin i : = 100 ; j : = 20 ; Dec ( i , j ) ; Write ( i ) ; Exit ;End . مثال : خروجی :بعد از اتمام عمليات تابع Exit باعث خروج از برنامه مي شود.
اسلاید 256: روال Halt هدف: خاتمه دادن به اجراي برنامه شکل روال: Procedure Halt ; اين روال باعث خاتمه اجراي برنامه شده و کنترل برنامه به سيستم عامل بر ميگردد.
اسلاید 257: روال Inc هدف: اضافه کردن يک يا چند واحد به يک متغير شکل تابع:X يک عبارت يا متغير از نوع Longint مي باشد اين روال به مقدار متغير x يک يا چند واحد اضافه ميکند.Procedure Inc ( Var X: longint ) Procedure Inc ( Var X: longint , N: longint ) ;
اسلاید 258: 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 .مثال :
اسلاید 259: روال Randomize هدف: باعث تغير نحوه توليد اعداد تصادفي مي شود.شکل روال: Procedure Randomize ; وقتي در برنامه از تابع Random استفاده ميکنيم اعداد تصادفي توليد شده در اجراهاي مختلف يکسان مي باشد براي جلوگيري از اين وضعيت قبل از استفاده از تابع Random روال Rondomize را بکار ميبريم. تا باعث توليد اعداد تصادفي متفاوت در اجراهاي مختلف گردد.
اسلاید 260: Var i : word ;Begin Randomize; For i : = 1 to 10 do Writeln ( Random ( 50 ) ) ; End .مثال :
اسلاید 261: حل چند مثال برنامهنويسي مثال : برنامه اي بنويسيد که يک ماتريس مربع ( 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 ] ) ;
اسلاید 262: 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 }
اسلاید 263: مثال : برنامهاي بنويسيد که يک جمله از ورودي دريافت کرده سپس حروف بزرگ جمله را به حروف کوچک تبديل نمائيد.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 }
اسلاید 264: تمرينات خروجي تمرينات زير را تعيين کنيد: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 .
اسلاید 265: .2خروجي دستورات زير را محاسبه نمائيد:a) Ch: = A ; Ch: = chr ( ord ( ch ) + 3 ) ; Write ( ch ) ; b) X: = 12 ; Succ ( x ) ; Ch: = B ; Pred ( ch ) ; Write ( x , ch ) ;
اسلاید 266: تمرينات برنامهنويسي 1- برنامهاي بنويسيد که تعداد 1000 شماره حساب بانکي 7 رقمي بطور تصادفي بين 5119432 و 9981711 را توليد کرده و چاپ کند.2- برنامه اي بنويسيد تا تعداد 38 عدد تصادفي صحيح بين 10 تا 99 راتوليد کرده، سپس آن را در خروجي به شکل مربع وسط صفحه نمايش چاپ کند.3- برنامهاي بنويسيد که يک عدد 20 رقمي از ورودي دريافت کرده آن را در يک عدد تک رقمي ضرب نموده و حاصل را در خروجي چاپ نمائيد.
اسلاید 267: فصل 10(String) متغيرهاي كاراكتري و رشتههاهدفهاي كلي بررسي ساختار آرايه هايي از نوع كاراكتر معرفي نوع دادة جديد به نام رشتهمقايسه آرايه اي از كاراكتر و رشته شناخت توابع و روالهاي استاندارد براي رشته ها
اسلاید 268: ÷ هدفهاي رفتاري آرايهاي از كاراكترها را در برنامه بكار ببرد. آرايهاي از كاراكترها را با رشته مقايسه كند. اسمي افراد و غيره را با استفاده از آرايهاي از رشته مرتب نمايد. توابع و روالهاي استاندارد مربوط به رشتهها را در برنامه خود بكار ببرد.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 269: متغيرهايي از نوع کاراکتر متغيرهاي کاراکتري ظرفيت پذيرش يک کاراکتر ( شامل يک رقم، يک حرف از حروف و يا يک کاراکتر ديگر ) را دارا ميباشند.: مقدار دهي اين متغير ها به صورت زير ميباشدch: = A ; اگر بخواهيم متغير هاي کاراکتري را از ورودي بخوانيم بايد دقت بيشتري به .خرج دهيم براي اينکه فضاهاي خالي کاراکتر محسوب مي شوند
اسلاید 270: مثال : خروجي قطعه برنامه زير را تعيين کنيد. Ch: = A ;C: = a ;If ch = c Then Writeln ( equal ) Else Writeln ( Not equal ) ;خروجي حاصل از قطعه برنامه بالا بصورت زير است: Not equal
اسلاید 271: درکل ميتوان کاراکترها را از لحاظ اردينال (مرتبه) بصورت زير دستهبندي کرد: 1- رقم ها بصورت زير مقايسه ميشوند: 0 < 1 < 2 < 3 < … < 9 رقمها از لحاظ کد اسکي پشت سر هم قرار گرفتهاند. 2- حروف بصورت زير مقايسه مي شوند: A < B < … < Z < … < a < b < … < z
اسلاید 272: متغيرهاي رشتهاي ( String ) تعريف: مجموعهاي از کاراکتر را يک رشته ناميده و متغير از نوع آن را يک متغير رشتهاي مينامند.اين متغير نيز مانند ساير متغيرها در قسمت تعاريف متغيرها ( Var ) معرفي ميشود. در تعريف يک متغير رشتهاي معمولاً طول آن را مشخص ميکنند. اگر طول تعيين نشود بطور قراردادي کامپايلر حداکثر طول را براي آن در نظر ميگيرد. حداکثر طول رشته 255 کاراکتر ميباشد.
اسلاید 273: نحوه تعريف متغير رشته اي بصورت زير ميباشد: Name : string [ length ] طول رشته کلمه ذخيره شده اسم رشته
اسلاید 274: متغيرهاي رشتهاي را بصورت زير ميتوان مقداردهي کرد: Var S : string [ 10 ] ; . . .Begin . . S : = pascal ; Write ( s ) ; . . End .
اسلاید 275: براي خواندن متغيرهايرشتهاي ازدستورRead يا Readln بصورت زيرميتواناستفاده کرد:Read ( s ) ; هنگام خواندن متغيرهاي رشتهاي اگر طول رشته ورودي از طول تعريف شده بيشتر باشد فقط به اندازه طول تعريف شده خوانده مي شود و اگر طول رشته ورودي کمتر از طول تعريف شده باشد، رشته ورودي در منتهياليه سمت چپ متغير رشتهاي قرار گرفته و بقيه متغير رشته اي بدون محتوا باقي مي ماند،
اسلاید 276: براي چاپ يک متغير رشتهاي نيز ازدستور Write يا Writeln ميتوان استفاده کرد: Write ( s ) ;مثال : برنامهاي بنويسيد که شماره دانشجوئي، اسم و فاميل دانشجوئي را از ورودي دريافت کرده سپس در خروجي نمايش دهد.
اسلاید 277: 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.
اسلاید 278: آرايهاي از رشته بصورت زير تعريف ميشود: Name : Array [ 1 .. length ] of string نوع رشته اي طول آرايه اسم آرايه
اسلاید 279: براي خواندن چنين آرايهاي بصورت زير عمل ميکنيم:For i : = 1 to 50 do Readln ( Name [ i ] ) ; براي نمايش آرايه در خروجي بصورت:For i: = 1 to 50 do Writeln ( Name [ i ] )
اسلاید 280: مثال : برنامهاي بنويسيد که اسم 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 }
اسلاید 281: مثال : برنامهاي بنويسيد که اسم، فاميلي و شماره دانشجوئي حداکثر 50 دانشجو را از ورودي دريافت نمايد.سپس با خواندن اسمي از ورودي، ساير اطلاعات اسم خوانده شده را در صورت وجود در خروجي نمايش دهد.Var Name , Family : array [ 1 .. 50 ] of string [ 30 ] ; id : array [ 1 .. 50 ] of longint ; Nam : string [ 30 ] ;
اسلاید 282: 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 ;
اسلاید 283: 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 }
اسلاید 284: توابع و روالهاي کتابخانهاي براي متغيرهاي رشتهاي تابع Concat هدف: الحاق دو يا چند رشته به يکديگر شکل تابع: Function concat ( S1 , S2 , … , Sn ): string ; Sn , … , S2 , S1 متغيرهايي از نوع رشته هستند و خروجي تابع نيز يک متغير رشتهاي است اين تابع دويا چندتابع را به هم پيوند داده، و رشته حاصل را برميگرداند.
اسلاید 285: : مثال Var Str3 , str1 , str2 : string Begin Str1 : = Pascal ; Str2 : = Book ; Str3 : = Concat ( Str1 , Str2 ) ; write ( Str3 ) ; End.با اجراي برنامه فوق، عبارت Pascal Book نشان داده خواهد شد.
اسلاید 286: تابع Copy هدف: استخراج يک زير رشته ( substring ) از يک رشته شکلتابع:Function copy (S:string ; Index:Integer; count: Integer): string; S يک عبارت يا متغير رشته اي که مي خواهيم از آن زير رشته اي که نقطه شروع آن Index و طول آن Count مي باشد جدا کنيم. لذا زير رشته حاصل، يک رشته که طول آن به اندازه Count است، ميباشد.
اسلاید 287: : مثال Var Str , str1: string ; Begin Str: = Pascal Book ; Str1: = Copy ( Str , 7 , 4 ) ; { Str1 = Book } write ( Str1 ) ; End.
اسلاید 288: روال Delete هدف: حذف يک زير رشته از يک رشته شکلروال:Procedure delete (Var str: string; Index:integer;length: integer ) ; Str يک متغر رشته اي، Index يک عبارت يا متغير صحيح و Length نيز يک عبارت يا متغير صحيح ميباشد. روال Delete يک زير رشته را از يک رشته حذف ميکند اين روال از محل Index بطول Length از رشته Str حذف ميکند و رشته حاصل بعنوان خروجي روال برگردانده ميشود.
اسلاید 289: : مثال Var St : string ; Begin St: = Pascal.Book ; Delete ( St , 7 , 5 ) ; writeln ( St ) ; End. خروجي حاصل از برنامه فوق Pascal ميباشد.
اسلاید 290: روال Insert هدف: درج ( وارد کردن ) يک رشته در يک رشته ديگر شکل روال: Procedure Insert ( Str1: string ;Var Str2: string ; Index: Byte ) ; Str1 عبارت يا متغير رشته اي، Str2 متغير رشته اي و Index عبارتي عدد از نوع صحيح ميباشد. روال Insert ، رشته Str1 رادر رشته Str2 از خانه Index درج ميکند و رشته حاصل خروجي روال خواهد بود.
اسلاید 291: : مثال Var Str1 , str2: string ; Begin Str1: = Pascal 7 ; Str2: = Turbo ; Insert ( Str1 , Str2 , 6 ) ; End. خروجي حاصل از برنامه بالا Turbo pascal 7 خواهد بود.
اسلاید 292: تابع Length هدف: محاسبه طول رشته شکل تابع: Function length ( Str: string ): Integer ; Str يک عبارت رشته اي بوده و خروجي تابع يک عدد صحيح ميباشد. اين تابع طول رشته ورودي را محاسبه و بعنوان خروجي بر ميگرداند.
اسلاید 293: : مثال Var St: string ; n: integer ; Begin St: = Turbo Pascal 7 ; n: = length ( S4 ) ; { n = 14 } Write ( The length of string is: , n ) ; End.
اسلاید 294: تابع Pos هدف: براي جستجوي يک رشته داخل رشته ديگر شکل تابع: Function pos ( Str1: string ; Str2: string ): Byte ; Str1 يک عبارت يا متغير رشته اي و Str2 نيز يک عبارت يا متغير رشته اي ميباشد و خروجي تابع يک عدد صحيح مي باشد. اين تابع محل اولين وقوع رشته Str1 در رشته Str2 را بعنوان خروجي بر ميگرداند.
اسلاید 295: : مثال Var Str1 , Str2: string ; i: integer ; Begin Str1: = Book ; Str2: = Pascal Book ; i: = Pos ( Str1 , Str2 ) ; { i = 8 } Write ( i = , i ) ; End. نکته: توجه کنيد که اگر عمل جستجو با موفقيت انجام نشود ( يعني رشته اول در رشته دوم وجود نداشته باشد ) تابع مقدار صفر بر ميگرداند.
اسلاید 296: روال Str هدف: براي تبديل عدد به يک رشته عددي بکار مي رود.درشکل 1، I يک عبارت يا متغيرعددي بوده و Str يک متغير رشتهاي ميباشد اين روال يک عدد صحيح با فرمت مشخص را به يک رشته عددي تبديل مي کند.درشکل 2 ، F يک عبارت يا متغير رشتهاي و Str يک متغير رشتهاي ميباشد.شکل روال: 1: Procedure Str( I: integer: format , Str: string ) ; 2: Procedure Str ( F: Real: format , Str: string ) ;
اسلاید 297: : مثال 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.
اسلاید 298: روال 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 ) ;
اسلاید 299: : مثال 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.
اسلاید 300: ارائه چند مثال در مورد رشتهها و کاراکترها مثال : برنامهاي بنويسيد که يک جمله از ورودي دريافت کرده سپس در صورتي که کلمه IS وجود داشته باشد آنها را به are تبديل نمايد و در نهايت رشته حاصل را در خروجي نمايش دهد.توجه کنيد که ممکن است بيش از يک بار کلمه IS تکرار شده باشد در اينصورت همه کلمات IS را با are تبديل کند.
اسلاید 301: 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 }
اسلاید 302: مثال : برنامهاي بنويسيد که يک رشته از ورودي دريافت کرده، سپس معکوس رشته را بدست آورده بهمراه خود رشته در دو سطر جداگانه چاپ نمايد. 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 }
اسلاید 303: تمرينات با فرض اينکه 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 ) ) ;
اسلاید 304: خروجي قطعه برنامه زير را تعيين کنيد: Var S1: string ; i: integer ;Begin S1: = ABCDEF ; For i: = 1 to length ( S1 ) ; Delete ( S1 , i , 1 ) ; Writeln ( S1 ) ;.End
اسلاید 305: خروجي قطعه برنامه زير را تعيين کنيد: 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 ) ;.End
اسلاید 306: 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 هستند خروجي عبارت زير را تعيين کنيد.
اسلاید 307: تمرينات برنامهنويسی برنامهاي بنويسيد که يک پاراگراف را از ورودي دريافت کرده ( حداکثر 10 خط ) سپس:الف) تعداد کلمات هر سطر را شمرده و انتهاي سطر نمايش دهد.ب) تعداد حروف صدا دار را شمرده چاپ نمايد.ج) تعداد خطوط برنامه را شمرده در خروجي چاپ کند.د) تعداد جملات هر خط را محاسبه و در سطر هاي جداگانه نمايش دهد.
اسلاید 308: برنامهاي بنويسيد که يک عدد در مبناي مشخص را از ورودي دريافت کرده سپس آن را به مبناي m که از ورودي خوانده مي شود ببرد.برنامهاي بنويسيد که يک پاراگراف را از ورودي دريافت کرده کلمات تکراري هر سطر را حذف نموده و پاراگراف حاصل را بهمراه پاراگراف اوليه در خروجي با پيغام مناسب نمايش دهد.
اسلاید 309: برنامهاي بنويسيد که دو عدد 20 رقمي ( بصورت رشته بايد خوانده شود ) را از ورودي دريافت کرده سپس مجموع و حاصل ضرب اين دو عدد را محاسبه و در خروجي با پيغام مناسب چاپ نمايد.برنامهاي بنويسيد که يک رشته از ورودي دريافت کرده سپس کلمات داخل آن را بصورت عمودي کاراکتر به کاراکتر نمايش دهد:برنامهاي بنويسيد که يک پاراگراف با حداکثر 5 خط را از ورودي دريافت نمايد. سپس مجموع ارقام يا اعداد ( در صورت وجود ) هر خط را محاسبه نموده در انتهاي همان سطر نمايش دهد.
اسلاید 310: فصل 11برنامههاي فرعيهدفهاي كلي شناخت اجزاء تشكيلدهنده توابع و روالها بررسي انواع پارامترها و متغيرها در برنامههاي فرعي شناخت تفاوتهاي روالها و توابع معرفي مزاياي استفاده از زير برنامهها
اسلاید 311: ÷ هدفهاي رفتاري برنامه خود را به چندين زيربرنامه تقسيمبندي نمايد. زيربرنامهها را با توجه به قوانين موجود، در ساختار برنامه جا دهد. باتوجه به مزاياي استفاده از آنها را در برنامه خود بكار ببرد. دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 312: روالها روالها نوعي از برنامههاي فرعي هستند، که به طور مستقل و جداگانه وظيفه يا وظايف خاصي از برنامه اصلي را انجام ميدهند. روال ها در صورت نياز اطلاعات خود را از طريق پارامترها دريافت و همچنين در صورت نياز نتايج را از طريق پارامترها به برنامه اصلي باز ميگردانند. پارامترها در حقيقت خطوط ارتباطي بين برنامه اصلي و برنامههاي فرعي هستند. پارامترها باعث مي شوند، که توابع و روال ها روانتر عمل کنند، زيرا آنها به برنامه هاي فرعي اين قابليت را مي دهند که با هر فراخواني، دادههاي مختلفي را مورد پردازش قرار دهند.
اسلاید 313: شکل کلي روالها بصورت زير مي باشد: Procedure Name ( parameters list ) ; ليست پارامترها اسم روال کلمه ذخيره شدهVar { List of locad variable }Begin . . { Procedure Body } . .End ; { End of procedure }
اسلاید 314: در حالت کلي روال ها در برنامه اصلي بصورت زير ظاهر ميشوند:; اسم برنامه اصلي Program ; تعاريف برنامه اصلي Procedure ..... ; Begin { main program } . . . فراخواني روال ها . .End. { End of program }
اسلاید 315: پارامترها با توجه به محل وقوع آنها به دو دسته تقسيم مي شوند:پارامترهاي صوري ( Formal parameters ) .2پارامترهاي واقعي ( Actual parameters ) از پارامترهاي صوري هنگام اعلان روال و از پارامترهاي واقعي هنگام . فراخواني روال ها استفاده ميشود
اسلاید 316: پارامترهاي صوري در حالت کلي 2 نوعند، که با توجه به نوع روال و تصميم برنامه نويس مورد استفاده قرار مي گيرند: پارامترهاي مقداري ( Value parameters ) پارامترهاي متغيري ( Variable parameters )
اسلاید 317: پارامترهاي مقداري ( Value parameters ) پارامترهاي مقداري، پارامترهايي هستند که مقدار متغيرهاي فرستاده شده از برنامه اصلي را دريافت مي کنند و وظيفه آنها فقط عبور دادن مقدار به روال ميباشد. لذا تغیيرات پارامترهاي مقداري در روال به برنامه اصلي انتقال نمييابد: پارامترهاي مقداري بصورت زير تعريف مي شوندProcedure Name ( var1 : type ; var2 : type , . . . . ) ; ليست پارامترهاي از نوع مقداري اسم روال کلمه ذخيره شده
اسلاید 318: مثال : به برنامه زير توجه کنيد: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 }
اسلاید 319: نکته: پارامترهايي که در روال بکار برده مي شود، هيچ ارتباطي به پارامترهاي ارسالي از برنامه اصلي ندارند و فقط مقادير اين متغيرها از برنامه اصلي ارسال مي شود. لذا اسامي پارامترهاي صوري ممکن است هم اسم با پارامترهاي واقعي برنامه اصلي انتخاب شوند، اين به معناي اين نيست که اين پارامترها ( پارامترهاي صوري ) همان پارامترهاي واقعي هستند.در مثال بالا اين تناظر برقرار است:پارامترهاي واقعي متناظر است با پارامترهاي صوريX1 A1X2 A2Y1 B1Y2 B2
اسلاید 320: متغيرهاي … , Var2 , Var1 پارامترهاي مقداري هستند. توجه کنيد، که اين پارامترها صوري هستند و نوع و ترتيب آنها بايد با نوع و ترتيب پارامترهاي واقعي در تناظر يک به يک باشند.
اسلاید 321: مثال : به برنامه زير توجه کنيد: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 }
اسلاید 322: همانطور که ملاحظه مي کنيد، روالي بنام test با 4 پارامتر مقداري در برنامه استفاده شده است. متغيرهاي y2 , y1 , x2 , x1 از برنامه اصلي به روال test ارسال شده و بترتيب مقادير اين متغيرها در متغيرهاي با همان نوع در B2 , B1 , A2 , A1 قرار مي گيرند.
اسلاید 323: پارامترهاي متغيري ( Variable parameters ) يك پارامتر متغيري، تغييرات يك پارامتر واقعي را بعنوان خروجي به برنامه اصلي برميگرداند. تفاوت اين گونه پارامترها با پارامترهاي مقداري در ارسال تغييرات ايجاد شده در پارامترها ميباشد. وقتي نياز است، كه نتايج روال به برنامه اصلي برگردد، از پارامترهاي متغيري استفاده ميكنند. اعلان پارامترهاي متغيري به صورت زير ميباشد: procedure Name ( var id1 : type ; var id2 : type , … ); ليست پارامترهاي متغيري اسم رواال كلمه ذخيره شده متغيرهاي id1 , id2 و … پارامترهاي متغيري ميباشند كه نتايج روال، توسط آنها به برنامه اصلي بازگردانده ميشود.
اسلاید 324: مثال : روالي بنام 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 }
اسلاید 325: پارامترهاي واقعي و صوري عبارتند از:پارامتر واقعي متناظر است با پارامترهاي صوريNum1 Num1Num2 Num2Total sumAverage aveNum1 , Num2 پارامترهاي مقداري و sum , ave پارامترهاي متغيري ميباشند، كه توسط آنها نتايج به برنامه اصلي برگردانده ميشود.
اسلاید 326: متغيرهاي محلي و سراسري ( Local and Global Variable) در برنامههاي فرعي دو نوع متغير علاوه از پارامترها مورد استفاده قرار ميگيرند. اين متغيرها متغيرهاي محلي يا متغيرهاي سراسر هستند.متغيرهاي محلي، متغيرهايي هستند كه در بلاك مربوط به خود قابل استفاده هستند. ولي متغيرهاي سراسري در تمام برنامههاي فرعي قابل دسترس ميباشند.متغيرهاي محلي در داخل برنامههاي فرعي در قسمت تعاريف معرفي ميشوند و در خارج از روال قابل دسترسي نيستند.
اسلاید 327: مثال : روالي براي محاسبه مجموع و ميانگين دو عدد بنويسيد.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}
اسلاید 328: در مثال بالا sum , Ave متغيرهاي محلي ميباشند. براي فراخواني روال CalcSumAve(x.y); كه درآن x.y دو متغير ازنوع Real ميباشند. به شكل زيرتوجهكنيد:پارامترهاي واقعيX Y پارامترهاي صوريNum1 Num2 متغيرهاي محلي Sum Ave
اسلاید 329: مثال : خروجي برنامه زير را تعيين كنيد.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=5
اسلاید 330: روالها معمولاً به سه شكل ظاهر ميشوند: بكارگيري روالهاي بدون پارامتر بكارگيري روال همراه پارامترهاي با خاصيت ورودي بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي
اسلاید 331: بكارگيري روالهاي بدون پارامترگاهي لازم است تا برنامه فرعي كاملاً مستقل (بينياز از مقادير برنامه اصلي) در بخشهاي مختلف يك برنامه اجرا شود. در اين صورت نياز به استفاده از پارامتر بيمفهوم ميباشد و از روالهاي بدون پارامتر استفاده ميكنند.غالباً زمانيكه بخواهيم پيغامهاي خاصي را در قسمتهاي مختلف برنامه نمايش دهيم، اين پيغامها را در يك روال قرار داده و در صورت نياز، روالمربوطه را فراخواني ميكنيم.
اسلاید 332: مثال : روال Head بدون دريافت پارامتري فراخواني ميشود.Program Example ;Procedure Head ; Begin WriteL(Name Family Age No); WriteLe(……………………………...); End;Begin{Main} WriteLn( open university ) ; Head;End.
اسلاید 333: بكارگيري روال همراه پارامترهاي با خاصيت ورودي همانطور كه قبلاً اشاره كرديم، هدف از بكارگيري پارامترها انتقال مقادير از برنامه اصلي به روالها ميباشد. اگر اين انتقال يك طرفه باشد يعني فقط از برنامه اصلي به روال باشد، اين نوع پارامترها فقط خاصيت ورودي خواهند داشت. (قبلا در اين مورد توضيح داده شده است) در اين نوع روالها از پارامترهاي مقداري استفاده ميكنند.
اسلاید 334: مثال : روالي بنويسيد كه توسط آن مربعات اعداد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}
اسلاید 335: بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي در اين نوع روالها پارامترها دو خاصيت مهم دارند يكي انتقال دادهها از برنامه اصلي به روال و ديگري انتقال يا ارجاع نتايج از روال به برنامهاصلي ميباشد. در اين نوع روالها از پارامترهاي متغيري استفاده ميكنند.
اسلاید 336: مثال : روالي بنام change بنويسيد كه توسط آن دوعدد بعنوان پارامتر دريافت كرده، مقادير اين دو متغير را جابجا نموده و نتيجه را در برنامه اصلي چاپ نمايد.Program Example ;Var A , b: integer ;Procedure change (var x , y: integer) ;var temp:integer;Begin Temp:=x; X:=y; Y:=temp;End;
اسلاید 337: Begin { Main } ReadLn( a , b ) ; Change( a , b ); WriteLn ( a= , a , b= , b ) ;End.{End of program}
اسلاید 338: ارتباط روالها با يكديگر در پاسكال زير برنامهها نه تنها از طريق برنامه اصلي بلكه از داخل يكديگر نيز .فراخواني ميشوندفراخواني روالها از داخل يكديگر تابع قوانين كلي زير است: قانون اول قانون دوم قانون سوم
اسلاید 339: قانون اول از هر برنامه (اصلي يا فرعي) به برنامه فرعي در صورتي ميتوان، دسترسي داشت، كه در بخش تعاريف آن برنامه (اصلي يا فرعي) قرار داشته باشد. بطور مثال در شكل زير برنامه اصلي M ميتواند، به كليه برنامههاي فرعي p1,p2 و… كه در بخش تعاريف برنامه اصلي قرار دارند، مراجعه كند
اسلاید 340: Main . . . .Proc1Proc2ProcN برنامه اصليبرنامه هاي فرعي
اسلاید 341: مثال : به برنامه زير توجه كنيد:program Main;var ……..procedure proc1;var ……..Begin ………End;Procedure proc2;Var ………Begin ……end;Begin {Main} Proc1; Proc2;End.
اسلاید 342: روالهاي proc1 , proc2 داخل برنامه اصلي Main تعريف شدهاند. لذا براحتي ميتوان در برنامه اصلي به آنها دسترسي پيدا كرد. روالها خود نيز داخل هم ميتوانند قرار بگيرند. دقيقاً مثل روالهاي معمولي با اين تفاوت كه در داخل روال بايد تعريف شوند. به اينگونه روالها، اصطلاحاً روالهاي متداخل يا تودرتو ميگويند.
اسلاید 343: اگر روالها در بخش تعاريف يك برنامه به موازات يكديگر تعريف شوند و نه در داخل هم، در روالهاي بعدي امكان رجوع به روالهاي قبلي وجود خواهد داشت. بعبارت ديگر به روالي ميتوان دسترسي پيدا كرد كه قبلاً تعريف شده باشد. قانون دوم
اسلاید 344: بطور مثال اگرp1,p2,p3 سه روال باشند دراينصورت ميتوان بصورت زيرعمل كرد: Main P1P2P3 P2روال هابرنامه اصليدر شكل بالا چون p2 قبلاً معرفي شده است ميتوان آنرا داخل p3 فراخواني كرد.
اسلاید 345: اگر روالها در بخش تعاريف برنامهأي بصورت متداخل باشند، در اينصورت از روال دروني ميتوان به روالهاي بيروني كه قبلاً تعريف شده، مراجعه كرد و همچنين از روال دروني به روالهاي بيروني كه به موازات يكديگر قرار گرفتهاند، نيز ميتوان دسترسي پيدا كرد. بطور مثال در شكل زير روال p1 ميتواند به روالهاي p2,p3 دسترسي پيدا كند. وهمچنين روال دروني p4 ميتواند بهروالهاي p2 , p3 مراجعه كند. قانون سوم
اسلاید 346: Main P3P2P1روال هابرنامه اصلي
اسلاید 347: اعلان روالها به روش forward همانطور كه قبلاً اشاره كرديم از روالي ميتوان در روال ديگر استفاده كرد، كه قبلاً تعريف شده باشد. در توربوپاسكال نقيصه فوق به كمك اعلان forward قابل حل است. بدين صورت كه اگر روالي به هنگام تعريف با اعلان forward همراه باشد، بدون رعايت از پيش تعريف شدن ميتواند، در روالهاي ديگر ظاهر شود.
اسلاید 348: شكل اعلان به روش forward بصورت زير ميباشد:Procedure Name ( parameters ) ; forward ; كلمه ذخيره شده ليست پارامترها اسم روال كلمه ذخيره شده
اسلاید 349: مثال :Program forward_Main ;Var ………Procedure proc3 ; forward ;Procedure proc1;var ……..Begin ………end;Procedure proc2;var ………Begin ……… proc3; ……end;
اسلاید 350: Procedure proc3;var ……..Begin …….End;Begin {Main program} ……… proc1; proc2; proc3; ………End. {End of program}همانطور كه ملاحظه ميكنيد با اعلان روال proc3 بصورت forward، بقيه روالها ميتوانند به آن دسترسي پيدا كنند.
اسلاید 351: توابع (Functions) نوع ديگري از برنامههاي فرعي، توابع ميباشند. توابع مانند روالها، پيمانههاي مستقلي هستند. با اين تفاوت كه روالها ميتوانند، تعدادي خروجي داشته باشند، در حالي که توابع فقط يك خروجي دارند. در روالها معمولاً خروجيها توسط پارامتر به برنامه اصلي ارجاع داده ميشود. ولي در توابع اينكار به نحو ديگر انجام ميگيرد.
اسلاید 352: شكل كلي اعلان يك تابع بصورت زير ميباشد: Function Name ( List Of Parameters ) : Function Type ; نوع تابع ليست پارامترها اسم تابع کلمه ذخيره شده
اسلاید 353: تابع فقط ميتواند، يك خروجي داشته باشد. نوع خروجي تابع، همان نوع تابع محسوب ميشود. لذا با توجه به نوع خروجي تابع، نوع تابع تشخيص داده ميشود. ذكر اين نكته خالي از لطف نيست كه، نوع پارامترهاي صوري توابع معمولاً مقداري هستند چرا كه توابع نوعي برنامههاي فرعي هستند كه فقط يك خروجي برميگردانند. لذا استفاده از پارامترهاي از نوع متغيري پسنديده نميباشد. (اشكال كامپايلري در توربوپاسكال ندارد ولي در پاسكال استاندارد اين كار اشكال كامپايلري دارد.)نکته :مقدار خروجي توابع توسط اسم تابع برگردانده ميشود. توابع مثل روالها بعد از قسمت تعاريف برنامه اصلي ظاهر ميشود.
اسلاید 354: شكل كلي توابع بصورت زير ميباشد: Function Name ( Parameters ) : Type ;Var ………..Begin …………….. …………….. …………….. Name := Resualt Of Function ;End ;
اسلاید 355: توجه به نكات زير در بكارگيري توابع ضروري بنظر ميرسد:تمام پارامترهاي تابع بايد از نوع مقداري باشند.نوع داده نتيجه تابع در انتهاي عنوان تابع و بعد از ليست پارامترهاي صوريقرار ميگيرد.در بدنه تابع، خروجي تابع با نسبت دادن مقدار به نام تابع مشخص ميشود.
اسلاید 356: مثال : برنامهأي بنويسيد كه يك عدد از ورودي دريافت كرده سپس توسط تابعي بنام 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.
اسلاید 357: ناحيه دادهها بعد از فراخواني بشكل زير ميباشد: پارامترهاي واقعيN نتيجه تابعپارامترهاي صوريMمتغيرهاي محليPIنتيجه تابع?? ناحيه داده هاي Fact ناحيه داده هاي اصلي
اسلاید 358: توابع بازگشتي (Recursion Functions) در پاسكال يك تابع يا روال ميتواند، خودش را فراخواني نمايد. پيمانهاي كه خودش را فراخواني ميكند يك پيمانه بازگشتي نام دارد. اين نوع توابع در بدنه خود، خودشان را فراخواني ميكنند. اين فراخواني تا برقراري يك شرط خاص كه غالباً به يك عدد ثابت ختم ميشود، ادامه پيدا ميكند. سپس مقدار تابع از پايين به بالا محاسبه ميشود و در نهايت نتيجه تابع حاصل ميشود.
اسلاید 359: هنگامي كه تابع بازگشتي به خود مراجعه ميكند، مقادير فعلي متغيرهاي خود را در محلي از حافظه بنام پشته (stack) قرار ميدهد، اگر بازگشت به تابع بازگشتي مجدداً صورت گيرد، مقادير فعلي متغيرها مجدداً بدنبال مقادير قبلي و اصطلاحاً در پشت مقادير اوليه قرار ميگيرند. هنگامي كه شرط پاياني در تابع بازگشتي رخ مي دهد، در اولين بازگشت مقاديري را كه هنگام مراجعه به خود، در پشته نگهداري كرده، مجدداً در دسترس قرار ميدهد و بهمين ترتيب در بازگشتهاي بعدي اين عمل تكرار ميشود تا مقدار تابع محاسبه شود.
اسلاید 360: شكل زير نحوه قرار گفتن مراجعههاي يك تابع بازگشتي به پشته را نمايش ميدهد.مقادير متغيرها درآخرين بازگشت به تابع.....مقادير متغيرها در سومين بازگشت به تابعمقادير متغيرها در دومين بازگشت به تابعمقادير متغيرها در اولين بازگشت به تابعشرط پاياني
اسلاید 361: ترتيب دسترسي به مقادير هنگام بازگشت از تابع بازگشتي از بالا به پايين ميباشد و ميتوان آنرا بصورت زير نمايش داد:مقادير متغيرها درآخرين بازگشت به تابع.....مقادير متغيرها در سومين بازگشت به تابعمقادير متغيرها در دومين بازگشت به تابعمقادير متغيرها در اولين بازگشت به تابع
اسلاید 362: مثال : برنامهأي بنويسيد كه با استفاده از توابع بازگشتي فاكتوريل عدد صحيح 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}. End
اسلاید 363: Fact := 12 * Fact ( 1 )3 * Fact ( 2 )4 * Fact ( 3 )5 * Fact ( 4 )N = 1 N = 5 در برنامه بالا ترتيب قرار گرفتن مقادير در پشته بصورت زير ميباشد:
اسلاید 364: مثال : تابعي براي محاسبه بزرگترين مقسوم عليه مشترك دو عدد صحيح 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 ;
اسلاید 365: مقايسه توابع و روالها توابع و روالها هر دو برنامههاي فرعي هستند، كه بطور مستقل وظايفي را بر عهده دارند. ولي در اين ميان از بعضي جنبهها متفاوت ميباشند كه عبارتند از: 1. نحوه فراخواني آنها با هم متفاوت است. روالها از طريق عبارات روال فراخوانده ميشوند، درصورتي كه فراخواني تابع توسط عبارات مقايسهأي و يا تخصيص نتيجه به يك متغير صورت ميگيرد.2. هنگام اعلان يك تابع، نوع تابع يا نوع نتيجه حاصل از تابع بايد ذكر شود، در صورتي كه روالها نيازي به اين كار ندارند.3. توابع فقط يك خروجي برميگردانند، ولي روالها ميتوانند، چندين خروجيبرگردانند. درضمن نتيجه توابع توسط اسم تابع فرستاده ميشود ولي روالها از طريق پارامترها، نتايج را برميگردانند.
اسلاید 366: طريقه ارسال آرايهها به توابع و روالها آرايهها خود مجموعهأي از دادهها ميباشند، لذا براي ارسال آنها نميتوانيم از روش معمولي ارسال پارامترها استفاده كنيم. و بطور مستقيم نميتوان آنها را به برنامههاي فرعي انتقال داد. براي ارسال آرايهها به عنوان پارامتر به برنامههاي فرعي از دستور Type استفاده ميكنند. دستور Type قبل از تعاريف برنامه اصلي بكار ميرود و توسط اين دستور در واقع يك نوع سادهسازي در تعاريف فراهم ميشود. و با اين سادهسازي ميتوان دادههاي ساخت يافته را به برنامههاي فرعي منتقل كرد.
اسلاید 367: فرم كلي دستور Type در بخش تعاريف بصورت زير است: تعريف داده ساخت يافته = شناسه Type براي مثال يك ارايه از نوع صحيح را تعريف ميكنيم:Type No = array [1…100] of integer ; در اينصورت تعريف آرايه به، No نسبت داده ميشود. اگر بخواهيم متغيري از نوع آرايه بالا تعريف كنيم، آنرا از نوع No تعريف ميكنيم:Var Number: No ;
اسلاید 368: مثال : برنامهاي بنويسيد كه يك آرايه حداكثر 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 ;
اسلاید 369: While ( I <= N ) And ( flag ) do Begin If b[ I ] = x Then Begin Index:= I ; Flag:= FALSE ; End ; Inc ( I ) ; End ; Search:= Index ; End ; {*********************************************}
اسلاید 370: 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 }
اسلاید 371: تمرينات روال Down را در نظر بگيريد:Procedure Down ( N: Integer ) ;Begin While N > 0 do Begin Write ( N: 3 ) ; Dec ( N ) ; End ;End ;الف) وقتي روال بصورت down (5) فراخواني شود، چه چيزي چاپ ميشود. ب) مقدار پارامتر واقعي N بعد از اجراي روال چيست؟
اسلاید 372: تابع بازگشتي زير را در نظر بگيريد: 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 فراخواني كنيد.
اسلاید 373: تمرينات برنامهنويسي برنامهاي بنويسيد كه اطلاعات حداكثر 100 دانشجو كه عبارتند از: Name اسم Family فاميلي St_No شماره دانشجوئيرا از ورودي دريافت كرده سپس:الف) توسط روالي بنام sort اطلاعات را برحسب شماره دانشجوئي مرتب كند.ب) توسط تابعي بنام search شماره دانشجوئي فردي را از ورودي دريافت نمايد، در صورتي كه شخص موردنظر در ليست باشد، ساير اطلاعات آنرا نمايش دهد.
اسلاید 374: آرايهأي از نوع صحيح با حداكثر 100 عنصر را در نظر بگيريد. برنامهأي بنويسيد كه ابتدا آرايه را از ورودي دريافت كرده سپس با استفاده از يك تابع بازگشتي بيشترين مقدار آرايه را محاسبه نمايد. دو آرايه مرتب حداكثر100 عنصري كه شامل اسامي افراد ميباشد را درنظر بگيريد. برنامهاي بنويسيد كه نخست دو آرايه را از ورودي دريافت نموده سپس توسط روالي بنام merge اين دو آرايه در هم ادغام نموده و در آرايه سومي قرار دهد.
اسلاید 375: فصل 12مجموعهها و دادههاي شمارشيهدفهاي كلي مفهوم مجموعه و دادههاي شمارشي در زبان پاسكال مجموعه و دادههاي شمارشي به عنوان متغير استفاده از مجموعهها و دادههاي شمارشي در برنامه
اسلاید 376: ÷ هدفهاي رفتاري مفهوم مجموعه و دادههاي شمارشي را درك كند. بتواند در صورت لزوم از مجموعه و دادههاي شمارشي استفاده كند.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 377: تعداد محدودي از دادهها كه از نظر نوع يكسان هستند، در غالب مجموعه و يا گونههاي شمارشي نگهداري ميشوند كه مفهومي شبيه در رياضيات دارند. براي استفاده در مواردي خاص نظير روزهاي هفته و يا نوع ماشينها و... كه ترتيبي هستند و يا يك مجموعه از دادههاي پشت سر هم ميباشند، استفاده از اين ساختارها كار را بسيار راحت ميكند. هر چند وجود آنها به عنوان ساختارهاي دادهاي، الزامينيست. بهرحال به عنوان ابزارهايي از زبان پاسكال هستند كه در مواقعي، ضروري بنظر ميرسند و مسئله را به صورتي قابلفهم و راحت حل ميكند.مقدمه
اسلاید 378: مجموعهها (Sets) در زبان پاسكال مجموعه، مفهومي شبيه به مفهوم مجموعه در رياضيات جديد دارد. متغيري است كه شامل ليستي از اعداد صحيح، كاراكتر، بولين و يا از نوع شمارشي ميباشد كه داراي تعداد عناصر محدود به حداكثر 256 تا ميباشد. از اين جهت بسيار شبيه به يك آرايه در زبان پاسكال است كه شامل دادههايي از يك نوع ميباشد، ولي آرايه داراي عناصر محدودي نيست و در ضمن مانند آرايه تعريف نميشود.
اسلاید 379: تعريف مجموعهبراي تعريف يك مجموعه از كلمات كليدي set of بصورت زیر استفاده ميكنيم: TypeName= Set of Type Of Set; Type Digit_type = 0..9; Digit = Set of Digit_type مثلا :
اسلاید 380: 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;مثال :
اسلاید 381: عمليات روي مجموعهها در رياضيات عمل عضويت وجود دارد كه به اين معني است كه متغيري عضو مجموعه ميباشد يا خير. اين عمل در زبان پاسكال با كلمه كليدي in صورت ميگيرد. اگر عضويت صحيح باشد جواب True وگرنه False ميباشد. همچنين دو مجموعه را ميتوان با علامات شرطي =، <>، <= و >= مقايسه كرد كه همگي داراي خروجي درست يا غلط ميباشند. وليعلامات شرطي < و > در مورد مجموعهها كاربردي ندارد.
اسلاید 382: 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.مثال :
اسلاید 383: در رياضيات ميتوانيم مجموعهها را با هم اجتماع، اشتراك و تفاضل كنيم كه اين عمليات در پاسكال با عملگرهاي +، * و - به ترتيب ميباشد. اجتماع دو مجموعه تركيبي از همه عضوهاي آنها است و اشتراك يعني عضوهايي كه در هر دو مجموعه مشترك است و تفاضل يعني اعضايي كه در مجموعه اول ميباشد و در مجموعه دوم وجود ندارد. عملگرها روي مجموعهها
اسلاید 384: مثال :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.
اسلاید 385: در استفاده از مجموعه ها به نکات زیر توجه کنید :1. آرگومان ورودي روالها ميتواند مجموعه باشد كه قبلاً در تايپ تعريف شده باشد، نه اينكه مستقيم در روال به عنوان آرگومان بيايد. ولي خروجي يك تابع نميتواند از نوع مجموعه باشد.2. براي نوشتن يا خواندن مجموعهها بايد عضو به عضو عمليات صورتبگيرد و مستقيماً توابع Write، Read روي آنها كار نميكنند.
اسلاید 386: مثال : برنامهاي بنويسيد كه تعداد محدودي عدد مختوم به 1- را از ورودي بخواند و در يك مجموعه از اعداد صحيح قرار بدهد. سپس اعضاي اين مجموعه را با توجه به مجموعه ساخته شده در خروجي چاپ كند:Program test ;Var num , temp : set of byte; I , c : integer ;Begin Writln (Enter numbers: ); Readln( I ) ; Num := [ ] ; c := 0 ;
اسلاید 387: 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 }
اسلاید 388: دادههاي شمارشي (Enumeration) دادههاي شمارشي، يك مجموعه مرتب از اعداد است كه در برنامه، هر عدد داراي نام بخصوصي است. اين نامها در داخل دو پرانتز باز و بسته قرار ميگيرند و بترتيب از صفر مقدار ميگيرند مگر اينكه برنامهنويس به آنها مقدار مخصوصي بدهد.
اسلاید 389: به مثال زير توجه كنيد : Type Cars_type = (Peykan, Pride, Pegout, PK);Var Cars: cars_type;حال در برنامه cars ميتواند مقادير داخل دادههاي شمارشي را بگيرد:cars:= Pride;cars:= PK;
اسلاید 390: 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
اسلاید 391: متغير داده شمارشي شبيه مجموعهها حداكثر داراي 256 عضو ميتواند باشد كه از صفر تا 255 شمارهگذاري ميشود و لذا يك بايت حافظه را اشغال ميكند.نکته :
اسلاید 392: عمليات روي دادههاي شمارشيدادههاي شمارشي همانند هر نوع تايپي ميتوانند در type برنامه تعريف شود و به عنوان آرگومانهاي روالها و يا خروجي توابع ميتواند درنظر گرفته شود ولي حتماً بايد در type تعريف شده باشد و مستقيماً نميتوان بكار برد. اين عمل مشابه مجموعهها و آرايهها نيز ميباشند، لذا ابتدا در type تعريف ميشود، سپس به عنوان ورودي و يا خروجي روالها استفاده ميشود وگرنه خطاي كامپايلري پيش خواهد آمد. همچنين ميتوان در آرايهها از دادهها شمارشي استفاده كرد.
اسلاید 393: مثال : مشابه مجموعهها نميتوان دادههاي شمارشي را مستقيماً 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 Of
اسلاید 394: 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.
اسلاید 395: تمرينات اگر A=[1,3,5,7] و B=[2,4,6] و C=[1,2,3] باشد عبارات زير راارزيابی کنيد.الف- A + (B –C) ب- A + (B*C)ج- A + B + Cد – 2 in A
اسلاید 396: برنامهاي بنويسيد تا مجموعه اي از كاراكترهاي كوچك را گرفته و به يك مجموعه از كاراكترهاي حروف بزرگ متناظر با آن تبديل كند. به كمك دادههاي شمارشي، برنامه اي بنويسيد كه نام دانشجويان يك كلاس را در برگيرد و هر دانشجو نيز يك شماره داشته باشد. سپس با دريافت نام او شماره او در نمايشگر چاپ شود.
اسلاید 397: فصل 13(Records) ركوردها هدفهاي كلي مفهوم ركورد و اجزاي آن انواع ركوردها و استفاده از آن در برنامه معرفي مزاياي ركوردها در برنامه
اسلاید 398: ÷ هدفهاي رفتاري مواقع لزوم ركورد را تشخيص دهد. از ركوردها در برنامهاش استفاده كند. برنامههاي بزرگ و با دادههاي زياد بنويسد.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 399: مقدمه نوع داده ساختيافتهاي كه در اينجا مطرح ميشود، ركورد نام دارد كه جهت نگهداري دادههاي مختلف نظير نام، نام خانوادگي، سن و آدرس براي يك دانشجو بكار ميرود. ركوردها برخلاف آرايهها كه داراي عناصر از يك جنس و نوع هستند، داراي عناصر از انواع مختلف ميباشند. اطلاعات ازنوع مختلف را نميتوان در آرايه نگهداري كرد چرا كه داراي جنس مشابه نيستند و لذا از ساختاري به نام ركورد استفاده ميشود.
اسلاید 400: تعريف ركوردها نوع داده ساختيافته ای که از یک سری داده ها یا اطلاعات مرتبط به هم تشکیل می شود.هر کدام از اطلاعات را یک فیلد می نامند .بطور كلي تعريف نوع ركورد در زير آمده است:TypeName = RecordField1-list : type1;Field2-list : type2;....Fieldn-list : typen; End;
اسلاید 401: براي ساختن ركورد، از كلمه كليدي Record استفاده ميشود كه مطابق زيرميباشد:Type Student = Record Name: String [10]; Family: String [15]; Age: integer; Address: String; End;در اين تعريف Student از نوع Record است. حال ميتوان در var برنامه تعريف كرد:VarS: Student;
اسلاید 402: دسترسي به فيلدهاي ركوردبراي دسترسي به فيلدهاي ركورد ازعلامت . استفاده ميشود. يعني بصورتزير: نام فيلد . نام متغير ركورد مثال: برنامهاي بنويسيد كه ركوردي از نوع اعداد ايجاد كرده و مقادير آنرا مقدارهي كند.
اسلاید 403: 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.
اسلاید 404: مثال : برنامهاي بنويسيد كه ركورد يك دانشجو را داشته باشد و با توجه به جنس او كلمه آقا و يا خانم را به همراه نام و نام خانوادگياش را چاپ كند.Type Student = recordId: integer;Name: string[10];Family: string[15];Sex: char;Age: integer; End;Var Stu: student;
اسلاید 405: 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.
اسلاید 406: بدست آوردن حجم يك ركوردبراي بدست آوردن فضاي اشغال شده توسط ركورد ابتدا بايد فضاي اشغال شده توسط تماميفيلدها را بدست آورده و سپس باهم جمع كنيم. مثال زير را درنظر بگيريد:
اسلاید 407: 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 بايت فضا اشغال ميشود.
اسلاید 408: ركوردهاي تودرتو فيلدهاي يك ركورد ميتوانند از هر نوعي باشد، از جمله ميتوانند از نوع ركورد ديگري باشند. در اينجا نيز مشابه قبل دسترسي به همان صورت ميباشد فقط به تعداد ركوردهاي تودرتو، . پيش ميآيد. به مثال زيرتوجه كنيد:TypeRec = record a, b: integer; c: char; x: Record p: integer; q: integer; End; End;
اسلاید 409: Var r: Rec;دراينجا يك ركورد تودرتو به نام Rec تعريف شده است كه متغير r از آن نوع تعريف شده است. سپس براي دسترسي به فيلدهاي a , b ,c ميتوان به صورت زير عمل كرد:r.ar.bولي براي دسترسي به فيلدهاي p ,q چون متعلق به ركورد x نيز هستند داريم:r.x.pr.x.q
اسلاید 410: آرايهاي از ركوردها هنگاميكه ما تعدادي داده مشابه داريم ولي در هريك، دادههاي مختلفي وجود دارد ميتوانيم يك ركورد تعريف كرده، سپس آرايهاي از آن تعريف كنيم. Type Student = recordName: string[10];Id: integer;Age: integer; End; Arr_stu: array[1..10] of student;Var S: Arr_stu;
اسلاید 411: در بالا ابتدا يك ركورد دانشجو تعريف شده است، سپس به تعداد 10 نفر دانشجو تحت آرايه Arr_stu شكل گرفته است و سرانجام متغيري به نام S از نوع آن تعريف شده است. مشابه ساختار آرايه، چيزي عوض نشده است و فقط هر عنصر آرايه، يک ركورد ميباشد كه داراي سه فيلد مطابق جدول فوق ميباشد. براي دسترسي به آرایه فوق داريم:S[1].name S[1].idS[1].ageS[2].nameS[2].id......
اسلاید 412: ارسال ركورد به زيربرنامهها ركوردها را ميتوان مشابه انواع تعاريف ساده ديگر به صورت پارامترهاي متغير و مقدار به زيربرنامه ارسال كرد. ولي نوع برگشتي توابع نميتواند از نوع ركورد باشد، يعني حتماً بايد از نوع ساده نظير integer، char و... باشد و از انواع تركيبي نظير ركورد، آرايه، مجموعه و فايل نميتواند باشد.اگر بخواهيم ركوردي را بصورت پارامتر به زيربرنامه ارسال كنيم، ابتدا بايد آنرا در type تعريف كرده و سپس ارسال شود وگرنه كامپايلر خطا صادر ميكند.
اسلاید 413: مثال : ميخواهيم برنامهاي بنويسيم كه ركورد 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;
اسلاید 414: 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;
اسلاید 415: 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.
اسلاید 416: تمرينات براي گونههاي حيوانات يك پارك نظير پرندگان وحشي ركوردي شامل نام، دسته، محيط زندگي، سن بسازيد. در نظر بگيريد كه در پارك 100 گونه از يك پرنده وحشي وجود دارد (راهنمايي: آرايهاي از ركورد با فيلدهاي گفته شده بسازيد). برنامهاي بنويسيد كه براي نگهداري تاريخ به صورت روز، ماه و سال براي 100 سال بكار رود. در واقع به صورت تقويم باشد و جملهاي در مورد آن تاريخ را نگهداري كنيد؟ (راهنمايي: آرايهاي 366 تايي از روز بهمراه آرايهاي از 12 ماه و يك سال و يك رشته را به صورت يك ركورد در نظر گرفته سپس براي 100 سال بصورت يك آرايه صدتايي در نظر بگيريد.)
اسلاید 417: فصل 14(Files) فــايـلهاهدفهاي كلي مفهوم فايل و انواع آن موارد استفاده از فايلها
اسلاید 418: ÷ هدفهاي رفتاري در برنامهاش از فايلها استفاده كند.. براي برنامههاي با دادههاي زياد از فايل استفاده كند.. با فايلهای دادهاي و بايزي برنامهنويسي كند.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 419: مقدمهبراي ذخيره دائمي دادهها از ساختاري به نام فايل (File) استفاده ميكنيم. تاكنون همه عمليات لازم در حافظه اصلي انجام ميگرفت كه گذرا و فقط به زمان اجراي برنامه و روشن بودن كامپيوتر بستگي داشت. ولي در فايلها چنين نيست، بلكه دادهها در فايلهايي قرار دارند كه حتي بعد از خاموش كردن كامپيوتر، بعدها قابل دسترسي است.
اسلاید 420: فايلهاي متني (Text) يك فايل متني از تعداد كاراكتر تشكيل شده است كه با يك اسم در روي ديسك ذخيره شده است. چون فايل از نوع متني است ميتوانيد دادههاي داخل آنرا مشاهده كنيد.ساختار دادهها در يك فايل متني بدين صورت است كه تعدادي خط وجود دارد كه به علامت EOLN ختم ميشوند و در انتهاي فايل نيز علامت EOF قرار دارد. طول خطوط نامشخص است و اندازه فايل ممكن است بسيار بزرگ يا كوچك و يا تهي باشد.
اسلاید 421: طريقه ایجاد يك فايل متنيتعریف یک متغیر فایلی نسبت دادن اسم فایل به متغیر فایلی ایجاد فایل با دستور Rewrite
اسلاید 422: تعریف یک متغیر فایلیName : Text;نسبت دادن اسم فایل به متغیر فایلیAssign(FileVar , ‘NameFile’ )ایجاد فایل با دستور RewriteRewrite( FileVar )
اسلاید 423: مثال : برنامهاي بنويسيد كه از ورودي 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);
اسلاید 424: For i: = 1 to 10 do Writeln (f, A[i]); Writeln (f, Sum); Close (f);End.بعد از نوشته شدن اطلاعات در فایل ، فایل باید بسته شود برای اینکار از روال زیر استفاده می شود :Close(FileName)
اسلاید 425: طريقه خواندن اطلاعات از يك فايل متنيتعریف یک متغیر فایلی نسبت دادن اسم فایل به متغیر فایلی باز کردن فایل برای خواندن با دستورReset
اسلاید 426: باز کردن فایل برای خواندن با دستورReset ( FileName )دستور Read وReadln برای خواندن اطلاعات از فایل بکار می روند .Readln بعد از خواندن دادههاي مورد نظر به سطر بعد ميرود. اين عمل براي Writeln نيز چنين ميباشد. ولي قبل از استفاده از اين دستورات بايد فايل متني براي خواندن يا نوشتن باز شود. دستور Reset فايل متني را براي خواندن باز ميكند و مكان نما را ابتداي فايل ميبرد. دستور Rewrite فايل متني را براي نوشتن در آن باز كرده، و مكان نما را به ابتداي آن ميبرد.
اسلاید 427: حال بافرض موجود بودن فایل متني 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.
اسلاید 428: مثال : برنامهاي بنويسيد كه يك فايل متني شامل چند جمله را از ورودي دريافت كرده و يك كپي از فايل درخروجي بسازد.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);
اسلاید 429: در اين برنامه ابتدا دو فايل به نامهايشان نسبت داده ميشوند و ترتيب براي خواندن و نوشتن باز ميشوند. سپس توسط eof شرط خاتمه فايل ورودي يعني f1 بررسي ميشوند و در يك حلقه تو در تو while شرط خاتمه خطوط نيز توسطeoln بررسي شده و كاراكترها از فايل ورودي خوانده شده و در فايل خروجي نوشته ميشوند.
اسلاید 430: 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.
اسلاید 431: فايلهاي دودويي و نوعدار(Binary & Typed ) اين نوع فايلها در زبان پاسكال از تايپهاي مختلف record ,array ,read ,integer ,char و … تشكيل شده است كه نياز به پردازش متنوعشبيه مرتبسازي، جستجو، حذف و… دارند. اين فايلها پس از ايجاد توسط برنامه، قابل رؤيت توسط ويراشگرها نيستند، بلكه به صورت كدهاي اسكي ميباشند يعني دودويي ميباشند. نحوه دسترسي به اطلاعات آنها نيز به صورت تصادفي (Random) است.
اسلاید 432: طريقه ایجاد يك فايل نوع دارتعریف یک متغیر فایلی نسبت دادن اسم فایل به متغیر فایلی ایجاد فایل با دستور Rewrite
اسلاید 433: تعریف یک متغیر فایلیName : File Of FileType ;نسبت دادن اسم فایل به متغیر فایلیAssign(FileVar , ‘NameFile’ )ایجاد فایل با دستور RewriteRewrite( FileVar )
اسلاید 434: نحوه تعريف يك فايل دودويي نوعدار از انواع مختلف در زير آورده شده است:Const n=100;Type Student = Record Name: string[10]; Family: String[15]; Age: integer; ID: integer; end;Sarray = Array [1..n] of student;
اسلاید 435: Varفايل دودويي از نوع كاراكتر Bf1: file of char;فايل دودويي از نوع صحيح Bf2: file of integer;فايل دودويي از نوع ركورد دانشجو Bf3: file of student;فايل دودويي از مجموعهA تا Z Bf6: file of set of A..Z; مثال :
اسلاید 436: مثال : برنامهاي بنويسيد كه تعداد رشته (حداكثر 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.
اسلاید 437: در جدول صفحه بعد تمام روالهاي كتابخانهاي پاسكال جهت كار با فايلها آورده شده است كه به همراه توضيحات لازمه جهت كار با آنها ميباشد. همچنين براي هر تابع و رويه محل مورد استفاده آن در ستونی مشخص شده است .
اسلاید 440: مثال های حل شده مثال : برنامهاي بنويسيد كه تعداد خطوط يك فايل متني را بدست آورد.Var F: text ; ch : char ; str: string[20]; count: integer;Begin Write (Enter the file name: ); Readln(str); Assign(f,str); Reset(f);
اسلاید 441: 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.
اسلاید 442: مثال : ركوردي از كتابها در نظر گرفته، تعداد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;
اسلاید 443: 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.
اسلاید 444: تمرينات برنامهاي بنويسيد كه از يك فايل متني از اعداد حقيقي كه در سطرها و ستونها مختلف قرار دارند، ميانگين دادهها را بدست آورده و در مانيتور چاپ كند.برنامهاي بنويسيد كه در انتهاي يك فايل متني، همان فايل متني را اضافه كند. برنامهاي بنويسيد كه در يك فايل نوع دار از كاراكترها، اطلاعات آماري هر كاراكتر را بدست آورده، يعني تعداد هر كاراكتر را بدست آورد. مثلاً كاراكتر A به تعداد 45 تا و كاراكتر B به تعداد 36 تا و…
اسلاید 445: فصل 15تحليل الگوريتمها هدفهاي كلي مفهوم و تعريف الگوريتم مفهوم كارايي يك الگوريتم مرتبه يك الگوريتم
اسلاید 446: ÷ هدفهاي رفتاري برنامه خود را تحليل زماني نمايد. مرتبه الگوريتم را بدست آورد. الگوريتمهاي بازگشتي را تحليل نمايد.دانشجو پس از مطالعه اين فصل بايد بتواند:
اسلاید 447: مقدمه تحليل يك الگوريتم يعني ارزيابي روشهاي مختلف حل آن مسئله، بررسي و محاسبه بهترين و بدترين حالتها، بصورتي كه با توجه به شرايط بهترين حالت را بتوان انتخاب كرد. الگوريتم در واقع تعداد محدودي از دستورالعملها می باشد كه بترتيب اجرا ميشوند و هدف خاصي را دنبال ميكنند
اسلاید 448: تعريف مرتبه يا پيچيدگي الگوريتم (O بزرگ) براي بدست آوردن بدترين حالت اجراي يك الگوريتم يا مرتبه پيچيدگي الگوريتم از O بزرگ استفاده ميكنيم و بنا به تعريف عبارتست از f(n)=O(g(n)) و ميخوانيم f(x) از مرتبه g(x) ميباشد، اگر و تنها
اسلاید 449: رمثال : 1+n2=f(n) ميتوان با در نظرگرفتن g(n)=n و3=c رابطه زیر حاصل می شود :1n n>=3 <= cg(n)=1n+2f(n)=لذا ميتوان گفت، پيچيدگي زماني f(n) از مرتبه O(n) ميباشد.
اسلاید 450: بدست آوردن مرتبه الگوريتمها براي بدست آوردن مرتبه اجراي الگوريتمها بايد به دقت بررسي شود و تعداد تكرار آن الگوريتم بدست آورده شود. يعني در واقع تعداد تكرارها بدست آورده شود و سپس با هم جمع شده و مطابق مثالهاي قبلي به پيچيدگي زمان واقعي رسيد. براي اين منظور از الگوريتمهاي ساده شروع كرده و به پيچيده ميرسيم.
اسلاید 451: فرض كنيد الگوريتمي داراي حلقههاي ساده به شكل زير باشد:x:= 0;For I :=1 to n do x:=x+1; كه در آن n تعداد ورودي ميباشد. يعني حلقه for بستگي به پارامتر n دارد. همان طور كه از تعريف حلقه for برميآيد تعداد 1+1-n تكرار يعني n تكرار وجود دارد و لذا قطعه برنامه فوق از مرتبهO(n) ميباشد.
اسلاید 452: مثال : مرتبه تابع زير را بدست آوريد:Function fact ( n : integer ) : integer ;var f,i: integer;begin f:=1; for I := 1 to n do f:=f*i; fact:=f;end;
اسلاید 453: تابع فوق فاكتوريل عدد n را بر ميگرداند. همانطور كه ميبينيد تابع شامل يك حلقه for ساده بوده كه از يك تا n متغير بوده و لذا n بار تكرار ميشود. 2 جمله ساده نيز وجود دارد که زمان های ثابتی دارند. بنابراین مرتبه تابع بالا برابر است با : O(n)
اسلاید 454: تمرينات پيچيدگي زماني توابع زير را بدست آوريد:
اسلاید 455: پيچيدگي زماني تابع زير را بدست آوريد: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.
اسلاید 456: پایان
خرید پاورپوینت توسط کلیه کارتهای شتاب امکانپذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.
در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.
در صورت بروز هر گونه مشکل به شماره 09353405883 در ایتا پیام دهید یا با ای دی poshtibani_ppt_ir در تلگرام ارتباط بگیرید.
- پاورپوینتهای مشابه
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.