صفحه 1:
لا شناخت حل مسئله و ارائه الگوریتم لا شناخت اجزاء لازم برای حل مسئله Q بررسی صحت الگوریتم

صفحه 2:
هدفهای رفتاری :دانشجو پس از مطالعه این فصل باید بتواند الگوریتمی را برای حل مسئله ارائه دهد. * الگوریتم های مختلف برای یک مسئله را مقایسه کند. 1# شرط ها و حلقه ها را در الگوریتم بکار بیرد .

صفحه 3:
معد مه در ژنذگن روژمره انسان ب مسائل مختلفي روبروست و برای هر کدام از این مسائل (حل مشکلات) راه حلی و روشی را بر می‌گزیند. مسانلی از قبیل راه رفتن, غذا خوردن. خواییدن و غیره که بشر تقریباً هر روز آنها را پیش روی خود دارد. همه این مسائل نیاز به روشی برای حل کردن دارند مثلا راه رفتن باید با ترتیب خاصی و مراحل معینی انجام شود. تا مسئله راه رفتن برای بشر حل شود. اصطلاحاً روش انجام کار یا حل مسئله را الگوریتم آن مسئله می‌نامند

صفحه 4:
* تعریف الگوریتم الگوریتم مجموعه‌ای از دستورالعمل هاء برای حل مسئله می‌باشد که شرایط زیر را بايد دارا باشد: * دقيق باشد * جزئیات کامل حل مسئله را داشته باشد. * پایانپذیر باشد.

صفحه 5:
+ 2 * مراحل الگوریتم برای حل یک مسئله باید الگوربتم آن مسئله را مشخص کنیم (یا بیابیم) که اصطلاحاً طراحي الگوریتم برای آن مسئله نامیده می‌شود. در طراحی الگوریتم معمولا سه مرحله زیر را از هم جدا می‌کنند: * خواندن داده‌ها * انجام محاسبات * خروجی‌ها

صفحه 6:
مثال الگوریتمی بنوبسید که دو عدد از ورودی دریافت کرده مجموع دو عدد را محاسبه و چاپ نماید. ‎boas‏ انجام محاسبات ورودیها. مجموع دو عدد. جمع دو عدد. ‎a,b‏ ‎

صفحه 7:
مثال: الگوریتمی بنوبسید که سه عدد از ورودی دریافت کرده مجموع و میانگین .سه عدد را محاسبه و چاپ کند خروجی‌ها انحام محاسبات ورودیا چاپ مجموع محاسبه مجموع ‎a‏ ‏جاب ميانكين محاسبه ميانگین ‎b‏

صفحه 8:
معمولا درک یک الگوریتم با شکل راحتر از نوشتن آن بصورت متن می‌باشد. لذا الگوریتم را با فلوچارت(10170131])نمایش می‌دهند. فلوچارت از شکل‌های زیر تشکیل می‌شود. ؟ علامت‌های شروع و پایان: که معمولا از یک بیضی استفاده می‌کنند: * علامتهای ورودی و خروجی: که معمولا از متوازی‌الاضلاع استفاده می‌شود:

صفحه 9:
*علامتهای محاسباتی و جایگزینی: برای نمایش دستورات جایگزینی و محاسباتی از مستطیل استفاده می کنند: جایگزین یا محاسبات *؟ علامت شرط: برای نمایش شرط از لوزی استفاده می‌شود. * علامت اتصال: برای اتصال شکل‌های مختلف بهم از فلش‌های جهت‌دار استفاده می‌کنند.

صفحه 10:
* فلوچارت مجموع سه عدد )> ‎Begin‏ ۳" Read(a,b,c) Sum < atb+c Ave < sum/3 ii Write(sum,ave) 7

صفحه 11:
مثال: فلوچارتی رسم نمائید که دو عدد از ورودی دریافت کرده سپس محتویات دو عدد را پا هم جابجا نماید.

صفحه 12:
emp temp temp a 12 15

صفحه 13:
:فلوچارت مسئله بالا بصورت زیر خواهد بود

صفحه 14:
4 تمرین ‎١‏ فلوجارتى رسم نمائيد كه طول و عرض مستطيل را از ورودى دريافت رده محيظ و عساحتت آلرا محابيه و حاب كتدد ‏۲- فلوچارتی رسم نمائید که شعاع دایره‌ای را از ورودی دریافت کرده. محيط و مساحت انرا محاسبه و جاب نمايد. ‏فلوچارتی رسم کنید که سه عدد ۲ ,5600۳00 ر 11370 را از و بافت کرده. محتویات آنها را جابجا نموده. حاصل را در خروجی پ کند.

صفحه 15:
6- فلوجارتی رسم نمائید که دو عدد از ورودی دریافت کرده. سپس بحتویات دو عدد را بدون استفاده از متغیر کمکی جابجا کند. ۵- فلوچارتی رسم نمائید که عددی (درجه حرارت برحسب سانتیگراد) را از ورودی دریافت کرده سپس آنرا به درجه فارنهایت تبدیل کند.

صفحه 16:
:ی > دستورالعمل‌هاي شرطي در حل بسیاری از مسائل یا ت تقریباً تمام مسائل نیاز به استفاده از شروط جزء نیازهای اساسی محسوب می‌شود. همانطور که ما خودمان در زندگی روزمره با این شرط‌ها سرکار داریم. بطور مثال اگر هوا ابری باشد ممکن است چنین سخن بكوييم: اگر هوا بارانی باشد سپس چتری برمی‌دارم. در غیر اینصورت چتر برنمی‌دارم.

صفحه 17:
NO ‏عمل يا اعمال بعدى‎

صفحه 18:
مثال : فلوچارتی رسم نمائید که عددی را از ورودی زوج بودن آن را تشخیص دهد. ‎in)‏ Write(‘odd’) ۳

صفحه 19:

صفحه 20:
حير تسس

صفحه 21:
خروح ۱ 2 و اك ‎oS |i‏ = a 8 “riers

صفحه 22:
:ی * تمرین ۱- فلوچارتی رسم کنید که عددی را از ورودی دریافت کرده. قدر مطلق عدد را در خروجی چاپ ‎AS‏ ۲- فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده مثبت. منفی یا صفر بودن عدد را تشخیص داده, در خروجی با پیغام مناسب چا کت ۳- فلوچارتی رسم نمائید که عددی را از ورودی دریافت کرده. بخشپذیری آن پر ۳ و ۵ را پررسی نماید. فلوچارتی رسم نمائید که ضرایب یک معادله درجه دوم را از ورودی دریافت کرده ریشه‌های آن را محاسبه در خروجی چاپ کند.

صفحه 23:
‌ ** حلقه‌ها در حل بسیاری از مسائل با عملیاتی روبرو می‌شویم . که نیاز به تکرار دارند و عمل تکرار آنها به تعداد مشخصی انجام می‌گیرد. فرض ‎AES‏ ‏بخواهیم ميانكين ۰ عدد را محاسبه کنیم. در اینصورت منطقی بنظر نمی‌رسد که ۰ متغیر مختلف را از ورودی دریافت کنیم سپس آنها ر حت ع

صفحه 24:
*حلقه های با تکرار مشخص *؟حلقه های با تکرار نا مشخص

صفحه 25:
در اين نوع حلقه‌ها تعداد تکرار مشخص می‌باشد این حلقه از اجزاء زیر تشکیل می‌شود: ۱- اندیس حلقه ۲- مقدار اولیه برای انديس حلقه ۳- مقدار افزاینده براى انديس حلقه (معمولا یک واحد در هر مرحله) 4- مقدار نهایی (تعداد تکرا حلقه) ۵- شرطی برای کنترل تعداد تکرار حلقه

صفحه 26:

صفحه 27:

صفحه 28:

صفحه 29:
1۵ 1۵ ه و ویو خروجی

صفحه 30:
مثال : فلوجارتى رسم كنيد كه 2 عدد از ورودی دریافت کرده. بزرگترین مقدار از بین 2 عدد را بيدا كيده در خروجى جاب نمايد. انديس حلقه ‎i‏ بزرگترین مقدار ‎Max‏

صفحه 31:

صفحه 32:
ورودی دریافت کرده سپس 5 به و ‎yn‏ 9

صفحه 33:
write(pow) yes pow <— pow*x (=) ‏حلقه‎ i< 1

صفحه 34:
۱ ۲ (در پاسکال به حلقه مقط مشهورند.) ر این حلقه‌ها با توجه به ورودی. تعداد تکرار مشخص می‌شود. و دقیقاً نمی توان تعداد تکرار حلقه را بدون ورودی معین کرد. اين حلقه ها فقط شامل شرطی هستند که تا زمانیکه برفرار باشد حلقه اجرا می‌شود.

صفحه 35:
No محموعه دستورالعملها و جاگزینها

صفحه 36:
مثال: فلوچارتی رسم کنید که عددی را از ورودی دریافت کرده سپس تعداد ارقام آن را شمرده در خروجی چاپ نماید. ؟عدد خوانده شده ‎N‏ ؟ تعداد ارقام ‎count‏

صفحه 37:
Begin count g 0 if N>0 then yes N <—Ndiv10 count < count+1

صفحه 38:
در حالت کلی جملات سری بصورت: عدد خوانده شده جمله اول سری جمله دوم سری جمله سوم سری 2 كل 025 a

صفحه 39:

صفحه 40:
3-0 * تمرين ‎-١‏ فلوجارتى رسم نمائيد كه عددى از ورودى دريافت كرده. كامل بودن آنرا بررسى نماید. (عدد کامل. عددی است که مجموع مقسومعليههاى آن با خودش برابر باشد.) ‏۲- فلوچارتی رسم کنید كه ا را از ورودی دریافت کرده ا جمله سری فیبوناچی را تولید نماید. ‏۳ فلوچارتی رسم نمائید که دو عدد ]1۷ , لا را از ورودی خوانده. بزرگترین مقسوم‌علیه مشترک دو عدد را محاسبه و چاپ کند.

صفحه 41:
EE EE EEE EE ‏موممئي‎ ‏حلقه‌هاي تودر تو‎ * الكوريتمهايى كه تا حال بكار برديم. فقط شامل یک حلقه بودند. در صورتى كه در بسيارى از مسائل ممكن است نياز به استفاده از جند حلقه در داخل هم باشيم. در اين نوع حلقه‌ها باید دقت بیشتری به خرج دهيم. تا مشکلی پیش نیاید. اگر از حلقه‌های نوع اول بصورت تودرتو استفاده کنیم در اینصورت برای هر حلقه شرط نهایی و انديس اوليه جداگانه باید تعریف کنیم .

صفحه 42:
مقدار نهایی خود تکرار می‌شود. در کل اگر حلقه اولیه 12 بار تکرار شود و حلقه داخلی 322 بار. در ایتصورت کل حلقه : nxm بار تکرار خواهد شد.

صفحه 43:

صفحه 44:
= سرى 59 محاسبه نماید: ‎x‏ للىيى... + ۳ وت * اندیس حلقه اول 1 * وریدی لا * محاسبه فاکتوریل ‎fact‏ * انديس حلقه داخلى ل * مجموع ‎Sum‏

صفحه 45:
cn ‏سپ‎

صفحه 46:
* تمرینات آخر فصل ۱- فلوچارتی رسم نمائید که آل عدد از ورودی دریافت کرده تعداد اعداد اول و کامل را شمرده در خروجی چاپ نماید. - فلوچارتی رسم نمائید که 26 , ۷[ را از ورودی خوانده مقدار سری یر را محاسبه کند: ‎Ss‏ برچ شاد + +1- 5

صفحه 47:
‎ere‏ 17 201ص 6 فلوجارتى رسم كنيد كه تاريخ تولد شخصى را از ورودى خوانده. ‏سن شخص را با تاريخ روزء محاسبه نموده در خروجى جاب كند. ‏۵- فلوچارتی رسم نمائيد که (10<10) ۷], لا را از ورودى دريافت کرده سری فیبوناچی بین ]۷[, ۷[ را توليد كرده. در خروجى جاب كنا

صفحه 48:
Ve ‏کاربرد آرايه ها در الكو‎ ‏كوريتم ها‎ هدفهاي كلي اخت آرايه ها 5 سد اخت ا ‎ee‏ جستجو لگوریت ۱ تفت ریتم های لاز ‎oe‏ ی لازم برای 35 = ‎il‏ و ۱ و مر جستجو يا ا ‎a‏ زى

صفحه 49:
:دانشجو يس از مطالعه اين فصل بايد بتواند "ذا از آرایه ها در حل مسئله استفاده کند . 8 بااستفاده از ارایه ها لیستی را مرتب نماید . در صورت لزوم در لیستی جستجو انجام دهد .

صفحه 50:
فرض کنید بخواهیم اطلاعات ۱۰۰ کارمند را از ورودی بخوانیم و سپس آنها را مرتب کنیم. در اینصورت باید ورودیها در جایی از حافظه ذخيره کنیم. در زبانهای برنامه‌نویسی معمولا از آرایه برای ذخیره اطلاعات در حافظه استفاده می‌کنند. در آرایه‌ها ما با توحه به تعداد ورودیها. طول آن را مشخص می‌کنیم. سپس داده‌ها را خوانده در آن قرار مى دهيم

صفحه 51:
موممئي ‎EE EE EEE EE‏ پم ده ۰ ‎wis pi **‏ آرایه خانه‌های پشت سر هم از حافظه که همنوع بوده و توسط یک اسم معرفی می‌شوند. آرایه نام دارد. نحوه دسترسی به هر یک از اعضاء آرایه. از طریق اندیس آرایه امکانپذیر است . برای تعریف آرایه ابتدا طول آرایه که در حقیقت تعداد خانه‌های آن راگن هی کلد,.قفین می‌کتيم: سیسن توع تعانها باید معین شوك در فلوچارت‌ها آرایه‌ها را بصورت زير نمایش می‌دهیم: ‎Name[ 1 .. Length ]‏ طول آرایه اسم آرايه

صفحه 52:
زير مى باشد: a{1..100] Read(ali]) 10

صفحه 53:
oe Nam [ index 1 انديس آرايه اسم آرایه مثال: فلوجارتى رسم كنيد كه يى آرايه حداكثر ‎٠٠١‏ عنصری را از ورودی دريافت كرده. سيس آن را خروجى نمايش دهد.

صفحه 54:
yes write(afil) 1 1 ‏للع‎ Read(alil) i <— i+l ‏جع‎

صفحه 55:
a[1..20] i<1 ali] <— Nmod2 ‏و و‎ No 1 1 ‏1ه‎ 3 N <— Ndiv2

صفحه 56:
مثال : فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده سپس اعداد اول قبل از آن را تولید نموده . در یک آرایه قرار دهد. [2]1..100 1 حه 1 A Read(N) 7 | ke ‘alt |< 2 a[2] <— 1

صفحه 57:

صفحه 58:
EEE EEE << << "> (search and Sort ) ‏جستجو و مرتب سازي‎ ** یکی از مسائلی که در بحث طراحی الگوریتم بسیار مهم است. بحث مرتب‌سازی و جستجو می‌باشد. منظور از جستجو اینست که یک مقداری را از یک لیست جستجو کنیم و منظور از مرتب‌سازی اینست که یک لیست مرتب از داده‌ها را تولید کنیم. برای جستجو و مرتب‌سازی الگوریتم‌های مختلفی وجود دارد در زیر الگوریتم‌های اولیه. برای جستجو و مرتب‌سازی را بررسی می‌کنیم.

صفحه 59:
دو الگوریتم زير غالبا برای جستجو بکار می‌روند:

صفحه 60:
مين نیب دوي لین با اولي 4 تر تیب به عبا جستجو را د د > زر م ات 7و ىو حستجو: ‎mae‏ شد بيدا جستحو )= >> مود عنصر ‎Lie‏ ‏می سب يسه مقاد يه آراب عنصر 9 می‌دهیم, ‎oo‏ ‎ales‏ ‏آن را اندیس

صفحه 61:
write(index)

صفحه 62:
در جستجوی دودوئی . لیست مورد جستجو مرتب می‌باشد. لذا برای جستجو اعمال زیر انجام می‌شود: ۱- عنصر ۲ با عنصر وسط آرايه كه انديس آن برابر middle (low+high)/2 مقایسه می‌شود.

صفحه 63:
tol 9 1 8 559 3 0 د ۱ ليست قرار دارد. لذا آرايه با انديسء جد يد در نظ ر كرفته می‌شود و قسمت پایین لیست از فضاى جستجو حذف مىشود. السك اذى ۳-اگر 2 از عنصر وسط آرایه بزرگتر باشد قسمت بالای لیست حذف می‌شود و فضای جستجو, قسمت پایین آرایه خواهد بود. ۶- اگر 2 برابر عنصر وسط باشد عمل جستجو خاتمه می‌پذیرد.

صفحه 64:
مرتب‌سازی بحث بعدی این فصل می‌باشد. برای مرتب کردن داده‌ها نیز / - الگوریتم‌های مختلفی وجود دارد. که هر کدام مزایا و معایب خاص خود را دارد. بحث مقصل در این مورد را به فصل‌های بعد واگذار می‌کنيم.

صفحه 65:
موممئي ‎EE EE EEE EE‏ 50 * تمرین *فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده اعداد کامل قبل از خود را تولید و در یک آرایه قرار دهد. *فلوچارتی رسم نمائید که یک آرایه حداکثر ۱۰۰ عنصری از ورودی دریافت کرده عناصری از آن که اول هستند را با صفر کردن حذف نماید. *فلوچارتی رسم نمائید که یک عدد حداکثر ۲۰ رقمی را توسط آرایه‌ای از ورودی دریافت نماید. سپس یک عدد تک رقمی را از ورودی خوانده در عدد ۲۰ رقمی ضرب نموده, حاصل را در خروجی چاپ نماید.

صفحه 66:
هدفهاي كلي شناخت اجزاى تشكيل دهنده يك برنامه شناخت ساختار يك برنامه در زبان ياسكال بررسى دستكاههاى خروجى و دستورات لازم در زبان ياسكال براى توليد خروجى

صفحه 67:
:دانشجو يس از مطالعه اين فصل بايد بتواند اجزاء لازم براى نوشتن برنامه در زبان ياسكال را بداند. ‎a‏ يك شناسه صحيح در زبان ياسكال را تعريف كند. ساختار یک برنامه در زبان پاسکال و اعلانهای مربوط به برنامه را تعریف نماید. یک برنامه ساده به زیان پاسکال که فقط خاصیت خروجی دازد؛ بنویسد.

صفحه 68:
(Reserved Words ) ‏کلمات ذخیره‌شده‎ * (identifier ( ‏شناسه‌ها‎ *

صفحه 69:
کلمات ذخیره شده, کلماتی هستند که مترجم زبان آنها را می‌شناسد و معنای خاصی برای زبان دارند. مترجم زبان به محض مشاهده این کلمات اعمال خاصی را انجام می‌دهد. هر زبان دارای تعداد مشخصی کلمات ذخبره شده می‌باشد و این تعداد قابل افزایش توسط برنامه‌نویس

صفحه 70:
then unit until uses var with while exports mod file nil for not function object goto of 1 or implementation packed in procedure inherited program inline record interface repeat concat. constructor destructor

صفحه 71:
* شناسه در پاسکال برای نامگذاری ثابتهد تایپها؛ يروسيجروهاء توابع» میدانهای یک رکورد. برنامه و همچنین یوئیت مورد استفاده قرار مى كيرد.

صفحه 72:
ح 1 5 0 ما تان يبا علستاندارد: لیر = اس 0 هااز قباد ‎53h er t 2‏ 2045 1 ۱ ن‌پاسکللتسعر یفشدملند > 1 ها تراسا 5-5 ‎turers.‏ ل ‎userdefine‏ عن گفته ‎a‏ مونسود.

صفحه 73:
‎EE << << ">‏ * ساختار برنامه در زبان پاسکال :اجزاء اصلي یک برنامه به زبان پاسکال بصورت زیر مي‌باشد ‏عنوان برنامه قسمت تعاریف برنامه قسمت دستور العملها

صفحه 74:
Constant Declaration ‏اعلان‌ثابتها‎ ۶ Type Declaration ‏اعلان انواع‎ * Declaration Variable ‏اعلان‌متفیر‌ها‎ * Declaration Label ‏اعلان برچسبها‎ °

صفحه 75:
بصورت زیر بیان کرد: استفاده از کلمه ذخیره شده ۳100713100 و اسم برنامه ( که می‌تواند بكار برده نشود ) قسمت تعاریف شناسه‌ها بلوک اصلی برنامه که با 36010 ¢5,5 5 4 ‎End‏ همراه نقطه (.) ختم می‌شود. هر دستور در پاسکال به ( ۶) ختم می‌شود.

صفحه 76:
block شناسه del | Statement

صفحه 77:
> << کچ *مثال هاي حل شده Program Print ( output ) ; Begin Writeln (' Pascal Language ۱۱8 Writeln (' Hello' ): End.

صفحه 78:
:خروجي برنامه بالا بصورت زیر مي‌باشد Pascal Language Hello

صفحه 79:
فصل 5 نواع عملگرها و داده‌ها در زبان باسكال هدفهاي كلي معرفي انواع عملكرها در زبان پاسکال شناخت انواع داده‌ها بررسي اولویت عملگرها معرفي دستورات جايكزيني در باسكال

صفحه 80:
:دانشجو پس از مطالعه این فصل باید بتواند "انواع عملگرها در زبان پاسکال را بكار ببرد انواع داده‌ها برای یک برنامه را تعريف كند. "ارايت عله عا دن تک عبارت وا تفحه دهد ایک برنامه ساده با عملیات معمولی را بنویسد:

صفحه 81:
‎si‏ لک ها ‏عملگرها نمادهایی هستند که برای انجام اعمال خاصی مورد استفاده قرار می‌گیرند.عملگرها برای انجام اعمال خاصى روی عملوندها ( 026181205 ) بكار مىروند. با توجه به نوع عملگر ممکن است يك يا دو عملوند وجود داشته باشد. عملگرها در زبان ياسكال از تنوع زيادى برخوردارند.

صفحه 82:

صفحه 83:
منال نام عملگر 7 جمع ص ‎ae x-y, x‏ وضع ‎١‏ = ‏ضرب‎ ay) div ‏تقسیم‎ adivb mod ‏باقیمانده تقسیم‎ |amodb ‎me‏ سا | بح اه 5 ‎ ‎

صفحه 84:
مثال نام مار ۷ < 1 بزرگتر > « بزرگتر مساوی => ‎2s Sy‏ كو جكتر < د کوچکتر مساوی <= ‎aes‏ مساوی بودن = ‎x<>y‏ نامساوی ><

صفحه 85:
مثال ‎a>y and‏ y<x xy 01 y<x Not (x) OR Not

صفحه 86:

صفحه 87:
بالاترین تقدم ( Not div / mod - + Shl shr < =< => <> = And XOR

صفحه 88:
>" << آ" « ا * انواع داده‌ها ( 965 012182 ) ‎(Simple data type) ol. cesls <‏ Structural 122182 ( ( ‏دادههاى ساختيانفته‎ Types (Pointer Data Types) ‏دادههاى اشارمكر‎

صفحه 89:
Char type) «Sis ¢s° *صحیح ( 1۳1606۲ ) #عشاری (حقیقی) ‎String type) las, ¢5°‏ *نوع ‎Boolean type) da‏

صفحه 90:
محدوده ز 0 تا 255 128؟! 127 از 32768- تا 32767 از 0 تا 65535 از 2147483648- تا 2147483647 es: Byte Shortint Integer Word Longint

صفحه 91:
10 تعداد ارقام معني دار 13-11 8-7 16-15 30-19 30-19 محدوده 2.2 6-39 .., 1.7 8 1:5 رت 7 3.4 e-324 ... 5.0 1.7 e 308 e -4932 ... 3.4 1.1 e 4932 69 oe: 9.2:e 18 Real Single Double Extend Comp

صفحه 92:
انواع داده‌های ساخت‌یافته عبارتند از: ارایه‌ها رکوردها مجموعه‌ها فایلها

صفحه 93:
EE EE EEE EE "> (Variables) & pio * متغیر. محلی از حافظه است که دارای نوع و اسم می‌باشد. نوع متغیر همان ,نوع داده بوده و اسم متغیر از قواعد اسم گذاری شناسه تبعیت می‌کند در پاسکال برای معرفی متغیرها بصورت زیر عمل می‌کنند: (کلمه ذخیره 14-5( ‎Var‏ ‏نوع متغیر: اسم متفیر

صفحه 94:
>" << آآآآاحسأ"اآ۳ ‎(Constants) kat *‏ یک ثابت نام شناسه‌ای است که در آغاز یک برنامه یک مقدار در آن جاگزین می‌شود. درست مانند متغیرها. ثابت‌ها را می‌توان بعنوان خانه‌هایی از حافظه در نظر بكيريم که مقدار داده‌ها در آنها ذخیره می‌شود ولی مقدار ثابت مشخص می‌باشد, ,طوری که نمی‌توان مقدار یک ثابت را در برنامه خود بوسیله یک دستور تغییر داد te Sees pty po ‏عریف ینکن‎ cl مقدار ثابت < اسم متفیر ‎Const‏

صفحه 95:
:ی * دستور جايگزيني برای قرار دادن یک مقدار یا مقدار یک متفیر داخل یک متغیر دیگ از دستور .جایگزینی استفاده می‌کنند شکل کلی یک دستور جایگزینی در پاسکال بصورت زیر است: عبارت محاسباتی ‎t=‏ اسم شناسه عبارت قیاسی يا عبارت منطقی

صفحه 96:
"" << آ" "اس "اآ" ۳طء+آ۳ آترودان فو ‎bad When‏ نه بر نامه ‎(Comment)‏ ‏افزودن مطلب توضیحی در درون خود برنامه عملی پسندیده و مطلوب است بدین ترتیب که بعد از مدتی امکان فراموشی کار با برنامه از بین می‌رود و در .کل می‌توان گفت که نوشتن توضیحات در پرنامه خوانایی آن را بالا می‌برد در پاسکال توضیحات بین دو آکولاد محصور می‌شوند. ‎This is comment }‏ { { This program written by A. Pascal }

صفحه 97:
4 مثال جابجا كردن مقدار دو متغير 17

صفحه 98:
Var a,b, temp : integer Begin a:=15;b:=17;temp:=0; temp: =a; a:=b; ‏خروجي برنامه‎ 0 برط - ط ارو دو 13 رطملا -حة

صفحه 99:
EEE EEE ‏چند نکته در مورد برنامه‌نويسي‎ استفاده از اسامی با مفهوم برای متغیرها * استفاده از دستور 0115 در صورتی که مقدار ثابت در برنامه وجود داشته باشد. سوال جوابی بودن برنامه (ورودی‌ها و خروجی‌ها بايد دارای پیغام مناسب باشند) *_نوشتن برنامه با فیمت مناسب (رعایت قرار گرفتن خطوط مختلف برنامه زیر هم و فاصله گذاشتن آنها از

صفحه 100:
EE EE EEE EE ‏موممئي‎ ‏تمرینات‎ * «حاصل عبار تهاي زیر را بدست آورید ‎A)3*13 Mod3 div3 =?‏ B)7.3*5/3=? C)(3+4<6) and (4+7<13)=? D)33-8*3 div 3 mod (5 div3) =? E)NOT (((3-4 MOD3)<5) and((6 div 4) <=3 ))

صفحه 101:
A: = true ; B: = false ; C: = true ; A)(A AND B) OR (A AND C)=? B)(A OR NOT B) and (NotA ORC)=? C)A OR B AND C=? D) NOT (A OR B) AND C=?

صفحه 102:
‎EE << << ">‏ تمرینات برنامه‌نويسي ‏© برنامه‌ای بنریسید که ابماد مخللت که عبارتند از ۳: ۱۲ راادر نظر گرفته محیط و مساحت آن را محاسبه و با پیغام مناسب در خروجی چاپ کند. ‎ ‏برنامه‌ای بنویسید که دو متغیر صحیح با مقادیر ۳, ۱۵ زا دوز گرفته محتویات دو عدد را بدون استفاده از متغیر کمکی جابجا نماید. ‏* _ برنامه‌ای بنوبسید که سه عدد بنام های , 1121۳0 ‎Second, First‏ بترتیب با مقادیر ۱۷, ۱۳,۱۵ را در نظر گرفته بطور چرخشی مقادیر آنها را جابجا نموده در خروجی لكل

صفحه 103:
6 ‏فصل‎ iG ‏ورودي و خروجي‎ معرفیدستورلتخروجی 610 ۱۷۷۲ معرفی خروجی فرمت‌بندی شده بررسی دستورات ورودی ‎1٩630‏ و ‎ReadLn‏

صفحه 104:
:دانشجو يس از مطالعه ابن فصل بايد بتواند ‎et‏ ارات نر نظن ادر ري شان دقل #أعبارات خروجى را با فرمت مناسب چاپ کند. ‎Gla ll‏ مورد نياز برنامه را از ورودى دريافت نمايد. ‏#ابرنامةهاى ساده به زبان ياسكال بنويسد.

صفحه 105:
> << کچ * خروجي با دستور ۲۷۲6 اين دستور برای نوشتن اطلاعات در خروجی بکار می‌رود. اطلاعات خروجی می‌توانند ثابتهای عددی. مقادیر متغیرها. عبارات و غیره باشند. شکل دستور در :حالت کلی بصورت زیر است (....... و متغیر ۲ و متغیر ۱ )۲۷۲16 يا ‎sind‏ ی عیارت: ۷و عبارت۱ 0 .. و ابت ۲ وابت ‎CV‏

صفحه 106:
Ch: char ; R: Real ; egin 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) ; ind. { end of program } ی برنامه فوق در خروجی خواهیم داشت B= 15 ch = TR = 1.2250000000 e + 01 sum of A and

صفحه 107:
> << کچ ‎٠‏ خروجى با دستور ‎Writeln‏ ‏اين دستور همانند دستور ۷۷۲16 عمل مىكند با اين تفاوت كه بعد از اجراء كنترل را به ابتداى سطر بعد منتقل مى كند در نتيجه موجب چاپ داده‌های بعدى در ابتداى سطر بعد مى شود.

صفحه 108:
R: Real in 15 < :ظ : 10 < :۱ 2 ۳ ۲ * 2 ود 8-1228 7 Vriteln ; { new line } Vriteln('A=',A,' B=',B); Nriteln('Ch=',ch,'R=',R); Vriteln ('Sum of A and B=',A+B) ; .{ End of program } ‏:خروجی برنامه بصورت زير می‌باشد‎ A=10 ‏ظ‎ < 15 Ch=T R=1.225000000 e + 01 Sum of A and B= 25

صفحه 109:
۹ هه خروجي فرمت‌بندي شده اگر بخواهیم اطلاعات با فاصله های مشخص یا در مکان مشخصی در صفحه نمایش قرار گيرند. باید فرمت جاپ .را در دستورات بیان شده مشخص کنیم

صفحه 110:
:فرمت اعداد صحیح بصورت زير مشخص می‌شود ( طول میدان: داده صحیح ) ۷۷۲11۵18 یا ‎Write‏

صفحه 111:
در تعريف طول ميدان براي متغيرها يا دادههابي از نوع صحيح به نکات زیر توجه کنید: اكر طول ميدان از طول ارقام عدد صحيح بيشتر تعریف شود عدد در منتهى اليه سمت راست ميدان نوشته مى شود. + اگز طول میدن اژ طول ارقام عدد صحیح کمتر تغریف شود طول ‎dy lige‏ اندازه تعداد ارقام در نظر كرفته مى شود و طول ميدان تعريف شده بی‌اثر خه اهد ب د.

صفحه 112:
X:= 3200 ; As. = 12) 5 B= 217) : Write (X:3,A:5 , B:5) ; See ‏دري‎ 3200 12 217

صفحه 113:
برای نمایش اعداد اعشاری بصورت دلخواه می توان با تعریف طول .میدان و تعداد ارقام اعشاری, عدد مزبور را نمایش داد در حالتک لی‌طولمیللنرا می‌تسولنبه صوونذیر تعریفکرد : ( تعلداد ایقام بسعد از صمیز: طول‌میدلن ‎Write (cick pi‏ ۷۲۵۴ با

صفحه 114:
اگر طول میدان بزرگتر از تعداد ارقام عدد ذکر شود. عدد در منتهی الیه سمت راست مان مى كود اكر فقط طول ميدان ذكر شود. عدد به صورت نماد علمى در طول ميدان مشخص شده بجا ا دود از آنجائى كه براى نمايش اعداد در نماد علمى حداقل 8 محل مورد نياز است. لذا هنگامی که تنها طول میدان ذکر شده باشد. اكر از 8 رقم كمتر باشد. حداقل ۸ رقم در نظر كرفته مى شود

صفحه 115:
۷ هنگامی که طول میدان همراه با تعداد ارقام بعد از ممیز ذکر شود. اگر طول میدان کوچکتر از مقدار عدد باشد. پاسکال تنها طول میدان را به اندازه‌ای که مورد نیاز است تصحیح کرده و آنرا برابر اندازه واقعی که عدد در آن قرار می‌گیرد. اصلاح می‌کند. ۲ اگر تعداد ارقام بعد از ممیز زیاد باشد و تعداد ارقام بعد از مميز ذكر شده د ر طول میدان کمتر از تعداد ارقام اعشاری عدد باشد. تعداد ارقام اعشار مطابق درخواست برنامه‌نویس نشان داده خواهد شد و رقم اخر اعشار آن نسبت به عدد بعدی گرد می‌شود.

صفحه 116:
برای نمایش رشته‌ها و کاراکترهای با طول میدان بصورت زیر عمل تن . ( طول‌میدلث متغیر یسا عباتوشتهلییا کاراکتری) ‎Write‏ در توربو پاسکال. کلیه موارد گفته شده در مورد اعداد صحیح برای برشته‌ها ثیز صادق است

صفحه 117:
* ورودي با 13620 , 16۵012 از اين دستور برای خواندن داده ها و اختصاص آنها به متغیرها :استفاده می‌شود. در خواندن داده ها به دو موضوع بايد دقت شود منبع دادمها یبعنی‌دستگام ورودی‌که از آن‌دادمها خولنده -1 مین‌سود متغيرىكه دادمهاىخولنده شده در كنقرار موكيره -2 .

صفحه 118:
... و متغير 7 و متغير 15680 ( اين دستور عمل خوائدن دادهها و ذخيره آنها در متغيرها را انجام مىدهد و يس از اتمام عمل خواندن كنترل را براى خواندن و نوشتنهاى بعدى در همان‌خط نگه میع‌ارد ‏ .

صفحه 119:
ram Example _1 (input, output) ; first , second , temp: integer ; Writeln ; Writeln ('Please Enter two numbers') ; Readln ( first , second ) ; Temp: = first ; First: = second ; Second: = temp ; Write (' first = ', first , 'second = ': 10, second ) {end of program } _

صفحه 120:
خروجی برنامه بالا به صورت زیر می‌باشد: Please Enter two numbers 15 17 First = 17 second = 15

صفحه 121:
>" آاس۳ تمرینات خروجوقطعه برنلعهوير را تسعيينكنيد : Valuel: = 27.3 ; Value2: = -8.5 ; Writeln (' Valuel is', Valuel ) ; Writeln ) ' Value2 is', Value2 ) ; Sum: = Valuel1 + Value2 ; Writeln ('Sum of Two Values =', Sum: 6:2) ;

صفحه 122:
Writeln (' Xis ': 10,.X%: 6:2 ,'T istr4,1:5) 3 Writeln ('I is': 10,1: 1) ; Writeln ('Xis':10,X:2:1) ; Writeln ('Xis':15,X:7:1) ; Writeln ( \Tis*: 1105‘ X is ': 104% 723 ))>

صفحه 123:
* تمرینات برنامه نويسي برنامه‌ای بنویسید که دو عدد را از ورودی دریافت کرده و محتویات آنها را بدون استفاده از متفیر کمکی جابجا نماید برنامه‌ای بنویسید که سه عدد صحیح , ‎Third‏ ‎Second , first‏ را از ورودی با پیغام مناسب دریافت کرده سپس محتویات این سه متغیر را بصورت چرخشی جابجا نموده با پیغام مناسب در خروجی چاپ کند.

صفحه 124:
برنامه‌ای برای یک حسابدار اداره جمع آوری مالیات بنویسید که صورت .حسابهای مالیات را محاسبه نماید خورودی شماره شناسایی مالیات دهنده بهای ارزیابی شده نرخ مالیات اخروچین صورت حساب بافرمت مناسب شامل تمام داده‌های ورودی و میزان بدهی

صفحه 125:
فصل 7 ساختارهاي شرطي و کنترلي هدفهاي كلي معرفىدستور شرطي©119 20ة ‎If‏ ‏معرفى دستور ‎CASE‏ پررسی دستورات تکرار ‎for. while . repeat‏ استورات شرطی متدا < بررسی چند تابع و روال استاندارد زبان پاسکال

صفحه 126:
:دانشجو يس از مطالعه ابن فصل بايد بتواند "ا برنامههايى را بنويسد كه در آنها نياز به استفاده از شرط وجود دارد. 8 تفاوتهای بین دستورات مختلف با ك1 و 14 -©19© را تشخيص دهد. كا برنامههايى كه نياز به تكرار تعدادى عمليات داشته باشئد را بنویسد. "ا در صورت نياز بتواند در برنامههاء از روالها و توابع استاندارد زبان استفاده نماید

صفحه 127:
EEE EEE 2 ‏دستورات شرطى‎ “of ‏بطور کلی توسط اینگونه دستورات می‌توان بر حسب شرایط مختلف.‎ تصمیمات متفاوتی را اتخاذ نمود و برحسب برقرار بودن یا نبودن شرایط .دستورات متفاوتی را اجرا نمود ت شرطي در حالت كلي به دو نوع تقسيم مي شوند: دستور ]1 دستور 256

صفحه 128:
هرگاه در طول برنامه نیاز به استفاده از شرط یا شروط داشته باشیم. از دستور 1 .ستفاده می کنیم دستور 11 بطور کلی به سه شکل بر حسب نیاز ممکن است ظاهر شود: cooly if Else sto. if ‏های متداخل‎

صفحه 129:
then در اين نوع دستور شرطی اگر شرط خاصی تحقق يافته باشد. عمل يا اعمال خاصی انجام می‌شود. در غیر اینصورت برنامه روال عادی خود را طی می کند. در صورتی که شرط برقرار باشد ارزش منطقی 11116 به خود می‌گیرد و اگر شرط برقرار نباشد. ارزش منطقی 32156 به خود خواهد گرفت.

صفحه 130:
:دیاگرام دستور بالا بصورت زیر می‌باشد ۵00۱5

صفحه 131:
Number: integer ; Begin Write ('Please enter Number:') ; Readlin ( Number ) ; if Number>0 then Write (' Number is positive ' ) End خروجی برنامه بالا بصورت زیر است: Please enter Number: 12 Number is positive

صفحه 132:
* در این دستور ابتدا شرط بررسي مي‌شود, در صورتي که شرط برقرار ‎mush‏ عمل يا اعمال خاصي را انجام مي‌دهد و در صورتي که شرط برقرار نباشد. عمل یا اعمال بخصوص ديگري را اتجام خواهد داد.

صفحه 133:
۱ ‏دستور‎ ‎else رز دستور ۲ دیاگرام دستور بصورت: د

صفحه 134:
gin Writeln (‘Please enter Number:') ; Readln ( Number ) ; if (Number mod 2) =0 Then Write (' even ' ) else Write ('odd') ; d. { end of program } خروجی برنامه بالا بصورت زیر است: ‎Please enter Number:‏ 17 odd

صفحه 135:
End Else Begin ز دستور 1 ز دستور 2

صفحه 136:
هركاه در نوشتن برنامه نياز به انتخاب يك شرط از بين چند شرط داشته باشیم. معمولاً از 1 متداخل استفاده مى كنند. در جنين مواقعى استفاده از 14 متداخل كارائى برنامه را بالا مىبرد زيرا بجاى كنترل تمام شروط فقط تا زمانيكه شرط برقرار نشده. ]1 ها بررسی می‌شوند. بعد از برقرار شدن يكى از شروط. كنترل برنامه به بعد از ۶ منتقل می‌شود و اين در بهبود كارائى يك برنامه مى تواند بسيار موثر باشد.

صفحه 137:
if )2 ‏عبیتشرطیا‎ then ۱ ‏دستور‎ 60 عبيتشرطىئ؟ 14 واه دستور۲ 08۲ عبلیتشرطی ‎else If‏ دستور ۳ ‎else‏ 1] ‏عبیتشرطیا‎ then if ‏عبیتشرطی]‎ then دستور | else دستور ۲

صفحه 138:
Grade 17-20 14-17 12-14 10 - 2 0 - 0

صفحه 139:
ReadIn ( Grade ) if Grade > = 17.0 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 ReadIin : Then

صفحه 140:
زبان پاسکال دستور 1856 را بصورت زیر در نظر می‌گیرد: ‎Case oc Of‏ و دستور١‏ 0 : مقدار ۱ ,م دستور ۲ . : مقدار ۲ م دستور ۳ : مقدار ۳ Otherwise > دستور ‎End ; { End of case }‏

صفحه 141:
Write (' please enter two Numbers: ' ) Readin(a,b) ; Write (' please Enter A operator: ' ) Readeln ( op) ; Case op of '+': Writeln ('Sum =',(a+b):6: 2) 3 '.': Writeln (' Subtract =',(a-b): 63.25); > '*': Writeln (' Multiple =',(a*b): 6:2) ۱/۰۰ Writeln. (‘ divide’= ‘) (a/b )1/6: 2) ade oon ora nar a acne ENN

صفحه 142:
دیاگرام دستور ۵56 بصورت زير مي‌باشد:

صفحه 143:
‎EE << << ">‏ * ساختارهاي کنترلي ‏بسیاری از مواقع لازم است عمل يا اعمال به تعداد دفعات معین یا نامعین انجام شوند در چنین مواقعی زبانهای برنامه‌نویسی دستوراتی دارند كه مى توان اين اعمال تکراری را انجام داد. در حالت کلی ساختارهای کنترلی شامل یک یا چند شرط و همچنین ‏متغیر یا اصطلاحاً شمارنده‌ای برای پایان دادن به شرط می‌باشند

صفحه 144:
0 مقدار نهایی 10 مقدار اولیه - اندیس ‎For‏ ۶ دستور باید توجه داشته باشید که در حلقه تعداد تکرار کاملاً مشخص است و حلقه دقیفاً به .تعداد تکرار مشخص اجرا می‌شود

صفحه 145:
دستور برای انجام عمل يا اعمالی مشخص به تعداد تکرار معین بکار برده می‌شود. نه 101 شامل یک اندیس ( 10065 ) مقدار اولیه ( ۷۵1۳6 111 ) مقدار نهایی ( ۷۵16 1۳881 ) و مقدار افزاینده می‌باشد. اين حلقه با قرار دادن مقدار اولیه در س حلقه شروع شده و بعد از هر تکرار یک واحد به اندیس حلقه اضافه می‌کند تا نهایت به مقدار نهایی برسد. شکل کلی حلقه بصورت زیر می‌باشد:

صفحه 146:
Var i, number , Sum: integer ; Begin Writeln (' please enter 100 Numbers: 1 For I:=1 to 100 do Begin ReadIn (number ) ; Sum:= Sum + number ; End ; Writeln ('Sum =', Sum) ; End. { end of program }

صفحه 147:
0 مقدار نهاي 001171180 مقدار اولیه - : لندیس ۴01 ۶ دستون ار اين شکل از دستور 370۳ ابتدا مقدار اولیه در اندیس حلقه قرار داده می شود و بعد از آن در هر تکرار حلقه یک واحد از اندیس حلقه کم می شود تا به مقدار نهایی برسد .

صفحه 148:
Var i,n, Fact : integer ; Begin Fact: =1 ; Write (' please enter A Number ') ; Readin (n) ; For I:=n downto 1 = do Fact : = Fact * i ; Writeln (' Fact = ', Fact) ; End .

صفحه 149:
0 مقار نهایی 0 مقدار ایلیه - : لندیسا ‎for‏ ‏© مقدار نهایی 0 مقدار اولیه -: اندیس 2 ‎for‏ ۶ دستور

صفحه 150:
in For j:=1 to 3 do Write (' pascal': 8) ; Writeln ; 1 خروجی Pascal Pascal Pascal J) a>» (i = 1) Pascal Pascal 2856081 ‏مرحله دهم‎ ) 1 > 2) Paceral Paceal Pacecal . si. .f 7)

صفحه 151:
مقدار نهايي مقدار اولیه سرهم

صفحه 152:
در حالت كلى هدف از بكار بردن این دستور انجام عملیاتی مشخص به تعداد دفعات نامعین است مينحلقه به صووتؤير بكار بردهمى شود: 0 عبارت منطقى ‎While‏ Desay

صفحه 153:
Numbers ') ; ReadIn (m,n) ; While (m Mod n) > < 0 0 MOD n; End ; { end of while }

صفحه 154:

صفحه 155:
اين دستور نيز از نوع دستورات تکراری می‌باشد و به کمک آن می‌توان یک يا چند .دستور را به تعداد نامعین بار اجرا کرد لیردستور مشلبه دستور ۲16 :است. با تفاوتهایی که در زیر عنوان می‌کنیم در دستور (1 1361068 بسرعکس‌دستور ‎While‏ ‏.شرط حلقه در انتهای حلقه بررسی می‌شود لذا حلقه حداقل یکبار اجرا می‌شود _

صفحه 156:
۲) دستور 8606616 تا زمانی اجرا می‌شود که شرط خاصی تحقق پیدا نکرده است در حالیکه دستور ۷۷0116 تا زمانی که شرط برقرار ‎aul‏ اجراس‌شود. ‏۳ دستور :606۵ نیاز به بلوک ندارد و همراه 10 ظاهر می‌شود.

صفحه 157:
; شرط یا شروط ‎until‏

صفحه 158:
eal ; riteln (' please enter Numbers While is Not Negative ') um: =0 ; ve:= 0 3 epeat Readln ( Number ) ; Sum: = sum + Number ; t=i+ 1 ۶ til number =0 ; { End of Repeat } :=i-1 ve: = Sum /i ; riteln ('Sum =', Sum, ' average = ': 12, ave: 7:2) ; nd of program }

صفحه 159:

صفحه 160:
‎EEE EEE << << ">‏ ** معرفي چند پروسیجر ( ۳۵6606 ‏پروسیجرها یا زیر روال‌ها قسمت‌های مستقلی از برنامه اصلی می‌باشند که به تنهایی اعمال خاصی را انجام داده و وظایف مستقل و بخصوصی بر عهده آنها گذاشته می‌شود. یک مزیت بزرگ پروسیجرها اینست که یکبار در برنامه گنجانده شده ولی در محلهای مختلف ازآن استفاده به عمل می‌آید و از ‏.اصول برنامه‌نویسی ساخت یافته‌است

صفحه 161:
هدف: انتقال کنترل برنامه به خارج از بلوک فعلی Procedure Exit ; استفاده از این پروسیجر در هر بلوک از برنامه باعث می‌شود که کنترل برنامه بلافاصله به خارج از آن بلوک انتقال ‎Lb‏

صفحه 162:
هدف: خاتمه دادن به اجرای یک حلقه Procedure Break ; استفاده از پروسیجر فوق باعث. می‌شود. که اجرای. یک خلقه: خائمه یافته و کنترل برنامه به دستورالعمل بعدی انتقال پابد.

صفحه 163:
هدف: باز گشت به ابتدای حلقه Procedure continue ; وقتی انم پزوسحر, دز ‎QU Rade isl ally UES! ad ge GOW MA‏ می‌یابد و دستورات بعد از پروسیجر اجرا نمی‌شوند.

صفحه 164:
غال : ‎pistes IS‏ را 0 ۱ کب از ورود ۳ 2 ی دريافت 1 عد فت کرده. ۱ 0 بح در مبذ ‎jae‏ 00 ‎sé‏ ‏یک مینای ۲ ببرد.

صفحه 165:
Power: = 1 ; N:=0; Write (' enter A Number: ') ; 1۳801 ( 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= ' oN); ‎IM tS‏ 7 ال م

صفحه 166:
Readin (N) ; Fl: =0;F2:=1; Write (F1:5, F2:5) ; For i:=3 to N_ do Begin F3: = Fl + F2; If (i mod 10) =0 Then Writeln ; Write (F3:5) ; ۳1: < ۳2 ‏ز‎ ‎F2: = F3 ; End ; { end of for } |, { end of program }

صفحه 167:
۳ 1 116 ‎“ah: 3‏ ۰ تمرینات ‎Begin‏ ‏۱- خروجی قطعه برنامه‌های زیر را تعیین کنید: ‎Sum: = Sum +i‏ ۱ end ; b) is = 0.3 Sum: =°0'; While i<=20 do Begin i+ ;

صفحه 168:
be Di Until (b div 3)=5 ; d) Count Stop : While Count < Stop Do Begin For K:=1 to Count Do Write (K:3) ; Writeln ;

صفحه 169:
EE EE EEE EE ‏موممئي‎ ‏تمرينات برنامه نویسی‎ ** ۱- برنامه‌ای بنویسید که با استفاده از حلقه ها خروجی زير را تولید کند.

صفحه 170:
بسرنامهلوبنویسید که تسعدادی‌عدد از ورودی‌دویافتکرده مجموع -2 ايقام هر علد را در خروجىجا نايد ( پابانداده ها بسه ۱- ختم‌می شود) بسرنامهلوب‌نویسيد که دو علد صحیح را از ورودی‌دویافکرده -3 تن .اعداد فيبوناجى بين اين دو عدد را جاب كند برنامهلىيب:ويسيد كه يكلسكناس١٠٠٠‏ توملئنىرا به حلتهاى4 مخت نيعت يه لسکناس۲۰۰ تسوملنی ۱۰۰ تسوملنی 0۰ تسوملنی ۲۰ توملنی ۱۰ توملنیو سکه های۵ توملنیو ۲ توملنیو یکتوملنی‌خرد ‎bo.‏

صفحه 171:
8 ‏فصل‎ ‎Arrayb 47 هدفهاي كلي شناخت لزوم استفاده از ساختار داده ای به نام آرایه شناخت انواع آرایه‌ها و موارد استفاده از آنها ی و شناخت الگوریتمهای مرتب‌سازی و جستجو

صفحه 172:
:دانشجو پس از مطالعه این فصل بايد بتواند * آرایه‌ها یک بعدی را در برنامه‌های خود بکار ببرد. 8 ماتریسها را پیاده‌سازی نماید. عمل جستجو در آرایه انجام دهد. #ایک لیست را توسط روشهای مرتب سازی حبابی انتخابی و غیره مرتب کند.

صفحه 173:
* آرایه و انواع آن خانه‌های پشت سرهم از حافظه که همنوع بوده و توسط یک اسم معرفی می‌شوند. آرایه نام دارد. نحوه دسترسی به هر یک از اعضاء ارایه از تطر يق "انيسن ريه امكالوفة بر انتتی برای تعریف آرایه ابتدا طول آرایه که درحقیقت تعداد خانه‌های آنرا مشخص می‌کند. معین می‌گردد. سپس نوع خانه‌هایی که داده‌ها در آن قرار خواهند كرفت را تعيين مى كنند

صفحه 174:
آرایه‌های یک بعدی بصورت زیر تعریف می‌شوند: Name ۳ array [1.. Length] of ‎alte | ْ‏ هچ ان زره | ‏کلمه ذخیره شده اسم آرایه

صفحه 175:
Var No: Array [1.. 50] of integer ; id: Array [1.. 20] of Byte ; Name , Fam: Array [ 1.. 30] of char ;

صفحه 176:
۱- با استفاده از دستورات ورودی ۲- مقداردهی در طول برنامه طریقه دسترسی به عناصر آرایه بصورت زير می‌باشد: Name [ index ] | انديس آزرایه ۳

صفحه 177:
Writeln (' please enter TEN Numbers') ; For i:=1 to 100 do Readin (No[il]) ; 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 of program }

صفحه 178:
integer ; Begin Writeln (' please enter 100 Numbers : 13 For i:=1 to 100 do Begin Read (a[li]) ; If(i Mod 10)=0 Then Writeln ; End ; For i:=1 to 50 do Begin Temp: =a[101-i] ; a[101-i]:=a[i]; ۱ ali]: =temp ; End ;

صفحه 179:
برای نمایش ماتریس درحافظه معمولاً از آرایه‌هایی بنام آرایه‌های دویعدی استفاده می‌کنند رای فرزکا بیشتر ابیز آرایة‌ها آنها را بضورت ماتربس دزانظر می‌گیرند آرایه‌های دو بعدی بصورت زیر معرفی می‌شوند: ‎Name 1 array [1..row ,1.. column ] of‏ ‎type‏ ۳ لا ا . ] | | | نوع عناصر آرایه کلمه ذخیره شده تعداد ستونها_ تعداد سطرها كلمه ذخيره شده اسم ارايه

صفحه 180:
jin For i:=1 to 5 do Begin For j:=1 to 5 do Read (ali,j]) ; Writeln ; End ; Writeln ; For i:=1 to 5 do Begin For j:=1 to 5 do Write (ali,j]:5) ; Writeln ; End ; 1.

صفحه 181:
می‌توان آرایه‌هایی با ابعاد بیشتر از دو نیز تعریف کرد. بطور کلی برای : معرفى يك آرايه جند بعد توان بصورت زد د ی .1 [ مج 3 1 ‎Name: psu (iene‏ ‎length2 ] ....‏ Of array [ 1.. lengthN ] of Type ‏ويا‎ Name: array [ 1.. length1, 1.. length2,.... 1.. lengthN ] of Type

صفحه 182:
‎EEE EEE << << ">‏ ‎Ry‏ نکاتی جند در مورد آرایه‌ها ‏” تعریف آرایه با محدوده منفی ‏برای مثال: ‎A:array[-10..10] of Real 1‏ ; 7 تعريف آرايه از نوع منطقى ) ‎(Boolean‏ ‏براى مثال: ‎A:array[1..20] of Boolean‏ ;

صفحه 183:
ای مثال ‎A: array [ Boolean ] of ee‏ ‎;integer‏ ۲آرایه‌ای با محدوده کاراکتری: بزاع شال ۵1 05 1[ ۲2 .۲۸۰۰ ] 27727 :۱ "آرایه‌ای که برای اعضای آن محدودیت قائل شویم براى مثال: ‎A: array[1.. 20] of 1.. 0‏

صفحه 184:
© جستجو و مرب‌سازي ( 2310 5621012 ‎(Sort‏ یکی از مسائلی که در بحث طراحی الگوریتم بسیار مهم است. بحث مرتب‌سازی و جستجو می باشد. منظور از جستجو اینست که یک مقداری را از یک لیست جستجو کنیم و منظور از مرتب سازی اینست که یک لیست مرتب از داده ها را ایجاد کنیم. حال تعدادی الگوریتم که برای مرتب‌سازی و جستجو بکار می‌روند را بسررسی‌مر‌کنيم بخصوص زمانيكه ساختار داده ما يكآرليه باشد .

صفحه 185:
در كل دو نوع عمل جستجو را در اين كتاب بررسی می‌کنیم : Linear search (+ oye >” Binary search ‏جستجو دودویی‎

صفحه 186:
در جستجوی خطی عبارت مورد جستجو را نخست با اولین عضو آرایه مقایسه مى ‎ocd‏ اگر برابر بود عمل جستجو با موفقیت همراه بوده و عمل جستجو خاتمه می‌یابد در غیر اینصورت روند را ادامه داده و عبارت مورد جستجو را بترتیب با عضو دوم. سوم ... مقایسه می‌کنیم تا اينكه حالت تساوی حاصل شود .و اگر این حالت حاصل نشد. عباریت مورد جستجو در لیست قرار ندارد

صفحه 187:
ee hile (i< =N) and (flag) Do Begin 1-1+ 1 ۶ if A[i] =x Then Begin Index: =i ; Flag: = false ; End ; End ; flag Then Writeln ('The Element is found ' ) 56 Writeln ('The Element is not found') ;

صفحه 188:
درجستجوی دودوئی لیست اولیه بایدمرتب باشد. برای جستجو در چنین آرایه‌ای نخست انديس وسط آرايه را يبدا مى كنيم و عنصر واقع در اين انديس را با :عبارت مورد جستجو مقايسه مى كنيم و حالات زير ممكن است حاصل شود (0۲,] اندیس ابتدای آرایه و 13006 اندیس آخرین عناصرآرایه و 6 اندیس عنصر وسط می‌باشد.)

صفحه 189:
. ] ۸10016 [ < X Then Low : = middle ‏بر ایتصورت‎ و مقدار جدید 10010016 را که عبارتست از: Middle : = ( low + middle ) / 2

صفحه 190:
1016 [ > Then upper : = middle ‏در اينصورت‎ و مقدار جدید 1010016 را که عبارتست از: Middle : = ( low + middle ) / 2

صفحه 191:
idle ] =X Then Write ('The Eiement is ‏قر ابنضووة‎ found ' ) OW > ۱۷۵۳6۲ ‏فيا ب لتفاقبیفند عملجستجو را تا زملنیکه‎ ELL AS ope | می باشد ادامه می‌دهیم و در هر مرحله که حالت سوم رخ دهد عمل جستجو خاتمه می‌یابد.

صفحه 192:
برای مرتب‌سازی داده‌ها روشهای متفاوتی وجود دارد . تفاوت روشهای مرتب‌سازی در زمان اجرای آنها می باشد. در حالت کلی با توجه به تعداد ورودیها (داده ها) و نوع مسئله مرتب‌سازی می توان از انواع روش‌های .مرتب‌سازی استفاده نمود حال بعضی از روش های مرتب سازی عمومی را بررسی می‌کنیم. *؟ مرتب‌سازی حبابی ) ‎(Bubble sort‏ *مرتب‌سازی انتخابی ( 50۲۲ 5616611012 )

صفحه 193:
ساده‌ترین روش مرتب‌سازی روش مرتب‌سازی حبابی می‌باشد. یکی از خصوصیات بارز اين نوع مرتب‌سازی این است که فهم آن ساده بوده و برنامه‌نویسی آن به سهولت انجام می كيرد مرتب‌سازی حبابی نخست عنصر اول و دوم را با هم مقایسه می‌کند و در صورت نیاز. آنها را جابجا می‌کند. سپس عنصر دوم و سوم را مقایسه می‌کند. این عمل را تا زمانیکه به انتهای آرایه نرسیده تکرار می‌کند. در پایان مرحله اول بزرگترین عنصر در آخرین ‎all SE‏ قرار سر دا می‌دهد. اين روند را 1 - ‎N‏ مى كيرد. در مرحله دوم از خانه اول تا خانه تا زمانیکه تمام عناصر آرایه مرتب نشده‌اند ادامه می‌دهد و در نهایت یک لیست مرتب شده بصورت صعودی در خروجی تولید می‌شود

صفحه 194:
For j:=1 to n-1 do If x[j] >x[j+1] Then Begin Temp: = x[j] ; ۶ ][ 1: 2۶ ][ + 11 ‏ز‎ ‎X[j+1]: =temp ; End ; تعداد مقایسه‌ها در این روش بصورت زير محاسبه می‌شود: 1-1 + 2-2 + .. + N(N- 1)/2

صفحه 195:
در این روش مرتب‌سازی نخست کوچکترین عنصر را در کل آرایه پیدا کرده در خانه اول آرایه قرار می‌دهيم سپس عنصر کوچکتر بعدی را یافته در خانه دوم قرار می‌دهیم اين روند را تا زمانیکه کل آرایه مرتب نشده ادامه می‌د. مرتب می‌دهیم

صفحه 196:
1: < 1 to n do Min: = x[i]; Index: =i ; For j:=i+lto n do If x[j] < Min Then Begin Min: = x[jl]; Index: =j ; End ; { find The smallest Element } X [index]: = x[iJ ; X[i]: = Min ; { swap Minimum With other Elem« ; { end of selection sort }

صفحه 197:
‎EEE << <<"‏ ‎ad‏ جند منال در مورد آرایه‌ها ‏مثال : برنامه‌ای بنویسید که یک عدد صحیح از ورودی دریافت کرده سپس اعداد اول قبل از آن را تولید و در آرایه قرار دهد ‎a:array[1..50] of integer ; i,j, N: integer ; k: Byte ; ‎flag : Boolean ; ‎Write (' Enter A Number:') ; Readin(N) ;a[1]:=2; a[2]:=3; flag : = True ; ks=2 ; ‎—

صفحه 198:
Flag : = false ; If flag Then Begin K:=k+1; ALK]: =1 End ; Flag : = Ture ; End ; { end of for } Writeln ('The prime Numbers before N') For j:=1 to K_ do Writeln (a[i]:5 ) ; nd .{ End of program }

صفحه 199:
Begin. Writeln ('Enter Array') ; for i:=1 to 3 do for j:=1 to 3 do Read(a[li,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 any row } End ; Writeln ( sum: 8:2 ) ; Sum:=0 ;

صفحه 200:
ray "36 ator integer 1۳9 ‏يحب‎ 1..60] of integer ; M,N.1,j ,.ki Byte ; Begin Write ('Enter Dimention of arrays:') ; ReadIn(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:
End Else if L1[i] < L2[j] Then Begin L3[k]:=L1[i] ; ;1 زرح( End Else Begin ‏]ناک ۶ ۶ ] ون‎ 1 3 1» < 1+1 ‏رز‎ ‎۲۵ | ‏ق ] اج(‎ i=l ‏زع نل‎ +1: end ; k =k+1; } ل ل سو

صفحه 202:
1 ‏ز 1+ 16 ع‎ end Else if j< =M Then for p:=j to M do Begin L3[k]:=L2[p]; k=k+1; 600, Writeln ; Writeln ('The result of merge is') ; for i:=1 to k-1 do Begin Write: (.L3) [1] 5).5 If (i mod 10)=0 Then Writeln ; End ; { end of merge } id. { End of program }

صفحه 203:
Begin Writeln (' Enter Number of sentence: ' ) Readin(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]) ;

صفحه 204:
- کدامیک از دستورات زیر در مورد اعلان زیر صحیح است: ‎a: array['A'..'Z'] of‏ ‎char‏ ‎‘af A]: ='Z-w‏ ب- ۸ 2 :2۰1 ۲] 5 ۰ ج- 2-1 :1 ' 1ه د- 12 2 :1 1۰ ۲ ] 2 ح- 12 < :1 ۲1۰] 2

صفحه 205:
a: array | -2U.. LU] 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:
تمرینات برنامه‌نویسی * برنامه‌ای بنویسید که که یک آرایه حداکثر ۵۰ عنصری را از ورودی دریافت کرده و سپس عناصری از ارایه که او هستند را با صفر جایگزین کرده ارایه حاصل را در خروجی چاپ کند. برنامه‌ای بنویسید که عددی از ورودی دریافت کرده سپس آن را به عامل های اول تجزیه نماید و حاصل را بصورت زیر در خروجی ذجاب: لمانب برای مثال: ۳-۲۱ ۱ ۷ ۱)

صفحه 207:
برنامهاى ب که یک عدد از ورودی دریافت کرده سپس در صورت وجود صفرهای آن را حذف نموده. نتيجه را در خروجى جاب نمايد. * برنامه ای بنویسد که یک ماتریس ۵ * ۵ رااز ورودى دريافت كرده سبس مجموع هر سطر را انتهای همان سطر و مجموع هر ستون را در انتهای همان ستون چاپ نماید.

صفحه 208:
ماتریس هم پر حسب ستون و هم بر حسب سطر مرتب نموده به همراه ماتریس اول در يك سر عاك ابية * برنامهاى بنويسيد كه يك آرايه ‎٠٠١‏ عنصرى ازنوع صحيح كه ‎١6١‏ عنصرمرتب درآن قرار می‌گیرد را از ورودی دریافت کرده سپس آرایه دومی با ۵۰ عنصر را از ورودی بخواند

صفحه 209:
فصل و | هاي كتابخانه اى توابع و روال هدفهاي كلي شناخت ساختار تابع و روال شناخت توابع و روالهاى استاندارد براى نوعهاى صحيح شناخت توابع و روالهاى استاندارد براى نوعهاى اعشارى و كاركترى أشناخت توابع و روالهاى استاندارد رياضى

صفحه 210:
:دانشجو پس از مطالعه این فصل باید بتواند = توابع و روالهای استاندارد را در صورت نیاز در برنامه استفاده کند. # ساختار توابع و خروجیهای آنها را تشخیص داده و در برنامه خود از آنها استفاده کند. ۴ ساختار روالها و خروجیهای آنها را تشخیص داده و نتایج حاصل از آنها را مورد استفاده قرار دهد. #توابع ریاضی را برای محاسبه عبارت ریاضی در برنامه بکار ببرد.

صفحه 211:
EEE EEE << << "> ‏ساختار تابع‎ 4 در كل هدف تابع اينست كه متغير يا متغيرهايى را بعنوان يارامتر از برنامه اصلى دريافت كرد. عمل خاصى را روى بارامترها انجام داده و نتيجه را به برنامه اصلی برگرداند :شکل کلی فراخوانی توابع در برنامه اصلی بصورت زیر می‌باشد ساختار تابع: 1 ‎Function Name ( parameters )‏ ‎Type‏ ‏| | | | نوع تابع پارامترها اسم تابع کلمه ذخیره شده

صفحه 212:
‎EEE EEE << << ">‏ * توابعی برای اعداد صحیح و اعشاری ‎Abs at ¥‏ دف: باز گرداندن قدر مطلق ( 8۳5010116 ) پارامتري که به آن ارسال مي‌شود: ‎Function Abs (x: Integer ): Integer ; ‎Function Abs (x: Real ): Real ;‏ اين تابع يك عبارت از نوع حقیقی يا صحیح را بعنوان آراگون دریافت کرده سپس .قدر مطلق آن را محاسبه و حاصل را برگرداند

صفحه 213:
Real ; Integer ; : = Abs (- 191.15 ) ; خروجی‌حاصل: ‎F= 191.15 I= 171‏

صفحه 214:
هدف: باز گرداندن سینوس یک عدد از نوع اعشاری Function Sin ( X: Real ): Real ‏تابع:‎ 6 یک عبارت یا عدد از نوع اعشاری بوده و حاصل مقدار سینوس ا می‌باشد.

صفحه 215:
Var X: Real ; Begin 2 : < 510 ) 10( : Write ('sin(10)=', x:8:2); End.

صفحه 216:
هدف: باز گرداندن کسینوس یک عدد از نوع اعشاری. تابع: ‎Function cos ( X: Real ): Real‏ ی کعبارتبا عدد از نوع لعشاریبوده و حاصلمقدار کسینوس ‎ilies‏

صفحه 217:
۴ X: Real ; gin ز (10) 605 < : 2 Write ('cos(10)=', x:8:2) ; d.

صفحه 218:
هدف: بازگرداندن آرک تانژانت یک عدد از نوع اعشاری ; Function ArcTan ( X: Real ): Real ‏تابع:‎ 6 یک عبارت يا عدد از نوع اعشاری بوده حاصل مقدار آرک تانژانت ‎X‏ می‌باشد.

صفحه 219:
Var X: Real ; Begin X:=ArcTan (10) ; Write (' ArcTan (10) =', x:8:2); End. توجه: در صورتى كه در توابع مثلثاتى زاويه از نوع درجه ارائه شود :مى توان با فرمول زير معادل راديان آن را محاسبه كرد Real = Dey * 3.14159 / 180

صفحه 220:
هدف: عدد نپر ( 2.71828 < 6 ...) رابه توان یک عدد می‌رساند. شکل تابع: :) ‎Function Exp ( X: Real‏ ‎Real‏ ; ‎X‏ عبایتیا ستغیریاز نوع لعشاریوده و حاصلتلبع نیز یکعدد لعشاری‌سیاشد اين تابع مقدار عبه توان ۴ را محاسبه می‌کند.

صفحه 221:
X: Real ; i: integer ; Begin For i:=1 to 10 do Begin X:=exp (i) ; Writeln ) ۶: 8:2 ( ۶ End ; End.

صفحه 222:
هدف: قسمت اعشاری یک عدد اعشاری را برمی‌گرداند. Function frac ( X: Real ): Real ‏ی تابع:‎ عددعاز نوع لعشاییو حاصلتسلبع یکعدد لعنایی‌که قسمتلعشایی عدد 26 است می باشد و بعبارت دیگر این تابع قسمت اعشاری عدد ورودی را به عنوان خروجی باز می‌گرداند.

صفحه 223:
0 Y,X: Real ; gin X: = frac (24.769) ; Y: = frac (- 12.75 ۱ Write ('x=', 8: 3,"y= "ee 23 0 ۰ X= 0.769 ‏حلا‎ - 5

صفحه 224:
هدف: قسمت صحیح یک عدد اعشاری را برمی گرداند. ‘unction Int ( X: Real ): Real ‏تابع:‎ ا يكعبارتيا متغير از نوعلمعشايىو خروجىتابع فيزيكعلد اعشارى است اين تابع مقدار صحيح يك عدد اعشارى در خروجى نشان می‌دهد.

صفحه 225:
X: = Int (2.87) ; {2.0} Y:=Int(-8.76) ; {-

صفحه 226:
هدف: محاسبه لگاریتم یک عدد اعشاري در مبناي ». ; Function Ln ( X: Real ): Real ‏شکل تابع:‎ 6 ی کهبایتی| متفیر ازنوع لعشاریوده وحاصلتلیع فیز یک دلءاییم ی شا

صفحه 227:
r X: Real ; »gin X:=Ln (2.87) ; {x = 3.73767 } Write (°x=',x:10:5) ; id.

صفحه 228:
هدف: فرد بودن عدد صحیح را بررسي مي کند. unction odd ( X: logint ): Booleam ‏کل تابع:‎ یکعبایساز نوع 10120110 لستو تسلبع .فرد بسودنعباینتوا بسروسیمیک: اگر مقدار خروجی تابع 1۳016 باشد 16 فرد است و اگر مقدار خروجی تابع ‎alse‏ ‏باشد ک فرد يست

صفحه 229:

صفحه 230:
هدف: غالباً براى يبدا كردن كد اسکی یک متغفیر کاراکتری بکار می‌رود. شکل تابع: :) ‎Function Ord (x: char‏ ارت ۲ از نوع كاركتري را بعنوان بارامتر دریافت وكد اسكي أن را برمي كرداند. اكر : از نوع اسكالر باشد تابع بعنوان خروجي ترتیب قرار گرفتن : رادر مجموعه اي که ابتدا به عنوان اسکالر اعلان شده, باز مي‌گرداند.

صفحه 231:
Var ch: char ; Begin For ch:='A' to '‘'Z' do Write (ord (ch):5) ; کد اسکی " ۸" تا" 2 ' را درخروجی چاپ می‌کند كد اسکی ۲ ۸ ۰ عدد 1۵ می‌باشد. End .

صفحه 232:
هدف: عدد پی را بر می‌گرداند. Function pi: Real ‏کل تابع:‎ اين تابع برای بازگرداندن عددی پی ( ۳۱۶۱۵۹۲ ۰۰۰) مورد استفاده قرار می‌گیرد.

صفحه 233:
هدف: مقدار قبل مقدار پارامتر را بر مي گرداند. pn pred (x): < same type of parameter > ; ۲ پارامتر تابع می تواند از هر نوع باشد و با توجه به نوع پارامتر تابع نیاز از هم نوع می‌باشد و خروجی تابع مقدار قبل از * می‌باشد.

صفحه 234:
{ flag = {i=- Ch: = pred ('d') ; c'} i: = pred (15) ; 14 } flag: = pred ( True ) ; false } i: = pred (- 30) ; 31 }

صفحه 235:
۲ تابع 1۳۵۱000 هدف: برای تولید عدد تصادفی :شکل تابع ‎Function Random: Real ;‏ )1 ‎2)Function Random (x: word ):‏ ‎word ;‏ اگر تابع ‎[st 4 Random‏ یک یعنی بدون آرگومان مورد استفاده قرار گیرد یک عدد تساوی از نوع اعشاری بین صفر و یک تولید می کند و اكر به شكل دو بكار رود باعث تولید یک عدد تصادفی از نوع ۷۷0۵1 که بزرگتر یا مساوی صفر و کوچکتر از * است خواهد شد. ‎

صفحه 236:
Var i: integer ; Begin For i:=1 to 10 do Begin Writeln ( Random : B27) ; Writeln (Random )20(:8) ; End ; End. ۰ عدد تصادفى بين صفر و یک. و ۱۰ عدد تصادفی ‎Ge‏ ۰ و ۶۰ تولید نماید.

صفحه 237:
هدف: برای گرد کردن اعداد اعشاری بکار می رود. تابع: ‎Function Round (x: Real ): Longint‏ } یکعبارتیامتفیر لعشاری‌سوده وخروجی‌تلبع یکعدد اننوع ‎Longint‏ ی‌باشد که نتیجه گرد کردن6 مىباشد. اين تابع 7 را به نزدیکترین مقدار حیح گرد می‌کند.

صفحه 238:
‎er ee ee‏ و 0 2 :) 1 13 1 9 هددع ‎ein ee‏ ‎{i=18‏ اللا ‎ ‎i: = Round (17.45) {i=18

صفحه 239:
هدف: برای محاسبه محذور یک عدد صحیح یا اعشاری بکار می‌رود. شکل تابع: Function sqr (x: Integer ): Integer ; Function sqr (x: Real ): Real 7 * عبارتی یا متغییری از نوع صحیح یا اعشاری بوده و خروجی تابع فیزیک یک عدد صحیح یا اعشاری می باشد اين تابع مجذور 16 را بعنوان خروجی بر می‌گرداند.

صفحه 240:
Var i: integer ; Begin For i:=1 to 10 do Writeln ('I* 2=' , sqr )1(( ‏ز‎ End.

صفحه 241:
Function sqrt (x: 0 0 ; Real ): Rea بر کت ‎ee ee‏ ‎ah ltl ys‏ جنر # را بسعنولن‌خروجوبر میگ ردلند

صفحه 242:
Y, X: Real ; Begin Y:= sqrt (64) ; {y=8} Z:= sqrt (0.16) ; {z=0.4 Write ('x =',x:8:2,'y=',y 5:82:27 End.

صفحه 243:
هدف: مقدار بعد از مقدار فعلی را برمی گرداند. Function succ (x): same type of ‏شکل تابع:‎ ‏زر‎ parameters ‎X‏ یک عبارت از نوع صحیح. اولین و غیره بوده و خروجی تابع نیز از همان نوع 3 مى باشد اين تابع مقدار بعد از ۱ را بعنوان خروجی بر می‌گرداند.

صفحه 244:
ch: = suce ('a') {ch='b'} ch: = suce('A') {ch='B'} i: =suce (15) {i= 16} flag : = suce ( false ) { flag = True } flag : = suce ( True ) { situa = 5 }

صفحه 245:
هدف: قسمت صحیح یک عدد اعشار را بر می‌گرداند. Function Trunc (x: Real ): ‏شکل تابع:‎ ; Longint ‎x‏ کضارتیا متعیر از نوغ شاوی ودد و خروجی‌تسلبع یکعدد از نوع ‎Longint‏ می‌باشد. این تابع قسمت صحیح عدد اعشاری ۶ را بعنوان خروجی بر می‌گرداند.

صفحه 246:
x,i,j:Longint ; Begin i: =trunc (12.5) ; {i=12} j: =trunc (12.4) ; {i= 12} k: = trunc (13.5) ; {k=13} Writeln ('IT=',i:5 ,'j=',j:5,' ‏(5:علا,' دعا‎ : End.

صفحه 247:
ee ‏توابع از نوع کاراکتری‎ * در این بخش توابعي رآ بررسي مي کنیم که خروجي آنها ار نوع كاراكتري باشد ‎chr at ¥‏ هدف: معادل کاراکتری یک کد اسکی را بر می‌گرداند. Function chr ( X: Byte ): char ‏کل تابع:‎ يكعباوتيا متغير از نوع بايتبوده و خروجىتالبع يككاركتر موياشد ن تابع کد اسکی را دریافت کرده و معادل کارکتری آن را بر می‌گرداند.

صفحه 248:
Var , i: Byte ; Begin For i:=65 to 91 do Writeln (chr(1)) ; End. ‏خروجی‎ : برنامه بالا حروف ۸ تا 2 را در خروجی ‎le‏ می‌کند.

صفحه 249:
هدف: براي تبديل يك كاراكتر به حرف بزرگتر بکار مي‌رود. Function Upcase (ch: char ): ‏شکل تابع:‎ ; Char یک عبارت یا متفیر از نوع کاراکتر بوده و خروجی تلبع فیزیک کاراکتری باشد این تلبع حرف کوچک رابه حرف بزرگ تبدیل کرده و بعنوان خروجی حروف بزرك را بر مى كرداند.

صفحه 250:
yte ; (‘enter Numbers: ') ; m(N) ; i:=1 to N do Read (Sen[il]) ; In ; i:=1 to N do If (sen[i] >='a') and (sen[i] <='z') Then sen [i]: = Upcase (sen[i]) In (' Out pot of program') ; i:=1 to N do Writeln (sen[i]) ; f program } 3

صفحه 251:
EEE EEE ‏روال‌هاي استانداره‎ * در بخش های قبل دیدید که در توابع پارامترها به تابع ارسال می شود و تابع نیز مقداری را بعنوان خروجی برمی‌گرداند روالها نیز مشابه توابع عمل می‌کنند با اين تفاوت که خروجی روالها از طریق پارامتر برمی گردانده می‌شود يا اعلان به .سیستم عامل می‌باشد. بنابراین روالها بدون نوع هستند :شکل کلی روال‌ها بصورت زیر می‌باشد Procedure Name | | | پارامترهاي روال اسم روال علمه

صفحه 252:
هدف: یک یا چند واحد از پارامتر ارسالی کم می کند. :شکل روال ‎Procedure Dec (Var X: longint ) ;‏ ‎Procedure Dec ( Var X: longint , N: longint ) ;‏ ۴ يكمتغير از نوع ]10100130 و بسصورمتفیریسویساشدلین روللکولحد از پسارلمتر ایسالکسم موکسند

صفحه 253:
Var 5 N : integer Begin N:=1201; Dec (N) ; {N= 1200 } Writeln (N) ; Dec (N, 200) ; {W= 1000 } Writeln (N) ; End.

صفحه 254:
هدف: کنترل برنامه را به خارج از بلوک جاری منتقل می کند. Procedure ‏شکل روال:‎ > Exit این روال باعث می شود که کنترل برنامه از بلوک جاری خارج شود. اگر این روال در برنامه اصلی بکار رود باعث خروج از برنامه می‌شود. و اگر در یک روال يا تابع بکار رود باعث خروج از روال یا تابع شده و کنترل برنامه به برنامه اصلی منتقل می‌شود.

صفحه 255:
Var 9 i,j: integer ; Begin i: = 100; [ : 2 20 ‏ز‎ ‎Dec (i,j) ; Write (i) ; Exit ; End. : خروجی بعد از اتمام عمليات تابع 123:18 باعث خروج از برنامه می شود.

صفحه 256:
هدف: خاتمه دادن به اجرای برنامه Procedure ‏شکل روال:‎ ; Halt اين روال باعث خاتمه اجرای برنامه شده و کنترل برنامه به سیستم عامل بر كردة.

صفحه 257:
هدف: اضافه کردن یک یا چند واحد به یک متغیر cedure Inc ( Var X: longint ) ‏شکل تلیع:‎ ‏مد‎ Inc ( Var X: longint , N: longint ) ; ا يكهباينها متغير از نوع 10801126 مىباشد دين ولليه مقنار متغير * يكيا جند واحد مضافه ميكند

صفحه 258:
Var N,i,j: integer ; Begin {i= 101} inc (j,N) ; {j= 210} Writeln (i=',i,'j=',j) ; End.

صفحه 259:
هدف: باعث تغیر نحوه تولید اعداد تصادفی می شود. Procedure ‏شکل روال:‎ ; Randomize وقتی در برنامه از تابع 18213010102 استفاده می‌کنیم اعداد تصادفی تولید شده در اجراهای مختلف یکسان می باشد برای جلوگیری از این وضعیت قبل از استفاده از تابع 1823000100 روال 180110101026 را بکار می‌بريم. تا باعث تولید اعداد تصادفی متفاوت در اجراهای مختلف گردد.

صفحه 260:
Var i: word ; Begin Randomize; For i:=1 to 10 do Writeln (Random (50) ) ; End.

صفحه 261:
EE E EE EEE ‏حل چند مثال برنامه‌نويسي‎ * 1 : 0 ) > < 10 ( ‏مثال : برنامه ای بنویسید که یک ماتریس مربع‎ ‏از مقادیر صحیح را از ورودی دریافت کرده آنگاه عناصری که مربع کامل‎ ‏نیستند را صفر کرده و در نهایت ماتریس حاصل را در خروجی چاپ می کند.‎ ۳ ‏؟ تايوه‎ 26667 a:array[1..10,1..10]of integer ; gin Write (' enter Number:') ; For i:=1 to N do For j:=1 to N do Read: ((ai[ei jell) iy;

صفحه 262:
ali,j]sqr (Abs (ali,j1))) Then 8 ‏یرل زود‎ Writeln ('The oupput Mafrix') ; For i:=1 to N do Begin For j:=1 to N do Write (a [i,j 1:5) 3 Writeln ; End ; End. { End of program }

صفحه 263:
Vrite (' enter sentence ') ‏ز‎ ‎Repeat ‎Read (sen[i]) ; Ing: Giy ¢ 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(' Writeln ('The result sentence') ; For i:=1 to n do Write (sen[i]) ; End of program }

صفحه 264:
+ تمرینات ‎i,j: integer ۲ ۳‏ ۱.خروجی تمرینات زیر را تعیین کنید: ‎a aed‏ ز 20 < :[ 100 2< : 1 7 1001011 ‎Dec (j,10) ;‏ ‎Mead) 2‏ Writeln (1:25,j:5) ۶ y : integer ; in 7 : =Round (18.31) MoD 5 ; Writeln (y) ; -_

صفحه 265:
Chi = "A" 3 Ch: = chr(ord(ch)+3) ; Write (ch) ; Xe S112" s Suce Cx) 0: < BL Pred (ch) ; Write (x,ch) ;

صفحه 266:
EE EE EEE EE ‏موممئي‎ ‎۰ ۰ 5 ‏د‎ ** تمرینات برنامه‌نويسي ۱- برنامه‌ای بنویسید که تعداد ۱۰۰۰ شماره حساب بانکی ۷ رقمی بطور تصادفی بین ۵۱۱۹۶۳۲ و ۹۹۸۱۷۱۱ را تولید کرده و چاپ کند. ۲- برنامه ای بنویسید تا تعداد ۳۸ عدد تصادفی صحیح بین ۱۰ تا ‎۹٩‏ راتولید کرده سپس آن را در خروجی به شکل مربع وسط صفحه نمایش چاپ کند. ۳- برنامه‌ای بنویسید که یک عدد ۲۰ رقمی از ورودی دریافت کرده آن زار نگدعده: تک برقبی طرب: موجه و حامل رارجر خروعی جات تباتیت

صفحه 267:
فصل 10 عتفیرها‌ک ایلکتروو وشته‌ها ‎(String)‏ هدفهاي كلي بررسی ساختار آرایه هایی از نوع کاراکتر معرفی نوع داد جدید به نام رشته مقایسه آرایه ای از کاراکتر و رشته شناخت توابع و روالهای استاندارد برای رشته ها

صفحه 268:
:دانشجو يس از مطالعه اين فصل بايد بتواند ja رایه‌ای از کاراکترها را در پرنامه پکار ببرد. 8 آرایه‌ای از کاراکترها را با رشته مقایسه کند. "ا اسمی افراد و غیره را با استفاده از آرایه‌ای از رشته مرتب نماید. #توابع و روالهای استاندارد مربوط به رشته‌ها را در برنامه خود بكار ببرد.

صفحه 269:
* متغيرهايي از نوع کاراکتر متفیرهای کاراکتری ظرفیت پذیرش یک کاراکتر( شامل یک رقم. یک حرف از .حروف و يا يك كاراكتر ديكر ) را دارا می‌باشند مقدار دهی‌لینمتغیر ها به صووؤير مئهاشد : یگ د بلع" : اكر بخواهيم متغير هاى كاراكترى را از ورودى بخوانيم بايد دقت بيشترى به .خرج دهيم براى اينكه فضاهاى خالى كاراكتر محسوب مى شوند

صفحه 270:
Writeln (' equal ' ) Else Writeln (' Not equal') ; خروجی حاصل از قطعه برنامه بالا بصورت زیر است: Not equal

صفحه 271:
تیقم‌ها بسصویتزیر مقایسه میسوند -1 9 ع وين 1 مهد 35" هم 1 ۷ ‎PQS‏ ‏.رقمها از لحاظ كد اسكى يشت سر هم قرار كرفتهاند مقايسه مىشوند -2

صفحه 272:
EEE EEE << << "> ) 51 ( ‏متغيرهاي رشته‌اي‎ تعریف: مجموعه‌ای از کاراکتر را یک رشته نامیده و متغفیر از نوع آن را .یک متغیر رشته‌ای می‌نامند این متغیر نیز مانند ساير متغیرها در قسمت تعاریف متغیرها ( ۷۵ ) معرفی می‌شود. در تعریف یک متغیر رشته‌ای معمولاً طول آن را مشخص می‌کنند. اكر طول تعیین نشود بطور قراردادی کامپایلر حداکثر طول را برای آن در نظر مى كيرد. حداکثر طول رشته ۲۵۵ کاراکتر می‌باشد.

صفحه 273:
طول رشته کلمه ذ< اختره‌شده | سم رشته

صفحه 274:
Var S:string[10] ; Begin S:='pascal' ; Write (s) ; End.

صفحه 275:
; Read (s ) هنگام خواندن متغیرهای رشته‌ای اگر طول رشته ورودی از طول تعریف شده بیشتر باشد فقط به اندازه طول تعریف شده خوانده می شود و اگر طول رشته ورودی کمتر از طول تعریف شده باشد. رشته ورودی در منتهی‌الیه سمت چپ متغیر رشته‌ای قرار گرفته و بقیه متغیر رشته ای بدون محتوا تاق مق هائك

صفحه 276:
7 می‌توان استفاده کرد:: ‎Write (s)‏ ; مثال : برنمه‌ای بنویسید که شماره دانشجوئی. اسم و فامیل دانشجوثی را .از ورودی دریافت کرده سپس در خروجی نمایش دهد

صفحه 277:
Name , family: string [ 40] ; Id: longint writeln (' Enter student number ReadIn (Id) ; writeln ('Enter Name') ; ReadIn (Name ) ; writeln ('Enter family') ; ReadIn ( family ) ; writeln(' Id Name Family writeln ( Id: 7 , Name, Var Begin

صفحه 278:
آرايه‌اي از رشته بصورت زیر تعریف مي‌شود: iy [1..length] of string نوع رشته اي طول آرايه

صفحه 279:
برای خواندن چنین آرایه‌ای بصورت زیر عمل می‌کنیم: r i:=1 to 50 do ReadIn (Name [i]) ; ‎ly‏ نمایش آرایه در خروجی بصورت: ‎For i:=1 to 50 do Writeln ( Name [i] )

صفحه 280:
ring[10] ; temp: i,j: Byte; riteln (' Enter Ten Names') ; 2۲ i:=1 to 10 do ReadIn (Name [i] ) ; r 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 } ‘iteln ('The sorted list') ; r i:=1 to 10 do writeln (Name [i]) ; nd of program }

صفحه 281:
00 58 اسمی از ورودی. سایر اطلاعات اسم خوانده شده را در .صورت وجود در خروجى نمايش دهد Name , Family: array[1..50] of string[ 30] ; id: array[1..50] of longint ; Nam : string [ 30] ;

صفحه 282:
write ('Enter Name:') ; ReadIn (Name ) ; write ('Enter family:') ; Readln ( family ) ; write ('Enter student Number:') ; ReadIin (Id) ; end ; writeln ; write ('Enter Name:') ; Readin (Nam) ; -_

صفحه 283:
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 ;

صفحه 284:
‎EEE EEE << << ">‏ ° توابع و روالماي كتابخانه‌اي براي متغيرهاي رشته‌اي ‎Concat ‏تبع‎ v ‏مدف: الحاق دو يا چند رشته به یکدیگر ‎Function concat (S1,S2,...,Sn): :عبات ‏شکل‎ ‎; string ‏1 , 52 , ... , 532 متغيرهايى از نوع رشته هستند و خروجى تابع نيز یک متغیر رشته‌ای است این تابع دویا چندتابع را به هم پیوند داده. و رشته حاصل را برمی گرداند.

صفحه 285:
Str3 ‏ر‎ str1 , str2: string egin Str1 : ='Pascal' ; 572 : < ۲ 0016۲ Str3 : = Concat ( Str1 , Str2) ; write ( Str3 ) ; nd. با اجرای برنامه فوق. عبارت 0016 ‎Pascal‏ نشان داده خواهد شد.

صفحه 286:
ندف: استخراج یک زیر رشته ( 511053110 ) از یک رشته n copy (S:string ; Index:Integer; count: Integer): stri يكهبايتيا متغير يشته لی‌ک» می‌خولهيم از آن‌زیر پشته لی‌ک» نقطه 5 می‌ب‌اشد جدا کنیم لنا زیر یشته ‎ob , Count‏ 112016 شریع آن لمستموياشد 0۷11 حاصل یکیشته که طوللنبه لنلازد

صفحه 287:
Var Strycstnil: string: 5 Begin Str: =' Pascal Book' ; Siriv= Capy( Str, 7,4) 74 Sri] Book } write (Str1) ; End.

صفحه 288:
هدف: حذف یک زیر رشته از یک رشته شکل‌روال: ‎Procedure delete (Var str: string;‏ ‎Index:integer;length: integer )‏ ; 5 یبکمتفر رشته لی 1110102 یکعبارتیامتغیر صحیح و ‎Length‏ نب ‎٠‏ عبارت یا متیر صحیح می‌باشد. روال 126166 یک زیر رشته را از یک ته حذف می‌کند این روال از محل ‎Index‏ بطول 1.6۳01 از رشته ‎٩]‏ ‏ف می‌کند و رشته حاصل بعنوان خروجی روال برگردانده می‌شود.

صفحه 289:
Var St: string ; Begin St: = 'Pascal.Book' ; Delete (St,7,5) ۶ writeln (St) ; End. خروجی حاصل از برنامه فوق 389081 می‌باشد.

صفحه 290:
هدف: درج ( وارد کردن ) یک رشته در یک رشته دیگر Procedure Insert ( Str1: string ;Var :J\;, Js: ; Str2: string ; Index: Byte ) 513 عبارت يا متغیر رشته ای. ‎٩12‏ منغیر رشته ای و ‎ole Index‏ دد از نوع ‎os‏ می‌باشد. روال 11561 رشته 9171 رادر رشته 512 خانه ‎Index‏ درج می‌کند و رشته حاصل خروجی روال خواهد بود.

صفحه 291:
Var Str1 , str2: string ; Begin Str1: =' Pascal 7' ; Str2: ='Turbo' ; Insert (Str1, Str2,6) ; End. خروجی حاصل )3 ‎Turbo pascal 7 Yu ub,‏ خواهد بود.

صفحه 292:
هدف: محاسبه طول رشته 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 ist) a) 3 End.

صفحه 294:
هدف: برای جستجوی یک رشته داخل رشته دیگر Function pos ( Str1: string ; 512: ‏شکل تابع:‎ ‏رز‎ String ): Byte 1 يك عبارت يا متغير رشته ای و ‎٩112‏ نیز یک عبارت یا متفیر رشته ای می‌باشد و خروجی تابع یک عدد صحیح می باشد. اين تابع محل اولین وقوع رشته 1 در رشته ‎٩۲2‏ را بعنوان خروجی بر می‌گرداند.

صفحه 295:
Var Str1 , Str2: string ; i: integer ; Begin Str1: =' Book' ; Str2: = ' Pascal Book' ; i: = Pos (Str1,Str2) ; {i= 8} Write ('i=',i) ; JPA, ga oti lB yl poe feo SS as eg 0S ‏.در رشته دوم وجود نداشته باشد ) تابع مقدار صفر بر می‌گرداند‎

صفحه 296:
هدف: برای تبدیل عدد به یک رشته عددی بكار مى رود. ال. 1: ( ‎Str: string‏ ر تقم؟ :تعاطا :1 )او وتال0 ۵8( ‎Procedure Str (F: Real: format, Str: string) :‏ ; درشکل ۰۱ 1 یک عبارت یا متغیرعددی بوده و ‎٩‏ یک متغیر رشته‌ای مى باشد اين روال يك عدد صحيح با فرمت مشخص را به يك رشته عددى درشكل ” . 7 يك عبارت يا متغير رشتهاى و ‎Str‏ يك متغير رشتهاى مى باشد

صفحه 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:
هدف: تبدیل یک رشته عددی به یک عدد ; Procedure Val (S: String ‏روال: ۱: 66۲ص :۲ ۷۵۲ ز‎ ; (Var Error: inte¢ dure Val (S: String ; Var N: Real ; Var Error: inte¢ 5 یکعبارتیامتغیر يشته لی ۷( يكمتغير از نوع صحيح يالمعشايىو 1 نیز یکمتفیر از نوع صحيح مئباشد دين ولليكيشته عددى را به يكعلد صحيح يالمعشارىتبديلمىكند و لمزرا توسطمتغير ‎N‏ ‏بسرمی‌گردلند دگر عملتسبدیلسطور صسحیح لنجام شود. مقلار متفیر 281101 برلبر صفر در غیر اینصور تم حل و جود لشکل لوا مشخص رمک ند

صفحه 299:
F: Real ; St='475'; Val (St,N,E) ; {N=475,E St=' 475' ; Val (St, F,E) ; {F= ,E=3 St = '3.1716' ; Val (St, F,E) ; { F = 3.1716 Begin ,E=0} End.

صفحه 300:
موممئي ‎EE EE EEE EE‏ **ارائه جند مثال در مورد رشته‌ها و کاراکترها مثال : برنامه‌ای بنویسید که یک جمله از ورودی دریافت کرده سپس در صورتی که ‎TS ads‏ وجود داشته باشد انها را به 216 تبدیل نماید و در نهایت رشته حاصل را در خروجی نمایش دهد. توجه كنيد كه ممکن است بیش از یک بار کلمه 18 تکرار شده باشد در اینصورت همه کلمات 15 را با 816 تبدیل کند.

صفحه 301:
Writeln (' Enter sentence ReadIn (St) ; Repeat i: = Pos (‘is', St) ; if 1< 0 Then Begin Delete ( St, i,2); Insert (‘are', St,i) ; end ; 1-141 ‏يت د‎ |)

صفحه 302:
Begin 1 Writeln ('Enter sentence') ; Readin (St1) ; j:=1; For i:=length(Stl) downto 1 do Begin Sta [jl<e= StL (i] » Inc (j) ; End ; Writeln ('The result') ; Writeln ( St1 ) ; Writeln( St2 ) ;

صفحه 303:
‎EE << << ">‏ تمرینات ۴ با فرض اینکه 51 , 92 , 93 متغیر های رشته ای ‏هستند خروجی عبارتهای زیر را تعیین کنید. ‎a)S3 =copy(S1,1,6) ; ‎b)S3 = concat (S3, 52, $1) ; ‎e@)S3'= copy'( $2.4. 1.,posCS1,, S2)—1 ).¢ d)Delete (S2, pos(S1,S2),length(S1)) ;

صفحه 304:
S1: string ; i: integer ; 91: = 'ABCDEF' ; For i:=1 to length(S1) ; Delete (S1,i,1) ; Writeln (S1) ; Var Begin -End

صفحه 305:
St: string ; i: integer ; ReadIn ( St) ; For i:=1 to length(St) Do 1] ) 5۲ ]1 [ < < ۲ 0۲ ( 280 ) 5۲ ]1[ > 2 9 1 Delete (St,i,1) ; Writeln (St) ;

صفحه 306:
sert (S1,S2,pos(S1,S2)) ; $3: = copy (S2, pos (S1,S2), length (S1) ; 3: = copy (S2, pos (St, S2), length (S2) ; plete (S1, pos (S2, S81), length (S2 ); ز 6 # 2: [ 0 ] ۱1

صفحه 307:
۳ 5 1 High * تمرینات برنامه‌نویسی *برنامه‌ای بنویسید که یک پاراگراف را از ورودی دریافت کرده ( حداکثر ۱۰ خط ) سپس: .الف) تعداد کلمات هر سطر را شمرده و انتهای سطر نمایش دهد .ب) تعداد حروف صدا دار را شمرده جاب نمايد .ج) تعداد خطوط برنامه را شمرده در خروجی چاپ کند .د) تعداد جملات هر خط را محاسبه و در سطر های جداگانه نمایش دهد

صفحه 308:
*برنامه‌ای بنویسید که یک عدد در مبنای مشخص را از ورودی دریافت کرده سپس آن را به مبنای 102 که از ورودی خوانده می شود ببرد. *برنامه‌ای بنویسید که یک پاراگراف را از ورودی دریافت کرده کلمات تکراری هر سطر را حذف نموده و پاراگراف حاصل را بهمراه پاراگراف اولیه در خروجی با پیغام مناسب نمایش دهد.

صفحه 309:
*برنامه‌ای بنویسید که دو عدد ۲۰ رقمی ( بصورت رشته باید خوانده شود ) را از ورودی دریافت کرده سپس مجموع و حاصل ضرب این دو عدد را محاسبه و در خروجی با پیغام مناسب چاپ نماید. *برنامه‌ای بنویسید که یک رشته از ورودی دریافت کرده سپس کلمات داخل آن را بصورت عمودی کاراکتر به کاراکتر نمایش دهد: *یرنم‌ای بنویسید که یک پاراگراف با حداکتر ۵ خط را از ورودی دریافت نماید. سپس مجموع ارقام یا اعداد ( در صورت وجود ) هر خط را محاسبه نموده در انتهای همان سطر نمایش دهد.

صفحه 310:
ges ‏برنامه‌هاي فرعي‎ هدفهاي كلي ۷ شناخت اجزاء تشکیل‌دهنده توابع و روالها * بررسی انواع پارامترها و متغیرها در برنامه‌های فرعی * شناخت تفاوتهای روالها و توابع * معرفی مزایای استفاده از زیر برنامه‌ها

صفحه 311:
:دانشجو يس از مطالعه اين فصل بايد بتواند "" برنامه خود را به جندين زيربرنامه تقسیم‌بندی نماید. "" زيربرنامهها را با توجه به قوانین موجود. در ساختار برنامه جا دهد. ۴ باتوجه به مزایای استفاده از آنها را در برنامه خود بکار ببرد.

صفحه 312:
الم < << کچ * روال‌ها روال‌ها نوعی از برنامه‌های فرعی هستند. که به طور مستقل و جداگانه وظیفه یا وظایف خاصی از برنامه اصلی را انجام می‌دهند. روال ها در صورت نیاز اطلاعات خود را از طریق پارامترها دریافت و همچنین در صورت نیاز نتایج را از طريق پارامترها به برنامه اصلی باز می‌گردانند. پارامترها در حقیقت خطوط .ارتباطی بین برنامه اصلی و برنامه‌های فرعی هستند. پارامترها باعث می شوند که توابع و روال ها روانتر عمل کنند. زیرا آنها به پرنامه های فرعی این قابلیت را .می دهند که با هر فراخوانی داده‌های مختلفی را مورد پردازش قرار دهند

صفحه 313:
Procedure Name (parameters list ) | | | vious siaelS ‏لیست پارامترها اسم روال‎ ar { List of locad variable } Begin 1 { Procedure Body } End af End of procedure }

صفحه 314:
اسم پرنامه اصلی ‎Program‏ : تعاریف برنامه اصلی ‎Procedure‏ ... ۳ Begin {main program } فراخوانی روال ها End. { End of program 1

صفحه 315:
(Formal parameters ) ¢5)50 sb xb.) (Actual parameters ) (ily (bs LLY. از پارامترهای صوری هنگام اعلان روال و از پارامترهای واقعی هنگام رفخولت رو لها لستفادد مشود

صفحه 316:
پارامترهاي صوري در حالت كلي 2 نوعنده که با توجه به نوع روال و تصمیم برنامه نویس مورد استفاده قرار مي گیرند: ” يارامترهاى مقدارى ( 122323126166375 71731116) (Variable parameters ) «i ‏يارامترهاى‎ ”

صفحه 317:
پارامترهای مقداری. پارامترهایی هستند که مقدار متفیرهای فرستاده شده از برنامه اصلی را دریافت می کنند و وظیفه آنها فقط عبور دادن مقدار به روال می‌باشد. لذا تغییرات پارامترهای مقداری در روال به برنامه اصلی انتقال نمی‌یابد : ‏پارلمترهایس قداریب صوردفیر تسعریفمی‌شوند‎ dure Name (varl: type ; var2:type,... ع مقداری اسم روال ‏ کلمه ذخیره شده

صفحه 318:
am main 2 , ۷1 , ۷2 : ۲ ure test (A1,A2,B1,B2:integer); {formal para —/ fi} x1 ,x2,yl, ‏یت‎ ; { Actual parameters } {End of program a

صفحه 319:
در مثال بالا این تناظر برقرار است: پارامترهای واقع ‎Al‏ ‎A2‏ ‎B1‏ ‎B2‏ متناظر است با نا پارامرهای وافعي برنامه اصلی انتحاب شوند. این به ‎gle‏ این تست که این پارامترها ( پارامترهای صوری ) همان پارامترهای واقعی هستند

صفحه 320:
متغیرهای ۰.۰ , ۷۵۲1 ر ۷۵32 پارامترهای مقداری هستند. توجه کنید. که این پارامترها صوری هستند و نوع و ترتيب آنها بايد با نوع و ترتيب پارامترهای واقعی در تناظر یک به یک باشند.

صفحه 321:
ram main 2 , ۷1 , ۷2 : 1 lure test (A1,A2,B1, B2: integer ); {formal pai Begin { main } test (x1 ,x2,yl,y2) ; { Actual paramete End. { End of program } —_—

صفحه 322:
همانطور که ملاحظه می کنید. روالی بنام 05 با ۶ پارامتر مقداری در پرنامه استفاده شده است. متفیرهای 1 ر 22 , 31 , ۷2 از برنامه اصلی به روال 651 ارسال شده و بترتیب مقادیر این متغیرها در متغیرهای با همان نوع در ۸1 , ۸2 , 191 , 192 قرار می گيرند.

صفحه 323:
یک پارامتر مفیری. تفیرات یک پارمترواقمی را منوان حروجی به پرنامه اصلی برمی گرداند. تفاوت این گونه پارامترها با پارامترهای مقداری در ارسال تغييرات ايجاد شده در پارامترها می‌باشد. وقتی نیاز است. که نتایج روال به برنامه اصلی برگردد. از پارامترهای متغیری استفاده می‌کنند اعلان پارامترهای متغیری به صورت زیر می‌باشد: ‎Name ( var id1 : type ; var id2: type ,...‏ مت پارامترهاي متغيري اسم رواال کلم تفیرهای 2 , 101 و ... پارامترهای متغیری می‌باشند که نتایج روال. توسط انها به برنامه اصلی باز گردانده می‌شود.

صفحه 324:
را محاسبه و نتیجه را در برنامه اصلي چاپ نماید. ‎Num1, Num2: integer; Total,average:‏ Var 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 ,

صفحه 325:
پارامتر واقعی متناظر است با يارامتر هاى صورى Num1 Num1 Num2 Num2 Total sum Average ave 0 , 111721 پارلمترهایمتدایوو 2۷76 , ‎SUM‏ پارلمترهایمتغیرء باشند. که توسط آنها نتایج به برنامه اصلی برگردانده می‌شود.

صفحه 326:
در برنامه‌های فرعى دو نوع متغير علاوه از پارامترها مورد استفاده قرار می‌گيرند. این متغیرها متفیرهای محلی یا متغیرهای سراسر هستند.متفیرهای محلی. متغیرهایی هستند که در بلاک مربوط به خود قابل استفاده هستند. ولی متغیرهای سراسری در تمام برنامه‌های فرعی قابل دسترس می‌باشند متغیرهای محلی در داخل برنامه‌های فرعی در قسمت تعاریف معرفی می‌شوند .و در خارج از روال قابل دسترسی نیستند

صفحه 327:
-edure CalcSumAve ( Num1 , Num2: Read ); Sum , Ave: Real ; Sum:= Num1 + Num2 ; Ave:= Sum /2; WriteLn(' The Sum is =', sum:8:2 ) ; WriteLn(' The average is =',ave:8:2); ;{End of procedure}

صفحه 328:
مر ری ‎x‏ Y.

صفحه 329:
>dure test(var b: integer } a: Integer ); D: integer; {local variable} 1 D:=12;a:=bt+d; b:=at+c;c:=ct+2; 1 {Main} A= 1; b=2; 6:=3; Test(a,b); Writeln(‘a=',a,'b=',b,'’c=',c); {End of program} :خروجی پبرنامه بالا بصورت زير است ‎a =16 b=2 c=5‏

صفحه 330:
بکارگیری روال‌های بدون پارامتر بکارگیری روال همراه پارامترهای با خاصیت ورودی بکارگیری روال همراه پارامترهای با خاصیت ورودی و خروجی

صفحه 331:
كاهى لازم است تا برنامه فرعی کاملاً مستقل (بی‌نیاز از مقادیر برنامه اصلی) در بخش‌های مختلف یک برنامه اجرا شود. در این صورث نیاز به استفاده از پارامتر بی‌مفهوم می‌باشد و از روالهای بدون پارامتر استفاده مى كنند غالبا زمانیکه بخواهيم پیفام‌های خاصی را در قسمتهای مختلف برنامه نمایش دهیم. این پیفام‌ها را در یک روال قرار داده و در صورت ‎SLs‏ روال مربوطه را فراخوانی می‌کنیم.

صفحه 332:
Program Example ; Procedure Head Begin WriteL((Name Family Age No’); ۱۷۷ ‏ا ا م م )ام از‎ 0 End; Begin{Main} WriteLn(' open university ' ) ; Head; End.

صفحه 333:
همانطور که قبلاً اشاره کردیم» هدف از بکارگیری پارامترها انتقال مقادیر از برنامه اصلی به روال‌ها می‌باشد. اگر این انتقال یک طرفه باشد یعنی فقط از برنامه اصلی به روال باشد. این نوع پارامترها فقط خاصیت ورودی خواهند داشت. (قبلا در اين مورد توضیح داده شده است) در اين نوع روالها از پارامترهای مقداری استفاده مى كنئد

صفحه 334:
(1 nple ; NI: integer ; cedure sq( M: integer) ; egin WriteLn (‘sqartis=',M*M ); nd; n {Main} Write(' Enter Number = ') ; RealLn (N) ; For I:=1 to N_ do Sq (i) ; _ {End of program}

صفحه 335:
۲ بكارگيري روال همراه پارامترهاي با خاصیت ورودي و خروجي در این نوع روال‌ها پارامترها دو خاصیت مهم دارند یکی انتقال داده‌ها از برنامه اصلی به روال و دیگری انتقال یا ارجاع نتایج از روال به برنامه‌اصلی می‌باشد. در اين نوع روال‌ها از پارامترهای متفیری استفاده می کنند

صفحه 336:
Program Example ; ‏سيت‎ ‎Var A, b: integer ; Procedure change (var x, y: integer) ; var temp:integer; Begin Temp:=x; Sy; Y:=temp; End;

صفحه 337:
Begin { Main } ReadLn( a,b); Change(a,b); WriteLn ('a=',a,'b=',b); End.{End of program}

صفحه 338:
۰ ۳ ** ارتباط روال‌ها با یکدیگر در پاسکال زیر برنمه‌ها نهتنها از طریق برنامه اصلی بلکه از داخل یکدیگر نیز ,فراخوانی می‌شوند فراخوانی روال‌ها از داخل یکدیگر تابع قوانین کلی زیر است: ۲ قلنون اول قانون دوم قانون سوم

صفحه 339:
از هر برنامه (اصلی یا فرعی) به برنامه فرعی در صورتی می‌توان. دسترسی داشت. که در بخش تعاریف ‎Of‏ برنامه (اصلی يا فرعی) قرار داشته باشد. بطور مثال در شکل زیر پرنامه اصلی 11 می‌تواند. به كليه برنامه‌های فرعی 1,2 و... که در بخش تعاریف برنامه اصلی قرار دارند. مراجعه کند

صفحه 340:

صفحه 341:
nd; egin {Main} ۳001: Proc2; nd.

صفحه 342:
وال‌های 07002 ,ر 101061 داخل برنامه اصلی 118310 تعریف شده‌اند. لذ راحتی می‌توان در برنامه اصلی به آنها دسترسی پیدا کرد. وال‌ها خود نیز داخل هم می‌توانند قرار بگیرند. دقیقاً مثل روال‌های معمولی این تفاوت که در داخل روال باید تعریف شوند. به اینگونه روالها. اصطلاحاً وال‌های متداخل یا تودرتو می‌گویند.

صفحه 343:
اگر روال‌ها در بخش تعاریف یک برنامه به موازات یکدیگر تعریف شوند و نه در داخل هم. در روال‌های بعدی امکان رجوع به روال‌های قبلی وجود خواهد داشت. بعبارت دیگر به روالی می‌توان دسترسی پیدا کرد که قبلاً تعريف شده باشد.

صفحه 344:
برنامه اصلى روال‌ها در شکل بالا چون 102 قبلاً معرفی شده است می‌توان آنرا داخل 3 فراخوانی کرد. Main 21 22 23 P2

صفحه 345:
گر روال‌ها در بخش تعاریف برنامه‌أی بصورت متداخل باشند. در اینصورت ز روال درونی می‌توان به روال‌های بیرونی که قبلا تعریف شده. راجعه کرد و همچنین از روال درونی به روال‌های بیرونی که به موازات کدیگر قرار گرفته‌اند. نیز می‌توان دسترسی پیدا کرد. لور مثال در شکل زیر روال 1 می‌تواند به روال‌های 2,03 دسترسی ییدا کند. وهمچنین روال درونی 104 می‌تواند به‌روال‌های 103 , 102 مراجعه کند

صفحه 346:
Main P3 22 Pl

صفحه 347:
‎EE << << ">‏ ** اعلان روالها به روش 1015172101 همانطور كه قبلاً اشاره كرديم از روالى مىتوان در روال ديكر استفاده کرد. كه قبلاً تعريف شده باشد. در توربوياسكال نقيصه فوق به كمك اعلان 01 قابل حل است. بدین صورت كه اكر روالى به هنكام تعريف با اعلان 503583301 همراه باشد. بدون رعایت از پیش تعریف شدن می‌تواند. ‏در روالهای دیگر ظاهر شود.

صفحه 348:
Procedure Name ( parameters ) ; ; forward | ۱ | ! ۱ کلمه ذخیره شده لیست پارامترها اسم روال کلمه ذخیره شده

صفحه 349:

صفحه 350:
End; همانطور که ملاحظه می‌کنید با اعلان روال 97063 ۳ بصورت 1201080230 بقیه روالها می‌توانند به آن 3 1 دسر لکد 212003 End. {End of program}

صفحه 351:
EE EE EEE EE ‏موممئي‎ ‎(Functions) ‏توابع‎ * نوع دیگری از برنامه‌های فرعی, توابع می‌باشند. توابع مانند روال‌ها. پیمانه‌های مستقلی هستند. با این تفاوت که روال‌ها می‌توانند. تعدادی خروجی داشته باشند. در حالی که توابع فقط یک خروجی دارند. در روال‌ها معمولاً خروجی‌ها توسط پارامتر به برنامه اصلی ارجاع داده می‌شود. ولی در توایع اینکار به نحو دیگر انجام می‌گیرد.

صفحه 352:
Function Name ( List Of Parameters ) : ; Function Type نوع تابع ليست پارامترها ‎wh pul‏ كلمه ذخيره شده

صفحه 353:
۰ دکنه — تابع فقط می‌تواند. یک خروجی داشته باشد. نوع خروجی تابع. همان نوع تابع محسوب مىشود. لذا با توجه به نوع خروجى تابع. نوع تابع تشخیص داده می‌شود. ذکر اين نکته خالی از لطف نیست که نوع پارامترهای صوری توابع معمولا مقداری هستند چرا که توابع نوعی برنامه‌های فرعی هستند که فقط یک خروجی برمی گردانند. لذا استفاده از پارامترهای از نوع متغیری پسندیده نمی‌باشد. (اشکال کامپایلری در توربوپاسکال ندارد ولی در پاسکال استاندارد این کار اشکال کامپایلری دارد.) مقدار خروجی توابع توسط اسم تابع برگردانده می‌شود. توابع مثل روالها بعد .از قسمت تعاریف پرنامه اصلی ظاهر می‌شود

صفحه 354:
Name := Resualt Of Function ; End ;

صفحه 355:
تمام پارامترهای تابع باید از نوع مقداری باشند نوع داده نتیجه تابع در انتهای عنوان تابع و بعد از لیست پارامترهای صوری قرار می‌گیرد در بدنه تابع. خروجی تابع با نسبت دادن مقدار به نام تابع مشخص می‌شود

صفحه 356:
N: Integer 7 on Fact ( M: Integer ): longint ; P, 1: Integer ; P=i1: For i:=2 To M _ do P= P'* Tx Fact:= P ; { Main } Write ('Enter Number='); Readln(N); Writeln (' Factorial is =', Fact (N )); {Call Func

صفحه 357:
ناحیه داده هاي اصلي_ ‏ 11301 ناحیه داده هاي پارامترهای صوری ‎M‏ پارامترهای واقعی ‎N ‎ee ‏متفیرهای محلی‎ ‏نتیجه تابع‎ P 2 1 ‏نتیجه تابع‎ 2 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 358:
+ دوایع بار تسی ‎IRCCULSLUIL)‏ ‎(Functions‏ در پاسکال یک تابع یا روال می‌تواند. خودش را فراخوانی نماید. پیمانه‌ای که خودش را فراخوانی می‌کند یک پیمانه بازگشتی نام دارد. اين نوع توابع در ۶ ‏ی و واه وت اد وت ۰ ارت‎ s شرط خاص که غالباً به یک عدد ثابت ختم می‌شود. ادامه پیدا می‌کند. سپس مقدار تابع از پایین به بالا محاسبه می‌شود و در نهایت نتیجه تابع حاصل .می شود

صفحه 359:
را در محلی از حافظه بنام پشته (8126016) قرار می‌دهد. اگر بازگشت به تابع بازكشتى مجدداً صورت گیرد. مقادیر فعلی متغیرها مجدداً بدنبال مقادیر قبلی و اصطلاحاً در پشت مقادیر اولیه قرار می‌گيرند. هنگامی که شرط پایانی در تابع بازگشتی رخ می دهد. در اولین بازگشت مقادیری را که هنگام مراجعه به خود. در پشته نگهداری کرده مجدداً در دسترس قرار می‌دهد و بهمین ترتیب در باز گشت‌های بعدی این عمل تکرار می‌شود تا مقدار تابع محاسبه شود.

صفحه 360:
مقادیر متغیرها درآخرین بازگشت به تابع مقادیر متغیرها در سومین بازگشت به تابع مقادیر متغیرها در دومین بازگشت به تابع مقادیر متغیرها در اولین بازگشت به تابع

صفحه 361:
مقادیر متغیرها درآخرین بازگشت به تابع مقادیر متفیرها در سومین بازگشت به تاپع مقادیر متفیرها در دومین بازگشت به تابع مقادیر متغیرها در اولین بازگشت به تابع

صفحه 362:
۳016 ‏ز‎ ‎N : integer ; on Fact ( N: integer ): Longint ; If N=1 Then Fact:= 1 Else Fact:= N * Fact(N-1); Writeln ('Enter Number' ) ; Writeln (' Factorial is =', Fact (N ) ); {Call Fur

صفحه 363:

صفحه 364:
Function GCD ( N,M:integer ): Integer ; Begin If (N<=M) and (M Mod N = 0) Then GCD:=N Else GCD:= GCD(M,NmodM); End ;

صفحه 365:
EEE EEE << << "> ۰ ۳۹ 2 ** مقايسه توابع و روالها توابع و روال‌ها هر دو برنامه‌های فرعی هستند. که بطور مستقل وظایفی را بر :عهده دارند. ولی در این میان از بعضی جنبه‌ها متفاوت می‌باشند که عبارتند از حوم فرلخولنی‌آنها با هم متفاولست روا ها از طریقعبارلتووا لفرلخولنده .1 ی‌شوند. درصورتی که فراخوانی تابع توسط عبارات مقایسه‌أی و یا تخصیص بجه به يك متغير صورت مى كيرد كام معلانيكتلبع. نوع تلبع يانوع نتيجه حاصلاز تلبع بايد ذكر شود. مورتى كه روالها نيازى به اين كار ندارند ولبع فسقط یک خروجیبرمیگ ردلنند ولیروا فا میسولنند چندین‌خریجی3 گردانند. درضمن نتیجه توابع توسط اسم تابع فرستاده می‌شود ولی روال‌ها طریق پارامترها. نتایج را برمی گردانند

صفحه 366:
* طربقه ارسال آرایه‌ها به توابع و روال‌ها آرایه‌ها خود مجموعه‌ی از داده‌ها می‌باشند. لذا برای ارسال آنها نمی‌توانیم از روش معمولی ارسال پارامترها استفاده کنیم. و بطور مستقیم نمی‌توان آنها را به برنامه‌های فرعی انتقال داد. برای ارسال آرایه‌ها به عنوان پارامتر به برنامه‌های فرعی از دستور 137106 استفاده می‌کنند. دستور 11/06 قبل از تعاریف برنامه اصلی بکار می‌رود و توسط این دستور در واقع یک نوع ساده‌سازی در تعاریف فراهم می‌شود. و با این ساده‌سازی می‌توان داده‌های

صفحه 367:
تعریف داده ساخت یافته = شناسه ‎Type‏ ‏برای مثال یک ارایه از نوع صحیح را تعریف می‌کنیم: ‎Type No = array [1...100] of intec‏ ; در اینصورت تعریف آرایه به. ۷0[ نسبت داده می‌شود. اگر بخواهیم متغیری از نوع آرايه بالا تعريف کنیم. آنرا از نوع ‎3٩0‏ تعریف می‌کنیم: ‎ar‏ ‎Number: No ;‏

صفحه 368:
m Example ; a=array[1..100] of integer ; B:a; N: Word ; 1 Search (b:a; N: Word ; x: integer ) : ۷ [, Index: Word ; Flag: Boolean; { local vari Index:= 0 ; Flag:= TRUE ; —_—

صفحه 369:
Index:= I ; Flag:= FALSE ; End ; Inc (1); End ; Search:= Index ; End ; LORE EOE OEE CETTE eee 1 —_—

صفحه 370:
Begin { Main } Writeln (' Enter Number' ) ; ReadIn ( N); For I:=1 To N Do ReadIn ( b[ I] ); Writeln (' Enter Number ' ) ; ReadIn ( x ); If Search(b,N,x)=0 Then Writeln (' Not Found ') ; Else Writeln (Search(b,N,x) ); End. {End Of Program }

صفحه 371:
* تمرینات " روال ‎Down‏ را در نظر بگیرید: 601111 Down ( N: Integer) ; in While N>0 do Begin Write (N: 3); Dec (N); End ; 7 ب) وقتی روال بصورت )5( ‎down‏ فراخوانی شود. چه چیزی چاپ می‌شود ب) مقدار پارامتر واقعى 7 بعد از اجرای روال چیست؟

صفحه 372:
ion MyStery ( M,N: Integer): integer If N= 1 Then MyStery:= 1 Else MyStery:= M* MyStery(M,N-1) ; { End Of Function } ف) تابع بازكشتى بالا را به ازاء مقادیر 1۷]<5 , 4 ۱[ فراخوانی کنید. ب) تابع بازگشتی بالا را به ازاء مقادیر 1۷1-53 ر 25 لا فراخوانی کنید.

صفحه 373:
:ی © تمرینات برنامه‌نويسي " برنامه‌ای بنویسید که اطلاعات حداکثر ۱۰۰ دانشجو که عبارتند از: ‎vt Family Nanie‏ اسم 900 شماره دانشجوئی را از ورودی دریافت کرده سپس: الف) توسط روالی بنام :501 اطلاعات را برحسب شماره دانشجوئی مرتب کند. ب) توسط تابعی بنام 5628۳610 شماره دانشجوئی فردی را از ورودی دریافت نماید. در صورتی که شخص موردنظر در لیست باشد. سایر اطلاعات آنرا

صفحه 374:
* آرایه‌آی از نوع صحیح با حداکثر ۱۰۰ عنصر را در نظر بگیرید. برنامهأى بنويسيد كه ابتدا آرايه را از ورودى دريافت کرده سپس با استفاده از يك تابع بازكشتى بيشترين مقدار آرايه را محاسبه نمايد. " دو آرايه مرتب حداكثر١١٠‏ عنصرى كه شامل اسامى افراد مىباشد را درنظر بكيريد. برنامهاى بنويسيد كه نخست دو آرايه را از ورودى دريافت نموده سيس توسط روالى بنام 6 اين دو آرايه در هم ادغام نموده و در آرايه سومى قرار دها

صفحه 375:
فصل 12 هدفهاي كلي ١ ‏مفهوم مجموعه و داده‌های شما شى در زبان ياسكا‎ J Ob} ) e ‏جموعه و داد شمارث‎ ‏ههای شمارشی به عنوان متغیر‎ : Rostra

صفحه 376:
:دانشجو يس از مطالعه اين فصل بايد بتواند 5 مفهوم مجموعه و داده‌های شمارشی را درک کند. ۴ بتواند در صورت لزوم از مجموعه و داده‌های شمارشی استفاده کند.

صفحه 377:
تعداد محدودی از داده‌ها که از نظر نوع یکسان هستند. در غالب مجموعه و يا .گونه‌های شمارشی نگهداری می‌شوند که مفهومی شبیه در ریاضیات دارند برای استفاده در مواردی خاص نظیر روزهای هفته و یا نوع ماشينها و... كه ترتیبی هستند و یا یک مجموعه از داده‌های پشت سر هم می‌باشند. استفاده از این ساختارها کار را بسیار راحت می‌کند. هر چند وجود آنها به عنوان ساختارهای داده‌ای. الزامی‌نیست. بهرحال به عنوان ابزارهایی از زبان پاسکال هستند که در مواقعی. ضروری بنظر می‌رسند و مسئله را به صورتی قابل‌فهم و .راحت حل مى كند

صفحه 378:
* مجموعه‌ها (عاه6) در زبان پاسکال مجموعه مفهومی شبیه به مفهوم مجموعه در ریاضیات جدید دارد. متفیری است که شامل لیستی از اعداد صحیح. ‎SINS‏ بولین و یا از نوع همارشفئ :و ياشد كه :دا راق داد هاض موه بجهدا رده ها می پاش ناو این جهت بسیار شییه به یک آرایه در زیان پاسکال است که شامل داده‌عانی از یک نوع می‌باشد. ولی آرایه دارای عناصر محدودی نیست و در ضمن مانند .آرایه تعریف نمی‌شود

صفحه 379:
برای تعریف یک مجموعه از کلمات کلیدی 0 6 بصورت زیر استفاده می‌کنیم: Type Name= Set of Type Of Set; Type Digit_type = 0..9; Digit = Set of Digit_type

صفحه 380:
1 ar ch: set of char; 55 HO PP ot of boolean; faBumreet of byte; 0..255 5 x: set of 100..200; y: set of ‘a'..'z'; z: set of '0'..'9';

صفحه 381:
عضو مجموعه می‌باشد يا خیر. این عمل در زبان پاسکال با کلمه کلیدی ‎in‏ صورت می‌گیرد. اگر عضویت صحیح باشد جواب 11116 وگرنه ‎False‏ می‌باشد. همچنین دو مجموعه را می‌توان با علامات شرطی ح < > <- و >-مقایسه کرد که همگی دارای خروجی درست يا غلط می‌باشند. ولی‌علامات شرطی < و > در مورد مجموعه‌ها کاربردی ندارد.

صفحه 382:
Begin oe a:= [1..3,4]; Jee: 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); False write([1,2,3,4,] = a); True write([1,2,3,4] = [2,2,1,1,1,3,4,4]); True ۱ ۱۲116)]1,21[ < ]1,2,3[(( False write([1,2] <= [1,2,3]);

صفحه 383:
در ریاضیات می‌توانیم مجموعه‌ها را با هم اجتماع اشتراک و تفاضل کنیم که اين عملیات در پاسکال با عملگرهای +. * و - به ترتیب می‌باشد. اجتماع دو مجموعه ترکیبی از همه عضوهای آنها است و اشتراک یعنی عضوهایی که در هر دو مجموعه مشترک است و تفاضل یعنی اعضایی که در مجموعه اول می‌باشد و در مجموعه دوم وجود ندارد.

صفحه 384:
d=[2,3] e=[0,1] et o b: set of 0. 10; c, d, e: set of byte; -gin a:=[0,1,2,3]; b:=[2,3,4,5]; c:= a+b; 0,1,2,3,4,5]=[0..5] d:= a*b; e:= a-b; id.

صفحه 385:
۱. آرگومان ورودی روالها می‌تواند مجموعه باشد که قبلاً در تایپ تعریف شده باشد. نه اينكه مستقیم در روال به عنوان آرگومان بياید. ولی خروجی یک تابع نمی‌تواند از نوع مجموعه باشد. ۲ برای نوشتن یا خواندن مجموعه‌ها باید عضو به عضو عملیات صورت بگیرد و مستقیماً توابع ‎Read‏ ۰ روی آنها کار نمی کنند.

صفحه 386:
Program test ; Var num , temp : set of byte; I, c: integer ; Begin Writln (‘Enter numbers: Readln( 1) ; Num :=[]; 0 (0) 2 —_

صفحه 387:
while (i >-1) do begin c:=c+1; temp :=[I]; num := num + temp ; ReadIn( 1); end; for 1:= 0 to 255 do if (i in num) then write(i:5 ) ; End.{ End Of Program }

صفحه 388:
>" << << آآآآآاسا"اآ۳ * داده‌های شمارشی ‎(Enumeration)‏ ‏داده‌های شمارشی. یک مجموعه مرتب از اعداد است که در برنامه. هر عدد دارای نام بخصوصی است. این نامها در داخل دو پرانتز باز و بسته قرار می‌گیرند و بترتیب از صفر مقدار می‌گیرند مگر اینکه برنامه‌نویس به آنها .مقدار مخصوصی بدهد

صفحه 389:
۷06 0 Jar Cars_type = (Peykan, Pride, Pegout, Cars: cars_type; حال در پرنامه 0815 می‌تواند مقادیر داخل داده‌های شمارشی را بگیرد: cars:= Pride; cars:= PK;

صفحه 390:
۱ 1۵79 ۵6 = (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. 1-3 j=5 : خروجی

صفحه 391:
متغیر داده شمارشی شبیه مجموعه‌ها حداکثر دارای ۲۵۹ عضو می‌تواند باشد که از صفر تا ۲۵۵ شماره گذاری می‌شود و لذا یک بایت حافظه را اشغال می‌کند.

صفحه 392:
و به عنوان آرگومانهای روالها و یا خروجی توابع می‌تواند درنظر گرفته شود ولی حتماً باید در 11106 تعريف شده باشد و مستقيماً نمى توأن بكار برد. اين عمل مشابه مجموعه‌ها و آرایه‌ها نیز می‌باشند. لذا ابتدا در 13706 تعریف می‌شود. سپس به عنوان ورودی و یا خروجی روالها استفاده می‌شود وگرنه خطای کامپایلری پیش خواهد آمد. همچنین می‌توان در آرایه‌ها از داده‌ها شمارشی استفاده کرد.

صفحه 393:
rogram test: ‏را حساب کند.‎ ype days_type = 1t,sun,mon,tue,wed,thu,fri ) ; ar day: days_type; i: byte; egin Write('Enter your days number: ' ); ReadIn(i); While (i>=0) and (i<=6) do begin Case I Of

صفحه 394:
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; 1 ۱ 1۲62 019 )01(*

صفحه 395:
‎٠‏ تمرینات ‎A=[1,3,5,7] ,‏ , [8-12,4,6 و [1,2,3]-0) باشد عبارات زير ر فى کنید. ‏الف- (00- 8) + لكر ب ‎A + (B*C)‏ ج- ‎A+B+C‏ ‎inA2 =

صفحه 396:
"برنامه‌ای بنویسید تا مجموعه ای از کاراکترهای کوچک را گرفته و به یک مجموعه از کاراکترهای حروف بزرگ متناظر با آن تبدیل کند. به کمک داده‌های شمارشی. برنامه ای بنویسید که نام دانشجویان يك كلاس را در برگیرد و هر دانشجو نیز یک شماره داشته باشد. سپس با دریافت نام او شماره او در نمایشگر چاپ شود.

صفحه 397:
فصل 13 ِ وكورهها (00105ع18) هدفهاي كلي * مفهوم ركورد و اجزاى آن * انواع ركوردها و استفاده از آن در برنامه * معرفى مزاياى ركوردها در برنامه

صفحه 398:
:دانشجو يس از مطالعه اين فصل بايد بتواند "" مواقع لزوم ركورد را تشخيص دهد. 8 از رکوردها در برنامه‌اش استفاده کند. ‎a‏ برنامه‌های بزرگ و با داده‌های زیاد بنویسد.

صفحه 399:
نوع داده ساخت یافته‌ای که در اینجا مطرح می‌شود. ر کورد نام دارد که حهت نگهداری داده‌های مختلف نظیر نام. نام خانوادگی. سن و آدرس برای یک دانشجو بكار می‌رود. رکوردها برخلاف آرایه‌ها که دارای عناصر از یک جنس و نوع هستند. دارای عناصر از انواع مختلف می‌باشند. اطلاعات از نوع مختلف را نمی‌توان در آرایه نگهداری کرد چرا که دارای جنس مشابه نیستند و لذا از ساختاری به نام رکورد استفاده می‌شود.

صفحه 400:
ب ب ب <ج ب ب << 1۳11[ ** تعریف ركوردها نوع داده ساختيافته اى كه از يك سرى داده ها يا اطلاعات مرتبط به هم +تشکیل می شود . هر کدام از اطلاعات را یک فیلد می نامند بطور کلی تعریف نوع رکورد در زیر آمده است: ‎ype‏ ‎Name = Record‏ ‎Field1-list : type1;‏ ‎Field2-list : type2;‏ Fieldn-list : typen; End;

صفحه 401:
Type Student = Record Name: String [10]; Family: String [15]; Age: integer; Address: String; End; در اين تعريف ‎Student‏ 3 ¢ 18600۲0 است. حال می‌توان در 1 برنامه تعریف کرد: ‎Var‏ ‎S: Student;‏

صفحه 402:
براي دسترسي به فيلدهاي رکورد ازعلامت *." استفاده مي‌شود. يعني بصورت زیر: نام فیلد . نام متغیر رکورد مثال: برنامه‌ای بنویسید که رکوردی از نو اعداد ایجاد کرده و مقادیر آنرا مقدارهی کند.

صفحه 403:
end; Var Num = Numbers; begin Num. a Num. b: Num. x Num. y: Num. z Write (Num.a 1 Num.b + Num.x + Num.y + Num.z); End.

صفحه 404:
Type Student = record Id: integer; Name: string[10]; Family: string[15]; Sex: char; Age: integer; End; Var Stu: student;

صفحه 405:
Stu.sge: =18; Case sex of 'M': write('Mr.'); 'F': write('Mrs.'); end; write(stu.name, '' stu.family); End.

صفحه 406:
برای بدست آوردن فضای اشغال شده توسط رکورد ابتدا باید فضای اشغال شده توسط تمامی‌فیلدها را بدست آورده و سپس باهم جمع کنیم. مثال زیر را درنظر بگیرید:

صفحه 407:
A, B: Real; = yer C, D: String [10]; 3 ett F: Array [1... 10] of Boolean; 3 Yee G: list1; 3 ۷*۵ x: Rectype; ۱۰+۱۰+۱۱+۱۲-۳ بایت فضا اشغال می‌شود. ir

صفحه 408:
EEE EEE F399 Go 495, * فیلدهای یک رکورد می‌توانند از هر نوعی باشد. از جمله می‌توانند از نوع رکورد دیگری باشند. در اینجا نیز مشابه قبل دسترسی به همان صورت می‌باشد فقط به تعذاد رکوردهای تودرتو؛ ۱ پیش می‌آید ‎Type‏ ‏به مثال زیرتوجه کنید: Rec = recor a, b: nteger; c: char; x: Record p: integer; q: integer; ا 5

صفحه 409:
0 Rec; ‏دراینجا یک رکورد تودرتو به نام 1*00 تعریف شده است که متغیر ۲ از آن‎ ‏نوع تعريف شده است. سپس برای دسترسی به فیلدهای 6, 0 , 2 می‌توان‎ به صورت زير عمل کرد: ‎ra‏ ‎r.b‏ ‏ولی برای دسترسی به فیلدهای ]6, 0 چون متعلق به رکورد > نیز هستند داریم: 9 1.

صفحه 410:
:ی ‎٠‏ آرايه‌اي از رکوردها هنكامى كه ما تعدادى داده مشابه داريم ولى در هريك. دادههاى مختلفى وجود دارد می‌توانیم یک رکورد تعریف کرده. سيس آرايهاى از آن تعريف كنيم. ‎e‏ ‎student = record‏ ‎Name: string[10];‏ ‎Id: integer;‏ ‎Age: integer;‏ ‎End;‏ ‎Arr_stu: array[1..10] of student;‏ 5: Arr_stu;

صفحه 411:
5 ارايه 5 از نوع آن تعریف شده است. مشابه ساختار آرایه چیزی عوض نشده است و فقط هر عنصر آرایه یک رکورد می‌باشد که دارای سه فیلد مطابق جدول فوق می‌باشد. و ترس ی رب من S[1].age S[2].name S[2].id

صفحه 412:
ب ب ب <ج ب ب << 1۳11[ ارسال ر کورد به زیربرنامه‌ها ید زا نیت ومع ور ار هت ال از ری پارامترهای بتغیر و مقدار به زیربرنامه ارسال کرد. ولی نوع برگشتی ‎fi‏ نمىتوانة ا ز نوع رکورد باشد. یعنی حتماً باید از نوع ساده نظیر 01 .1۳6061 و... اشد و از انواع ترکیبی نظیر رکورد. آرایه. مجموعه و فایل نمی‌تواند باشد. اگر بخواهيم رکوردی را بصورت پارامتر به زیربرنامه ارسال كنيم, ابتدا بايد آنرا در 706 تعریف کرده و سپس ارسال شود وگرنه کامپایلر خطا صادر می‌کند.

صفحه 413:
Type Stu-rec = Record Name: string [10]; ID: integer; Age: record Day: integer; Month: integer; Year: integer; End; End; Stu_arr=array[1..no] of ‏سک‎ و

صفحه 414:
Stu: stu_rec; Procedure ReadStu(Var S: Stu_rec); Var i: integer; Begin for i:= 1 to no do ReadIn(S[i].name, S[i].id, S[i].age.day, S[i].age.month, S[i].age.year); End;

صفحه 415:
War 1 ۳ 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:
EE EEE ۳-۳ " "" " ‏تمرینات‎ "برای گونه‌های حیوانات یک پارک نظیر پرندگان وحشی رکوردی شامل نام. دسته. محیط زندگی, سن بسازید. در نظر بگیرید که در پارک ۱۰۰ گونه از یک پرنده وحشی وجود دارد (راهنمایی: آرایه‌ای از رکورد با فیلدهای گفته شده بسازید). * برنامه‌ای بنویسید که برای نگهداری تاریخ به صورت روز. ماه و سال براى ‎٠٠١‏ سال بكار رود. در واقع به صورت تقویم باشد و جمله‌ای در مورد آن تاریخ را نگهداری کنید؟ (راهنمایی: آریه‌ای ۳۹۱ تابی از روز بهمراه آرایه‌ای از ۱۲ ماه و یک سال و یک رشته را به صورت یک رکورد در نظر گرفته سپس برای ۱۰۰ سال بصورت یک آرایه صدتایی در نظر بگیرید.)

صفحه 417:
١ ْ 14 ‏فصل‎ ‎(Files) Gut ‏هدفهاي كلي‎ * مفهوم فايل و انواع آن * موارد استفاده از فايلها

صفحه 418:
:دانشجو يس از مطالعه اين فصل بايد بتواند #" در برنامهداش از فايلها استفاده كند.. "" براى برنامههاى با دادههاى زياد از فايل استفاده كند.. * با فایلهای داده‌ای و بایزی برنامه‌نویسی کند.

صفحه 419:
برای ذخیره دائمی داده‌ها از ساختاری به نام فایل ‎ile)‏ استفاده مى كنيم. تاکنون همه عملیات لازم در حافظه اصلی انجام می‌گرفت که گذرا و فقط به زمان اجرای برنامه و روشن بودن کامپیوتر بستگی داشت. ولی در فایلها چنین نیست. بلکه داده‌ها در فایلهایی قرار دارند که حتی بعد از خاموش کردن کامپیوتن بعدها قابل دسترسی است.

صفحه 420:
EEE EEE << << "> (Text) io sb * یک فایل متتی از تعداد کاراکتر تشکیل شده است که با یک اسم در روی دیسک ذخیره شده است. چون فایل از نوع متنی است می‌توانید داده‌های داخل آنرا مشاهده کنید. ساختار داده‌ها در یک فایل متنی بدین صورت است که تعدادی خط وجود دارد كه به علامت 801-17 ختم مىشوند و در انتهاى فايل نيز علامت "18001 قرار دارد. طول خطوط نامشخص است و اندازه فايل ممكن است بسيار بزرك يا كوجك و يا تهى باشد.

صفحه 421:
تعویف يك متغير فايلى ‎١١‏ ‏نسبت دادن اسم فايل به متغیر فایلی ۲۰ 6۷30 ایجاد فایل با دستور .۳

صفحه 422:
Name : Text; نسبت دادن اسم فایل به متغیر فایلی ‎Assign(FileVar ,‏ ‎‘NameFile’ )‏ © ایجاد فاپل با دستور ‎Rewrite( FileVar ‎)

صفحه 423:
۰ ‏مجموع آنها را بنویسد.‎ : 4; Array [ 1.. 10] of integer; Sum, i: integer; gin Sum: = 0;Writeln (' Enter 10 numbers: For i: = 1 to 10 do begin Read (A [i]); Sum: = sum + Afi]; end; Assign (f, 'out.dat'); 37 ‏تا کرت ی ی‎ LEK.

صفحه 424:
Writeln (f, A[il); Writeln (f, Sum); Close (f); End. بعد از نوشته شدن اطلاعات در فایل . فایل باید بسته شود برای اینکار از : روال زیر استفاده می شود Close(FileName)

صفحه 425:
تعییف یک متفیر فایلی ۱۰ نسبت دادن اسم فایل به متفیر فایلی .۲ باز کردن فایل برای خواندن با ۳۰ 1 سستور

صفحه 426:
ستور 13680 و 1362011۳ برای خواندن اطلاعات از فایل بکار می روند . 7 بعد از خولندن‌دادههای‌مورد نسظر بسه سطر بسعد میرود. لین‌عمل ای ۷۷۳366180 نیز چنین می‌باشد. ولی قبل از استفاده از اين دستورات بايد ایل متنی برای خواندن یا نوشتن باز شود. دستور 36596 فایل متنی را برای خواندن باز می‌کند و مکان نما را ابتدای فایل می‌برد. ستور 161۷1116 فایل متنی را برای نوشتن در آن باز کرده. و مکان نما را به شدای آن می برد.

صفحه 427:
f: Text; str1, str2: string; a, b, c, d, e: integer; gin Assign (f, ' Test. dat '); Reset (f); ReadlIn (f, str1); Readln (f, a, b, c); Readln (f, d, e, str2); Write (str2, ':', a+ b+ c+ d+ e); Close (f);

صفحه 428:
11 0 ‏كبى از فايل درخروجى بسازده.‎ f1,f2: Text; str1,str2 : string ; ch: char ; agin write(‘Enter Input file: '); readIn(str1); write(‘Enter output (copy) file: readIn(str2); assign(f1,strl); reset(f1); assign(f2,str2); rewrite(f2);

صفحه 429:
در اين برنامه ابتدا دو فایل به نامهایشان نسبت داده می‌شوند و ترتیب برای خواندن و نوشتن باز می‌شوند. سپس توسط 60 شرط خاتمه فایل ورودی یعنی 81 بررسی می‌شوند و در یک حلقه تو در تو ۷۷10116 شرط خاتمه خطوط نیز توسط 60139 بررسی شده و کاراکترها از فایل ورودی خوانده شده و در فایل خروجی نوشته می‌شوند.

صفحه 430:
begin while not eoln(f1 ) do begin read(f1,ch); write(f2,ch); end; readIn(f1); writeln(f2); end; Close(f1); Close(£2); End.

صفحه 431:
EE EE EEE EE ‏موممئي‎ ‎(Binary & Typed) ,to€53 9 ‏فايلهاي دودوبي‎ ** ن نوع فایل‌ها در زبان پاسکال از تایبهای مختلف 3729, 1600۲0 تقل 122161©1, 1620 و ... تشكيل شده است كه نياز به يردازش متنوء بيه مرتبسازى. جستجو. حذف وء.. دارند. اين فايلها يس از ايجاد توسط رنامه. قابل رؤيت توسط ويراشكرها نيستند. بلكه به صورت كدهاى اسكى ى باشند يعنى دودويى مىباشند. نحوه دسترسى به اطلاعات آنها نيز به سورت تصادفى (18212010332) است.

صفحه 432:
تعویف يك متغير فايلى ‎١١‏ ‏نسبت دادن اسم فايل به متغیر فایلی ۲۰ 6۷30 ایجاد فایل با دستور .۳

صفحه 433:
Name: File Of FileType ; نسبت دادن اسم فایل به متفیر فایلی ‎Assign(FileVar ,‏ ‎‘NamefFile’ )‏ © ایجاد فاپل با دستور ‎Rewrite( 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 دودویی از نوع صحيح ‎;Bf2: file of integer‏ دودویی از نوع رکورد دانشجو ‎;Bf3: file of student‏ فایل دودویی از نوع کاراکتر ‎;Bf1: file of char‏ 2 Bf6: file of set of 'A'..'Z 6 Ass yom 5! (25252,

صفحه 436:
Bf: file of strin[10]; Str: string [10]; i: integer; Begin Assign (Bf,'out.dat'); Rewrite (Bf); For i:=1 ton do Begin Readln (str); Write (Bf,str); End; Close (Bf); + oo

صفحه 437:
در جدول صفحه بعد تمام روالهای کتابخانه‌ای پاسکال جهت کار با فایلها آورده شده است که به همراه توضیحات لازمه جهت کار با آنها می‌باشد. همچنین برای هر تابع و رویه محل مورد استفاده آن در ستونی مشخص شده است .

صفحه 438:

صفحه 439:
انتقال وحرکت مکان‌نمادر فابل [| ‏شماره رکورد از انتهاي فايل‎ | Filefos ‏داد ردهاي فایل جاري:‎ | ‏نت‎ ae ‏تعدا‎

صفحه 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 53 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:
Const r— 0: Type Booktype = Record name: string[20]; ID: integer; end; Var Bf: file of Booktype; LID: integer; name: string[20]; Book: Book type;

صفحه 443:
Rewrite 5 For I:=1 to n do begin Write (‘Enter the name & ID of book: Readin (name, ID); Book.name:= name; Book.ID:= ID; Write (Bf, Book); End; Close (Bf); End.

صفحه 444:
پگ « 5 ‎Ww‏ تمرینات *برنامه‌ای بنویسید که از یک فایل متنی از اعداد حقیقی که در سطرها و ستونها مختلف قرار دارند. میانگین داده‌ها را بدست آورده و در مانیتور چاپ کند. *برنامه‌ای بنويسيد كه در انتهای یک فایل متنی. همان فایل متنی را اضافه کند. " برنامهاى بنويسيد که در یک فایل نوع دار از کاراکترهاء اطلاعات آماری هر کاراکتر را بدست آورده. یعنی تعداد هر کاراکتر را بدست آورد. مثلاً کاراکتر 8 به تعداد 40 تا و کاراکتر "13" به تعداد ۳۹ تا و...

صفحه 445:
هدفهاي كلي res ‏تعریف‎ ‏یک الگوریتم‎ aus a ‏الگوریتم‎ ae : rr ‏ج‎ | 1

صفحه 446:
:دانشجو پس از مطالعه این فصل باید بتواند "" پرنامه خود را تحلیل زمانی نماید. * مرتبه الگوریتم را بدست آورد. * الگوریتمهای بازگشتی را تحلیل نماید.

صفحه 447:
تحلیل یک الگوریتم یعنی ارزیابی روشهای مختلف حل آن مسئله. بررسی و محاسبه بهترین و بدترین حالتهاء بصورتی که با توجه به شرایط بهترین حالت را بتوان انتخاب کرد. الگوریتم در واقع تعداد محدودی از دستورالعملها می باشد که بترتیب اجرا می‌شوند و هدف خاصی را دنبال می‌کنند

صفحه 448:
** تعریف مرتبه یا پيچيدگي الگوریتم ( 0 بزرگ) براي بدست آوردن بدترین حالت اجراي يك الگوریتم با مرتیه پیچیدکن الگوزیتم از 0 بزرگ استفاده مي‌کنيم و بنا به تعریف عبارتست از ((00(<0))0؟ و ‎no‏ خوانیم ()] از مرتبه 620 مي‌باشد, اگر و تنها ‎Ac> 0, Vn > n0= f(x)<cg(x)

صفحه 449:
n>=3 <= cg(n)=In+2A(n) لذا می‌توان گفت. پیچیدگی زمانی (610] از مرتبه ‎O(n)‏ می‌باشد.

صفحه 450:
‎EEE EEE << << ">‏ * بدست آوردن مرتبه الکوریتمها برای بدست آوردن مرتبه اجرای الگوریتمها باید به دقت بررسی شود و تعداد تکرار آن الگوریتم بدست آورده شود. یعنی در واقع تعداد تکرارها بدست آورده شود و سپس با هم جمع شده و مطابق مثالهای قبلی به پیچیدگی زمان واقعی رسید. برای این منظور از الگوریتمهای ساده شروع کرده و به پیچیده ‏می‌رسیم.

صفحه 451:
x:= 0; For I:=1 ton do :=x+1; که در آن « تعداد ورودی می‌باشد. یعنی حلقه 601 بستگی به پارامتر 9 دارد. همان طور که از تعریف حلقه 50۲ برمی‌آید تعداد 11-۱+۱ تکرار یعنی 1 تسکرار یجود دارد و لنا قطعه برنامه فوقاز مرتبه(6()10 مریاشد

صفحه 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:
تابع فوق فاکتوریل عدد « را بر می‌گرداند. همانطور که می‌بینید تابع شامل یک حلقه 701 ساده بوده که از یک تا 9 متغیر بوده و لذا ‏ بار تکرار می‌شود ۲ جمله ساده نیز وجود دارد که زمان های ثابتی دارند ین مرتبه تابع بالا برابر است با 0)

صفحه 454:
۲ پیچیدگی زمانی توابع زیر را بدست آورید: چپ 1. £1(n) =n+ 2n? +100 2. £2(n) =n? + n°" ++ 2 3. £3) =2" + 5" + logn!+n” 4. £4(n) =logn+ Jn +1 5. £5(n) =n? logn + n!°™ + (logn)!

صفحه 455:
Function test(n : integer): teger ; 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; pad

صفحه 456:
sf

فصل 1 ا لگوریتم ها Algorithm هدفهاي كلي: شناخت حل مسئله و ارائه الگوریتم شناخت اجزاء الزم برای حل مسئله بررسی صحت الگوریتم هدفهاي رفتاري :دانشجو پس از مطالعه اين فصل بايد بتواند الگوریتمی را برای حل مسئله ارائه دهد. الگوریتم های مختلف برای یک مسئله را مقایسه کند. شرط ها و حلقه ها را در الگوریتم بکار ببرد . مقدمه در زندگي روزمره ،انسان با مسائل مختلفي روبروست و= براي هر كدام از اين مسائل (حل مشكالت) راه حلي و روشي را بر مي‌گزيند .مسائلی از قبيل راه رفتن ،غذا خوردن ،خوابيدن و= غيره كه بشر تقريب ًا هر روز آنها را پيش روي خود دارد. همه اين مسائل نياز به روشي براي حل كردن دارند مثال راه رفتن بايد با ترتيب خاصي و مراحل معيني انجام شود .تا مسئله راه رفتن براي بشر حل شود .اصطالح ًا روش انجام كار يا حل مسئله را الگوريتم آن مسئله مي‌نامند تعريف الگوريتم ميباشد كه شرايط زير الگوريتم مجموعه‌اي از دستورالعمل ها ،براي حل مسئله ‌ را بايد دارا باشد: • دقيق باشد • جزئيات كامل حل مسئله را داشته باشد. • پايانپذير باشد. ‌ مراحل الگوريتم براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم) كه اصطالح ًا طراحي الگوريتم براي آن مسئله ناميده مي‌شود .در طراحي الگوريتم معمو ً ال سه مرحله زير را از هم جدا مي‌كنند: • خواندن داده‌ها • انجام محاسبات • خروجي‌ها مثال :الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع دو عدد را محاسبه و چاپ نمايد. انجام محاسبات جمع دو عدد خروجي‌ها مجموع دو عدد .1 .2 .3 .4 .5 وروديها ‏a,b شروع ‏Lن b ,aرا بLLخوا . مجموع b , aرا محاسبه و در sumقرار بده. sumرا در خLروLجLيچLاپكLLن پايان مثال :الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين .سه عدد را محاسبه و چاپ كند ‏c خروجي‌ها چاپ مجموع چاپ ميانگين انجام محاسبات محاسبه مجموع محاسبه ميانگين وروديها ‏a ‏b .1شروع .2سه عدد از ورودي بخوان .3مجموع سه عدد را محاسبه و در Sumقرار بده. Sum.4را بLLر سLه تLLقسيمكLLردLه،Lدر AveقLرار بLLده.L ‏Lن Ave , Sum.5را در خLروLجLيچLاپك. L .6پايان. معموال درك يك الگوريتم با شكل راحتر از نوشتن آن بصورت متن مي‌باشد .لذا الگوريتم را با فلوچارت()flowchartنمايش مي‌دهند .فلوچارت از شكل‌هاي زير تشكيل مي‌شود. عالمت‌هاي شروع و پايان :كه مع=موال از يك بيضي استفاده مي‌كنند: خاتمه ‏End ‏Begin شروع عالمتهاي ورودي و خروجي :كه معموال از متوازي‌االضالع استفاده مي‌شود: چاپ کردن write خو=اندن ‏Read عالمتهاي محاسباتي و جايگزيني :براي نمايش دستورات جايگزيني و محاسباتي از مستطيل استفاده مي‌كنند: جایگزین یا محاسبات • عالمت شرط :براي نمايش شرط از لوزي استفاده مي‌شود. جهتدار استفاده مي‌كنند. ‌ شكلهاي مختلف بهم از فلش‌هاي ‌ • عالمت اتصال :براي اتصال • فلوچارت مجموع سه عدد Begin Read(a,b,c) Sum a+b+c Ave sum/3 Write(sum,ave) End مثال :فلوچارتی رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس محتويات دو عدد را با هم جابجا‌نمايد. براي حل اين مسئله b , aرا دو متغير كه در آنها دو عدد خوانده شده ،قرار مي‌گيرند در نظر مي‌گيريم .سپس با استفاده از يك متغير كمكي محتويات اين دو عدد را جابجا مي‌كنيم : a 12 temp temp b a b 15 12 15 12 temp a b a b 15 15 15 12 12 12 temp temp فلوچارت مسئله باال بصورت زير خواهد بود: Begin Read(a,b) temp a a b b temp Write(a,b) End تمرين 1ـ فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت كرده محيط و مساحت آنرا محاسبه و چاپ كند. 2ـ فلوچارتي رسم نمائيد كه شعاع دايره‌اي را از ورودي دريافت كرده، محيط و مساحت آنرا محاسبه و چاپ نمايد. فلوچارتي رسم كنيد كه سه عدد Third , second, firstرا از ور يافت كرده ،محتويات آنها را جابجا نموده ،حاصل را در خروجي پ كند. 4ـ فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده ،سپس محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند. 5ـ فلوچارتي رسم نمائيد كه عددي (درجه حرارت برحسب سانتيگراد) را از ورودي دريافت كرده سپس آنرا به درجه فارنهايت تبديل كند.  دستورالعملهاي شرطي ‌ در حل بسياري از مسائل يا تقريب ًا تمام مسائل نياز به استفاده از شروط جزء ،نيازهاي اساسي محسوب مي‌شود .همانطور كه ما خودمان در زندگي روزمره با اين شرط‌ها سركار داريم= .بط=ور مثال اگر هوا ابري باشد ممكن است چنين سخن بگوييم: • اگر هوا باراني باشد سپس چتري برمي‌دارم. در غير اينصورت چتر برنمي‌دارم. در حالت كلي شرط را بصورت زير نمايش مي‌دهند: ‏yes عمل يا اعمال ش=رط ی==ا ش=رو=ط If ‏then ‏NO عمل يا اعمال بعدي مثال :فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده ،فرد يا زوج بودن آن را تشخيص دهد. ‏Begin )Read(a ‏R ‏a mod 2 ‏yes )’Write(‘even ‏if R=0 then ‏No )’Write(‘odd ‏End مثال :فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد را پيدا كرده در خروجي چاپ نمايد. ‏Begin )Read(a,b ‏a ‏b ‏max ‏yes ‏max ‏if b>max ‏No )Write(max ‏End Begin مثال :فلوچارتي رسم نمائيد كه سه عدد از ورودي دريافت كرده ،كوچكترين عدد را يافته در خروجي چاپ نمايد: )Read(a,b,c ‏a ‏b ‏max ‏yes ‏min ‏yes ‏min ‏if b<min then ‏No ‏c ‏if c<min then ‏No )Write(min ‏End نمونه اجراي فلوچارت باال بصورت زير مي‌باشد: ‏c ‏Min خروج 11 12 12 11 11 11 11 ‏b 17 ‏a 1 2 3 4 5 تمرين -1فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده ،قدر مطلق عدد را در خروجي چاپ كند. -2فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت ،منفي يا صفر بودن عدد را تشخيص داده ،در خروجي با پيغام مناسب چاپ كند. -3فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده ،بخشپذيري آن بر 3و 5را بررسي نمايد. 4ـ فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي دريافت كرده ،ريشه‌هاي آن را محاسبه در خروجي چاپ كند.  حلقهها ‌ در حل بسياري از مسائل با عملياتي روبرو مي‌شويم ،كه نياز به تكرار دارند و عمل تكرار آنها به تعداد مشخصي انجام مي‌گيرد .فرض كنيد، بخواهيم ميانگين 100عدد را محاسبه كنيم ،در اينصورت منطقي بنظر نميرسد كه 100متغير مختلف را از ورودي دريافت كنيم سپس آنها را ‌ جمع كنيم. • انواع حلقه ها • حلقه های با تکرار مشخص • حلقه های با تکرار نا مشخص • حلقه های با تکرار مشخص در اين نوع حلقه‌ها تعداد تكرار مشخص مي‌باشد اين حلقه از اجزاء زير تشكيل مي‌شود: 1ـ انديس حلقه 2ـ مقدار اوليه براي انديس حلقه -3مقدار افزاينده براي انديس حلقه (معموال يك واحد در هر مرحله) 4ـ مقدار نهايي (تعداد تكرا حلقه) 5ـ شرطي براي كنترل تعداد تكرار حلقه اين حلقه‌ها را غالب ًا با فلوچارت بصورت زير نمايش مي‌دهند: 1 ‏No اتمام كار حلقه ‏i ‏if i<=n ‏yes مجموعه دستورات حلقه ‏i+1 ‏i مثال :فلوچارتي رسم نمائيد كه عدد nرا از ورودي دريافت كرده، مجموع اعداد از يك تا nرا محاسبه كند. ‏n م قدار ن هايي ‏i انديسحلقه Begi n Read(n) I sum 1 0 if I<=n No Write(sum) yes حلقه End sum I sum+I I+1 نمونه اجراي فلوچارت باال بصورت زير است: ‏I ‏sum خروجي 15 5 1 2 3 4 5 6 ‏N 0 1 3 6 10 15 1 2 3 4 5 6 7 مثال :فلوچارتي رسم كنيد كه nعدد از ورودي دريافت كرده، بزرگترين مقدار از بين nعدد را پيدا كر=ده در خروجي چاپ نمايد. انديس حلقه مقدار نهايي بزرگترين مقدار ‏Max ‏i ‏n Begin Read(n) I max 2 a No if i<=n then write(max) yes End Read(a) حلقه yes if a > max No i i+1 max a مثال :فلوچارتي رسم نمائيد كه ، n , xدو عدد صحيح مثبت را از ورودي دريافت كرده سپس xبه توان nرا محاسبه كند. • انديس حلقه ‏n • مقدار نهايي • عدد به توان pown ‏i Begin Read(n,x) i pow 1 1 if i<=n then No write(pow) yes حلقه pow i pow*x i+1 End  حلقههايي كه تعداد تكرار آنها مشخص نيست ‌ (در پاسكال به حلقه whileمشهورند). در اين حلقه‌ها با توجه به ورودي ،تعداد تكرار مشخص مي‌شود .و دقيق ًا نمي‌توان تعداد تكرار حلقه را بدون ورودي معين كرد .اين حلقه ها فقط شامل شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا مي‌شود. ميشوند: در حالت كلي اين نوع حلقه‌ها بصورت زير نمايش داده ‌ ‏No شLرط يLا شLروLط If ‏yes محموعه دستورالعملها و جاگزينها مثال :فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد. • عدد خوانده شده • تعداد ارقام ‏N ‏count Begin count 0 Read(N) if N>0 then No write(count) yes N N div 10 حلقه count count+1 End مثال :فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،سري فيبوناچي قبل از آنرا توليد نمايد. در حالت كلي جمالت سري بصورت: ‏fk=fk-1+fk-2 عدد خوانده شده ‏N جمله اول سري ‏f1 جمله دوم سري ‏f2 جمله سوم سري ‏f3 Begin F1 f2 0 1 Read(N) f3 f1+f2 if f3>N then yes write(f3) حلقه f1 f2 f3 f2 f3 f1+f2 No End تمرين -1فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،كامل بودن مقسومعليه‌هاي ‌ آنرا بررسي نمايد( .عدد كامل ،عددي است كه مجموع آن با خودش برابر باشد). -2فلوچارتي رسم كنيد كه Nرا از ورودي دريافت كرده N ،جمله سري فيبوناچي را توليد نماید. 3ـ فلوچارتي رسم نمائيد كه دو عدد N , Mرا از ورودي خوانده، بزرگترين مقسوم‌عليه مشترك دو عدد را محاسبه و چاپ كند.  حلقههاي تودرتو ‌ الگوريتم‌هايي كه تا حال بكار برديم ،فقط شامل يك حلقه بودند. در صورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چند حلقه در داخل هم باشيم .در اين نوع حلقه‌ها بايد دقت بيشتري به خرج دهيم ،تا مشكلي پيش نيايد .اگر از حلقه‌هاي نوع اول بصورت تودرتو استفاده كنيم در اينصورت براي هر حلقه شرط نهايي و انديس اوليه جداگانه بايد تعريف كنيم . در حلقه‌هاي تودرتو به ازاي يكبار تكرار حلقه اوليه ،حلقه داخلي به اندازه مقدار نهايي خود تكرار مي‌شود .در كل اگر حلقه اوليه nبار تكرار شود و حلقه داخلي mبار ،در اينصورت كل حلقه : بار تكرار خواهد شد. ‏nm فلوچارت حلقه‌هاي تودرتو را مي‌توان بصورت زير نشان داد: 1 ‏i . . . ‏A اتمام كار حلقه هاي تو در تو ‏No ‏if i<=n then ‏yes 1 مجموعه دستورات و جايگزيني Lها ‏No ‏j ‏if j<=m then ‏yes ‏i ‏i+1 ‏A مجموعه دستورات و جايگزيني Lها ‏j+1 ‏j حلقه مثال :فلوچارتي رسم نمائيد كه Nرا از ورودي دريافت كرده ،مجموع سري زير را محاسبه نمايد: ‏N !N ‏ .... 3 !3 • انديس حلقه اول • ورودي N • محاسبه فاكتوريل fact • انديس حلقه داخلي j • مجموع Sum ‏ ‏I ‌ 2 !2 ‏S 1 i sum 2 1 Read(N) A No if i<=N Write(sum) yes End fact j 1 2 if j<=i No sum sum+i/fact yes fact j fact*j j+1 i i+1 A تمرينات آخر فصل -1فلوچارتي رسم نمائيد كه Nعدد از ورودي دريافت كرده تعداد اعداد اول و كامل را شمرده در خروجي چاپ نمايد. -2فلوچارتي رسم نمائيد كه N , Xرا از ورودي خوانده مقدار سري زير را محاسبه كند: ‏xn !N ‏ .... ‏x4 !4 ‏ ‏x2 !2 ‏S 1 -3فلوچارتي رسم نمائيد كه عددی را از ورودي دريافت كرده مقلوب عدد را محاسبه و در خر=وجي چاپ كند. 4ـ فلوچارتي رسم كنيد كه تاريخ تولد شخصي را از ورودي خوانده، سن شخص را با تاريخ روز ،محاسبه نموده در خروجي چاپ كند. -5فلوچارتي رسم نمائيد كه ( N ,M )m>nرا از ورودي دريافت كرده سري فيبوناچي بين N ,Mرا توليد كرده ،در خروجي چاپ كند فصل 2 كاربرد آرايه ها در الگوريتم ها هدفهاي كلي شناخت آرایه ها و مفهوم آن شناخت الگوریتم های الزم برای جستجو و مرتب سازی مقایسه انواع روش های جستجو با هم هدفهاي رفتاري :دانشجو پس از مطالعه اين فصل بايد بتواند ‏ از آرایه ها در حل مسئله استفاده کند . ‏ با استفاده از آرایه ها لیستی را مرتب نماید . ‏ در صورت لزوم در لیستی جستجو انجام دهد . مقدمه فرض كنيد بخواهيم اطالعات 100كارمند را از ورودي بخوانيم و سپس آنها را مرتب كنيم ،در اينصورت بايد وروديها را در جايي از حافظه ذخيره كنيم .در زبانهاي برنامه‌نويسي معموال از آرايه براي ذخيره اطالعات در حافظه استفاده مي‌كنند .در آرايه‌ها ما با توجه به تعداد وروديها ،طول آن را مشخص مي‌كنيم .سپس داده‌ها را خوانده در آن قرار مي‌دهيم=. تعريف آرايه خانههاي پشت سر هم از حافظه ،كه همنوع بوده و توسط يك اسم معرفي ‌ ميشوند ،آرايه نام دارد. ‌ نحوه دسترسي به هر يك از اعضاء آرايه ،از طريق انديس آرايه امكانپذير است .براي تعريف آرايه ابتدا طول آرايه كه در حقيقت تعداد خانه‌هاي آن را مشخص مي‌كند ،معين مي‌كنيم .سپس نوع خانه‌ها بايد معين شوند. در فلوچارت‌ها آرايه‌ها را بصورت زير نمايش مي‌دهيم: ] Name[ 1 .. Length طول آرايه اسم آرايه براي خواندن يك آرايه از ورودي از حلقه‌ها استفاده مي‌كنيم .فلوچارت خواندن آرايه از ورودي بصورت زير مي‌باشد: ]a[1..100 1 ‏No ‏i ‏if i<=100 ‏yes )]Read(a[i ‏i+1 ‏i با توجه به فلوچارت باال براي دسترسي به عنصر iام آرايه در حالت كلي بصورت : ] [ index ‏Nam انديس آرايه اسم آرايه عمل مي‌كنند. مثال :فلوچارتي رسم كنيد كه يك آرايه حداكثر 100عنصري را از ورودي دريافت كرده ،سپس آن را خروجي نمايش دهد. Begin a[1..100] i 1 Read(N) if i<=N No i 1 yes if i<=N Read(a[i]) yes i i+1 write(a[i]) i i+1 No End مثال :فلوچارتي رسم= كنيد كه عددي را از ورودي دريافت كرده آن را به مبناي 2ببرد. ‏i ‏i-1 ‏No ]a[1..20 ‏i 1 )Read(N ‏if N>0 ‏yes ‏End ‏No ‏N mod 2 ‏i+1 ‏if i >0 ]a[i ‏i ‏yes )]write(a[i ‏i-1 ‏i ‏N div 2 ‏N مثال :فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده سپس اعداد اول قبل از آن را توليد نموده ،در يك آرايه قرار دهد. ]a[1..100 ‏i 1 )Read(N 3 2 1 ‏k ]a[1 ]a[2 A if i<=N No i yes j k End yes 2 0 write(a[i]) i if j<=i div 2 No if k=0 yes No i i+1 yes if I mod j = 0 No j No if i<k 1 j+1 k 1 A i+1 yes a[k] k i k+1 جستجو و مرتب سازي ( ) search and sort يكي از مسائلي كه در بحث طراحي الگوريتم بسيار مهم است ،بحث مرتبسازي و جستجو مي‌باشد .منظور از جستجو اينست كه يك مقداري ‌ را از يك ليست جستجو كنيم و منظور از مرتب‌سازي اينست كه يك ليست مرتب از داده‌ها را توليد كنيم. براي جستجو و مرتب‌سازي الگوريتم‌هاي مختلفي وجود دارد در زير الگوريتمهای اوليه ،براي جستجو و مرتب‌سازي را بررسي مي‌كنيم. ‌ الگوریتم های جستجو ( )search ميروند: دو الگوريتم زير غالب ًا براي جستجو بكار ‌ •جستجوي خطي linear search •جستجوي دودوئی binary search • جستجوي خطي linear search در جستجوي خطي عبارت مورد جستجو را به ترتيب با اولين ،دومين و … عنصرآرايه مقايسه مي‌كنيم اگر عنصر مورد جستجو پيدا شد اندیس آن را نمايش مي‌دهيم. list[1..100] i 1 index 0 falg 0 :فلوچارت جستجوي خطي بصورت زير است i Read(x) 1 No if (i<=N) and (flag=0) write(index) End yes if list[i]=x i i+1 yes index flag i 1 • جستجوي دودوئی binary search در جستجوي دودوئی ،ليست مورد جستجو ،مرتب مي‌باشد .لذا براي جستجو اعمال زير انجام مي‌شود: -1عنصر Xبا عنصر وسط آرايه كه انديس آن برابر (low+high)/2 مقايسه مي‌شود. ‏middle 2ـ اگر xاز عنصر وسط كوچكتر باشد ،عنصر مورد نظر احتما ً ال در قسمت باالی ليست قرار دارد .لذا آرايه با انديس ،جديد در نظر= گرفته ميشود و قسمت پايين ليست از فضاي جستجو حذف مي‌شود. ‌ 3ـ اگر xاز عنصر وسط آرايه بزرگتر باشد قسمت باالي ليست حذف ميشود و فضاي جستجو ،قسمت پايين آرايه خواهد بود. ‌ -4اگر xبرابر عنصر وسط باشد عمل جستجو خاتمه مي‌پذيرد. مرتب سازي () sort مرتبسازي بحث بعدي اين فصل مي‌باشد .براي مرتب كردن داده‌ها نيز ‌ الگوريتمهاي مختلفي وجود دارد ،كه هر كدام مزايا و معايب خاص خود ‌ فصلهاي بعد واگذار مي‌كنيم. ‌ را دارد .بحث مفصل در اين مورد را به تمرين •فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،اعداد كامل قبل از خود را توليد و در يك آرايه قرار دهد. •فلوچارتي رسم نمائيد كه يك آرايه حداكثر 100عنصري از ورودي دريافت كرده ،عناصري از آن كه اول هستند را با صفر كردن حذف نمايد. •فلوچارتي رسم نمائيد كه يك عدد حداكثر 20رقمي را توسط آرايه‌اي از ورودي دريافت نمايد .سپس يك عدد تک رقمي را از ورودي خوانده در عدد 20رقمي ضرب نموده ،حاصل را در خروجي چاپ نمايد. فصل 4 ساختار برنامه در زبان پاسکال هدفهاي كلي شناخت اجزاي تشكيل دهنده يك برنامه شناخت ساختار يك برنامه در زبان پاسكال بررسي دستگاههاي خروجي و دستورات الزم در زبان پاسكال براي توليد خروجي هدفهاي رفتاري :دانشجو پس از مطالعه اين فصل بايد بتواند اجزاء الزم براي نوشتن برنامه در زبان پاسكال را بداند. ‏ يك شناسه صحيح در زبان پاسكال را تعريف كند. ساختار يك برنامه در زبان پاسكال و اعالنهاي مربوط به برنامه را تعريف نمايد. ‏ يك برنامه ساده به زبان پاسكال كه فقط خاصيت خروجي دارد ،بنويسد. اجزاي تشکيل‌دهنده يک برنامه • کلمات ذخيره‌شده ( ) Reserved Words • شناسه‌ها ( ) identifier کلمات ذخيره‌شده ( Reserved ) Words کلمات ذخيره شده ،کلماتي هستند که مترجم زبان آنها را مي‌شناسد و معناي خاصي براي زبان دارند .مترجم زبان به محض مشاهده اين کلمات اعمال خاصي را انجام مي‌دهد .هر زبان داراي تعداد مشخصي کلمات ذخيره شده مي‌باشد و اين تعداد قابل افزايش توسط برنامه‌نويس نيست. ليست کلمات ذخيره شده در پاسکال عبارتند از: and exports mod shr asm file nil string array for not then begin function object to case goto of type concat if or unit constructor implementation packed until destructor in procedure uses div inherited program var do inline record with downto interface repeat while شناسه‌ها ( ) identifier • شناسه در پاسکال براي نامگذاري ثابتها ،تايپها ،پروسيجروها ،توابع، ميدانهاي يک رکورد ،برنامه و همچنين يونيت مورد استفاده قرار مي‌گيرKد. :در حالت کلي دو نوع شناسه وجود دارد id هايا=س=تاندارد :ا=ينن=وع idها از ق=بلدر ز=بانپ==اس=کا=لت==ع=ريفش=ده=‌ا=ند =هها ،م=عنايخ=اص=يدار=ند . و در ب==رنام ‌ id هايغ=يرا=س=تاندارد :ا=ينن=وع idها ب==وس=يله ک=ار=بر ب==طور م=جزا ت==ع=ريف ً م=يش=ود. =طالحا ب==ه آ=ن=ه=ا userdefinedگ==فته ‌ م=يش=وند و ا=ص ‌ ساختار برنامه در زبان پاسکال :اجزاء اصلي يک برنامه به زبان پاسکال بصورت زير مي‌باشد عنوان برنامه قسمت تعاريف برنامه قسمت دستور العملها قسمت تعاريف برنامه Constant Declaration اعالن ثابتها Type Declaration اعالن انواع Declaration Variable اعالن متغيرها Declaration Label اعالن برچسبها • • • • درحالت کلي مي‌توان شکل يک برنامه در زبان پاسکال را بصورت زير بيان کرد: • • • • استفاده از کلمه ذخيره شده Programو اسم برنامه ( که مي‌تواند بکار برده نشود ) قسمت تعاريف شناسه‌ها بلوک اصلي برنامه که با Beginشروع و به Endهمراه نقطه ( ) .ختم مي‌شود. هر دستور در پاسکال به ( ; ) ختم مي‌شود. :نمودارهاي يک برنامه و بلوک بترتيب به صور ت زير مي‌باشد 0 ‏block ; ( شناسه ) شناسه ‏Program , .End ‏Statement ; ‏Begin مثال هاي حل شده Program Print ( output ) ; Begin Writeln ( ' Pascal Language '); Writeln ( ' Hello ' ); End. :خروجي برنامه باال بصورت زير مي‌باشد ‏Pascal Language ‏Hello فصل 5 انواع عملگرها و داده‌ها در زبان پاسکال هدفهاي كلي معرفي انواع عملگرها در زبان پاسكال شناخت انواع داده‌ها بررسي اولويت عملگرها معرفي دستورات جايگزيني در پاسكال هدفهاي رفتاري :دانشجو پس از مطالعه اين فصل بايد بتواند انواع عملگرها در زبان پاسكال را بكار ببرد انواع داده‌ها براي يك برنامه را تعريف كند. اولويت عملگرها در يك عبارت را تشخيص دهد. يك برنامه ساده با عمليات معمولي را بنويسد. عملگرها عملگرها نمادهايي هستند که براي انجام اعمال خاصي مورد استفاده قرار مي‌گيرند.عملگرها براي انجام اعمال خاصي روي عملوندها ( ) Operandsبکار مي‌روند .با توجه به نوع عملگر ممکن است يک يا دو عملوند وجود داشته باشد .عملگرها در زبان پاسکال از تنوع زيادي برخوردارند. در پاسکال چهار دسته عملگر وجود دارند : محاسباتي رابطه اي منطقي بيتي عملگرهاي محاسباتي عملگر رديف مثال نام ‏x+y جمع + ‏x – y , -x تفريق و منهاي يکاني - 3 ‏x*y ضرب * 3 ‏x/y تقسيم / 4 ‏a div b تقسيم ‏div 5 ‏a mod b باقيمانده تقسيم ‏mod 6 1 عملگرهاي رابطه اي مثال نام عملگر ‏x>y بزرگتر < ‏x >=y بزرگتر مساوي =< ‏x<y کوچکتر > ‏x <= y کوچکتر مساوي => ‏x=y مساوي بودن = ‏x <> y نامساوي <> عملگرهاي منطقي مثال ‏a>y and ‏y<x ‏x>y or ‏y<x ) Not ( x نام عملگر و ‏And يا ‏OR نقيض ‏Not عملگرهاي بيتي نوع عمل عملگر و ‏AND يا ‏OR يا انحصاري ‏XOR نقيض ‏NOT انتقال به سمت چپ ‏Shl انتقال به سمت راست ‏Shr تقدم عملگرها ) ( باالترين تقدم Not div / mod - + Shl > * shr => =< >< = And XOR OR < ) data types ( انواع داده‌ها )Simple data type( دادههاي ساده ‌  Structural Data ( ( دادههاي ساخت‌يافته ‌  Types )Pointer Data Types( دادههاي اشاره‌گر ‌   )Simple data type( دادههاي ساده ‌ )Char type( نوع کاراکتري ) integer ( صحيح )اعشاري (حقيقي )String type( نوع رشته اي )Boolean type( نوع منطقي صحيح ( ) integer اندازه بر حسب بايت محدوده نوع 1 از 0تا 255 ‏Byte 1 از -128تا 127 ‏Shortint 2 از -32768تا 32767 ‏Integer 2 از 0تا 65535 ‏Word 4 از -2147483648تا 2147483647 ‏Longint اعشاري (حقيقي) اندازه برحسب بايت تعداد ار5قام معني دار محدوده نوع … 2.2 e – 39 1.7 e 38 ‏Real 6 13-11 4 8-7 ‏e -45 … 1.5 3.4 e 37 ‏Single 8 16-15 ‏e -324 … 5.0 1.7 e 308 ‏Double 10 30-19 ‏e -4932 … 3.4 1.1 e 4932 ‏Extend ‏ed 8 30-19 ‏e 18 … 9.29.2 e 18 ‏Comp  دادههاي ساخت‌يافته ( ( Structural Data Types ‌ انواع داده‌هاي ساخت‌يافته عبارتند از: آرايه‌ها رکوردها مجموعهها ‌ فايلها متغيرها ()Variables متغير ،محلي از حافظه است که داراي نوع و اسم مي‌باشد .نوع متغير همان .نوع داده بوده و اسم متغير از قواعد اسم‌گذاري شناسه تبعيت مي‌کند ميکنند: در پاسکال براي معرفي متغيرها بصورت زير عمل ‌ ; )ک==لمه ذ=خ=يره= ش=ده=( Var نوع متغير :اسم متغير ثابتها ()Constants يک ثابت نام شناسه‌اي است که در آغاز يک برنامه ،يک مقدار در آن جاگزين ميتوان بعنوان خانه‌هايي از حافظه در نظر ثابتها را ‌ ميشود .درست مانند متغيرها‌ . ‌ يباشد، بگيريم که مقدار داده‌ها در آنها ذخيره مي‌شود ولي مقدار ثابت مشخص م ‌ .طوري که نمي‌توان مقدار يک ثابت را در برنامه خود بوسيله يک دستور تغيير داد مKيکنيم : ‏KفKKکثKKابKتبKKKصورKتزKيرعمل ‌ بKKراKيتKKعKري ي مقدار ثابت = اسم متغير Const دستور جايگزيني براي قرار دادن يک مقدار يا مقدار يک متغير داخل يک متغير ديگر ،از دستور .جايگزيني استفاده مي‌کنند شکل کلي يک دستور جايگزيني در پاسکال بصورت زير است: عبارت محاسباتي = :اسم شناسه عبارت قياسي عبارت منطقي يا افزودن توضيحات به برنامه ()Comment افزودن مطلب توضيحي در درون خود برنامه عملي پسنديده و مطلوب است بدين ترتيب که بعد از مدتي امکان فراموشي کار با برنامه از بين مي‌رود و در يتوان گفت که نوشتن توضيحات در برنامه خوانايي آن را باال مي‌برد .کل م ‌ در پاسکال توضيحات بين دو آکوالد محصور مي‌شوند. } { This is comment { This program written by A. } Pascal مثال جابجا کردن مقدار دو متغير ‏b ‏a 17 15 ‏b 17 ‏a 15 ‏temp 15 ‏b 17 ‏a 17 ‏temp 15 ‏b 15 ‏a 17 Program Example4 ; Var a , b , temp : integer Begin a : = 15 ; b : = 17 ; temp : = 0 ; temp : = a ; a:=b; خروجي برنامه: b : = temp ; a = 17 b = 15 Writeln ( ' a = ' , a , ' b = ' , b ) ; چند نکته در مورد برنامه‌نويسي • • • • استفاده از اسامي با مفهوم براي متغير‌ها استفاده از دستور Constدر صورتي که مقدار ثابت در برنامه وجود داشته باشد. سوال جوابي بودن برنامه (ورودي‌ها و خروجي‌ها بايد داراي پيغام مناسب باشند) نوشتن برنامه با فر=مت مناسب (رعايت قرار گرفتن خط=وط مختلف برنامه زير هم و فاصله گذاشتن آنها از اول سطر و غيره) تمرينات حاصل عبارتهاي زير را بدست آوريد: A) 3 * 13 Mod 3 div 3 = ? B) 7.3 * 5 / 3 = ? C) ( 3 + 4 < 6 ) and ( 4 + 7 < 13 ) = ? D)33 – 8 * 3 div 3 mod ( 5 div 3 ) = ? E) NOT ((( 3 – 4 MOD 3 ) < 5 ) and (( 6 div 4 ) < > 3 )) : هايم=نطقيرا ب==ه ازاء م=قاد=ير ز=ير م=شخصک==نيد =ت ‌ح=اص=لع=بار A: = true ; B: = false ; C: = true ; A) ( A AND B ) OR ( A AND C ) = ? B) ( A OR NOT B ) and ( Not A OR C ) = ? C) A OR B AND C = ? D) NOT ( A OR B ) AND C = ? تمرينات برنامه‌نويسي • • • برنامهاي بنويسيد که ابعاد مثلث که عبارتند از 1.3 , 3را در نظر ‌ گرفته محيط و مساحت آن را محاسبه و با پيغام مناسب در خروجي چاپ کند. برنامهاي بنويسيد که دو متغير صحيح با مقادير 15 , 3را در نظر ‌ گرفته محتويات دو عدد را بدون استفاده از متغير کمکي جابجا نمايد. برنامهاي بنويسيد که سه عدد بنام هاي Third , ‌ Second , Firstبترتيب با مقادير 13 , 15 , 17را در نظر گرفته بطور چرخشي مقادير آنها را جابجا نموده در خروجي با پيغام مناسب چاپ کند. فصل 6 ‏q ورودي و خروجي هدفهاي كلي م=ع=رف=يد=س=تورا=تخ=رو=ج=يWriteln فرمتبندي شده ‌ معرفي خروجي بررسي دستورات ورودي Readو ReadLn هدفهاي رفتاري :دانشجو پس از مطالعه اين فصل بايد بتواند ‏عبارات مورد نظر را در خروجي نمايش دهد. ‏عبارات خروجي را با فرمت مناسب چاپ كند. ‏متغيرKهاي مورد نياز برنامه را از ورودي دريافت نمايد. برنامههاي ساده به زبان پاسكال بنويسد. ‌  خروجي با دستور Write اين دستور براي نوشتن اطالعات در خروجي بکار مي‌رود .اطالعات خروجي ميتوانند ثابتهاي عددي ،مقادير متغيرها ،عبارات و غيره باشند .شکل دستور در ‌ :حالت کلي بصورت زير است ( .......و متغير 2و متغيرwrite) 1 ( .......و' عبارت '2و'عبارت)' 1 يا يا ( .......و ثابت 2وثابت ) 1 ar 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 } اي برنامه فوق در خروجي خواهيم داشت B = 15 ch = TR = 1.2250000000 e + 01 sum of A and B خروجي با دستور Writeln اين دستور همانند دستور Writeعمل مي‌کند با اين تفاوت که بعد از اجرا ،کنترل را به ابتداي سطر بعد منتقل مي‌کند در نتيجه موجب چاپ دادههاي بعدي در ابتداي سطر بعد مي‌شود. ‌ A , B: integer ; Ch: char ; R: Real ; in 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 ) ; d. { End of program } مثال خروجي برنامه بصورت زير مي‌باشد: A = 10 B = 15 Ch = T R = 1.225000000 e + 01 Sum of A and B = 25 خروجي فرمت‌بندي شده اگر بخواهيم اطالعات با فاصله هاي مشخص يا در مکان مشخصي در صفحه نمايش قرار گيرند ،بايد فرمت چاپ .را در دستورات بيان شده مشخص کنيم طريقه تعيين فرمت چاپ براي اعداد صحيح :فرمت اعداد صحيح بصورت زير مشخص مي‌شود ( طول ميدان :داده صحيح ) Writeln يا ‏Write دادههايي از نوع صحيح به نکات زير توجه کنيد: ‌ در تعريف طول ميدان براي متغيرها يا • • اگر طول ميدان از طول ارقام عدد صحيح بيشتر تعريف شود ،عدد در منتهياليه سمت راست ميدان نوشته مي‌شود. ‌ اگر طول ميدان از طول ارقام عدد صحيح کمتر تعريف شود ،طول ميدان به اندازه تعداد ارقام در نظر گرفته مي‌شود و طول ميدان تعريف شده بي‌اثر خواهد بود. مثال X:= 3200 ; A: = 12 ; B: = 217 ; Write ( X:3 , A:5 , B:5 ) ; :خ=رو=ج=ي 3200 12 217 طول ميدان اعداد اعشاري براي نمايش اعداد اعشاري بصورت دلخواه ،مي توان با تعريف طول .ميدان و تعداد ارقام اعشاري ،عدد مزبور را نمايش داد يت==وا=نب==ه ص=ور=تز=ير ت==ع=ريفک=رد : در ح=ا=لتک==ليط=ولم=يدا=نرا م= ‌ =ن م=تغير ا=عشار=ي( Write ) ت==ع=داد ار=قام ب==ع=د از م=ميز :ط=ولم=يدا : Writelnيا در تعريف فرمت براي اعداد اعشاري به نکات زير بايد توجه کرد: اگر طول ميدان بزرگتر از تعداد ارقام عدد ذکر شود ،عدد در منتهي اليه سمت راست .ميدان چاپ مي‌شود اگر فقط طول ميدان ذکر شود ،عدد به صورت نماد علمي در طول ميدان مشخص شده .چاپ می شود از آنجائي که براي نمايش اعداد در نماد علمي حداقل 8محل مورد نياز است ،لذا هنگامي که تنها طول ميدان ذکر شده باشد ،اگر از 8رقم کمتر باشد ،حداقل 8رقم .در نظر گرفته مي‌شود هنگامي که طول ميدان همراه با تعداد ارقام بعد از مميز ذکر شود ،اگر طول ميدان کوچکتر از مقدار عدد باشد ،پاسکال تنها طول ميدان را به اندازه‌اي که مورد نياز است تصحيح کرده و آنرا برابر اندازه واقعي که عدد در آن قرار مي‌گيرد ،اصالح مي‌کند. اگر تعداد ارقام بعد از مميز زياد باشد و تعداد ارقام بعد از مميز ذکر شده د ر طول ميدان کمتر از تعداد ارقام اعشاري عدد باشد ،تعداد ارقام اعشار برنامهنويس نشان داده خواهد شد و رقم آخر اعشار آن ‌ مطابق درخواست نسبت به عدد بعدي گرد مي‌شود. طول ميدان کاراکترها و رشته‌ها براي نمايش رشته‌ها و کاراکترهاي با طول ميدان بصورت زير عمل ميکنيم. ‌ =تها=ييا ک=ارا=ک=تري( Write =ن م=تغير يا ع=بار=تر=ش ‌ ) ط=ولم=يدا : در توربو پاسکال ،کليه موارد گفته شده در مورد اعداد صحيح براي رشتهها نيز صادق است ‌ . ورودي با Readln , Read از اين دستور براي خواندن داده ها و اختصاص آنها به متغيرها :استفاده مي‌شود .در خواندن داده ها به دو موضوع بايد دقت شود م=نبع داد=ه=‌ها يعنيد=س=تگاه= ورود=يک==ه از آ=نداد=ه=‌ها خ=وا=نده= 1- م=يش=ود ‌ . م=ي==يرد . 2- م=تغيريک==ه داد=ه=‌هايخ=وا=نده= ش=ده= در آ=نق=رار ‌گ شکل کلي دستور ورودي Readبصورت زير مي‌باشد: ;( .....و متغير 2و متغير ( 1Read اين دستور عمل خواندن داده‌ها و ذخيره آنها در متغيرها را انجام مي‌دهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتن‌هاي بعدي م=يدارد . در ه=مانخ=طن==گه ‌ مثال جابجا کردن محتويات دو عدد ram Example_1 ( input , output ) ; first , second , temp: integer ; n Writeln ; Writeln ( 'Please Enter two numbers ' ) ; Readln ( first , second ) ; Temp: = first ; First: = second ; Second: = temp ; Write ( ' first = ' , first , ' second = ': 10 , second ) { end of program } :خروجي برنامه باال به صورت زير مي‌باشد Please Enter two numbers 15 17 First = 17 second = 15 تمرينات : خروجيق طعه ب رنامه زير را ت عيينکنيد 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 ) ; اگر متغير Xاز نوع realو مقدار آن 12.235و متغير 3از نوع صحيح و مقدار آن 100باشد خروجي دستورات زير را تعيين کنيد؟ ; ) X is ': 10 , X: 6: 2 , ' I is ': 4 , I: 5 ; ) I is ': 10 , I: 1 ; ) X is ': 10 , X: 2: 1 ; ) X is ': 15 , X: 7: 1 ; ) I is ': 10 , ' X is ': 10 , X: 7: 3 ' ' ' ' ' ( ( ( ( ( ‏Writeln ‏Writeln ‏Writeln ‏Writeln ‏Writeln تمرينات برنامه نويسي برنامهاي بنويسيد که دو عدد را از ورودي دريافت کرده و ‌ .محتويات آنها را بدون استفاده از متغير کمکي جابجا نمايد برنامهاي بنويسيد که سه عدد صحيح Third , ‌ Second , firstرا از ورودي با پيغام مناسب دريافت کرده سپس محتويات اين سه متغير را بصورت چرخشي جابجا نموده با پيغام مناسب در خروجي چاپ کند. برنامه‌اي براي يک حسابدار اداره جمع آوري ماليات بنويسيد که صورت .حسابهاي ماليات را محاسبه نمايد :ورودي شماره شناسايي ماليات دهنده بهاي ارزيابي شده نرخ ماليات :خروجي صورت حساب بافرمت مناسب شامل تمام داده‌هاي ورودي و ميزان بدهي فصل 7 ساختارهاي شرطي و كنترلي هدفهاي كلي م=ع=رف=يد=س=تور ش=رط=يIf and Else معرفي دستور case بررسي دستورات تكرار for ، while ، repeat ‏untilدستورات شرطي متداخل معرفي بررسي چند تابع و روال استاندارد زبان پاسکال رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند ‏ برنامههايي را بنويسد كه در آنها نياز به استفاده از شرط وجود دارد. ‌ تفاوتهاي بين دستورات مختلف با ifو else- ifرا تشخيص دهد. ‏ برنامههايي كه نياز به تكرار تعدادي عمليات داشته باشند را بنويسد. ‌ در صورت نياز بتواند در برنامه‌ها ،از روالها و توابع استاندارد زبان استفاده نمايد دستورات شرطي بطور کلي توسط اينگونه دستورات مي‌توان بر حسب شرايط مختلف، تصميمات متفاوتي را اتخاذ نمود و برحسب برقرار بودن يا نبودن شرايط .دستورات متفاوتي را اجرا نمود ات شرطي در حالت کلي به دو نوع تقسيم مي‌شوند: د.س.تور if د.س.تور Case • دستور if هرگاه در طول برنامه نياز به استفاده از شرط يا شروط داشته باشيم ،از دستور . Ifستفاده مي‌کنيم دستور ifبطور کلي به سه شکل بر حسب نياز ممکن است ظاهر شود: ifساده ifه=مرا=ه= Else ifهاي متداخل • – If ‏then در اين نوع دستور شرطي اگر شرط خاصي تحقق يافته باشد ،عمل يا اعمال خاصي انجام مي‌شود .در غير اينصورت برنامه روال عادي خود را طي مي‌کند، در صورتي که شرط برقرار باشد ارزش منطقي Tureبه خود مي‌گيرد و اگر شرط برقرار نباشد ،ارزش منطقي Falseبه خود خواهد گرفت. • ( If – thenادامه ) شکل کلي دستور ifبصورت زير مي‌باشد: شرط يا شروط ; دستور :دياگرام دستور باال بصورت زير مي‌باشد شناسه ; دستور ‏Then شرط ياشروط ‏if ‏f Program Example ; Var Number: integer ; Begin Write ( 'Please enter Number: ' ) ; Readln ( Number ) ; if Number > 0 then Write ( ' Number is positive ' ) ; End . • مثال :خروجي برنامه باال بصورت زير است Please enter Number: 12 Number is positive • دستور ifهمراه else • د5ر اين دستور ابتدا شرط بررسي 5مي‌5شود ،د5ر صورتي 5که 5ش5رط برقرار باش5د ،عم5ل يا اعم5ال خاصي را 5انجام مي‌5دهد و در صورتي 5ک5ه ش5رط برقرار نباشد ،ع5مل يا اعم5ال بخص5وص ديگ5ري را انجام خواهد داد. ا5ينگونه دستورات در واقع 5حالت 5توس5عه 5يافته5 دس5تورات if 5مي‌باش5ند. شکل کلي اين دستور بصورت زير است: thenع=بار=تيا ع=بارا=تم=نطقي if ; دستور1 ‏else ; دستور2 دياگرام دستور بصورت: ‏then عبارت يا عبارات منطقي ;دستور ‏else ‏if دستور ogram Example ; ar Number: integer ; egin Writeln ( 'Please enter Number: ' ) ; Readln ( Number ) ; if ( Number mod 2 ) = 0 Then Write ( ' even ' ) else Write ( ' odd ' ) ; nd. { end of program } • مثال :خروجي برنامه باال بصورت زير است Please enter Number: 17 odd صورت ديگر دستور ‏Thenع بارتم نطقي If ‏Begin ; دستور 1 ; دستور 2 . . . ‏End ‏Else ‏Begin ; دستور 1 ; دستور 2 . . • Ifهاي متداخل هرگاه در نوشتن برنامه نياز به انتخاب يک شرط از بين چند شرط داشته باشيم ،معمو ً ال از Ifمتداخل استفاده مي‌کنند .در چنين مواقعي استفاده از If متداخل کارائي برنامه را باال مي‌برد زيرا بجاي کنترل تمام شروط فقط تا زمانيکه شرط برقرار نشده If ،ها بررسي مي‌شوند .بعد از برقرار شدن يکي از شروط ،کنترل برنامه به بعد از Ifمنتقل مي‌شود و اين در بهبود کارائي يک برنامه مي‌تواند بسيار موثر باشد. در حالت کلي Ifمتداخل به صورت هاي زير ممکن است ،در برنامه ظاهر شود. ‏then ‏Lي عLبارLتشLرط 1 ‏if ( 2 ‏then ‏then دستور 1 عLبارLتشLرطLي1 عLبارLتشLرطLيif 2 thenعLبارLتشLرطLيelse if 2 دستور 1 دستور2 ‏else thenعLبارLتشLرطLيelse If 3 ;دستور2 دستور 3 ‏else . . . ‏if مثال :برنامه‌اي بنويسيد که نمره دانشجوئي را از ورودي دريافت کرده ،با توجه به :مقدار نمره يکي از خروجي هاي زير را نمايش دهد خروLجي ‏A ‏B ‏C ‏D ‏F ‏Grade 17 – 20 14 - 17 12 – 14 10 – 12 0 – 10 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 ; دستور ‏Case زبان پاسکال دستور Caseرا بصورت زير در نظر مي‌گيرد: ‏Of عLبارLت ; دستور 1 . : ‏Case مقدار 1 ; دستور 2 : مقدار 2 ; دستور 3 : مقدار3 } End ; { End of case . . ‏Otherwise ; دستور 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 ) ; دياگرام دستور Caseبصورت زير مي‌باشد: ‏End دستورات ثابت : , ; ‏of عبارت ‏Case ساختارهاي کنترلي .بسياري از مواقع الزم اس=ت عمل يا اعمال به تعداد دفعات معين يا نامعين انجام شوند= در چنين مواقعي زبانهاي برنامه‌نويسي دستوراتي دارند که مي‌توان اين اعمال تکراري را انج=ام داد .در حالت کلي ساختارهاي کنترلي شامل يک يا چند شرط و همچنين متغير يا اصطالح ًا شمارنده‌اي براي پايان دادن به شرط مي‌باشند شکل کلي حلقه بصورت زير مي‌باشد: Doمقدار نهايي Toمقدار اوليه = :انديس For ; دستور بايد توجه داشته باشيد که در حلقه تعداد تکرار کام ً ال مشخص است و حلقه دقيق ًا به .تعداد تکرار مشخص اجرا مي‌شود حلقه for ميشود. دستور براي انجام عمل يا اعمالي مشخص به تعداد تکرار معين بکار برده ‌ قه forشامل يک انديس ( ) indexمقدار اوليه ( ) initial valueمقدار نهايي ميباشد .اين حلقه با قرار دادن مقدار اوليه در ( ) final valueو مقدار افزاينده ‌ ميکند تا يس حلقه شروع شده و بعد از هر تکرار يک واحد به انديس حلقه اضافه ‌ ميباشد: نهايت به مقدار نهايي برسد .شکل کلي حلقه بصورت زير ‌ Var عدد از ورودي100 برنامه‌اي بنويسيد که: مثال . عدد را محاسبه و چاپ نمايد100 مجموع،دريافت کرده 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 } دستور forرا بصورت زير هم مي‌توان بکار برد. doم قدار ن هايي downtoم قدار اوليه = :انديس for ; دستور در اين شکل از دستور Forابتدا مقدار اوليه در انديس حلقه قرار داده مي شود و بعد از آن در هر تکرار حلقه يک واحد از انديس حلقه کم مي شود تا به مقدار نهايي برسد . Var برنامهاي بنويسيد که عدد صحيحي را از ورودي ‌ : مثال دريافت کرده و فاکتوريل آن را محاسبه نمايد. i , n , Fact : integer ; Begin Fact : = 1 ; Write ( ' please enter A Number ' ) ; Readln ( n ) ; For I : = n downto 1 Fact : = Fact * i ; Writeln ( ' Fact = ' , Fact ) ; End . do Forهاي متداخل doم=قدار ن =ه=ايي toم=قدار او=ل=يه = :ا=نديسfor 1 doمقدار نهايي toمقدار اوليه = :انديس for 2 ; دستور i: = 1 to 3 do مثال: gin For j: = 1 to 3 do Write ( ' pascal ': 8 ) ; Writeln ; d ; خروجي Pascal 1) Pascal 2) Pascal Pascal ( مرحله اولi = Pascal Pascal ( مرحله دومi = دياگرام دستور for مقدار نهايي ‏To مقدار اوليه =: انديس ‏For ‏Downto دستور ‏d ‏o حلقه While در حالت کلي هدف از بکار بردن اين دستور انجام عملياتي مشخص به تعداد دفعات نامعين است ا=ينح=لقه ب==ه ص=ور=تز=ير ب==کار ب==رد=ه= م=ي ش=ود= : ‏Do عبارت منطقي While ; دستور 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 } دياگرام دستور Whileبصورت زير مي باشد: دستور ‏do ‏While عبارت شرطي و در صورتي که دستور مرکب باشد دياگرام بصورت زیر است : ‏End دستور ; ‏Begin دستور ‏Repeat ميباشد و به کمک آن مي‌توان يک يا چ=ند اين دستور نيز از نوع دستورات تکراري ‌ .دستور را به تعداد نامعين بار اجرا کرد ا=يند=س=تور م=شاب=ه د=س=تور while :است ،با تفاوتهايي که در زير عنوان مي‌کنيم در د=س=تور ) Repeat 1ب==رعکسد=س=تور While ميشود .شرط حلقه در انتهاي حلقه بررسي مي‌شود لذا حلقه حداقل يکبار اجرا ‌ )2دستور Repeateتا زماني اجرا مي‌شود که شرط خاصي تحقق پيدا نکرده است در حاليکه دستور Whileتا زماني که شرط برقرار باشد ،اجرا مي‌شود. )3دستور Repeatنياز به بلوک ندارد و همراه Untilظاهر مي‌شود. شکل کلي اين دستور بصورت زير مي‌باشد: ‏Repeat ; دستور1 ; دستور2 . . ; شرط يا شروط ‏until برنامه‌ مجموع و ميانگين تعدادي عدد صحيح مثبت , Sum , Number : integer ; ve: Real ; 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 ve: = Sum / i ; Writeln ( ' Sum = ' , Sum , ' average = ': 12 , ave: 7: 2 ) ; end of program } دياگرام دستور Repeatبصورت زير مي‌باشد: شرط يا شروط ‏Until دستور ; ‏Repeat معرفي چند پروسيجر ( Procedure ) قسمتهاي مستقلي از برنامه اصلي مي‌باشند که به ‌ پروسيجرها يا زير روال‌ها تنهايي اعمال خاصي را انجام داده و وظايف مستقل و بخصوصي بر عهده آنها گذاشته مي‌شود .يک مزيت بزرگ پروسيجرها اينست که يکبار در برنامه گنجانده شده ولي در محلهاي مختلف ازآن استفاده به عمل مي‌آيد و از .اصول برنامه‌نويسي ساخت يافته‌است پروسيجر Exit هدف :انتقال کنترل برنامه به خارج از بلوک فعلي ; Exit ‏Procedure استفاده از اين پروسيجر در هر بلوک از برنامه باعث مي‌شود که کنترل برنامه بالفاصله به خارج از آن بلوک انتقال يابد. پروسيجر Break هدف :خاتمه دادن به اجراي يک حلقه ; Procedure Break استفاده از پروسيجر فوق باعث مي‌شود که اجراي يک حلقه خاتمه يافته و کنترل برنامه به دستورالعمل بعدي انتقال يابد. پروسيجر continue هدف :بازگشت به ابتداي حلقه ; Procedure continue وقت=ي اين پروس=يجر در حلق=ه ظاه=ر مي‌شود کنترل برنام=ه ب=ه اول حلق=ه انتقال مي‌يابد و دستورات بعد از پروسيجر اجرا نمي‌شوند. ارائه چند مثال از کاربرد حلقه ها و شرط‌ها مثال :بر=نامه‌اي بنويسيد که يک عدد صحيح در مبناي ده را از ورودي دريافت کرده ،به يک عدد در مبناي 2ببرد. 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) ; عدد را از وروديn برنامه‌اي بنويسيد که: مثال جمله سري زير که به سريn ،دريافت کرده F1 , F2 , F3 , N: integer ; .فيبوناچي معروف است را چاپ نمايد gin 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 } d. { end of program } Sum : = 0 ; While i < = 120 do Begin تمرينات : خروجي قطعه برنامه‌هاي زير را تعيين کنيد-1 Sum : = Sum + i ; i:=i+1 ; end ; b) i:=0 ; Sum : = 0 ; While i < = 20 do Begin i:=i+1 ; 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 ; تمرينات برنامه نویسی -1برنامه‌اي بنويسيد که با استفاده از حلقه ها خروجي زير را توليد کند. 1 1 1 2 2 3 1 3 2 2 2 4 1 1 1 2 3 4 3 3 4 5 1 2 1 =ها=يب==نويسيد ک==ه ت==ع=داد=يع=دد از ورود=يدر=ياف=تک=رد=ه= م=جموع 2- ب==رنام ‌ =اپ==مايد ( .پ==ايانداد=ه= ها ب==ه -1خ=تم م=ي ار=قام هر ع=دد را در خ=رو=ج=يچ ن ش=ود ) =ها=يب==نويسيد ک==ه دو ع=دد ص==حيح را از ورود=يدر=ياف=تک=رد=ه= 3- ب==رنام ‌ :س==پس .اعداد فيبوناچي بين اين دو عدد را چاپ کند يک=س=کناس 1000ت==ومان=يرا ب==ه ح=ا=لتهاي4- ا =ها=يب==نويسيد ک==ه ب==رنام ‌ =ي 20 =ي 50ت==ومان ، =ي 100ت==ومان ، م=ختلفيعنيب==ه ا=س=کناس 200ت==ومان ، =ي 10ت==ومان=يو س==که هاي 5ت==ومان=يو 2ت==ومان=يو يکت==ومان=يخ=رد ت==ومان ، .ن==مايد فصل 8 آرایه هاArray هدفهاي كلي ‌ شناخت لزوم استفاده از ساختار داده اي به نام آرايه ش=ناخت انواع آرايه‌ها و موارد استفاده از آنها شناخت مفاهيم مرتب‌سازي و جستجو شناخت الگوريتمهاي مرتب‌س=ازي و جستجو رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند آرايهها يك بعدي را در برنامه‌هاي خود بكار ببرد. ‌  ماتريسها را پياده‌سازي نمايد. عمل جستجو در آرايه انجام دهد. ‏يك ليست را توسط روشهاي مرتب سازي حبابی ،انتخابي و غيره مرتب كند. آرايه و انواع آن خانههاي پشت سرهم از حافظه که همنوع بوده و توسط يک اسم معرفي ‌ ميشوند ،آرايه نام دارد .نحوه دسترسي به هر يک از اعضاء آرايه از ‌ .طريق انديس آرايه امکان‌پذير است براي تعريف آرايه ابتدا طول آرايه که درحقيقت تعداد خانه‌هاي آنرا مشخص خانههايي که داده‌ها در آن قرار خواهند ميکند ،معين مي‌گردد .سپس نوع ‌ ‌ گرفت را تعيين مي کنند  آرايههاي يک بعدي ‌ آرايههاي يک بعدي بصورت زير تعريف مي‌شوند: ‌ ‏of ] [ 1 . . Length ‏array : ‏Name ; طول آرايه نوع آرايه کلمه ذخيره شده اسم آرايه کلمه ذخيره شده : برای مثال Var No: Array [ 1.. 50 ] of integer ; id: Array [ 1.. 20 ] of Byte ; Name , Fam: Array [ 1.. 30 ] of char ; :مقداردهي آرايه‌ها مثل متغيرها به دو صورت امکان‌پذير است -1با استفاده از دستورات ورودي -2مقداردهي در طول برنامه طريقه دسترسي به عناصر آرايه بصورت زير مي‌باشد: ] [ index ‏Name انديس آرايه اسم آرايه بيشترين، عدد صحيح از ورودي دريافت کرده100 برنامهاي بنويسيد که ‌ : مثال مقدار و محل وقوع آن را در خروجي چاپ نمايد. o: array [ 1.. 100 ] of integer ;Max , i , index: integer ; 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 of program } عنصري را از ورودي دريافت کرده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 ; آرايههاي دو بعدي ‌ براي نمايش ماتريس درحافظه معمو ً ميکنند ال از آرايه‌هايي بنام آرايه‌هاي دوبعدي استفاده ‌ .براي درک بيشتر اين آرايه‌ها آنها را بصورت ماتريس در نظر مي‌گيرند ميشوند: آرايه‌هاي دو بعدي بصورت زير معرفي ‌ ‏of ] [ 1 .. row , 1 .. column ‏array ‏type : ; ‏Name نوع عناصر آرايه کلمه ذخيره شده تعداد ستونها اسم آرايه کلمه ذخيره شده تعداد سطرها سپس، را از ورودي دريافت کرده5*5 برنامهاي بنويسيد که يک ماتريس ‌ : مثال r آنرا در خروجي چاپ نمايد. a : array [ 1 .. 5 , 1 .. 5 ] of integer ; i , j : integer ; gin 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 ; d. آرايههاي چند بعدي ‌ آرايههايي با ابعاد بيشتر از دو نيز تعريف کرد .بطور کلي براي ‌ ميتوان ‌ :معرفي يک آرايه چند بعدي مي توان بصورت زيرعمل کرد ‏array [ 1.. ‏Name : array [ 1.. length1 ] of ‏length2 ] …. ‏Of array [ 1.. ‏lengthN ] of Type و يا ‏Name: array [ 1.. length1 , 1.. length2 , …. 1.. ‏lengthN ] of Type نکاتي چند در مورد آرايه‌ها تعريف آرايه با محدوده منفي براي مثال: ; A: array [ -10.. 10 ] of Real تعريف آرايه از نوع منطقي ( ) Boolean براي مثال: ; A: array [1.. 20 ] of Boolean آرايههاي با محدوده منطقي: ‌  براي مثال ‏A: array [ Boolean ] of ;integer آرايهاي با محدوده کاراکتري: ‌  براي مثال ‏A: array [ 'A'.. 'Z' ] of Real آرايهاي که براي اعضاي آن محدوديت قائل شويم ‌  براي مثال: ‏A: array [ 1.. 20 ] of 1.. 30 جستجو و مرتب‌سازي ( Search and ) Sort مرتبسازي ‌ يکي از مسائلي که در بحث طراحي الگوريتم بسيار مهم است ،بحث و جستجو مي باشد .منظور از جستجو اينست که يک مقداري را از يک ليست جستجو کنيم و منظور از مرتب سازي اينست که يک ليست مرتب از داده ها را مرتبسازي و جستجو بکار مي‌روند ‌ ايجاد کنيم .حال تعدادی الگوريتم که براي م=ي==نيم ب==خصوصز=مان=يکه س=اخ=تار داد=ه= م=ا يکآرا=يه ب==اشد . را ب==رر=س=ي ‌ک جستجو در آرايه در کل دو نوع عمل جستجو را در اين کتاب بررسي مي‌کنيم : ‏جستجوي خطي Linear search ‏جستجو دودويي Binary search جستجوي خطي Linear search در جستجوي خطي عبارت مورد جستجو را نخست با اولين عضو آرايه مقايسه ميکنيم ،اگر برابر بود عمل جستجو با موفقيت همراه بوده و عمل جستجو ‌ خاتمه مي‌يابد در غير اينصورت روند را ادامه داده و عبارت مورد جستجو را بترتيب با عضو دوم ،سوم ...مقايسه مي‌کنيم تا اينکه حالت تساوي حاصل شود .و اگر اين حالت حاصل نشد ،عباريت مورد جستجو در ليست قرار ندارد :قطعه برنامه زير را مي توان در حالت کلي براي جستجوي خطي بکار برد ag: = True ; =0 ; hile ( i < = N ) and ( flag ) Do Begin i: = i + 1 ; if A [ i ] = x Then Begin Index: = i ; Flag: = false ; End ; End ; flag Then Writeln ( ' The Element is found ' ) se Writeln ( ' The Element is not found ' ) ; جستجو دودويي Binary search آرايهاي ‌ درجستجوي دودوئي ليست اوليه بايدمرتب باشد .براي جستجو در چنين نخست انديس وسط آرايه را پيدا مي‌کنيم و عنصر واقع در اين انديس را با :عبارت مورد جستجو مقايسه مي‌کنيم و حاالت زير ممکن است حاصل شود ( Lowانديس ابتداي آرايه ‌و upperانديس آخرين عناصرآرايه و middleانديس عنصر وسط مي‌باشد). حالت اول: A [ middle ] < X Then Low : = middle در اينصورت : را که عبارتست ازmiddle و مقدار جديد Middle : = ( low + middle ) / 2 حالت دوم: ddle ] <X Then upper : = middle در اينصورت : را که عبارتست ازmiddle و مقدار جديد Middle : = ( low + middle ) / 2 :حالت سوم ‏ddle ] =X Then در اينصورت ) ' found ‏Write ( ' The Eiement is هايا==لفيا ب ا=تفاقب==يفتد ،ع=ملج=ستجو را ت==ا ز=مان=يکه Low < upper =ا=لت ر ص=ور=تيک==ه ح ‌ مي باشد ادامه مي‌دهيم و در هر مرح=له که حالت سوم رخ دهد عمل جستجو خاتمه مي‌يابد. مرتب‌سازي مرتبسازي داده‌ها روشهاي متفاوتي وجود دارد .تفاوت روشهاي ‌ براي مرتبسازي در زمان اجراي آنها مي باشد .در حالت کلي با توجه به تعداد ‌ مرتبسازي مي توان از انواع روش‌هاي ‌ وروديها (داده ها) و نوع مسئله مرتبسازي استفاده نمود ‌ . حال بعضي از روش هاي مرتب سازي عمومي را بررسي مي‌کنيم. ‏ مرتبسازي حبابي ( ) Bubble sort ‌ ‏ مرتبسازي انتخابي ( ) Selection sort ‌  مرتبسازي حبابي ( ) Bubble sort ‌ ميباشد .يکي از خصوصيات بارز اين سادهترين روش مرتب‌سازي روش مرتب‌سازي حبابي ‌ ‌ .نوع مرتب‌سازي اين است که فهم آن ساده بوده و برنامه‌نويسي آن به سهولت انجام مي گيرد مرتبسازي حبابي نخست عنصر اول و دوم را با هم مقايسه مي‌کند و در صورت نياز ،آنها ‌ ميکند ،سپس عنصر دوم و سوم را مقايسه مي‌کند .اين عمل را تا زمانيکه به انتهاي را جابجا ‌ ميکند ،در پايان مرحله اول بزرگترين عنصر در آخرين خانه آرايه قرار آرايه نرسيده تکرار ‌ ميگيرد .در مرحله دوم از خانه اول تا خانه ميدهد .اين روند را ‌ N – 1 عمل باال را انجام ‌ تا زمانيکه تمام عناصر آرايه مرتب نشده‌اند ادامه مي‌دهد و در نهايت يک ليست مرتب شده .بصورت صعودي در خروجي توليد مي‌شود i: = 1 For If to n do j: = 1 to n - 1 do x [ j ] > x [ j + 1 ] Then Begin Temp: = x [ j ] ; X [ j ]: = x [ j + 1 ] ; X [ j + 1 ]: = temp ; End ; :تعداد مقايسه‌ها در اين روش بصورت زير محاسبه مي‌شود n–1 + n–2 + … + N(N= 1 1)/2  مرتبسازي انتخابي ( ) Selection sort ‌ مرتبسازي نخست کوچکترين عنصر را در کل آرايه پيدا کرده ‌ در اين روش در خانه اول آرايه قرار مي‌دهيم سپس عنصر کوچکتر بعدي را يافته در خانه دوم قرار مي‌دهيم اين روند را تا زمانيکه کل آرايه مرتب نشده ادامه مي‌دهيم :مرتبسازي انتخابي مي‌توان نوشت بصورت زير مي‌باشد ‌ قطعه برنامه‌اي که براي i: = 1 to n do in 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 Eleme ; { end of selection sort } چند مثال در مورد آرايه‌ها مثال :برنامه‌اي بنويسيد که يک عدد صحيح از ورودي دريافت کرده سپس .اعداد اول قبل از آن را توليد و در آرايه قرار دهد ; a : array [ 1 .. 50 ] of integer ; i , j , N : integer ; k : Byte ; flag : Boolean ‏in ; ) ' Write ( ' Enter A Number : ; Readln ( N ) ; a [1] : = 2 ; a [2] : = 3 ; flag : = True ; k:=2 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 } Var را از ورودي دريافت کرده و مجموع هر سطر3*3 برنامه‌اي بنويسيد که يک ماتريس: مثال a: array [ 1.. , 1.. 3ماتريس]در of Real ; sum: ; i را. ,j نمايد چاپ3خروجي همراه خود سطر بهReal انتهاي همان 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 any row } End ; Writeln ( sum: 8: 2 ) ; Sum : = 0 ; Var آرايه، برنامهاي بنويسيد که از ادغام دو آرايه مرتب ‌ : مثال . ايجاد کند بطوريکه آرايه سوم مرتب باشدL3 سومي بنام 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 ] ) ; 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 } 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 } nd. { End of program } کاراکتري را از ورودي دريافت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 ] ) ; تمرينات کداميک از دستورات زير در مورد اعالن زير صحيح است:a: array [ ' A '.. ' Z ' ] of ‏char الف'a [ ' A' ]: = ' Z - ب' a [ ' a ' ]: = 'A - جa [ ' A' ]: = 1 - دa [ ' I ' ]: = 12 - حa [ ' i ' ]: = 12 - تعداد بايتهايي که هر کدام از اعالنهاي زير اشغال مي کنند را محاسبه نمائيد.• • • • ‏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 تمرينات برنامه‌نويسی • برنامهاي بنويسيد که که يک آرايه حداکثر 50عنصري را از ‌ ورودي دريافت کرده و سپس عناصري از آرايه که اول هستند را با صفر جايگزين کرده آرايه حاصل را در خروجي چاپ کند. برنامه‌اي بنويسيد که عددي از ورودي دريافت ک=رده سپس آن را به عامل هاي اول تجزيه نمايد و حاصل را بصورت زير در خروجي :چاپ نمايد براي مثال) 1 ^ 7 ( * ) 1 ^ 3 ( = 21 : • برنامهاي بنويسيد که يک عدد از ورودي دريافت کرده سپس در صورت وج=ود صفرهاي ‌ آن را حذف نموده ،نتيجه را در خروجي چاپ نمايد. • برنامه اي بنويسد که يک ماتريس 5 * 5را از ورودي دريافت کرده سپس مجموع هر سطر را انتهاي همان سطر و مجموع هر ستون را در انتهاي همان ستون چاپ نمايد. • برنامهاي بنويسيد که يک ماتريس حداکثر 10 * 10را از ورودي دريافت کرده ‌ ماتريس هم بر حسب ستون و هم بر حسب سطر مرتب نموده به همراه ماتريس اولي در يک سطر چاپ نمايد. •برنامه‌اي بنويسيد که يک آرايه 200عنصري ازنوع صحيح که 150عنصرمرتب ميگيرد را از ورودي دريافت کرده سپس آرايه دومي با 50عنصر را از درآن قرار ‌ ورودي بخواند=. فصل 9 ای توابع و روال ‌هاي كتابخانه ‌ هدفهاي كلي شناخت ساختار تابع و روال شناخت توابع و روالهاي استاندارد براي نوعهاي صحيح شناخت توابع و روالهاي استاندارد براي نوعهاي اعشاري و كاركتري شناخت توابع و روالهاي استاندارد رياضي رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند توابع و روالهاي استاندارد را در صورت نياز در برنامه استفاده كند. ساختار توابع و خروجيهاي آنها را تشخيص داده و در برنامه خود از آنها استفاده كند. ساختار روالها و خروجيهاي آنها را تشخيص داده و نتايج حاصل از آنها را مورد استفاده قرار دهد. ‏توابع رياضي را براي محاسبه عبارت رياضي در برنامه بكار ببرد. ساختار تابع در کل هدف تابع اينست که متغير يا متغيرهايي را بعنوان پارامتر از برنامه اصلي دريافت کرد .عمل خاصي را روي پارامترها انجام داده و نتيجه را به .برنامه اصلي برگرداند :شکل کلي فراخواني توابع در برنامه اصلي بصورت زير مي‌باشد ساختار تابع: ) ( parameters ‏Name نوع تابع اسم تابع ‏Function : Type پارامترها کلمه ذخيره شده توابعي براي اعداد صحيح و اعشاري تابع Abs دف :باز گرداندن قدر مطلق ( ) absoluteپارامتري که به آن ارس.ال مي‌شود: ; Function Abs ( x: Integer ): Integer ; Function Abs ( x: Real ): Real اين تابع يک عبارت از نوع حقيقي يا صحيح را بعنوان آراگون دريافت کرده سپس .قدر مطلق آن را محاس=به و حاصل را برگرداند : مثال Real ; Integer ; : = Abs ( - 191.15 ) ; : = Abs ( - 171 ) ; Writeln ( ' f = ' , f : 8 : 2 , ' I = ' , I ) ; F = 191.15 I = 171 :خ=رو=ج=يح=اص=ل تابع Sin هدف :باز گرداندن سينوس يک عدد از نوع اعشاري ل تابع: ‏Sin ( X: Real ): Real ‏Function ميباشد. Xيک عبارت يا عدد از نوع اعشاري بوده و حاصل مقدار سينوس ‌ X : مثال Var X : Real ; Begin X : = sin ( 10 ) ; Write ( ' sin ( 10 ) = ' , x :8 : 2 ) ; End. تابع Cos هدف :باز گرداندن کسينوس يک عدد از نوع اعشاري. ل تابع: ‏cos ( X: Real ): Real ‏Function م=يب==اشد Xيکع=بار=تب==ا ع=دد از ن=وع ا=عشار=يب==ود=ه= و ح=اص=لم=قدار ک==سينوس‌ X r X : Real ; gin X : = cos ( 10 ) ; Write ( ' cos ( 10 ) = ' , x : 8 : 2 ) ; d. : مثال تابع ArcTan هدف :بازگرداندن آرک تانژانت يک عدد از نوع اعشاري ل تابع: ‏ArcTan ( X: Real ): Real ; Function ميباشد. Xيک عبارت يا عدد از نوع اعشاري بوده حاصل مقدار آرک تانژانت ‌ X Var ; X : Real ‏Begin ; ) X : = ArcTan ( 10 ; ) Write ( ' ArcTan ( 10 ) = ' , x : 8 : 2 ‏End . توجه :در صورتي که در توابع مثلثاتي زاویه از نوع درجه ارائه شود ميتوان با فرمول زير معادل راديان آن را محاسبه کرد ‌ : ‏Real = Dey * 3.14159 / 180 تابع Exp هدف :عدد نپر ( ) … e = 2.71828را به توان يک عدد مي‌رساند. شکل تابع: ; Real ‏Exp ( X: Real ): ‏Function م=يب==اشد Xع=بار=تيا م=تغيرياز ن=وع ا=عشار=يب==ود=ه= و ح=اص=لت==اب=ع ن==يز يکع=دد ا=عشار=ي ‌ اين تابع مقدار eبه توان Xرا محاسبه مي‌کند. Var X : Real ; i : integer ; Begin For i:=1 to 10 do Begin X : = exp ( i ) ; Writeln ( x : 8 : 2 ) ; End ; End . : مثال تابع frac هدف :قسمت اعشاري يک عدد اعشاري را برمي‌گرداند. ل تابع: ‏frac ( X: Real ): Real ‏Function ق=سمت=عشار=ي ا Xع=دد=ياز ن=وع ا=عشار=يو ح=اص=لت==اب=ع يکع=دد ا=عشار=يک==ه عدد Xاست مي باشد و بعبارت ديگر اين تابع قسمت اعشاري عدد ورودي را به عنوان خروجي باز مي‌گرداند. : مثال r Y , X : Real ; gin X : = frac ( 24.769 ) ; Y : = frac ( - 12.75 ) ; Write ( ' x = ' , 8 : 3 , ' y = ' , 8 : 2 nd . X= 0.769 Y= ) ; - 0.75 : روجي تابع Int هدف :قسمت صحيح يک عدد اعشاري را برمي‌گرداند. ل تابع: ‏Int ( X: Real ): Real ‏Function Xيکع=بار=تيا م=تغير از ن=وع ا=عشار=يو خ=رو=ج=يت==اب=ع ف==يزيکع=دد اعشاري است اين تابع مقدار صحيح يک عدد اعشاري در خروجي نشان مي‌دهد. : مثال Var y , x : Real ; Begin X : = Int ( 2.87 ) ; Y : = Int ( - 8.76 ) ; 8.0 } End . { 2.0 } {- تابع Ln هدف :محاسبه لگاريتم يک عدد اعشاري در مبناي .e شکل تابع: ‏Ln ( X: Real ): Real ; Function م=يب==اشد Xيکع=بار=تيا م=تغير از=نوع ا=عشار=يب==ود=ه= و=حاص=لت==اب=ع ف==يزيکع=ددا=عشار=ي ‌ ar X : Real ; egin X : = Ln ( 2.87 ) ; { x = 3.73767 } Write ( ' x = ' , x : 10 : 5 ) ; nd . : مثال تابع Odd هدف :فرد بودن عدد صحيح را بررسي مي کند. کل تابع: ‏odd ( X: logint ): Booleam ‏unction Xيکع=بار=تاز ن=وع longintا=س=تو ت==اب=ع ،ف==رد ب==ود=نع=بار=ترا ب==رر=س=يم=يک==ند اگر مقدار خروجي تابع Trueباشد Xفرد است و اگر مقدار خروجي تابع alse باشد Xفرد نيست. i : integer ; n For i:=1 to 100 do If odd ( i ) Then Writeln ( ' i = ' , j : 3 ) ; : مثال تابع Ord هدف :غالب ًا براي پيدا کردن کد اسکي يک متغير کاراکتري بکار مي‌رود. شکل تابع: ; Longint عبارت xاز نوع کارکتري را بعنوان پارامتر دريافت و کد اسکي آن را برمي گرداند. اگر xاز نوع اسکالر باشد تابع بعنوان خروجي ترتيب قرار گرفتن xرا در مجموعه اي که ابتدا به عنوان اسکالر اعالن شده ،باز ميگرداند. ‌ ‏Ord ( x: char ): ‏Function مثال : ‏Var ‏do ''Z ‏to ; ch : char ‏Begin ‏For ' ch : = ' A ; ) Write ( ord ( ch ) : 5 ‏End . :خر=وجی کد اسکي' ' Aتا' ' Zرا درخروجي چاپ مي‌کند ميباشد. کد اسکي ' ' Aعدد ‌ 65 تابع pi هدف :عدد پي را بر مي‌گرداند. کل تابع: ‏pi: Real ‏Function ميگيرد. اين تابع براي بازگرداندن عددي پي ( ) … 3.141592مورد استفاده قرار ‌ تابع Pred هدف :مقدار قبل مقدار پارامتر را بر مي گرداند. ع ; > pred ( x ): < same type of parameter پارامتر تابع مي تواند از هر نوع باشد و با توجه به نوع پارامتر تابع نياز از ميباشد. هم نوع مي‌باشد و خروجي تابع مقدار قبل از ‌ x ‏on Ch: = pred ( ' d ' ) ; c'} { ch = ' i: = pred ( 15 ) ; 14 } {i= flag: = pred ( True ) ; false } { flag = i: = pred ( - 30 ) ; 31 } {i=- : مثال تابع Random هدف :براي توليد عدد تصادفي :شکل تابع ; 1) Function Random: Real 2) Function Random ( x: word ): ; word اگر تابع Randomبه شکل يک يعني بدون آرگومان مورد استفاده قرار گيرد يک عدد تساوي از نوع اعشاري بين صفر و يک توليد مي کند و اگر به شکل دو بکار رود باعث توليد يک عدد تصادفي از نوع wordکه بزرگتر يا مساوي صفر و کوچکتر از xاست خواهد شد. Var i : integer ; Begin For i:=1 to 10 do Begin Writeln ( Random : 8:7) ; Writeln ( Random ) 20 ( : 8 ) ; End ; End . ، عدد تصادفي بين صفر و يک10 . توليد نمايد40 و0 عدد تصادفي بين10 و : مثال خروجی: تابع Round هدف :براي گرد کردن اعداد اعشاري بکار مي رود. تابع: ‏Round ( x: Real ): Longint ‏Function Xيکع=بار=تيام=تغير ا=عشار=يب==ود=ه= و=خرو=ج=يت==اب=ع يکع=دد از=نوع Longint ميباشد .اين تابع Xرا به نزديکترين مقدار ميباشد که نتيجه گرد کردن‌ X ‌ صحيح گرد مي‌کند. 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 : مثال تابع sqr هدف :براي محاسبه مجذور يک عدد صحيح يا اعشاري بکار مي‌رود. شکل تابع: ; Function sqr ( x: Integer ): Integer ‏Function sqr ( x: Real ): Real ; Xعبارتي يا متغييري از نوع صحيح يا اعشاري بوده و خروجي تابع فيزيک يک عدد صحيح يا اعشاري مي باشد اين تابع مجذور Xرا بعنوان خروجي بر ميگرداند. ‌ : مثال Var i : integer ; Begin For i:=1 to 10 do Writeln ( ' I ^ 2 = ' , sqr (I)) ; End . تابع sqrt هدف :براي محاسبه جذر يک عدد بکار ميرود. شکل تابع: ; Real ): Real ‏Function sqrt ( x: Xيکع=بار=تاز ن=وع ا=عشار=يب==ود=ه= و خ=رو=ج=يت==اب=ع ف==يزيکع=دد ا=عشار=ي م=يگ=ردا=ند. م=يب==اشدا=ينت==اب=ع ج=ذر Xرا ب==عنوا=نخ=رو=ج=يب==ر ‌ ‌ Var : مثال Y , X : Real ; Begin Y : = sqrt ( 64 ) ; Z : = sqrt ( 0.16 ) ; {y=8} { z = 0.4 } Write ( ' x = ' , x : 8 : 2 , ' y = ' , y :8:2) ; End . تابع succ هدف :مقدار بعد از مقدار فعلي را برمي گرداند. شکل تابعFunction succ ( x ): same type of : ; parameters Xيک عبارت از نوع صحيح ،اولين و غيره بوده و خروجي تابع نيز از همان نوع Xمي باشد اين تابع مقدار بعد از Xرا بعنوان خروجي بر مي‌گرداند. : مثال ch : = suce ( ' a ' ) { ch = ' b ' } ch : = suce ( ' A ' ) { ch = ' B ' } i : = suce ( 15 ) { i = 16 } flag : = suce ( false ) { flag = True } flag : = suce ( True ) { ==ريف==شده } ت==ع ن تابع Trunc هدف :قسمت صحيح يک عدد اعشار را بر مي‌گرداند. شکل تابع: ; Longint ‏Function Trunc ( x: Real ): Xيکع=بار=تيا م=تغير از ن=وع ا=عشار=يب==ود=ه= و خ=رو=ج=يت==اب=ع يکع=دد از ن=وع ميباشد .اين تابع قسمت صحيح عدد اعشاري Xرا بعنوان ‌ Longint خروجي بر مي‌گرداند. : مثال 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 . توابع از نوع کاراکتري در اين بخش توابعي را بررسي مي کنيم که خروجي آنها از نوع کاراکتري باشد. تابع chr هدف :معادل کاراکتري يک کد اسکي را بر مي‌گرداند. کل تابع: ‏chr ( X: Byte ): char ‏Function م=يب==اشد. Xيکع=بار=تيا م=تغير از ن=وع ب==ايتب==ود=ه= و خ=رو=ج=يت==اب=ع يکک=ار=ک=تر ‌ ن تابع کد اسکي را دريافت کرده و معادل کارکتري آن را بر مي‌گرداند. مثال : ‏Var ; i : Byte ‏do 91 ‏to ‏i : = 65 ‏Begin ‏For ; ) ) Writeln ( chr ( I :خروجی برنامه باال حروف Aتا Zرا در خروجي چاپ مي‌کند. ‏End . تابع Upcase هدف :براي تبديل يک کاراکتر به حرف بزرگتر بکار مي‌رود. شکل تابع: ; char ‏Upcase ( ch: char ): ‏Function chيک عبارت يا متغي=ر از نوع کاراکت=ر بوده و خروج=ي تاب=ع فيزيک کاراکتري باش=د اين تاب=ع حرف کوچ=ک را ب=ه حرف بزرگ تبديل کرده و بعنوان خروج=ي حروف بزرگ را بر مي‌گرداند. array [ 1.. 80 ] of char ; Byte ; : مثال ( ' enter Numbers: ' ) ; ln ( N ) ; i: = 1 to N do Read ( Sen [ i ] ) ; eln ; i: = 1 to N do If ( sen [ i ] > = ' a ' ) and ( sen [ i ] < = ' z ' ) Then ; sen [ i ]: = Upcase ( sen [ i ] ) ; eln ( ' Out pot of program ' ) ; i: = 1 to N do Writeln ( sen [ i ] ) ; of program } روال‌هاي استاندارد در بخش هاي قبل ديديد که در توابع پارامترها به تابع ارسال مي شود و تابع نيز مقداري را بعنوان خروجي برمي‌گرداند روالها نيز مشابه توابع عمل مي‌کنند با اين تفاوت که خروجي روالها از طريق پارامتر برمي‌گردانده مي‌شود يا اعالن به .سيستم عامل مي‌باشد .بنابراين روالها بدون نوع هستند :شکل کلي روال‌ها بصورت زير مي‌باشد ‏Name ; Procedure پارامترهاي روال اسم روال کلمه روال Dec هدف :يک يا چند واحد از پارامتر ارسالي کم مي کند. :شکل روال ; ) Procedure Dec ( Var X: longint ; ) Procedure Dec ( Var X: longint , N: longint م=يب==اشدا=ين Xيکم=تغير از ن=وع longintو ب==صور=تم=تغير=ي ‌ م=ي==ند. روا=ليکوا=حد از پ==ارا=م=تر ار=سا=ليک==م ‌ک : مثال Var N : integer Begin N : = 1201 ; Dec ( N ) ; { N = 1200 } Writeln ( N ) ; Dec ( N , 200 ) ; {W= 1000 } Writeln ( N ) ; End . روال Exit هدف :کنترل برنامه را به خارج از بلوک جاري منتقل مي کند. شکل روال: ; Exit ‏Procedure اين روال باعث مي شود که کنترل برنامه از بلوک جاري خارج شود .اگر اين روال در برنامه اصلي بکار رود باعث خروج از برنامه مي‌شود .و اگر در يک روال يا تابع بکار رود باعث خروج از روال يا تابع شده و کنترل برنامه به برنامه اصلي منتقل مي‌شود. مثال : ‏Var :خروجی ; i , j : integer ‏Begin ; i : = 100 ; j : = 20 ; ) Dec ( i , j ; ) Write ( i ; Exit ‏End . بعد از اتمام عمليات تابع Exitباعث خروج از برنامه مي شود. روال Halt هدف :خاتمه دادن به اجراي برنامه شکل روال: ; Halt ‏Procedure اين روال باعث خاتمه اجراي برنامه شده و کنترل برنامه به سيستم عامل بر مي‌گردد. روال Inc هدف :اضافه کردن يک يا چند واحد به يک متغير شکل تابع: ) ocedure Inc ( Var X: longint ; ) edure Inc ( Var X: longint , N: longint Xيکع=بار=تيا م=تغير از ن=وع Longintم=يب==اشدا=ينروا=لب==ه م=قدار م=ي==ند. م=تغير xيکيا چ=ند وا=حدا=ضاف=ه ‌ک : مثال 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 . روال Randomize هدف :باعث تغير نحوه توليد اعداد تصادفي مي شود. شکل روال: ; Randomize ‏Procedure وقتي در برنامه از تابع Randomاستفاده مي‌کنيم اعداد تصادفي توليد شده در اجراهاي مختلف يکسان مي باشد براي جلوگيري از اين وضعيت قبل از استفاده از تابع Randomروال Rondomizeرا بکار مي‌بريم .تا باعث توليد اعداد تصادفي متفاوت در اجراهاي مختلف گردد. : مثال Var i : word ; Begin Randomize; For i:=1 to 10 do Writeln ( Random ( 50 ) ) ; End . حل چند مثال برنامه‌نويسي مثال :برنامه اي بنويسيد که يک ماتريس مربع ( n * n ) n < = 10 از مقادير صحيح را از ورودي دريافت کرده آنگاه عناصري که مربع کامل نيستند را صفر کرده و در نهايت ماتريس حاصل را در خروجي چاپ مي کند. ‏ar ‏n , i , j : integer ; a : array [ 1 .. 10 , 1 .. 10 ] of integer ‏egin ; ) ' Write ( ' enter Number : ‏For i : = 1 to N do ‏For j : = 1 to N do ; ) ] Read ( a [ i , j For i : = 1 to N do For j : = 1 to N do If a [ i , j ] sqr ( Trunc (sqrt (Abs ( a[ i , j ] ))) 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 } برنامه‌اي بنويسيد که يک جمله از ورودي دريافت کرده سپس حروف: مثال .بزرگ جمله را به حروف کوچک تبديل نمائيد sen : array [ 1 .. 80 ] of char ; Ch : char ; i : word ; 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 ( ' Writeln ( ' The result sentence ' ) ; For i : = 1 to n do Write ( sen [ i ] ) ; End of program } تمرينات r i , j : integer gin i : = 100 ; j : = 20 ; inc ( i ) ; Dec ( j , 10 ) ; inc ( i , j ) ; Writeln ( i : 5 , j : 5 ) ; d. :خروجي تمرينات زير را تعيين کنيد.1 y : integer ; gin y : =Round ( 18.31 ) MoD 5 ; Writeln ( y ) ; d. :خروجي دستورات زير را محاسبه نمائيد2. Ch: = ' A ' ; Ch: = chr ( ord ( ch ) + 3 ) ; Write ( ch ) ; X: = 12 ; Succ ( x ) ; Ch: = ' B ' ; Pred ( ch ) ; Write ( x , ch ) ; تمرينات برنامه‌نويسي -1برنامه‌اي بنويسيد که تعداد 1000شماره حساب بانکي 7رقمي بطور تصادفي بين 5119432و 9981711را توليد کرده و چاپ کند. -2برنامه اي بنويسيد تا تعداد 38عدد تصادفي صحيح بين 10تا 99راتوليد کرده ،سپس آن را در خروجي به شکل مربع وسط صفحه نمايش چاپ کند. -3برنامه‌اي بنويسيد که يک عدد 20رقمي از ورودي دريافت کرده آن را در يک عدد تک رقمي ضرب نموده و حاصل را در خروجي چاپ نمائيد. فصل 10 م تغيرهايك اراكتريو رشته‌ها )(String هدفهاي كلي ‌ بررسي ساختار آرايه هايي از نوع كاراكتر معرفي نوع دادة جديد به نام رشته ‌ مقايسه آرايه اي از كاراكتر و رشته ‌ شناخت توابع و روالهاي استاندارد براي رشته ها رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند آرايه‌اي از كاراكترها را در برنامه بكار ببرد. آرايه‌اي از كاراكترها را با رشته مقايسه كند. اسمي افراد و غيره را با استفاده از آرايه‌اي از رشته مرتب نمايد. ‏توابع و روالهاي استاندارد مربوط به رشته‌ها را در برنامه خود بكار ببرد. متغيرهايي از نوع کاراکتر متغيرهاي کاراکتري ظرفيت پذيرش يک کاراکتر ( شامل يک رقم ،يک حرف از .حروف و يا يک کاراکتر ديگر ) را دارا مي‌باشند م=يب==اشد : م=قدار د=هيا=ينم=تغير ها ب==ه ص=ور=تز=ير ‌ ; ' ch: = ' A اگر بخواهيم متغير هاي کاراکتري را از ورودي بخوانيم بايد دقت بيشتري به .خرج دهيم براي اينکه فضاهاي خالي کاراکتر محسوب مي شوند .مثال :خروجي قطعه برنامه زير را تعيين کنيد ; ' Ch: = ' A ; ' C: = ' a ‏If ch = c Then ) ' Writeln ( ' equal ‏Else ; ) ' Writeln ( ' Not equal خروجي حاصل از قطعه برنامه باال بصورت زير است: ‏equal ‏Not ميتوان کاراکترها را از لحاظ اردينال (مرتبه) بصورت زير درکل ‌ :دسته‌بندي کرد م=يش=وند 1- :ر=ق=م ها ب==صور=تز=ير م=قايسه ‌ ''0' < '1' < '2' < '3' < … < '9 .رقم‌ها از لحاظ کد اسکي پشت سر هم قرار گرفته‌اند ر م=قايسه م=يش=وند 2- ' < … < 'Z'< … <'a' < 'b' < … < 'z متغيرهاي رشته‌اي ( ) String مجموعهاي از کاراکتر را يک رشته ناميده و متغير از نوع آن را ‌ تعريف: .يک متغير رشته‌اي مي‌نامند اين متغير نيز مانند ساير متغيرها در قسمت تعاريف متغيرها ( ) Varمعرفي رشتهاي معمو ً ال طول آن را مشخص مي‌کنند. ‌ ميشود .در تعريف يک متغير ‌ اگر طول تعيين نشود بطور قراردادي کامپايلر حداکثر طول را براي آن در نظر ميگيرد .حداکثر طول رشته 255کاراکتر مي‌باشد. ‌ نحوه تعريف متغير رشته اي بصورت زير مي‌باشد: ‏Name طول رشته کلمه ذخيره شده اسم رشته متغيرهاي رشته‌اي را بصورت زير مي‌توان مقداردهي کرد: ‏Var ; ] S : string [ 10 . . . ‏Begin . . ; ' S : = ' pascal ; ) Write ( s . . ‏End . رشتهاي ازدستور Readيا Readlnبصورت براي خواندن متغيرهاي‌ ‌ استفاده کرد: ‌ زيرمي ‌ توان ‌ ) ; Read ( s هنگام خواندن متغيرهاي رشته‌اي اگر طول رشته ورودي از طول تعريف شده بيشتر باشد فقط به اندازه طول تعريف شده خوانده مي شود و اگر طول رشته ورودي کمتر از طول تعريف شده باشد ،رشته ورودي در منتهي‌اليه سمت چپ متغير رشته‌اي قرار گرفته و بقيه متغير رشته اي بدون محتوا ،باقي مي ماند رشتهاي نيز ازدستور Writeيا ‌ براي چاپ يک متغير ميتوان استفاده کرد: ‌ Writeln ) ; Write ( s مثال :برنامه‌اي بنويسيد که شماره دانشجوئي ،اسم و فاميل دانشجوئي را .از ورودي دريافت کرده سپس در خروجي نمايش دهد Var Name , family: string [ 40 ] ; Id: longint Begin writeln ( ' Enter student number ') ; Readln ( Id ) ; writeln ( ' Enter Name ' ) ; Readln ( Name ) ; writeln ( ' Enter family ' ) ; Readln ( family ) ; writeln ( ' Id Name ') ; writeln ( Id: 7 , Name , Family ميشود: آرايه‌اي از رشته بصورت زير تعريف ‌ ‏string نوع رشته اي ‏of ] [ 1 .. length طول آرايه ‏ay براي خواندن چنين آرايه‌اي بصورت زير عمل مي‌کنيم: ‏i:=1 ‏to 50 ‏do ; ) ] Readln ( Name [ i ‏or براي نمايش آرايه در خروجي بصورت: ‏i: = 1 ‏to 50 ‏do ) ] Writeln ( Name [ i ‏For نفر از ورودي دريافت کرده و آنها را برحسب10 برنامهاي بنويسيد که اسم ‌ : مثال حروف الفبا مرتب نمايد. Name : Array [ 1 .. 10 ] of string [ 10 ] ; tring [ 10 ] ; temp : i , j : Byte; writeln ( ' Enter Ten Names ' ) ; or i : = 1 to 10 do Readln ( Name [ i ] ) ; or 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 } riteln ( ' The sorted list ' ) ; r i:=1 to 10 do writeln ( Name [ i ] ) ; nd of program } مثال :برنامه‌اي بنويسيد که اسم ،فاميلي و شماره دانشجوئي حداکثر 50 دانشجو را از ورودي دريافت نمايد. سپس با خواندن اسمي از ورودي ،ساير اطالعات اسم خوانده شده را در .صورت وجود در خروجي نمايش دهد ; ] Name , Family : array [ 1 .. 50 ] of string [ 30 ; id : array [ 1 .. 50 ] of longint ; ] Nam : string [ 30 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 ) ; 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 ; کتابخانهاي براي متغيرهاي رشته‌اي ‌ توابع و روالهاي تابع Concat هدف :الحاق دو يا چند رشته به يکديگر شکل تابع: ; string ‏Function concat ( S1 , S2 , … , Sn ): Sn , … , S2 , S1متغيرهايي از نوع رشته هستند و خروجي تابع نيز يک متغير رشته‌اي است اين تابع دويا چندتابع را به هم پيوند داده ،و رشته حاصل را برمي‌گرداند. Var Str3 , str1 , str2 : string :م ثا ل Begin Str1 : = ' Pascal ' ; Str2 : = ' Book ' ; Str3 : = Concat ( Str1 , Str2 ) ; write ( Str3 ) ; End. . نشان داده خواهد شدPascal Book عبارت،با اجراي برنامه فوق تابع Copy هدف :استخراج يک زير رشته ( ) substringاز يک رشته ‏n copy (S:string ; Index:Integer; count: Integer): strin يکع=بار=تيا م=تغير ر=ش=ته ا=يک==ه م=يخ=وا=هيم از آ=نز=ير ر=ش=ته ا=يک==ه ن==قطه S م=يب==اشد ج=دا ک==ني .م ل=ذا ز=ير ر=ش=ته Countو ط=ولآ=ن Indexش=رو=ع آ=ن =ل يکر=ش=ته ک==ه ط=ولآ=نب==ه ا=نداز=ه= م=يب==اشد Countح=اص ، =ت ‌ .ا=س ، :م ثا ل Var Str , str1: string ; Begin Str: = ' Pascal Book ' ; Str1: = Copy ( Str , 7 , 4 ) ; { Str1 = Book } write ( Str1 ) ; End. روال Delete هدف :حذف يک زير رشته از يک رشته شکلروال: ‌ ;Procedure delete (Var str: string ) ; Index:integer;length: integer =ي Indexيکع=بار=تيا م=تغير ص==حيح و Lengthن==يز Sيکم=تغ=ر ر=ش=ته ا ، ک عبارت يا متغير صحيح مي‌باشد .روال Deleteيک زير رشته را از يک شته حذف مي‌کند اين روال از محل Indexبطول Lengthاز رشته Str ف مي‌کند و رشته حاصل بعنوان خروجي روال برگردانده مي‌شود. :م ثا ل Var St : string ; Begin St: = 'Pascal.Book' ; Delete ( St , 7 , 5 ) ; writeln ( St ) ; End. .ميباشد ‌ Pascal خروجي حاصل از برنامه فوق روال Insert هدف :درج ( وارد کردن ) يک رشته در يک رشته ديگر شکل روالProcedure Insert ( Str1: string ;Var : ) ; Str2: string ; Index: Byte Str1عبارت يا متغير رشته اي Str2 ،متغير رشته اي و Indexعبارتي دد از نوع صحيح مي‌باشد .روال ، Insertرشته Str1رادر رشته Str2 ز خانه Indexدرج مي‌کند و رشته حاصل خروجي روال خواهد بود. :م ثا ل Var Str1 , str2: string ; Begin Str1: = ' Pascal 7' ; Str2: = ' Turbo' ; Insert ( Str1 , Str2 , 6 ) ; End. . خواهد بودTurbo pascal 7 خروجي حاصل از برنامه باال تابع Length هدف :محاسبه طول رشته شکل تابع: ; Integer ‏Function length ( Str: string ): م=يب==اشد. Strيکع=بار=تر=ش=ته ا=يب==ود=ه= و خ=رو=ج=يت==اب=ع يکع=دد ص==حيح ‌ اين تابع طول رشته ورودي را محاسبه و بعنوان خروجي بر مي‌گرداند. :م ثا ل Var St: string ; n: integer ; Begin St: = 'Turbo Pascal 7' ; n: = length ( S4 ) ; { n = 14 } Write ( ' The length of string is: ' , n ) ; End. تابع Pos هدف :براي جستجوي يک رشته داخل رشته ديگر شکل تابعFunction pos ( Str1: string ; Str2: : ; string ): Byte Str1يک عبارت يا متغير رشته اي و Str2نيز يک عبارت يا متغير رشته اي مي‌باشد و خروجي تابع يک عدد صحيح مي باشد .اين تابع محل اولين وقوع رشته Str1در رشته Str2را بعنوان خروجي بر مي‌گرداند. م ثا ل: ‏Var ; Str1 , Str2: string ; i: integer ‏Begin ; ' Str1: = ' Book ; ' Str2: = ' Pascal Book = i: = Pos ( Str1 , Str2 ) ; { i }8 ; ) Write ( ' i = ' , i ‏End. اول نکته :توجه کنيد که اگر عمل جستجو با موفقيت انجام نشود ( يعني رشته .در رشته دوم وجود نداشته باشد ) تابع مقدار صفر بر مي‌گرداند روال Str هدف :براي تبديل عدد به يک رشته عددي بکار مي رود. والocedure Str( I: integer: format , Str: string ) :1 : ; Procedure Str ( F: Real: format , Str: string ) :2 درشکل I ،1يک عبارت يا متغيرعددي بوده و Strيک متغير رشته‌اي ميباشد اين روال يک عدد صحيح با فرمت مشخص را به يک رشته عددي ‌ تبديل مي کند. درشکل F ، 2يک عبارت يا متغير رشته‌اي و Strيک متغير رشته‌اي مي‌باشد. 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. روال Val هدف :تبديل يک رشته عددي به يک عدد روال; Procedure Val ( S: String ; Var N: integer :1 : ; ) Var Error: integ ‏edure Val ( S: String ; Var N: Real ; Var Error: integ =ي Nيکم=تغير از ن=وع ص==حيح يا ا=عشار=يو Sيکع=بار=تيا م=تغير ر=ش=ته ا ، Errorن==يز يکم=تغير از ن=وع ص==حيح م=يب==اشد .ا=ينروا=ليکر=ش=ته ع=دد=ي را ب==ه يکع=دد ص==حيح يا ا=عشار=يت==بديلم=يک==ند و آ=نرا ت==وس=طم=تغير N =يگ=ردا=ند .ا=گر ع=ملت==بديلب==طور ص==حيح ا=ن=جام ش=ود ،م=قدار م=تغير ب==رم ‌ م=ي==ند. Errorب==را=بر ص==فر در غ=ير ا=ينصور=تم=حلو=جود ا=ش=کا=لرا م=شخص ‌ک Var St: string ; E , N: integer F: Real ; :م ثا ل ; Begin St = ' 475 ' ; Val ( St , N , E ) ; { N = 475 , E St = ' 475' ; Val ( St , F , E ) ; {F= St = '3.1716' ; Val ( St , F , E ) ; { F = 3.1716 =0} ,E=3 } ,E=0} End. رشتهها و کاراکترها ‌ ‏ارائه چند مثال در مورد مثال :برنامه‌اي بنويسيد که يک جمله از ورودي دريافت کرده سپس در صورتي که کلمه ISوجود داشته باشد آنها را به areتبديل نمايد و در نهايت رشته حاصل را در خروجي نمايش دهد. توجه کنيد که ممکن است بيش از يک بار کلمه ISتکرار شده باشد در اينصورت همه کلمات ISرا با areتبديل کند. 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 ; Var ، برنامه‌اي بنويسيد که يک رشته از ورودي دريافت کرده: مثال St1 , St2 : string ; دو سطرiدر, رشته سپس معکوس رشته را بدست آورده ;بهمراه خود j : integer .جداگانه چاپ نمايد Begin Writeln ( ' Enter sentence ' ) ; Readln ( St1 ) ; j : = 1 ; For i : = length ( St1 ) downto do Begin St2 [ j ] : = St1 [ i ] ; Inc ( j ) ; End ; Writeln ( ' The result ' ) ; Writeln ( St1 ) ; Writeln ( St2 ) ; 1 تمرينات • با فرض اينکه 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 :•خروجي قطعه برنامه زير را تعيين کنيد Var S1: string ; i: integer ; Begin S1: = 'ABCDEF' ; For i: = 1 to length ( S1 ) ; Delete ( S1 , i , 1 ) ; Writeln ( S1 ) ; .End :•خروجي قطعه برنامه زير را تعيين کنيد St: string ; i: integer ; Readln ( St ) ; For i: = 1 to length ( St ) Do If ( St [ i ] > = ' 0 ' ) and ( St [ i ] < = ' 9 ' ) t Delete ( St , i , 1 ) ; Writeln ( St ) ; S2 = ' Book ' , S1 = ' • با فرض اينکه ' هستند خروجي عبارت زير را تعيينpascal Book .کنيد nsert ( S1 , S2 , pos ( S1 , S2 ) ) ; 3 : = copy ( S2 , pos ( S1 , S2 ) , length ( S1 ) ; 3 : = copy ( S2 , pos ( St , S2 ) , length ( S2 ) ; elete ( S1 , pos ( S2 , S1 ) , length ( S2 ); S1 [ 0 ] := # 6 ; تمرينات برنامه‌نويسی •برنامه‌اي بنويسيد که يک پاراگراف را از ورودي دريافت کرده ( حداکثر= 10خط ) سپس: .الف) تعداد کلمات هر سطر را شمرده و انتهاي سطر نمايش دهد .ب) تعداد حروف صدا دار را شمرده چاپ نمايد .ج) تعداد خطوط برنامه را شمرده در خروجي چاپ کند .د) تعداد جمالت هر خط را محاسبه و در سطر هاي جداگانه نمايش دهد •برنامه‌اي بنويسيد که يک عدد در مبناي مشخص را از ورودي دريافت کرده سپس آن را به مبناي mکه از ورودي خوانده مي شود ببرد. •برنامه‌اي بنويسيد که يک پاراگراف را از ورودي دريافت کرده کلمات تکراري هر سطر را حذف نموده و پاراگراف حاصل را بهمراه پاراگراف اوليه در خروجي با پيغام مناسب نمايش دهد. • برنامهاي بنويسيد که دو عدد 20رقمي ( بصورت رشته بايد خوانده شود ) ‌ را از ورودي دريافت کرده سپس مجموع و حاصل ضرب اين دو عدد را محاسبه و در خروجي با پيغام مناسب چاپ نمايد. • برنامهاي بنويسيد که يک رشته از ورودي دريافت کرده ‌ سپس کلمات داخل آن را بصورت عمودي کاراکتر به کاراکتر نمايش دهد: • برنامهاي بنويسيد که يک پاراگراف با حداکثر 5خط را از ورودي دريافت ‌ نمايد .سپس مجموع ارقام يا اعداد ( در صورت وجود ) هر خط را محاسبه نموده در انتهاي همان سطر نمايش دهد. فصل 11 برنامههاي فرعي ‌ هدفهاي كلي ‏ ‌ ‏ ‏ شناخت اجزاء تشكيل‌دهنده توابع و روالها بررسي انواع پارامترها و متغيرها در برنامه‌هاي فرعي شناخت تفاوتهاي روالها و توابع معرفي مزاياي استفاده از زير برنامه‌ها رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند برنامه خود را به چندين زيربرنامه تقسيم‌بندي نمايد. ‏ زيربرنامهها را با توجه به قوانين موجود ،در ساختار برنامه جا دهد. ‌ باتوجه به مزاياي استفاده از آنها را در برنامه خود بكار ببرد.  روالها ‌ روالها نوعي از برنامه‌هاي فرعي هستند ،که به طور مستقل و جداگانه وظيفه ‌ يا وظايف خاصي از برنامه اصلي را انجام مي‌دهند .روال ها در صورت نياز اطالعات خود را از طريق پارامترها دريافت و همچنين در صورت نياز نتايج را از طريق پارامترها به برنامه اصلي باز مي‌گردانند .پارامترها در حقيقت خطوط برنامههاي فرعي هستند .پارامترها باعث مي شوند ‌ ،ارتباطي بين برنامه اصلي و که توابع و روال ها روانتر عمل کنند ،زيرا آنها به برنامه هاي فرعي اين قابليت را .مي دهند که با هر فراخواني ،داده‌هاي مختلفي را مورد پردازش قرار دهند ; Procedure :شکل کلي روال‌ها بصورت زير مي باشد Name ( parameters list ) کلمه ذخيره ش اسم روال ليست پارامترها Var { List of locad variable } Begin . . { Procedure Body } . . End ; { End of procedure } در حالت کلي روال ها در برنامه اصلي بصورت زير ظاهر مي‌شوند: ; اسم برنامه اصلي Program ; تعاريف برنامه اصلي ..... Procedure ; ‏Begin } { main program . . . فراخواني روال ها . . } End. { End of program پارامترها با توجه به محل وقوع آنها به دو دسته تقسيم مي شوند: .1پارامترهاي صوري ( ) Formal parameters 2.پارامترهاي واقعي ( ) Actual parameters از پارامترهاي صوري هنگام اعالن روال و از پارامترهاي واقعي هنگام م=يش=ود . ف==را=خوا=ن=يروا=لها ا=س=تفاد=ه= ‌ پارامترهاي صوري در حالت کلي 2نوعند ،که با توجه به نوع روال و تصميم برنامه نويس مورد استفاده قرار مي گيرند: پارامترهاي مقداري ( ) Value parameters پارامترهاي متغيري ( ) Variable parameters پارامترهاي مقداري ( ) Value parameters پارامترهاي مقداري ،پارامترهايي هستند که مقدار متغيرهاي فرستاده شده از برنامه اصلي را دريافت مي کنند و وظيفه آنها فقط عبور دادن مقدار به روال ميباشد .لذا تغیيرات پارامترهاي مقداري در روال به برنامه اصلي انتقال نمي‌يابد ‌ پ==ارا=م=ترهايم=قدار=يب==صور=تز=ير ت==ع=ريفم=يش=وند : ‏Name ( var1 : type ; var2 : type , . . . وع مقداري اسم روال کلمه ذخيره شده ‏edure : به برنامه زير توجه کنيد: مثال ram main 2 , y1 , y2 : integer ure test (A1,A2,B1,B2:integer);{formal param n { main } x1 , x2 , y1 , y2 ) ; { Actual parameters } { End of program } نکته :پارامترهايي که در روال بکار برده مي شود ،هيچ ارتباطي به پارامترهاي ارسالي از برنامه اصلي ندارند و فقط مقادير اين متغيرها از برنامه اصلي ارسال مي شود .لذا اسامي پارامترهاي صوري ممکن است هم اسم با پارامترهاي واقعي برنامه اصلي انتخاب شوند ،اين به معناي اين نيست که .اين پارامترها ( پارامترهاي صوري ) همان پارامترهاي واقعي هستند در مثال باال اين تناظر برقرار است: پارامترهاي واقعي ‏A1 ‏A2 ‏B1 ‏B2 متناظر است با پارامترهاي صوري ‏X1 ‏X2 ‏Y1 ‏Y2 متغيرهاي … Var2 , Var1 ,پارامترهاي مقداري هستند .توجه کنيد ،که اين پارامترها صوري هستند و نوع و ترتيب آنها بايد با نوع و ترتيب پارامترهاي واقعي در تناظر يک به يک باشند. : به برنامه زير توجه کنيد: مثال ram main x2 , y1 , y2 : integer dure test ( A1 , A2 , B1 , B2: integer ); {formal par ...... Begin { main } .... test ( x1 , x2 , y1 , y2 ) ; { Actual ...... parameters } End. { End of program } همانطور که مالحظه مي کنيد ،روالي بنام testبا 4پارامتر مقداري در برنامه استفاده شده است .متغيرهاي y2 , y1 , x2 , x1از برنامه اصلي به روال testارسال شده و بترتيب مقادير اين متغيرها در متغيرهاي با همان نوع در B2 , B1 , A2 , A1قرار مي گيرند. پارامترهاي متغيري ( ) Variable parameters يك پارامتر متغيري ،تغييرات يك پارامتر واقعي را بعنوان خروجي به برنامه اصلي برمي‌گرداند .تفاوت اين گونه پارامترها با پارامترهاي مقداري در ارسال تغييرات ايجاد شده در پارامترها مي‌باشد .وقتي نياز است ،كه نتايج روال به .برنامه اصلي برگردد ،از پارامترهاي متغيري استفاده مي‌كنند اعالن پارامترهاي متغيري به صورت زير مي‌باشد: … Name ( var id1 : type ; var id2 : type , ست پارامترهاي متغيري اسم رواال كلمه تغيرهاي id1 , id2و … پارامترهاي متغيري مي‌باشند كه نتايج روال ،توسط آنها به برنامه اصلي بازگردانده مي‌شود. و ميانگين دو عددExample; بنويسيد كه مجموعComputeSumAve روالي بنام: مثال Program .را محاسبه و نتيجه را در برنامه اصلي چاپ نمايد 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 , پارامترهاي واقعي و صوري عبارتند از: پارامتر واقعي ‏Num1 ‏Num2 ‏sum ‏ave متناظر است با پارامترهاي صوري ‏Num1 ‏Num2 ‏Total ‏Average Num1 , Numپ==ارا=م=ترهايم=قدار=يو sum , aveپ==ارا=م=ترهايم=تغيري يباشند ،كه توسط آنها نتايج به برنامه اصلي برگردانده مي‌شود. ‌ متغيرهاي محلي و سراسري ( )Local and Global Variable برنامههاي فرعي دو نوع متغير عالوه از پارامترها مورد استفاده قرار ‌ در ميگيرند .اين متغيرها متغيرهاي محلي يا متغيرهاي سراسر هستند.متغيرهاي ‌ محلي ،متغيرهايي هستند كه در بالك مربوط به خود قابل استفاده هستند .ولي .متغيرهاي سراسري در تمام برنامه‌هاي فرعي قابل دسترس مي‌باشند متغيرهاي محلي در داخل برنامه‌هاي فرعي در قسمت تعاريف معرفي مي‌شوند .و در خارج از روال قابل دسترسي نيستند cedure . روالي براي محاسبه مجموع و ميانگين دو عدد بنويسيد: مثال CalcSumAve ( Num1 , Num2: Read ); Sum , Ave: Real ; in Sum:= Num1 + Num2 ; Ave:= Sum / 2 ; WriteLn(' The Sum is =' , sum:8:2 ) ; WriteLn(' The average is =',ave:8:2); ;{End of procedure} در مثال باال sum , Aveمتغيرهاي محلي مي‌باشند .براي فراخواني روال ) ;CalcSumAve(x.yكه درآن x.yدو متغير ازنوع Real ميباشند .به شكل زيرتوجه‌كنيد: ‌ پارامترهاي صوري پارامترهاي واقعي ‏X ‏Num1 ‏Y ‏Num2 متغيرهاي محلي ‏Sum ‏Ave . خروجي برنامه زير را تعيين كنيد: مثال ram edure Example6; A , b , c: integer ; {Global Variables} test(var b: integer ; a: integer ); D: integer ; {local variable} n D:= 12 ; a:= b + d ; b:= a + c ; c:= c+ 2 ; n {Main} A:=1; b:=2; c:=3; Test(a,b); WriteLn( ' a = ' , a ,' b = ' , b , ' c = ' , c ) ; {End of program} خروجي برنامه باال بصورت زير است: a =16 b=2 c=5  روالها معمو ً ال به سه شكل ظاهر مي‌شوند: ‌ روالهاي بدون پارامتر ‌ بكارگيري بكارگيري روال همراه پارامترهاي با خاصيت ورودي بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي بكارگيري روال‌هاي بدون پارامتر گاهي الزم است تا برنامه فرعي كام ً ال مستقل (بي‌نياز از مقادير برنامه اصلي) در بخشهاي مختلف يك برنامه اجرا شود .در اين صورت نياز به استفاده از پارامتر ‌ بيمفهوم مي‌باشد و از روالهاي بدون پارامتر استفاده مي‌كنند ‌ . غالب ًا زمانيكه بخواهيم پيغام‌هاي خاصي را در قسمتهاي مختلف برنامه نمايش دهيم ،اين پيغام‌ها را در يك روال قرار داده و در صورت نياز ،روال مربوطه را فراخواني مي‌كنيم. . بدون دريافت پارامتري فراخواني مي‌شودHead روال: مثال Program Procedure Begin Example ; Head ; WriteL('Name Family Age No'); WriteLe('……………………………...'); End; Begin{Main} WriteLn( ' open university ' ) ; Head; End. بكارگيري روال همراه پارامترهاي با خاصيت ورودي همانطور كه قب ً ال اشاره كرديم ،هدف از بكارگيري پارامترها انتقال مقادير از برنامه اصلي به روال‌ها مي‌باشد .اگر اين انتقال يك طرفه باشد يعني فقط از برنامه اصلي به روال باشد ،اين نوع پارامترها فقط خاصيت ورودي خواهند داشت( .قبال در اين مورد توضيح داده شده است) در اين نوع روال‌ها از .پارامترهاي مقداري استفاده مي‌كنند . را درخروجي چاپ نمايدN تا1 روالي بنويسيد كه توسط آن مربعات اعداد: مثال gram Example ; N , I: integer ; cedure sq ( M: integer ) ; Begin WriteLn (' sqart is = ' , M * M ) ; End; in {Main} Write(' Enter Number = ') ; RealLn ( N ) ; For I:= 1 to N do Sq (i) ; . {End of program} بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي روالها پارامترها دو خاصيت مهم دارند يكي انتقال داده‌ها از ‌ در اين نوع برنامهاصلي ‌ برنامه اصلي به روال و ديگري انتقال يا ارجاع نتايج از روال به روالها از پارامترهاي متغيري استفاده مي‌كنند ‌ ميباشد .در اين نوع ‌ . مثال :روالي بنام changeبنويسيد كه توسط آن دوعدد بعنوان پارامتر دريافت كرده ،مقادير اين دو متغير را جابجا نموده و نتيجه را در برنامه اصلي چاپ نمايد. ; Program Example ‏Var ; A , b: integer ‏Procedure change (var x , y: ; )integer ‏var ;temp:integer ‏Begin ;Temp:=x ;X:=y ;Y:=temp ;End Begin { Main } ReadLn( a , b ) ; Change( a , b ); WriteLn (' a= ' , a , ' b= ' , b ) ; End.{End of program} ارتباط روال‌ها با يكديگر برنامهها نه تنها از طريق برنامه اصلي بلكه از داخل يكديگر ‌ در پاسكال زير نيز .فراخواني مي‌شوند روالها از داخل يكديگر تابع قوانين كلي زير است: ‌ فراخواني قا=نون اول قانون دوم قانون سوم قانون اول از هر برنامه (اصلي يا فرعي) به برنامه فرعي در صورتي مي‌توان ،دسترسي داشت ،كه در بخش تعاريف آن برنامه (اصلي يا فرعي) قرار داشته باشد. ميتواند ،به كليه برنامه‌هاي فرعي بطور مثال در شكل زير برنامه اصلي ‌ M p1,p2و… كه در بخش تعاريف برنامه اصلي قرار دارند ،مراجعه كند Main برنامه اصلي ‏Proc1 ‏Proc2 برنامه هاي فرعي . . . . ‏ProcN rogram Main; ar …….. rocedure proc1; ar …….. Begin ……… End; rocedure proc2; Var ……… Begin …… nd; Begin {Main} Proc1; Proc2; End. : به برنامه زير توجه كنيد: مثال روالهاي proc1 , proc2داخل برنامه اصلي Mainتعريف شده‌اند .لذ ‌ براحتي مي‌توان در برنامه اصلي به آنها دسترسي پيدا كرد. روالها خود نيز داخل هم مي‌توانند قرار بگيرند .دقيق ًا مثل روال‌هاي معمولي ‌ ا اين تفاوت كه در داخل روال بايد تعريف شوند .به اينگونه روالها ،اصطالح ًا روالهاي متداخل يا تودرتو مي‌گويند. ‌ قانون دوم روالها در بخش تعاريف يك برنامه به موازات يكديگر تعريف شوند و ‌ اگر روالهاي قبلي وجود ‌ روالهاي بعدي امكان رجوع به ‌ نه در داخل هم ،در خواهد داشت .بعبارت ديگر به روالي مي‌توان دسترسي پيدا كرد كه قب ً ال تعريف شده باشد. ميتوان بطور مثال اگر p1,p2,p3سه روال باشند دراينصورت ‌ بصورت زيرعمل كرد: برنامه اصلي ‏Main ‏P1 روال ها در شكل باال چون p2قب ً ال معرفي شده است مي‌توان آنرا داخل p3 فراخواني كرد. ‏P2 ‏P3 ‏P2 قانون سوم اگر روال‌ها در بخش تعاريف برنامه‌أي بصورت متداخل باشند ،در اينصورت از روال دروني مي‌توان به روال‌هاي بيروني كه قب ً ال تعريف شده‌، مراجعه كرد و همچنين از روال دروني به روال‌هاي بيروني كه به موازات يكديگر قرار گرفته‌اند ،نيز مي‌توان دسترسي پيدا كرد. ميتواند به روال‌هاي p2,p3دسترسي طور مثال در شكل زير روال ‌ p1 روالهاي p2 , p3مراجعه كند ميتواند به‌ ‌ پيدا كند .وهمچنين روال دروني ‌ p4 برنامه اصلي ‏Main ‏P3 روال ها ‏P2 ‏P1 اعالن روال‌ها به روش forward همانطور كه قب ً ال اشاره كرديم از روالي مي‌توان در روال ديگر استفاده كرد، كه قب ً ال تعريف شده باشد .در توربوپاسكال نقيصه فوق به كمك اعالن forwardقابل حل است .بدين صورت كه اگر روالي به هنگام تعريف با اعالن forwardهمراه باشد ،بدون رعايت از پيش تعريف شدن مي‌تواند، در روالهاي ديگر ظاهر شود. شكل اعالن به روش forwardبصورت زير مي‌باشد: ; ) Name ( parameters كلمه ذخيره شده ‏Procedure ; forward اسم ليست پارامترها كلمه ذخيره شده روال ogram forward_Main ; r ……… ocedure proc3 ; forward ; ocedure proc1; r …….. egin ……… d; ocedure proc2; r ……… egin ……… proc3; …… d; : مثال Procedure proc3; var …….. Begin ……. End; Begin {Main program} ……… proc1; proc3 ميكنيد با اعالن روال ‌ همانطور كه مالحظه proc2; بقيه روالها مي‌توانند به آن،forward بصورت proc3; .دسترسي پيدا كنند ……… End. {End of program} توابع ()Functions نوع ديگري از برنامه‌هاي فرعي ،توابع مي‌باشند .توابع مانند روال‌ها، روالها مي‌توانند ،تعدادي ‌ پيمانههاي مستقلي هستند .با اين تفاوت كه ‌ خروجي داشته باشند ،در حالي که توابع فقط يك خروجي دارند .در روال‌ها معمو ً ال خروجي‌ها توسط پارامتر به برنامه‌ اصلي ارجاع داده مي‌شود .ولي در توابع اينكار به نحو ديگر انجام مي‌گيرد. ميباشد: شكل كلي اعالن يك تابع بصورت زير ‌ ‏Function Name ( List Of Parameters ) : ; Function Type نوع تابع اسم تابع ليست پارامترها کلمه ذخيره شده :نکته تابع فقط مي‌تواند ،يك خروجي داشته باشد .نوع خروجي تابع ،همان نوع تابع محسوب مي‌شود .لذا با توجه به نوع خروجي تابع ،نوع تابع تشخيص داده ميشود .ذكر اين نكته خالي از لطف نيست كه ،نوع پارامترهاي صوري توابع ‌ معمو ً برنامههاي فرعي هستند كه فقط يك ‌ ال مقداري هستند چرا كه توابع نوعي خروجي برمي‌گردانند .لذا استفاده از پارامترهاي از نوع متغيري پسنديده نميباشد( .اشكال كامپايلري در توربوپاسكال ندارد ولي در پاسكال استاندارد ‌ اين كار اشكال كامپايلري دارد). مقدار خروجي توابع توسط اسم تابع برگردانده مي‌شود .توابع مثل روالها بعد .از قسمت تعاريف برنامه اصلي ظاهر مي‌شود :ميباشد ‌ شكل كلي توابع بصورت زير Name ( Parameters ) : Function Type ; Var ……….. Begin …………….. …………….. …………….. Name := Resualt Of Function ; End ; ميرسد: توجه به نكات زير در بكارگيري توابع ضروري بنظر ‌ .تمام پارامترهاي تابع بايد از نوع مقداري باشند نوع داده نتيجه تابع در انتهاي عنوان تابع و بعد از ليست پارامترهاي صوري .قرار مي‌گيرد .در بدنه تابع ،خروجي تابع با نسبت دادن مقدار به نام تابع مشخص مي‌شود am on برنامهأي بنويسيد كه يك عدد از ورودي دريافت كرده سپس ‌ : مثال فاكتوريل عدد را محاسبه،fact توسط تابعي بنام .در برنامه اصلي چاپ نمايد Example ; N: Integer ; Fact ( M : Integer ) : longint ; P , I : Integer ; P:= 1 ; For i:= 2 To P:= P * I ; Fact:= P ; M do { Main } Write ( ' Enter Number = ' ) ; Readln ( N ) ; Writeln (' Factorial is = ' , Fact ( N ) ) ; {Call Funct ناحيه داده‌ها بعد از فراخواني بشكل زير مي‌باشد: ناحيه داده هاي اصلي پارامترهاي صوري ‏M متغ=يرهاي محلي ‏P ‏I نتيجه تابع ? Factناحيه داده هاي پارامترهاي واقعي ‏N نتيجه تابع ? توابع بازگشتي (Recursion )Functions در پاسكال يك تابع يا روال مي‌تواند ،خودش را فراخواني نمايد .پيمانه‌اي كه خودش را فراخواني مي‌كند يك پيمانه بازگشتي نام دارد .اين نوع توابع در بدنه خود ،خودشان را فراخواني مي‌كنند .اين فراخواني تا برقراري يك شرط خاص كه غالب ًا به يك عدد ثابت ختم مي‌شود ،ادامه پيدا مي‌كند .سپس مقدار تابع از پايين به باال محاسبه مي‌شود و در نهايت نتيجه تابع حاصل ميشود ‌ . هنگامي كه تابع بازگشتي به خود مراجعه مي‌كند ،مقادير فعلي متغيرهاي خود را در محلي از حافظه بنام پشته ( )stackقرار مي‌دهد ،اگر بازگشت به تابع بازگشتي مجدداً صورت گيرد ،مقادير فعلي متغيرها مجدداً بدنبال مقادير قبلي و اصطالح ًا در پشت مقادير اوليه قرار مي‌گيرند .هنگامي كه شرط پاياني در تابع بازگشتي رخ مي دهد ،در اولين بازگشت مقاديري را كه هنگام مراجعه به خود ،در پشته نگهداري كرده ،مجدداً در دسترس قرار مي‌دهد و بهمين بازگشتهاي بعدي اين عمل تكرار مي‌شود تا مقدار تابع محاسبه شود. ‌ ترتيب در شكل زير نحوه قرار گفتن مراجعه‌هاي يك تابع بازگشتي به پشته را نمايش مي‌دهد. شرط پاياني مقادير متغيرها درآخرين بازگشت به تابع . . . . . مقادير متغيرها در سومين بازگشت به تابع مقادير متغيرها در دومين بازگشت به تابع مقادير متغيرها در اولين بازگشت به تابع ترتيب دسترسي به مقادير هنگام بازگشت از تابع بازگشتي از باال به پايين مي‌باشد و ميتوان آنرا بصورت زير نمايش داد: ‌ مقادير متغيرها درآخرين بازگشت به تابع . . . . . مقادير متغيرها در سومين بازگشت به تابع مقادير متغيرها در دومين بازگشت به تابع مقادير متغيرها در اولين بازگشت به تابع برنامهأي بنويسيد كه با استفاده از توابع بازگشتي فاكتوريل عدد صحيح ‌ : مثال . را محاسبه نمايدN am Example ; N : integer ; ion Fact ( N : integer ) : Longint ; If N = 1 Then Fact:= 1 Else Fact:= N * Fact ( N – 1 ) ; Writeln ( ' Enter Number ' ) ; Writeln ( ' Factorial is = ' , Fact ( N ) ); {Call Fun ميباشد: در برنامه باال ترتيب قرار گرفتن مقادير در پشته بصورت زير ‌ ‏N=1 ‏Fact := 1 ) 2 * Fact ( 1 ) 3 * Fact ( 2 ) 4 * Fact ( 3 ‏N=5 ) Fact ( 4 * 5 تابعي براي محاسبه بزرگترين مقسوم عليه مشترك دو عدد صحيح: مثال . بنويسيد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 ; مقايسه توابع و روال‌ها برنامههاي فرعي هستند ،كه بطور مستقل وظايفي را بر ‌ روالها هر دو ‌ توابع و :عهده دارند .ولي در اين ميان از بعضي جنبه‌ها متفاوت مي‌باشند كه عبارتند از ها از ط=ريقع=بارا=تروا=لف==را=خوا=نده= 1. روا=ل =ت ‌ =تس . ==حوه= ف==را=خوا=ن=يآ=ن=ها ب==ا ه=م م=تفاو ا= يشوند ،درصورتي كه فراخواني تابع توسط عبارات مقايسه‌أي و يا تخصيص ‌ يجه به يك متغير صورت مي‌گيرد گام ا=عالنيكت==اب=ع ،ن=وع ت==اب=ع يا ن=وع ن==تيجه ح=اص=لاز ت==اب=ع ب==ايد ذ=كر ش=ود، روالها نيازي به اين كار ندارند ‌ صورتي كه م=يت==وا=ن=ند ،چ=ندينخ=رو=ج=ي3. ها ‌ روا=ل =يگ=ردا=ن=ند ،و=ل=ي ‌ =وا=ب=ع ف==قطيكخ=رو=ج=يب==رم ‌ روالها ‌ رگردانند .درضمن نتيجه توابع توسط اسم تابع فرستاده مي‌شود ولي ز طريق پارامترها ،نتايج را برمي‌گردانند طريقه ارسال آرايه‌ها به توابع و روال‌ها آرايهها خود مجموعه‌أي از داده‌ها مي‌باشند ،لذا براي ارسال آنها نمي‌توانيم ‌ از روش معمولي ارسال پارامترها استفاده كنيم .و بطور مستقيم نمي‌توان آنها را به برنامه‌هاي فرعي انتقال داد .براي ارسال آرايه‌ها به عنوان پارامتر به برنامههاي فرعي از دستور Typeاستفاده مي‌كنند .دستور Typeقبل از ‌ تعاريف برنامه اصلي بكار مي‌رود و توسط اين دستور در واقع يك نوع سادهسازي در تعاريف فراهم مي‌شود .و با اين ساده‌سازي مي‌توان داده‌هاي ‌ ساخت يافته را به برنامه‌هاي فرعي منتقل كرد. فرم كلي دستور Typeدر بخش تعاريف بصورت زير است: تعريف داده ساخت يافته = شناسه ‏Type براي مثال يك ارايه از نوع صحيح را تعريف مي‌كنيم: ‏integ ‏array [1…100] of = No ; Type در اينصورت تعريف آرايه به No ،نسبت داده مي‌شود .اگر بخواهيم متغيري از نوع آرايه باال تعريف كنيم ،آنرا از نوع Noتعريف مي‌كنيم: ‏ar ; Number: No برنامهاي بنويسيد كه يك آرايه حداكثر 100عنصري را از ورودي ‌ ثال : دريافت كرده ،سپس عدد را از ورودي خوانده ،توسط تابعي بنام Search محل وقوع عدد در آرايه را نمايش دهد. ; integer ‏of ; Example ]a = array [1.. 100 ; B: a ; N : Word ‏Search (b:a; N: Word ; x: integer ) : Wo ‏m ‏on ‏I , Index: Word ; Flag: Boolean ; { local vari ; Index:= 0 ; Flag:= TRUE While ( I <= N ) And ( flag ) do Begin If b[ I ] = x Then Begin Index:= I ; Flag:= FALSE ; End ; Inc ( I ) ; End ; Search:= Index ; End ; {********************************************* } 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 } تمرينات • روال Downرا در نظر بگيريد: ‏cedure ; ) Down ( N: Integer ‏in ‏While N > 0 do ‏Begin ; ) Write ( N: 3 ; ) Dec ( N ; End ; ف) وقتي روال بصورت ) down (5فراخواني شود ،چه چيزي چاپ مي‌شود ب) مقدار پارامتر واقعي Nبعد از اجراي روال چيست؟ • تابع بازگشتي زير را در نظر بگيريد: ‏MyStery ( M , N: Integer ) : integer ‏ion ‏If ‏N = 1 Then ‏MyStery:= 1 ‏Else ; ) MyStery:= M * MyStery ( M , N – 1 } { End Of Function ف) تابع بازگشتي باال را به ازاء مقادير N=4 , M=5فراخواني كنيد. ب) تابع بازگشتي باال را به ازاء مقادير N=5 , M=3فراخواني كنيد. تمرينات برنامه‌نويسي ‏ برنامهاي بنويسيد كه اطالعات حداكثر 100دانشجو كه عبارتند از: ‌ ‏Name Familyفاميلي St_Noشماره اسم دانشجوئي را از ورودي دريافت كرده سپس: الف) توسط روالي بنام sortاطالعات را برحسب شماره دانشجوئي مرتب كند. ب) توسط تابعي بنام searchشماره دانشجوئي فردي را از ورودي دريافت نمايد ،در صورتي كه شخص موردنظر در ليست باشد ،ساير اطالعات آنرا نمايش دهد.  آرايهأي از نوع صحيح با حداكثر 100عنصر را در نظر بگيريد. ‌ برنامهأي بنويسيد كه ابتدا آرايه را از ورودي دريافت كرده سپس با استفاده از ‌ يك تابع بازگشتي بيشترين مقدار آرايه را محاسبه نمايد. دو آرايه مرتب حداكثر 100عنصري‌ كه شامل اسامي افراد مي‌باشد را درنظر بگيريد. برنامهاي بنويسيد كه نخست دو آرايه را از ورودي دريافت نموده سپس توسط ‌ روالي بنام mergeاين دو آرايه در هم ادغام نموده و در آرايه سومي قرار دهد فصل 12 دادههاي شمارشي ‌ مجموعهها و ‌ هدفهاي كلي مفهوم مجموعه و داده‌هاي شمارشي در زبان پاسكال ‌ مجموعه و داده‌هاي شمارشي به عنوان متغير استفاده از مجموعه‌ها و داده‌هاي شمارشي در برنامه رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند مفهوم مجموعه و داده‌هاي شمارشي را درك كند. بتواند در صورت لزوم از مجموعه و داده‌هاي شمارشي استفاده كند. مقدمه دادهها كه از نظر نوع يكسان هستند ،در غالب مجموعه و يا تعداد محدودي از ‌ گونههاي شمارشي نگهداري مي‌شوند كه مفهومي ‌شبيه در رياضيات دارند ‌ . براي استفاده در مواردي خاص نظير روزهاي هفته و يا نوع ماشينها و ...كه ترتيبي هستند و يا يك مجموعه از داده‌هاي پشت سر هم مي‌باشند ،استفاده از اين ساختارها كار را بسيار راحت مي‌كند .هر چند وجود آنها به عنوان ساختارهاي داده‌اي ،الزامي‌نيست .بهرحال به عنوان ابزارهايي از زبان پاسكال ‌ هستند كه در مواقعي ،ضروري بنظر مي‌رسند و مسئله را به صورتي قابل‌فهم و .راحت حل مي‌كند  مجموعهها ()Sets ‌ در زبان پاسكال مجموعه ،مفهومي ‌شبيه به مفهوم مجموعه در رياضيات جديد دارد .متغيري است كه شامل ليستي از اعداد صحيح ،كاراكتر ،بولين و يا از نوع شمارشي مي‌باشد كه داراي تعداد عناصر محدود به حداكثر 256تا مي‌باشد .از دادههايي از اين جهت بسيار شبيه به يك آرايه در زبان پاسكال است كه شامل ‌ يك نوع مي‌باشد ،ولي آرايه داراي عناصر محدودي نيست و در ضمن مانند .آرايه تعريف نمي‌شود تعريف مجموعه‌ براي تعريف يك مجموعه از كلمات كليدي set ofبصورت زیر استفاده مي‌كنيم: ‏Type ;Name= Set of Type Of Set :مثال ‏Type ;Digit_type = 0..9 ‏Digit = Set of ‏Digit_type مثال: V ar ch: set of char; #0..#255 bool: set of boolean; num: set of byte; false..true 0..255 x: set of 100..200; y: set of 'a'..'z'; z: set of '0'..'9'; عمليات روي مجموعه‌ها در رياضيات عمل عضويت وجود دارد كه به اين معني است كه متغيري عضو مجموعه مي‌باشد يا خير .اين عمل در زبان پاسكال با كلمه كليدي ‏in صورت مي‌گيرد .اگر عضويت صحيح باشد جواب Trueوگرنه ‌ ‏False ميباشد .همچنين دو مجموعه را مي‌توان با عالمات شرطي =،>< ، ‌ <= و >= مقايسه كرد كه همگي داراي خروجي درست يا غلط مي‌باشند. وليعالمات شرطي < و > در مورد مجموعه‌ها كاربردي ندارد. ‌ Begin مثال: a:= [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); False write([1,2,3,4,] = a); True write([1,2,3,4] = [2,2,1,1,1,3,4,4]); True write([1,2] = [1,2,3]); False write([1,2] <= [1,2,3]); عملگرها روي مجموعه‌ها در رياضيات مي‌توانيم مجموعه‌ها را با هم اجتماع ،اشتراك و تفاضل كنيم كه اين عمليات در پاسكال با عملگرهاي * ،+و -به ترتيب مي‌باشد .اجتماع دو مجموعه تركيبي از همه عضوهاي آنها است و اشتراك يعني عضوهايي كه در هر دو مجموعه مشترك است و تفاضل يعني اعضايي كه در مجموعه اول مي‌باشد و در مجموعه دوم وجود ندارد. مثال: ar a: set of byte; b: set of 0..10; c, d, e: set of byte; egin a:=[0,1,2,3]; b:=[2,3,4,5]; c:= a+b; 0,1,2,3,4,5]=[0..5] d:= a*b; e:= a-b; nd. d=[2,3] e=[0,1] :در استفاده از مجموعه ها به نکات زیر توجه کنید .1آرگومان ورودي روالها مي‌تواند مجموعه باشد كه قب ً ال در تايپ تعريف شده باشد ،نه اينكه مستقيم در روال به عنوان آرگومان بيايد .ولي خروجي يك تابع نميتواند از نوع مجموعه باشد. ‌ .2براي نوشتن يا خواندن مجموعه‌ها بايد عضو به عضو عمليات صورت بگيرد و مستقيم ًا توابع Write، Readروي آنها كار نمي‌كنند. مثال :برنامه‌اي بنويسيد كه تعداد محدودي عدد مختوم به -1را از ورودي بخواند و در يك مجموعه از اعداد صحيح قرار بدهد .سپس اعضاي اين مجموعه را با توجه به مجموعه ساخته شده در خروجي چاپ كند: ; Program test ‏Var ;num , temp : set of byte ; I , c : integer ‏Begin ‏Writln ('Enter numbers: ;) ; ) Readln( I ; ] [ =Num : ; c := 0 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 }  دادههاي شمارشي ‌ ()Enumeration دادههاي شمارشي ،يك مجموعه مرتب از اعداد است كه در برنامه ،هر عدد ‌ داراي نام بخصوصي است .اين نامها در داخل دو پرانتز باز و بسته قرار ميگيرند و بترتيب از صفر مقدار مي‌گيرند مگر اينكه برنامه‌نويس به آنها ‌ .مقدار مخصوصي بدهد به مثال زير توجه كنيد : ‏Type ‏Cars_type = (Peykan, Pride, Pegout, ;)K ‏Var ;Cars: cars_type ميتواند مقادير داخل داده‌هاي شمارشي را بگيرد: حال در برنامه ‌ cars ;cars:= Pride ;cars:= PK : به مثال زير توجه كنيد 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 :نکته متغير داده شمارشي شبيه مجموعه‌ها حداكثر داراي 256عضو مي‌تواند باشد كه شمارهگذاري مي‌شود و لذا يك بايت حافظه را اشغال مي‌كند. ‌ از صفر تا 255 عمليات روي داده‌هاي شمارشي دادههاي شمارشي همانند هر نوع تايپي مي‌توانند در typeبرنامه تعريف شود ‌ و به عنوان آرگومانهاي روالها و يا خروجي توابع مي‌تواند درنظر گرفته شود ولي حتم ًا بايد در typeتعريف شده باشد و مستقيم ًا نمي‌توان بكار برد. مجموعهها و آرايه‌ها نيز مي‌باشند ،لذا ابتدا در typeتعريف ‌ اين عمل مشابه ميشود ،سپس به عنوان ورودي و يا خروجي روالها استفاده مي‌شود وگرنه ‌ خطاي كامپايلري پيش خواهد آمد .همچنين مي‌توان در آرايه‌ها از داده‌ها شمارشي استفاده كرد. مثال :مشابه مجموعه‌ها نمي‌توان داده‌هاي شمارشي را مستقيم ًا Read يا Writeكرد .برنامه‌اي بنويسيد كه اعداد صفر تا شش را به مراتب دريافت دادههاي شمارشي روزهاي متناظر با آنها را از شنبه تا جمعه كرده و به كمك ‌ را حساب كند. ‏Program test: ‏Type = days_type ; ) at,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 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); تمرينات ر ] A=[1,3,5,7و ] B=[2,4,6و ] C=[1,2,3باشد عبارات زير ر ابی کنيد. الفA + (B –C) - )A + (B*C ب- ج- د– ‏A+B+C ‏in A 2  برنامهاي بنويسيد تا مجموعه اي از كاراكترهاي كوچك را گرفته و به يك ‌ مجموعه از كاراكترهاي حروف بزرگ متناظر با آن تبديل كند. به كمك داده‌هاي شمارشي ،برنامه اي بنويسيد كه نام دانشجويان يك كالس را در برگيرد و هر دانشجو نيز يك شماره داشته باشد .سپس با دريافت نام او شماره او در نمايشگر چاپ شود. فصل 13 ركورد ها )(Records هدفهاي كلي مفهوم ركورد و اجزاي آن انواع ركوردها و استفاده از آن در برنامه معرفي مزاياي ركوردها در برنامه رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند مواقع لزوم ركورد را تشخيص دهد. از ركوردها در برنامه‌اش استفاده كند. برنامه‌هاي بزرگ و با داده‌هاي زياد بنويسد. مقدمه يافتهاي كه در اينجا مطرح مي‌شود ،ركورد نام دارد كه جهت ساخت ‌ ‌ نوع داده نگهداري داده‌هاي مختلف نظير نام ،نام خانوادگي ،سن و آدرس براي يك دانشجو بكار مي‌رود .ركوردها برخالف آرايه‌ها كه داراي عناصر از يك جنس و نوع هستند ،داراي عناصر از انواع مختلف مي‌باشند .اطالعات از نوع مختلف را نمي‌توان در آرايه نگهداري كرد چرا كه داراي جنس مشابه نيستند و لذا از ساختاري به نام ركورد استفاده مي‌شود. تعريف ركوردها ساختيافته ای که از یک سری داده ها یا اطالعات مرتبط به هم ‌ نوع داده .تشکیل می شود ‌ .هر کدام از اطالعات را یک فیلد می نامند بطور كلي تعريف نوع ركورد در زير آمده است: ‏ype ‏Name = Record ;Field1-list : type1 ;Field2-list : type2 .. .. ;Fieldn-list : typen ;End : استفاده مي‌ش=ود كه مطابق زيرمي‌باشدRecord از كلمه كليدي،راي س=اختن ركورد Type Student = Record Name: String [10]; Family: String [15]; Age: integer; Address: String; End; حال مي‌توان در. استRecord از نوعStudent در اين تعريف : برنامه تعريف كردvar Var S: Student; دسترسي به فيلدهاي ركورد براي دسترسي به فيلدهاي ركورد ازعالمت ' '.استفاده مي‌شود .يعني بصورت‌زير: نام فيلد .نام متغير ركورد برنامهاي بنويسيد كه ركوردي از نوع ‌اعداد ايجاد كرده و مقادير ‌ مثال: ي كند. آنرا مقداره ‌ Type Numbers = record a, b, c = integer; x, y, z = Real; end; Var Num = Numbers; begin Num. 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. برنامهاي بنويسيد كه ركورد يك دانشجو را داشته باشد و با توجه ‌ مثال : به جنس او كلمه آقا و يا خانم را به همراه نام و نام خانوادگي‌اش را چاپ كند. ‏Type ‏Student = record ;Id: integer ;]Name: string[10 ;]Family: string[15 ;Sex: char ;Age: integer ;End ‏Var ;Stu: student 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. بدست آوردن حجم يك ركورد براي بدست آوردن فضاي اشغال شده توسط ركورد ابتدا بايد فضاي اشغال شده توسط تمامي‌فيلدها را بدست آورده و سپس باهم جمع كنيم. مثال زير را درنظر بگيريد: ype nd; ar List1 = Array [1… 5] of integer; List2 = Array [1… 5] of char; Rectype = Record A, B: Real;  6*2 C, D: String [10];  10+1 F: Array [1… 10] of Boolean;  G: list1;  2*5 1*10 x: Rectype; . بايت فضا اشغال مي‌شود10+10+11+12=43 ركوردهاي تودرتو فيلدهاي يك ركورد مي‌توانند از هر نوعي باشد ،از جمله مي‌توانند از نوع ركورد ديگري باشند .در اينجا نيز مشابه قبل دسترسي به همان صورت ‏Type ميباشد فقط به تعداد ركوردهاي تودرتو '.' ،پيش مي‌آيد. ‌ ‏Rec = record زيرتوجه كنيد: ‌ به مثال ‏a, b: ;integer ;c: char ‏x: Record ‏p: ;integer ‏q: ;integer Var ‏r: ;Rec دراينجا يك ركورد تودرتو به نام Recتعريف شده ‌است كه متغير rاز آن ميتوان نوع ‌تعريف شده است .سپس براي دسترسي به فيلدهاي ‌ a , b ,c به صورت زير عمل كرد: ‏r.a ‏r.b ولي براي دسترسي به فيلدهاي p ,qچون متعلق به ركورد xنيز هستند داريم: ‏r.x.p ‏r.x.q  آرايهاي از ركوردها ‌ هنگاميكه ما تعدادي داده مشابه داريم ولي در هريك ،داده‌هاي مختلفي وجود ‌ دارد مي‌توانيم يك ركورد تعريف كرده ،سپس آرايه‌اي از آن تعريف كنيم. ‏pe ‏Student = record ;]Name: string[10 ;Id: integer ;Age: integer ;End ;Arr_stu: array[1..10] of student ;S: Arr_stu در باال ابتدا يك ركورد دانشجو تعريف شده است ،سپس به تعداد 10نفر دانشجو تحت آرايه Arr_stuشكل گرفته است و سرانجام متغيري به نام S از نوع آن تعريف شده است. مشابه ساختار آرايه ،چيزي عوض نشده است و فقط هر عنصر آرايه ،يک ركورد مي‌باشد كه داراي سه فيلد مطابق جدول فوق مي‌باشد. براي دسترسي به آرایه فوق داريم: ‏S[1].name ‏S[1].id ‏S[1].age ‏S[2].name ‏S[2].id .. .. .. ارسال ركورد به زيربرنامه‌ها ركوردها را مي‌توان مشابه انواع تعاريف ساده ديگر به صورت پارامترهاي متغير و مقدار به زيربرنامه ارسال كرد .ولي نوع برگشتي توابع نمي‌تواند از نوع ركورد باشد ،يعني حتم ًا بايد از نوع ساده نظير integer، charو... باشد و از انواع تركيبي نظير ركورد ،آرايه ،مجموعه و فايل نمي‌تواند باشد. اگر بخواهيم ركوردي را بصورت پارامتر به زيربرنامه ارسال كنيم ،ابتدا بايد آنرا در typeتعريف كرده و سپس ارسال شود وگرنه كامپايلر خطا صادر ميكند. ‌ دانشجو ايجاد30 را برايstu مي‌خواهيم برنامه‌اي بنويسيم كه ركورد: مثال . به كمك زيربرنامه مقداردهي شده و چاپ شوند،كرده Program test; Const no = 30; Type Stu-rec = Record Name: string [10]; ID: integer; Age: record Day: integer; Month: integer; Year: integer; End; End; Stu_arr=array[1..no] of Var Stu: stu_rec; Procedure ReadStu(Var S: Stu_rec); Var i: 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; Procedure WriteStu(S: Stu_rec); Var i: 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. تمرينات ‏براي گونه‌هاي حيوانات يك پارك نظير پرندگان وحشي ركوردي شامل نام ،دسته ،محيط زندگي ،سن بسازيد .در نظر بگيريد كه در پارك 100 گونه از يك پرنده وحشي وجود دارد (راهنمايي :آرايه‌اي از ركورد با فيلدهاي گفته شده بسازيد). ‏ برنامهاي بنويسيد كه براي نگهداري تاريخ به صورت روز ،ماه و سال ‌ براي 100سال بكار رود .در واقع به صورت تقويم باشد و جمله‌اي در مورد آن تاريخ را نگهداري كنيد؟ (راهنمايي :آرايه‌اي 366تايي از روز بهمراه آرايهاي از 12ماه و يك سال و يك رشته را به صورت يك ركورد در نظر ‌ گرفته سپس براي 100سال بصورت يك آرايه صدتايي در نظر بگيريد). فصل 14 ف ــايـلها )(Files هدفهاي كلي مفهوم فايل و انواع آن موارد استفاده از فايلها رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند در برنامه‌اش از فايلها استفاده كند.. براي برنامه‌هاي با داده‌هاي زياد از فايل استفاده كند.. با فايلهای داده‌اي و بايزي برنامه‌نويسي كند. مقدمه براي ذخيره دائمي داده‌ها از ساختاري به نام فايل ( )Fileاستفاده مي‌كنيم. تاكنون همه عمليات الزم در حافظه اصلي انجام مي‌گرفت كه گذرا و فقط به زمان اجراي برنامه و روشن بودن كامپيوتر بستگي داشت .ولي در فايلها دادهها در فايلهايي قرار دارند كه حتي بعد از خاموش چنين نيست ،بلكه ‌ كردن كامپيوتر ،بعدها قابل دسترسي است. فايلهاي متني ()Text يك فايل متني از تعداد كاراكتر تشكيل شده است كه با يك اسم در روي ديسك ذخيره شده است .چون فايل از نوع متني است مي‌توانيد داده‌هاي داخل آنرا مشاهده كنيد. ساختار داده‌ها در يك فايل متني بدين صورت است كه تعدادي خط وجود دارد كه به عالمت EOLNختم مي‌شوند و در انتهاي فايل نيز عالمت EOFقرار دارد .طول خطوط نامشخص است و اندازه فايل ممكن است بسيار بزرگ يا كوچك و يا تهي باشد. طريقه ایجاد يك فايل متني تعر=یف یک متغیر فایلی 1. نسبت دادن اسم فایل به متغیر فایلی 2. Rewriteایجاد فایل با دستور 3. تعریف یک متغیر فایلی ;Name : Text نسبت دادن اسم فایل به متغیر فایلی Rewriteایجاد فایل با دستور ‏Assign(FileVar , ) ’‘NameFile ‏Rewrite( FileVar ) مثال :برنامه‌اي بنويسيد كه از ورودي 10عدد دريافت كند و آنها را به ترتيب هر كدام دريك خط ازيك فايل خروجي بريزد و در انتها تعداد و مجموع آنها را بنويسد. ‏r ;f: Text ;A: Array [ 1.. 10] of integer ;Sum, i: integer ‏gin ‏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 do ‏For ‏i: = 1 ‏to 10 ;)]Writeln (f, A[i ;)Writeln (f, Sum ;)Close (f ‏End. بعد از نوشته شدن اطالعات در فایل ،فایل باید بسته شود برای اینکار از :روال زیر استفاده می شود )Close(FileName طريقه خواندن اطالعات از يك فايل متني تعر=یف یک متغیر فایلی 1. نسبت دادن اسم فایل به متغیر فایلی 2. باز کردن فایل برای خواندن با 3. ‏Resetدستور باز کردن فایل برای خواندن با دستور ) Reset ( FileName دستور Readو Readlnبرای خواندن اطالعات از فایل بکار می روند . م=يرود .ا=ينع=مل Readlnب==ع=د از خ=وا=ندنداد=ه=‌هايم=ورد ن==ظر ب==ه س==طر ب==ع=د ‌ ميباشد .ولي قبل از استفاده از اين دستورات بايد راي Writelnنيز چنين ‌ ايل متني براي خواندن يا نوشتن باز شود .دستور Resetفايل متني را براي خواندن باز مي‌كند و مكان نما را ابتداي فايل مي‌برد. دستور Rewriteفايل متني را براي نوشتن در آن باز كرده ،و مكان نما را به ابتداي آن مي‌برد. ' مي‌خواهيم اعداد داخل فايلtest.dat' حال بافرض موجود بودن فایل متني : را كه پنج تا هستند را از فایل خوانده باهم جمع كنیم rogram usefile ; ar f: Text; str1, str2: string; a, b, c, d, e: integer; egin Assign (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); nd. برنامهاي بنويسيد كه يك فايل متني شامل چند جمله را از ورودي دريافت ‌ : مثال .كرده و يك كپي از فايل درخروجي بسازد ar f1,f2: Text; str1,str2 : string ; ch : char ; egin write('Enter Input file: '); readln(str1); write('Enter output (copy) file: readln(str2); assign(f1,strl); reset(f1); assign(f2,str2); rewrite(f2); ميشوند و ترتيب براي در اين برنامه ابتدا دو فايل به نامهايشان نسبت داده ‌ خواندن و نوشتن باز مي‌شوند .سپس توسط eofشرط خاتمه فايل ورودي يعني f1بررسي مي‌شوند و در يك حلقه تو در تو whileشرط خاتمه خطوط كاراكترها از فايل ورودي خوانده شده و در ‌ نيز توسط eolnبررسي شده و فايل خروجي نوشته مي‌شوند. 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); فايلهاي دودويي و نوع‌دار() Binary & Typed ن نوع فايل‌ها در زبان پاسكال از تايپهاي مختلف record ,array read ,integer ,charو … تشكيل شده است كه نياز به پردازش متنوع مرتبسازي ،جستجو ،حذف و… دارند .اين فايلها پس از ايجاد توسط ‌ شبيه رنامه ،قابل رؤيت توسط ويراشگرها نيستند ،بلكه به صورت كد‌هاي اسكي ميباشند يعني دودويي مي‌باشند .نحوه دسترسي به اطالعات آنها نيز به ‌ صورت تصادفي ( )Randomاست. طريقه ایجاد يك فايل نوع دار تعر=یف یک متغیر فایلی 1. نسبت دادن اسم فایل به متغیر فایلی 2. Rewriteایجاد فایل با دستور 3. تعریف یک متغیر فایلی Name : File Of FileType ; نسبت دادن اسم فایل به متغیر فایلی Assign(FileVar , ‘NameFile’ ) ایجاد فایل با دستورRewrite Rewrite( FileVar ) :نوعدار از انواع مختلف در زير آورده‌شده‌است ‌ نحوه تعريف يك فايل دودويي Const n=100; Type Student = Record Name: string[10]; Family: String[15]; Age: integer; ID: integer; end; Sarray = Array [1..n] of student; :مثال ل دودويي از نوع صحيح ل دودويي از نوع ركورد دانشجو فايل دودويي از نوع كاراكتر ‏Var ;Bf2: file of integer ;Bf3: file of student ;Bf1: file of char ل دودويي از مجموعه Aتا Bf6: file of set of 'A'..'Z ;'Z تايي) از ورودي خوانده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); كتابخانهاي پاسكال جهت كار با فايلها ‌ در جدول صفحه بعد تمام روالهاي آورده شده است كه به همراه توضيحات الزمه جهت كار با آنها مي‌باشد. همچنين براي هر تابع و رويه محل مورد استفاده آن در ستونی مشخص شده است . رديف نام دستور عمليات مربوطه فايلها ي متن ي فايلها ي نوع دار 1 ‏Assign نام فايل را به متغير فايل نسبت مي‌دهد. + + 2 ‏Reset فايل مربوطه را براي خواندن باز مي‌كند. + + 3 ‏Rewrite فايل مربوطه را براي نوشتن باز مي‌كند. + + 4 ‏Read خواندن از فايل + + 5 ‏Readln خواندن از فايل متني + × 6 ‏Write نوشتن در فايل + + 7 ‏Writeln نوشتن در فايل متني + × 11 ‏Close بستن فايل + + + 12 ‏Seek انتقال وحركت مكان‌نمادر فايل دودويي × + + 13 ‏Seekoln مشخص نمودن رسيدن به انتهاي خط فايل متني + × × 14 ‏Seekeof مشخص نمودن رسيدن به انتهاي فايل متني + × × 15 ‏Filefos شماره ركو5رد از انتهاي فايل × + + 16 ‏Filesize تعداد ركوردهاي فايل جاري را برمي‌گرداند × + + حذف يك ركورد از انتهاي فايل × + + 18 ‏Erase براي حذف فايلها بكار مي‌رود. + + + 19 ‏Rename براي تغيير نام فايلها بكارمي‌رود. + + + 20 ‏Flush محتويات بازفايل متني را به ديسكت انتقال مي‌دهد. + × × ‏Truncate 17 مثال های حل شده . برنامه‌اي بنويسيد كه تعداد خطوط يك فايل متني را بدست آورد: مثال Var F: text ; ch : char ; str: string[20]; count: integer; Begin Write ('Enter the file name: ); Readln(str); Assign(f,str); Reset(f); 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. كتاب را در يك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; 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. تمرينات ‏ برنامهاي بنويسيد كه از يك فايل متني از اعداد حقيقي كه در سطرها و ‌ ستونها مختلف قرار دارند ،ميانگين داده‌ها را بدست آورده و در مانيتور چاپ كند. ‏ برنامهاي بنويسيد كه در انتهاي يك فايل متني ،همان فايل متني را اضافه كند. ‌ ‏ برنامهاي بنويسيد كه در يك فايل نوع دار از كاراكترها ،اطالعات آماري ‌ هر كاراكتر را بدست آورده ،يعني تعداد هر كاراكتر را بدست آورد. مث ً ال كاراكتر ' 'Aبه تعداد 45تا و كاراكتر ' 'Bبه تعداد 36تا و… فصل 15 تحليل الگوريتمها هدفهاي كلي مفهوم و تعريف الگوريتم= مفهوم كارايي يك الگوريتم مرتبه يك الگوريتم= رفتاري هدفهاي÷ :دانشجو پس از مطالعه اين فصل بايد بتواند برنامه خود را تحليل زماني نمايد. مرتبه الگوريتم را بدست آورد. الگوريتمهاي بازگشتي را تحليل نمايد. مقدمه تحليل يك الگوريتم يعني ارزيابي روشهاي مختلف حل آن مسئله ،بررسي و محاسبه بهترين و بدترين حالتها ،بصورتي كه با توجه به شرايط بهترين حالت را بتوان انتخاب كرد .الگوريتم در واقع تعداد محدودي از دستورالعملها می باشد كه بترتيب اجرا مي‌شوند و هدف خاصي را دنبال مي‌كنند تعريف مرتبه يا پيچيدگي الگوريتم ( Oبزرگ) براي بدست آوردن بدترين حالت اجراي يك الگوريتم يا مرتبه پيچيدگي الگوريتم از Oبزرگ استفاده مي‌كنيم و بنا به تعريف عبارتست از )) f(n)=O(g(nو مي‌خوانيم ) f(xاز مرتبه ) g(xمي‌باشد ،اگر و تنها )c  0,n  n0  f (x)  c.g(x ميتوان با در ر نظرگرفتن g(n)=nو c =3رابطه زیر مثال ‌ n 2=f(n)+1 : حاصل می شود : )n>=3 <= cg(n)=1n+2f(n ميباشد. لذا مي‌توان گفت ،پيچيدگي زماني ) f(nاز مرتبه )‌ O(n بدست آوردن مرتبه الگوريتمها براي بدست آوردن مرتبه اجراي الگوريتمها بايد به دقت بررسي شود و تعداد تكرار آن الگوريتم بدست آورده شود .يعني در واقع تعداد تكرارها بدست آورده شود و سپس با هم جمع شده و مطابق مثالهاي قبلي به پيچيدگي زمان واقعي رسيد .براي اين منظور از الگوريتمهاي ساده شروع كرده و به پيچيده ميرسيم. ‌ حلقههاي ساده به شكل زير باشد: ‌ فرض كنيد الگوريتمي داراي ;x:= 0 ‏For I :=1 to n ‏do ;x:=x+1 كه در آن nتعداد ورودي مي‌باشد .يعني حلقه forبستگي به پارامتر nدارد. برميآيد تعداد n-1+1تكرار يعني ‌ همان طور كه از تعريف حلقه for م=يب==اشد. nت==كرار و=جود دارد و ل=ذا ق=طعه ب==رنام=ه ف==وقاز م=رتبه)‌ O(n : مرتبه تابع زير را بدست آوريد: مثال Function fact ( n : integer ) : integer ; var f,i: integer; begin f:=1; for I := 1 to n do f:=f*i; fact:=f; end; تابع فوق فاكتوريل عدد nرا بر مي‌گرداند .همانطور كه مي‌بينيد تابع شامل يك حلقه forساده بوده كه از يك تا nمتغير بوده و لذا nبار تكرار مي‌شود. 2جمله ساده نيز وجود دارد که زمان های ثابتی دارند. بنابراین مرتبه تابع باال برابر است با : )O(n تمرينات : پيچيدگي زماني توابع زير را بدست آوريد 1. f1(n) n  2n2  100 2. f 2(n) n3  nlogn  n  2 3. f 3(n) 2n  5n  logn!nn 4. f 4(n) logn  n 1 5. f 5(n)  n2 logn  nlogn  (logn)! : پيچيدگي زماني تابع زير را بدست آوريد Function test( n : integer ) : teger ; 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; پایان

62,000 تومان