صفحه 1:
مبانی کامپیوتر
eo
جعفر تنها - مهدی یوسف خانی
: ارائه دهنده
صفحه 2:
اهداف کلی این درس
:دانشجو پس از مطالعه این درس باید بتواند
الگوریتمی برای حل مسئله ارائه دهد
اصول و مبانی اولیه نرم افزار و سخت افزار را بشناسد
اهداف و مفا هیم زبان های برنامه نویسی را بداند
مفاهیم اولیه برنامه نویسی ساخت يافته را بداند و اصول لازم را در
مرحله اجراء بکار پپرد
دستورات زبان پاسکال را دز برنامه ها بگار بیرد
از توابع و روال های استاندارد زبان پاسکال در صورت لوزم ا ستفاده
Stee cae
صفحه 3:
*از توابع ۰ روال ها برای جدا کردن قطعات برنامه استفاده کند
*فایل ها را به عنوان محلی برای ذخیره داده ها در برنامه استفاده
کند
*با استفاده از قابلیت های زبان پاسکال برنامه ای را برای یک
صفحه 4:
* جایگاه این درس در رشته مهندسی کامپیوتر
این درس اولین درس دانشگاهی رشته می باشد و نقطه شروعی برای ورود به
دنیای جالب برنامه نویسی و علم و فن کامپیوتر هست . بنابراین یاد گیری
.اصول اولیه برنامه نویسی در اين درس از جایگاه ویژه ای برخوردار است
اين درس پایه و اساس برنامه نویسی که جزء اصول این رشته می باشد را به
. فركيران ياد مى دهد
بنابراین یادگیری دقیق اين درس به همراه ارائه پروژه های عملی که لازمه اين
. درس می باشد جزء اهم مسائل می باشد
خی مج
مش هه
صفحه 5:
: توصيه مى شود اين درس در بيست جلسه بصورت ذیل ارائه شود
بخش اول :( در ينج جلسه )
اهداف درس و فصل اول و دوم كتاب درسى
: بخش دوم
اجلسه ششم
فصل سوم كتاب درسى
: جلسه هفتم
فصل جهارم كتاب درسى و
صفحه 6:
فصل ششمکتاب درسی
: جلسه دهم و یازدهم
فصل هفتم کتاب درسی
: جلسه دوازدهم
فصل هشتم کتاب درسی
:حلسه سیزدهم
فصل نهم كتاب درسی
صفحه 7:
فصل دهم کتاب درسی
: جلسه پانزدهم و شانزدهم
فصل يازدهم كتاب درسی
: جلسه هفدهم
فصل دوازدهم کتاب درسی
: جلسه هیجدهم
فصل سیزدهم کتاب درسی
: جلسه نوزدهم
فصل جهاردهم کتاب درسی
صفحه 8:
: جلسه بیستم
فصل پانزدهم کتاب درسی و
5 فلا فرش
ارائه پروژه نهائی در
صفحه 9:
فصل ۱
لكيييتمها Algorithm
هدفهاي كلي
كل مسئله و ارائه الگوریتم
شناخت اجزاء لازم برای حل ه ale
بررسی صحت الگوریتم
صفحه 10:
:دانشجو پس از مطالعه این فصل بايد بتواند
الگوریتمی را برای حل مسئله ارائه دهد.
الگوریتم های مختلف برای یک مسئله را مقایسه کند.
شرط ها و حلقه ها را در الگوریتم بکار ببرد .
10
صفحه 11:
در زندگی روزمره. انسان با مسائل مختلفی روبروست و برای هر کدام
از این مسائل (حل مشکلات) راه حلی و روشی را بر میگزیند.
مسائلی از قبیل راه رفتن. غذا خوردن. خوابیدن و غیره که بشر Uy A
هر روز آنها را پیش روی خود دارد.
همه این مسائل نیاز به روشی برای حل کردن دارند مثلا راه رفتن باید
با ترتیب خاصی و مراحل معینی انجام شود. تا مسئله راه رفتن بیای
بشر حل شود. اصطلاحا روش انجام کار یا حل مسئله را الكوريتم ان
مسئله مینامند
11
صفحه 12:
** تعریف الگوریتم
الگوریتم مجموعهای از دستورالعمل ها. برای حل مسئله میباشد که
شرایط زیر را بايد دارا باشد:
* دفيق باشد
* جزئیات کامل حل مسئله را داشته باشد.
*ایاپذیر باشد.
—
صفحه 13:
* مراحل الگوریتم
برای حل یک مست آن
مسئله باید الگوریتم آن مسئله را مشب :
98 حا طراحی الگوریتم براى أن مسئله و سا سس ۱
١ - يده مى شود. د
ریتم معمولا سه مرحله زیر را از هم جدا میکنند: اق
*خواندن دادهها
۴انجام محاسبات
*خروجیها
صفحه 14:
0 شروع
,2-١ را بخوان.
۲-مجموع 2 , 0 را محاسبه و در 91110 قرار بده.
۳- 91110 را در خروجی چاپ کن
۴-پایان
صفحه 15:
شروع
١ سه عدد از ورودى بخوان
۲- مجموع dw عدد را محاسبه و در 5111311 قرار بده.
۳- 91110 را بر سه تقسیم کرده.در 2۷6 قرار بده.
*- 51117 , 2۷6 را در خروجی oe کن.
15
و بان
صفحه 16:
فلوچارت از شکلهای زیر تشکیل میشود.
*علامتهای شروع و پایان: که معمولا از یک بیضی استفاده میکنند:
*علامتهای ورودی و خروجی: که معمولا از متوازیالاضلاع استفاده میشود:
صفحه 17:
جایگزین یا
محاسبات
*علامت شرط: برای نمایش شرط از لوزی استفاده میشود.
*علامت اتصال: برای اتصال شکلهای مختلف بهم از فلشهای
جهتدار استفاده میکنند.
17
صفحه 18:
* فلوچارت مجموع سه عدد
9
Read(a,b,c)
Sum < atb+c
Ave < sum/3
3 Write(sum,ave) 2
End)
هته
صفحه 19:
(2
ee ee eee
راى حل اين مسئله 2 , 0 را دو متغیر که در آنها دو عدد خوانده شده.
فرار میگیرند در نظر میگیریم. سپس با استفاده از یک متفیر کمکی
محتويات اين دو عدد را جابجا مى كنيم :
19
صفحه 20:
emp
a
20
صفحه 21:
صفحه 22:
> << کچ
eo تمرین
۱- فلوچارتی رسم نمائید که طول و عرض مستطیل را از ورودی دریافت
وه معط و ناس آنز| معانته و ile 9
۲- فلوچارتی رسم نمائید که شعاع دایرهای را از ورودی دریافت کرده.
محيط و مساحت انرا محاسبه و جاب نماید.
فلوجارتى رسم كنيد كه سه عدد :2151 ,56601201 , 111130 را از و
بافت كرده. محتويات انها را جابجا نموده. حاصل را در خروجى
ع كيد
صفحه 23:
6- فلوجارتی رسم نمائید که دو عدد از ورودی دریافت کرده. سپس
دو باك ذو هدق را كدوج انتسهادو راو مجير كمكح تانينا كد
۵- فلوچارتی رسم نمائید که عددی (درجه حرارت برحسب سانتیگراد)
را از ورودی دریافت کرده سپس آنرا به درجه فارنهایت تبدیل کند.
صفحه 24:
:ی
> دستورالعملهاي شرطي
در حل بسیاری از مسائل یا ت تقریباً تمام مسائل نیاز به استفاده از شروط
جزء نیازهای اساسی محسوب میشود. همانطور که ما خودمان در
زندگی روزمره با این شرطها سرکار داریم. بطور مثال اگر هوا ابری
باشد ممکن است چنین سخن بكوييم:
اگر هوا بارانی باشد سپس چتری برمیدارم.
در غیر اینصورت چتر برنمیدارم.
صفحه 25:
NO
عمل يا اعمال بعدى
صفحه 26:
مثال : فلوچارتی رسم نمائید که عددی را از ورودی
زوج بودن آن را تشخیص دهد. in)
صفحه 27:
صفحه 28:
صفحه 29:
UP WN
17
خروج
11
29
صفحه 30:
:ی
* تمرین
۱- فلوچارتی رسم کنید که عددی را از ورودی دریافت کرده. قدر مطلق
عدد را در خروجی چاپ AS
۲- فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده مثبت. منفی
یا صفر بودن عدد را تشخیص داده, در خروجی با پیغام مناسب
چا کته
و فلوچارتی رسم نمائید که عددی را از ورودی دریافت کرده. بخشپذیری
آن بر ۳ و ۵ وا بزرسن تماید.
فلوچارتی رسم نمائید که ضرایب یک معادله درجه دوم را از ورودی
دریافت کرده ریشههای آن را محاسبه در خروجی چاپ کند. au
صفحه 31:
** حلقهها
در حل بسیاری از مسائل با عملیاتی روبرو میشویم . که نیاز به تکرار
دارند و عمل تکرار آنها به تعداد مشخصی انجام میگیرد. فرض AES
بخواهیم ميانكين ۰ عدد را محاسبه کنیم. در اینصورت منطقی بنظر
نمیرسد که ۰ متغیر مختلف را از ورودی دریافت کنیم سپس آنها ر
حت ع
31
صفحه 32:
*حلقه های با تکرار مشخص
*؟حلقه های با تکرار نا مشخص
صفحه 33:
در اين نوع حلقهها تعداد تکرار مشخص میباشد این حلقه از اجزاء زیر
تشکیل میشود:
۱- اندیس حلقه
۲- مقدار اولیه برای انديس حلقه
۳- مقدار افزاینده براى انديس حلقه (معمولا یک واحد در هر مرحله)
4- مقدار نهایی (تعداد تکرا حلقه)
۵- شرطی برای کنترل تعداد تکرار حلقه
33
صفحه 34:
صفحه 35:
35
صفحه 36:
صفحه 37:
37
م يم اه م يمام
ه قوم مم
مد
15
صفحه 38:
مثال : فلوجارتى رسم كنيد كه 2 عدد از ورودی دریافت کرده.
بزرگترین مقدار از بین 2 عدد را بيدا كيده در خروجى جاب نمايد.
انديس حلقه i
بزرگترین مقدار
Max
38
صفحه 39:
صفحه 40:
ورودی دریافت کرده سپس 5 به و DS deober yn
صفحه 41:
write(pow)
yes
pow <— pow*x (=)
حلقه
| =a
صفحه 42:
۱ ۲
(در پاسکال به حلقه nile مشهورند.)
ر این حلقهها با توجه به ورودی. تعداد تکرار مشخص میشود. و دقيقاً
نمی توان تعداد تکرار حلقه را بدون ورودی معین کرد. اين حلقه ها فقط
شامل شرطی هستند که تا زمانیکه برفرار باشد حلقه اجرا میشود.
42
Iran Engineering
صفحه 43:
No
محموعه دستورالعملها
و جاگزینها
43
صفحه 44:
مثال: فلوچارتی رسم کنید که عددی را از ورودی دریافت کرده
سپس تعداد ارقام آن را شمرده در خروجی چاپ نماید.
؟عدد خوانده شده N
؟ تعداد ارقام count
44
صفحه 45:
Begin
count g 0
if N>0 then
yes
N <—Ndiv10
count < count+1
5
صفحه 46:
در حالت IS جملات سری بصورت:
عدد خوانده شده
جمله اول سری
جمله دوم سری
جمله سوم سری
ل
كل من
46
صفحه 47:
صفحه 48:
3-0
* تمرين
-١ فلوجارتى رسم نمائيد كه عددى از ورودى دريافت كرده. كامل بودن
آنرا بررسى نماید. (عدد کامل. عددی است که مجموع مقسومعليههاى
آن با خودش برابر باشد.)
۲- فلوچارتی رسم کنید که ا را از ورودی دریافت کرده. ا جمله سری
فیبوناچی را تولید نماید.
۳ فلوچارتی رسم نمائید که دو عدد ]1۷ , لا را از ورودی خوانده.
بزرگترین مقسومعلیه مشترک دو عدد را محاسبه و چاپ کند.
48
صفحه 49:
EE EE EEE EE موممئي
حلقههاي تودر تو *
الكوريتمهايى كه تا حال بكار برديم. فقط شامل یک حلقه بودند.
در صورتى كه در بسيارى از مسائل ممكن است نياز به استفاده از جند
حلقه در داخل هم باشیم. در این نوع حلقهها باید دقت بیشتری به خرج
دهیم. تا مشکلی پیش ناید. اگر از حلقههای نوع اول بصورت تودرتو
استفاده کنیم در اینصورت برای هر حلقه شرط نهایی و اندیس اولیه
جداگانه باید تعریف کنیم .
49
صفحه 50:
مقدار نهایی خود تکرار میشود. در کل اگر حلقه اولیه 12 بار تکرار شود و
حلقه داخلی 322 بار. در ایتصورت کل حلقه :
nxm
بار تکرار خواهد شد.
50
صفحه 51:
صفحه 52:
=
سرى 59 محاسبه نماید:
x
للىيى... + ۳ وت
* اندیس حلقه اول 1
* وریدی لا
* محاسبه فاکتوریل fact
* انديس حلقه داخلى ل
* مجموع Sum
صفحه 53:
1-1
53
صفحه 54:
* تمرینات آخر فصل
۱- فلوچارتی رسم نمائید که آل عدد از ورودی دریافت کرده تعداد
اعداد اول و کامل را شمرده در خروجی چاپ نماید.
- فلوچارتی رسم نمائید که 26 , 1۷ را از ورودی خوانده مقدار سری
یر را محاسبه کند:
Ss برچ شاد + +1- 5
54
صفحه 55:
J م۳
عدد را محاسبه و در خروجى جاب کند.
6 فلوجارتى رسم كنيد كه تاريخ تولد شخصى را از ورودى خوانده.
سن شخص را با تاريخ روزء محاسبه نموده در خروجى جاب كند.
4- فلوجارتى رسم نمائيد که (10<10) ۷], لا را از ورودى دريافت
كرده سرى فيبوناجى بين 10/4, ۷[ را توليد كرده. در خروجى جاب كنا
55
صفحه 56:
Ve
کاربرد آرايه ها در الكو
كوريتم ها
هدفهاي كلي
اخت آرايه ها
5 سد
اخت ا ee جستجو
لگوریت ۱
تفت ریتم های لاز
oe ی لازم برای
35 =
il و
۱ و مر
جستجو يا ا
a زى
صفحه 57:
:دانشجو يس از مطالعه اين فصل بايد بتواند
"ذا از آرایه ها در حل مسئله استفاده کند .
ذا | با استفاده از آرایه ها لیستی را مرتب نماید .
در صورت لزوم در لیستی جستجو انجام دهد .
57
صفحه 58:
فرض کنید بخواهیم اطلاعات ۱۰۰ کارمند را از ورودی بخوانیم و
سپس آنها را مرتب کنیم. در اینصورت باید ورودیها در جایی از
حافظه ذخیره کنیم. در زبانهای برنامهنویسی معمولا از آرایه برای
ذخیره اطلاعات در حافظه استفاده میکنند. در آرایهها ما با توحه به
تعداد ورودیها. طول آن را مشخص میکنیم. سپس دادهها را خوانده در
آن قرار مى دهيم
58
صفحه 59:
موممئي EE EE EEE EE
پم ده ۰
wis pi ** آرایه
خانههای پشت سر هم از حافظه که همنوع بوده و توسط یک اسم معرفی
میشوند. آرایه نام دارد.
نحوه دسترسی به هر یک از اعضاء آرایه. از طریق اندیس آرایه امکانپذیر
است . برای تعریف آرایه ابتدا طول آرایه که در حقیقت تعداد خانههای آن
را نگتهن هی کلد,.قعین میکنيم: سیسن توع تعانها باید معین شوك
در فلوچارتها آرایهها را بصورت زير نمایش میدهیم:
Name[ 1 .. Length [
طول آرایه اسم آرايه
59
صفحه 60:
زير مى باشد:
a{1..100]
Read(ali])
10
صفحه 61:
Nam [ inde
انديس آرايه اسم آرايه
مثال: فلوجارتى رسم كنيد كه يى آرايه حداكثر ٠٠١ عنصری را از ورودی
دريافت كرده. سيس آن را خروجى نمايش دهد.
61
صفحه 62:
yes
write(afil)
1 1
للع
Read(alil)
i <— i+l
جع
62
صفحه 63:
a[1..20]
i<1
ali] <— Nmod2 و و No
1 1 1ه 3
N <— Ndiv2
صفحه 64:
مثال : فلوچارتی رسم نمائید كه عددی از ورودی دریافت کرده سپس
اعداد اول قبل از آن را تولید نموده . در یک آرایه قرار دهد.
[2]1..100
1 حه 1
A Read(N) 7
|
ke
‘alt |< 2
a[2] <— 1
64
صفحه 65:
صفحه 66:
EEE EEE
(search and SOrt ) jlo Udy جستجو و *
یکی از مسائلی که در بحث طراحی الگوریتم بسیار مهم است. بحث
مرتبسازی و جستجو میباشد. منظور از جستجو اینست که یک مقداری
را از یک لیست جستجو کنیم و منظور از مرتبسازی اینست که يك ليست
مرتب از دادهها را تولید کنیم.
برای جستجو و مرتبسازی الگوریتمهای مختلفی وجود دارد در زیر
الگوریتمهای اولیه. برای جستجو و مرتبسازی را بررسی میکنیم.
66
صفحه 67:
دو الگوریتم زير غالبا برای جستجو بکار میروند:
صفحه 68:
در جستجوی خطی عبارت مورد جستجو را به ترتیب با اولین. دومين
WN pe suey مقایسه میکنیم اگر عنصر مورد جستجو پیدا شد
انديس آن را نمايش مى دهيم.
صفحه 69:
(index)
ite!
writ
۳
صفحه 70:
در جستجوی دودوئی . لیست مورد جستجوء مرتب میباشد. لذا برای
جستجو اعمال زیر انجام میشود:
۱- عنصر ۲ با عنصر وسط آرايه كه انديس آن برابر
middle (low+high)/2
مقایسه میشود.
صفحه 71:
tol 9 1
9 559 3 0 د ۱
ليست قرار دارد. لذا آرايه يا انديسء جد يد در نظ ر كرفته
میشود و قسمت پایین لیست از فضای جستجو حذف میشود.
eames ای
۳-اگر 2 از عنصر وسط آرایه بزرگتر باشد قسمت بالای لیست حذف
میشود و فضای جستجو. قسمت پایین آرایه خواهد بود.
۶- اگر 2 برابر عنصر وسط باشد عمل جستجو خاتمه میپذیرد.
صفحه 72:
مرتبسازی بحث بعدی این فصل میباشد. برای مرتب کردن دادهها نیز
/ -
الگوریتمهای مختلفی وجود دارد. که هر کدام مزایا و معایب خاص خود
را دارد. بحث مقصل در این مورد را به فصلهای بعد واگذار میکنيم.
صفحه 73:
EEE EEE
تمرین *
*فلوچارتی رسم نمائید که عددی از ورودی دریافت کرده. اعداد کامل
قبل از خود را تولید و در یک آرایه قرار دهد.
*فلوچارتی رسم نمائید که یک آرایه حداکثر ۱۰۰ عنصری از ورودی
دریافت کرده عناصری از آن که اول هستند را با صفر کردن حذف نماید.
*فلوچارتی رسم نمائید که یک عدد حداکثر ۲۰ رقمی را توسط آرایهای
از ورودی دریافت نماید. سپس یک عدد تک رقمی را از ورودی خوانده
در عدد ۲۰ رقمی ضرب نموده. حاصل را در خروجی چاپ نماید.
73
صفحه 74:
فصل ۲
كامبيوت ربا لآشنايي
هدفهاي كلي
شناخت كامبيوترهاى نسل قديم و امروزى
شناخت سختافزارهاى لازم براى كامبيوترهاى شخصى
بررسى نرمافزارها و انواع آن
74
صفحه 75:
:دانشجو پس از مطالعه این فصل بايد بتواند
کامپیوترهای نسل جدید را با کامپیوترهای نسل قدیم مقایسه کند.
سختافزارهای لازم برای کامپیوترهای شخصی را بشناسد.
انواع حافظه مزایا و معایب آنها را شناخته و با هم مقایسه نماید.
سیستم عامل و انواع آن را مقایسه نماید.
نرمافزار و زبانهای برنامهنویسی را تعریف کند. 75
صفحه 76:
EE << << ">
* کامپیوترهای قدیمی
aoe (Super Computer) 55 5 pS oy! منظوره
دیجیتال
الکترونیک. تحت عنوان ۳/67 در سال ۱۹۶۲ میلادی در
دانشگاه پنسیلوانیا ساخته شد. اين کامپیوتر با سرمایه ارتش آمریکا
طراحی شد. وزن این کامپیوتر ۳۰ تن و ابعاد آن ۳۰۵۰ فوت بود.
این کامپیوتر برای محاسبه جدول پرتابهها؛ پیشگویی وضع آب و هوا
و محاسبات انرژی اتمی بکار میرفت.
سح
76
صفحه 77:
در کامپیوترهای اولیه از لامپهای خلاء بعنوان عنصر الکترونیکی پایه
استفاده میکردند. در این ماشینها ۱۹۰۰۰ لامپ خلاء استفاده شده
بود و برای انرژی مصرفی لامپها و همچنین دستگاههای تهویه و
خنک کننده ماشین حدود 130 160 انرژی الکتریکی مصرف میشد.
این ماشینها دارای حجم زیادی بودند و سطحی را معادل ٩۰۱۵
مترمیبع اشغال میکردند. این کامپیوترها به کامپیوترهای نسل اول
معروف شدند.
77
صفحه 78:
کامپیوترهای امروزی با بکارگیری ریزپردازنده به کامپیوترهای
نسل چهارم معروفند. البته نسلهای جدید دیگر کامپیوترها نیز
«به بازار ارائه میشود
در کامپیوترهای امروزی سرعت پردازش بسیار Wb
اجزاء سختافزاری بسیار کوچک. حجم حافظه بالا و غییه
.آنها را از نسل های دیگر متمایز میسازد
78
صفحه 79:
: اجزاء تشکیل دهنده کامپیوتر عبار تند از
* سخت افزار
3 نرم افزار
صفحه 80:
Input
2307 پرداز )2272
80
صفحه 81:
کامپیوترهای امروزی معمولاً از قطعات زیر تشکیل میشوند:
دستگاههای ورودی
pe cutie
حافظههای اصلی
واحد پردازشگر مرکزی
دستگاههای خروجی
صفحه 82:
* فرم افزار
نرمافزار یکی از بخشهای اساسی کامپیوتو به شمار میآید. که در
واقع سختافزار را بکار میگیرد. بعبارت دیگر رابط بین کاربر و
سختافزار را نرمافزار مینامند. نرمافزار در حقیقت روح و جان یک
کامپیوتر است. که به سختافزار هویت میبخشد.
82
صفحه 83:
* سیستم | (OS: Operating System)
مشهور ترین نوع نرمافزارهای سیستمی میباشد. که مدیریت
منابع سیستمی را پر عهده دارد. سیستمعامل. همجنين ارتباط بين
کاربر و اجزاء سختافزاری و نرمافزاری دیگر را برقرار میکند.
صفحه 84:
84
صفحه 85:
** زبانهاي برنامهنويسي
* نرمافزارها توسط زبانهای برنامهنویسی نوشته میشوند. زبانهای
برنامهنویسی یک سیستم ارتباطی هستند که توسط آنها میتوان
دستورات لازم را به ماشین انتقال داد.
* هیزبان برنامهنویسی به مجموعهی از علایم» قواعد و
دستورالعملها گفته میشود که امکان ارتباط با کامپیوتر را جهت
بيان كارى يا حل مسئلهای فراهم میکند.
85
صفحه 86:
* زبانهای سطح Ve
* زبانهای سطح پایین
* زبانهای سطح میانی
86
صفحه 87:
كامبايلر برنامه نوشته در يك زبان سطح بالا را به برنامه مقصد تبديل
رسو
Source
program
صفحه 88:
Pascal gb;
# در این کتاب زبان پاسکال os 5 Sie! cle (Pascal)
برنامهها انتخاب کردیم. اين زبان که به افتخار بلز پاسکال دانشمند
فرانسوی قرن هفدهم میلادی. پاسکال نامگذاری شده است. در اواخر
سال ۱۹۱۰ و اوایل ۱۹۷۰ توسط پروفسور نیکلاس ویژت در انستیتو
فنی فدرال سوئیس مطرح گردید
88
صفحه 89:
هدفهاي
كلي
شناخت اجزاى تشكيل دهنده يك برنامه
شناخت ساختار يك برنامه در زبان ياسكال
بررسى دستكاههاى خروجى و دستورات لازم در زبان
ياسكال براى توليد خروجى
صفحه 90:
:دانشجو يس از مطالعه اين فصل بايد بتواند
اجزاء لازم براى نوشتن برنامه در زبان ياسكال را بداند.
a يك شناسه صحيح در زبان ياسكال را تعريف كند.
ساختار یک برنامه در زبان پاسکال و اعلانهای مربوط به برنامه را
تعریف نماید.
یک برنامه ساده به زیان پاسکال که فقط خاصیت خروجی دارد؛ بنویسد.
90
صفحه 91:
* کلمات ذخیرهشده ( ۷۷۵۲5 11656150 )
(identifier ( شناسهها *
91
صفحه 92:
(Words
کلمات ذخیره شده, کلماتی هستند که مترجم زبان آنها را میشناسد و
معنای خاصی برای زبان دارند. مترجم زبان به محض مشاهده این کلمات
اعمال خاصی را انجام میدهد. هر زبان دارای تعداد مشخصی
کلمات ذخبره شده میباشد و این تعداد قابل افزایش توسط برنامهنویس
92
صفحه 93:
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
div
do 93
downto
صفحه 94:
* شناسه در ياسكال براى نامكذارى ثابتها. تایپها؛ يروسيجروهاء توابع»
میدانهای یک رکورد. برنامه و همچنین یوئیت مورد استفاده قرار
مى كيرد.
و
صفحه 95:
۳
id ستاندار از
علستاندارد: لیر
= اس 10 هااز قباد يبا
isi t بردر يبان
> هم i نياسكللتعريفشد. ملند
>
10 ها كاربر
وغيرلستانفاره ss
ا
userdefine هم
كفته 2
مونسود.
صفحه 96:
EE << << ">
* ساختار برنامه در زبان پاسکال
:اجزاء اصلي یک برنامه به زبان پاسکال بصورت زیر ميباشد
عنوان برنامه
قسمت تعاریف برنامه
قسمت دستور العملها
صفحه 97:
Constant Declaration wb اعلان
Type Declaration اعلان انواع
Declaration Variable اعلان متغییها
Declaration Label اعلان برچسبها
صفحه 98:
بصورت زیر بیان کرد:
استفاده از کلمه ذخیره شده ۳100713100 و اسم برنامه ( که میتواند
بكار برده نشود )
قسمت تعاریف شناسهها
بلوک اصلی برنامه که با 36010 ¢5,5 5 4 End همراه نقطه
(.) ختم میشود.
هر دستور در پاسکال به ( ۶) ختم میشود.
صفحه 99:
block
شناسه
del
| Statement
صفحه 100:
:ی
Output ) -,> * (
مشهورترین دستگاههای خروجی عبارتنداز:
Monitor صفحه نمایش
Printer چاپگر
Terminale تزمينال
Plotter رسام
صفحه 101:
> << کچ
*مثال هاي حل شده
Program Print ( output ) ;
Begin
Writeln (' Pascal Language
۱۱8 Writeln (' Hello'
):
End.
(fro
صفحه 102:
:خروجي برنامه بالا بصورت زیر ميباشد
Pascal Language
Hello
صفحه 103:
فصل 5
نواع عملگرها و دادهها در زبان باسكال
هدفهاي
كلي
معرفي انواع عملكرها در زبان پاسکال
شناخت انواع دادهها
بررسي اولویت عملگرها
معرفي دستورات جايگزيني در پاسکال
103
صفحه 104:
:دانشجو پس از مطالعه این فصل باید بتواند
"ا انواع عملگرها در زبان پاسکال را بکار ببرد
انواع داددها براى يك برنامه را تعريف كند.
كار ريت ملك ادر بى عارك ا اتتشيص BS
#لايى برنامه:ساده با عمليات معمولى را ابتويسد:
104
صفحه 105:
si لک ها
عملگرها نمادهایی هستند که برای انجام اعمال خاصی مورد استفاده
قرار میگیرند.عملگرها برای انجام اعمال خاصى روی عملوندها
( 02618205 ) بكار مىروند. با توجه به نوع عملگر ممکن
است يك يا دو عملوند وجود داشته باشد. عملكرها در زبان
ياسكال از تنوع زيادى برخوردارند.
105
صفحه 106:
صفحه 107:
div
mod
LEK
منال
x+y
x-y,-x
7
5207
a div b
amod b
صفحه 108:
نام
بزرگتر
بزرگتر مساوی
کوچکتر
کوچکتر مساوی
مساوی بودن
نامساوی
مثال
x>y
xy,
x<y
۲ 2<> ۶
xy
x<>y
صفحه 109:
OR
Not
مثال
and <2
y<x
x>y or
>
Not (x)
صفحه 110:
110
صفحه 111:
بالاترین تقدم (
Not
11
صفحه 112:
>" << آ" « ا
* انواع دادهها ( 965 012182 )
(Simple data type) ol. cesls <
Structural 122182 ( ( دادههاى ساختيانفته
Types
(Pointer Data Types) دادههاى اشارمكر
صفحه 113:
Char type) «Sis ¢s°
*صحیح ( 1۳1606۲ )
#عشاری (حقیقی)
String type) las, ¢5°
*نوع Boolean type) da
صفحه 114:
نوع
Byte
Shortint
Integer
Word
Longint
محدوده
از 0 تا 255
از 128- تا 127
از 32768- تا 32767
از ۵ تا 65535
از 2147483648- تا
2147483647
اندازه بر
BININ IR] e
صفحه 115:
نوع
Real
Single
Double
Extend
ed
محدوده
2.2۸ 6 < 39 ...
1.7 6 8
6-45... 5
3.4 6 7
e-324 ... 5.0
1.7 e 308
e -4932 3.4
0006
4932
م 1 3
تعداد ارقام
معني دار
13-1
16-15
30-19
10
115
صفحه 116:
انواع دادههای ساختیافته عبارتند از:
ارایهها
رکوردها
مجموعهها
فایلها
116
صفحه 117:
ممکن است در نوشتن برنامه نوع دادههای بحث شده در بالا به دلایل
مختلف از جمله مشخص نبودن تعداد ورودیهای مسئله و غیره مشخص
تباشد لذا نیاز به متغیرهایی هست که بتوانند آدرس متغیرهای دیگر را در
خود نكه دایند لیرنوع دادمها دادمهایلشارءگر نام دايند .
117
صفحه 118:
> << کچ
** متغیرها (۷۵01656)
متغیره «بجان السافظة :اميت كهداراى aig السم موباك نوع متغير همان
نوع داده بوده و اسم متغیر از قواعد اسم گذاری شناسه تبعیت میکند
در پاسکال برای معرفی متغیرها بصورت زیر عمل میکنند:
(کلمه ذخیره 14-5( Var
5 نوع متغير: اسم متغیر
118
صفحه 119:
>" << آآآآاحسأ"اآ۳
(Constants) kat *
یک ثابت نام شناسهای است که در آغاز یک برنامه یک مقدار در آن جاگزین
میشود. درست مانند متغیرها. ثابتها را میتوان بعنوان خانههایی از حافظه در نظر
بكيريم که مقدار دادهها در آنها ذخیره میشود ولی مقدار ثابت مشخص میباشد,
طوری که نمیتوان مقدار یک ثابت را در برنامه خود بوسیله یک دستور تغییر داد
te Sees pty po عریف ینکن cl
مقدار ثابت < اسم متفیر Const
119
صفحه 120:
:ی
* دستور جايگزيني
Gly قرار دادن یک مقدار یا مقدار یک متفیر داخل یک متغیر دیگ از دستور
.جایگزینی استفاده میکنند
شکل کلی یک دستور جایگزینی در پاسکال بصورت زیر است:
عبارت محاسباتی - : اسم شناسه
عبارت قیاسی يا
عبارت منطقی
120
صفحه 121:
>" < << آ" " ۰۲۳+«+«۰ءا+اآ۰۳طحء+آ۳
* افرودن توصیحات به بر نامه
(Comment)
افزودن مطلب توضیحی در درون خود برنامه عملی پسندیده و مطلوب است
بدین ترتیب که بعد از مدتی امکان فراموشی کار با برنامه از بین میرود و در
.کل میتوان گفت که نوشتن توضیحات در برنامه خوانایی آن را بالا میبرد
در پاسکال توضیحات بین دو آکولاد محصور میشوند.
This is comment } {
{ This program written by A.
Pascal }
121
صفحه 122:
4 مثال
جابجا كردن مقدار دو متغير
17
122
صفحه 123:
Var
a,b, temp : integer
Begin
a:=15;b:=17;temp:=0;
temp: =a;
a:=b;
خروجي برنامه 0
a5 Write a=',a,' b=",b);
صفحه 124:
EE << << ">
* نكاتي چند در مورد برنامه نويسي
استفاده از اسامی با مفهوم برای متغیرها
* استفاده از دستور 0115 در صورتی که مقدار
ثابت در برنامه وجود داشته باشد.
سوال جوابی بودن برنامه (ورودیها و خروجیها بايد
دارای پیغام مناسب باشند)
نوشتن برنامه با فیمت مناسب (رعایت قرار گرفتن
خطوط مختلف برنامه زیر هم و فاصله گذاشتن آنها از
124
صفحه 125:
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)
ات کت
صفحه 126:
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=?
126
صفحه 127:
EE EE EEE EE موممئي
تمرینات برنامه نويسي *
© برنامهای بنریسید که ابماد مخللت که عبارتند از ۳: ۱۲ راادر نظر
گرفته محیط و مساحت آن را محاسبه و با پیغام مناسب در
خروجی چاپ کند.
برنامهای بنویسید که دو متغیر صحیح با مقادیر ۳, ۱۵ زا دوز
گرفته محتویات دو عدد را بدون استفاده از متغیر کمکی جابجا
نماید.
* _ برنامهای بنوبسید که سه عدد بنام های , 1121۳0
Second, First بترتیب با مقادیر ۱۷, ۱۳,۱۵ را در
نظر گرفته بطور چرخشی مقادیر آنها را جابجا نموده در خروجی
با پیغاممناسب چاپ کند.
مس يمع
صفحه 128:
فصل 6
ورودي و خروجي
معرفیدستورلتخروجی ۰۲۷۷۲۲۵1۳
معرفی خروجی فرمتبندی شده
بررسی دستورات ورودی 1٩630 و ReadLn
صفحه 129:
:دانشجو يس از مطالعه ابن فصل بايد بتواند
"اعبارات مورد نظر را در حروجی نمایش دهد.
##عبارات خروجی را با فرمت مناسب چاپ کند.
#امتغییهای مورد نیاز برنامه را از ورودی دریافت نماید.
#ابرنامههای ساده به زبان پاسکال بنویسد.
صفحه 130:
> << کچ
* خروجي با دستور ۲۷۲6
اين دستور برای نوشتن اطلاعات در خروجی بکار میرود. اطلاعات خروجی
میتوانند ثابتهای عددی. مقادیر متغیرها. عبارات و غیره باشند. شکل دستور در
:حالت کلی بصورت زیر است
(....... و متغیر ۲ و متغیر ۱ )۲۷۲16
يا sind ی عیارت: ۷و عبارت۱ 0
.. و ابت ۲ وابت CV
صفحه 131:
Ch: char ;
R: Real ;
egin
Bi= 15 ¢ ¢ 10 شش
Gis ="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
once
oor
صفحه 132:
* خروجي با دستور ۲۷۲/617
اين دستور همانند دستور ۷۷۲16 عمل مىكند با اين تفاوت كه بعد از
اجرا. كنترل را به ابتداى سطر بعد منتقل مى كند در نتيجه موجب چاپ
دادههای بعدى در ابتداى سطر بعد مى شود.
132
صفحه 133:
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
Sumisef A and B= 25
صفحه 134:
۹
هه
خروجي فرمتبندي شده
اگر بخواهیم اطلاعات با فاصله های مشخص یا در مکان
مشخصی در صفحه نمایش قرار گيرند. باید فرمت جاپ
.را در دستورات بیان شده مشخص کنیم
134
صفحه 135:
:فرمت اعداد صحیح بصورت زير مشخص میشود
( طول میدان: داده صحیح ) ۷۷۲11۵18 یا Write
135
صفحه 136:
در تعریف طول میدان براي متغیرها با دادههايي از نوع صحیح به نکات زیر توجه کنید:
اگر طول میدان از طول ارقام عدد صحیح بیشتر تعریف شود عدد در
منتهیالیه سمت راست میدان نوشته میشود.
* از عون مق ول تا سیخ كتدترا تعريف شوق طول مدا
اندازه تعداد ارقام در نظر كرفته مى شود و طول ميدان تعريف شده بیاثر
خه اهد ب د.
صفحه 137:
X:= 3200 ;
As. = 12) 5
B= 217) :
Write (X:3,A:5 , B:5) ;
See دري
3200 12 217
صفحه 138:
برای نمایش اعداد اعشاری بصورت دلخواه می توان با تعریف طول
.میدان و تعداد ارقام اعشاری, عدد مزبور را نمایش داد
در حالتک لیطولمیللنرا میتسولنبه صوونذیر تعریفکرد :
( تعلداد ایقام بسعد از صمیز: طولمیدلن Write (cick pi
۷۲۵۴ با
و3 1
صفحه 139:
اگر طول میدان بزرگتر از تعداد ارقام عدد ذکر شود. عدد در منتهی الیه سمت راست
مان اپ مى كوه
اگر فقط طول میدان ذکر شود. عدد به صورت نماد علمی در طول میدان مشخص شده
بای ود
از آنجائی که برای نمایش اعداد در نماد علمی حداقل ۸ محل مورد نیاز است. لذا
هنگامی که تنها طول میدان ذکر شده باشد. اگر از ۸ رقم کمتر باشد. حداقل ۸رقم
در نظر گرفته میشود
139
صفحه 140:
۷ هنگامی که طول میدان همراه با تعداد ارقام بعد از ممیز ذکر شود. اگر طول
میدان کوچکتر از مقدار عدد باشد. پاسکال تنها طول میدان را به اندازهای
كه مورد نیاز است تصحیح کرده و آنرا برابر اندازه واقعی که عدد در آن
قرار میگیرد. اصلاح میکند.
اگر تعداد ارقام بعد از ممیز زیاد باشد و تعداد ارقام بعد از ممیز ذکر شده د
ر طول میدان کمتر از تعداد ارقام اعشاری عدد باشد. تعداد ارقام اعشار
مطابق درخواست برنامهنویس نشان داده خواهد شد و رقم آخر اعشار آن
نسبت به عدد بعدی گرد میشود.
140
صفحه 141:
برای نمایش رشتهها و کاراکترهای با طول ميدان بصورت زیر عمل
میکنيم.
( طولمیدلث متغیر یسا عباتوشتهلییا کاراکتری) Write
در توربو پاسکال. کلیه موارد گفته شده در مورد اعداد صحیح برای
برشتهها یز صادق است
141
صفحه 142:
* ورودي با 13620 , 16۵012
از این دستور برای خواندن داده ها و اختصاص آنها به متغیرها
:استفاده میشود. در خواندن داده ها به دو موضوع بايد دقت شود
منبع دادمها یبعنیدستگام ورودیکه از آندادمها خولنده -1
مینسود
متغيرىكه دادمهاىخولنده شده در آنقرار میگیرد -2 .
142
صفحه 143:
۶( ..... و متغیر ۲ و متغیر 1۳60 (
اين دستور عمل خواندن دادهها و ذخیره آنها در متغیرها را انجام میدهد
و پس از اتمام عمل خواندن کنترل را برای خواندن و نوشتنهای بعدی
در همانخط نگه میعارد .
143
صفحه 144:
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 }
ها
صفحه 145:
خروجی برنامه بالا به صورت زیر میباشد:
Please Enter two numbers
15 17
First = 17 second = 15
145
صفحه 146:
>" آاس۳
تمرینات
خروجرقطعه بر نلمهوير را تسعييزكسنيد :
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) ;
صفحه 147:
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 ))>
صفحه 148:
* تمرینات برنامه نويسي
برنامهای بنویسید که دو عدد را از ورودی دریافت کرده و
محتویات آنها را بدون استفاده از متفیر کمکی جابجا نماید
برنامهای بنویسید که سه عدد صحیح , Third
او ر 560000 را از 0 با پیغام مناسب دریافت
کرده سپس محتویات این سه متغیر را بصورت چرخشی جابجا
نموده با پیغام مناسب در خروجی چاپ کند.
صفحه 149:
برنامهای برای یک حسابدار اداره جمع آوری مالیات بنویسید که صورت
.حسابهای مالیات را محاسبه نماید
"ورودی
شماره شناسایی مالیات دهنده
بهای ارزیابی شده
نرخ مالیات
اخروچین
صورت حساب بافرمت مناسب شامل تمام دادههای ورودی و میزان بدهی
صفحه 150:
Thee
ساختارهاي شرطي و کنترلي
هدفهاي كلي
معرفىدستور شرطي©119 20ة If
معرفى دستور CASE
پررسی دستورات تکرار for. while . repeat
استورات شرطی متدا <
بررسی چند تابع و روال استاندارد زبان پاسکال
150
صفحه 151:
:دانشجو يس از مطالعه ابن فصل بايد بتواند
برنامههايى را بنويسد كه در آنها نياز به استفاده از شرط وجود دارد.
8 تفاوتهای بین دستورات مختلف با ك1 و 14 -©19© را تشخيص دهد.
كا برنامههايى كه نياز به تكرار تعدادى عمليات داشته باشئد را بنویسد.
در صورت نیاز بتواند در برنامههاء از روالها و توابع استاندارد زبان استفاده نمايد
ac ie
Iranian Engineering
Cem Sat
صفحه 152:
EEE EEE
2
دستورات شرطى “of
بطور کلی توسط اینگونه دستورات میتوان بر حسب شرایط مختلف.
تصمیمات متفاوتی را اتخاذ نمود و برحسب برقرار بودن یا نبودن شرایط
.دستورات متفاوتی را اجرا نمود
ت شرطي در حالت كلي به دو نوع تقسيم مي شوند:
دستور ]1
دستور 256
صفحه 153:
هرگاه در طول برنامه نیاز به استفاده از شرط یا شروط داشته باشیم. از دستور
1 .ستفاده می کنیم
دستور 11 بطور کلی به سه شکل بر حسب نیاز ممکن است ظاهر شود:
cooly if
Else sto. if
های متداخل
153
صفحه 154:
then
در اين نوع دستور شرطی اگر شرط خاصی تحقق يافته باشد. عمل يا اعمال
خاصی انجام میشود. در غیر اینصورت برنامه روال عادی خود را طی می کند.
در صورتی که شرط برقرار باشد ارزش منطقی 11116 به خود میگیرد و
اگر شرط برقرار نباشد. ارزش منطقی 32156 به خود خواهد گرفت.
154
صفحه 155:
:دیاگرام دستور بالا بصورت زیر میباشد
۵00۱5
155
صفحه 156:
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
156
صفحه 157:
* در این دستور ابتدا شرط بررسي ميشود, در
صورتي که شرط برقرار
mush عمل يا اعمال خاصي را انجام ميدهد و
در صورتي که شرط برقرار نباشد. عمل یا
اعمال بخصوص ديگري را اتجام خواهد داد.
صفحه 158:
۱ دستور
else
رز دستور ۲
دیاگرام دستور بصورت: د
158
صفحه 159:
gin
Writeln (‘Please enter Number:') ;
ReadIn ( Number ) ;
if (Number mod 2) =0 Then
Write (' even ' )
else
Write ('odd') ;
id. { end of program }
خروجی برنامه بالا بصورت زیر است:
Please enter Number:
17
odd
159
صفحه 160:
End
Else
Begin
1 ز دستور
2 ز دستور
160
صفحه 161:
هركاه در نوشتن برنامه نياز به انتخاب يك شرط از بين چند شرط داشته
باشیم. معمولاً از 1 متداخل استفاده مى كنند. در جنين مواقعى استفاده از 14
متداخل كارائى برنامه را بالا مىبرد زيرا بجاى كنترل تمام شروط فقط تا
زمانيكه شرط برقرار نشده. ]1 ها بررسی میشوند. بعد از برقرار شدن يكى
از شروط. كنترل برنامه به بعد از ۶ منتقل میشود و اين در بهبود كارائى
يك برنامه مى تواند بسيار موثر باشد.
161
صفحه 162:
if )2 عبلیتشرطیا then
دستور ۱
60 عبيتشرطىئ؟ 14 واه
دستور۲
08۲ عبلیتشرطی else If
دستور ۳
else
1] عبیتشرطیا then
if عبیتشرطی] then
دستور |
else
زدستور ۲
To:
صفحه 163:
Grade
17-20
14-17
12-14
10 - 2
0 - 0
163
صفحه 164:
Readin ( 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
) 5 164
ReadIin :
صفحه 165:
زبان پاسکال دستور 856 را بصورت زیر در نظر میگیرد:
Case oc Of
و دستور١ 0 : مقدار ۱
,م دستور ۲ . : مقدار ۲
م دستور ۳ : مقدار ۳
Otherwise
165 دستور >
End ; { End of case }
صفحه 166:
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 )/6: 2)
166
ade oon ora nar a acne ENN
صفحه 167:
دیاگرام دستور ۵56 بصورت زير ميباشد:
صفحه 168:
EE << << ">
* ساختارهاي كنترلي
«بسيارى از مواقع لازم است عمل یا اعمال به تعداد دفعات معین یا نامعین انجام شوند
در چنین مواقعی زبانهای برنامهنویسی دستوراتی دارند که میتوان اين اعمال تکراری
را انجام داد. در حالت کلی ساختارهای کنترلی شامل یک یا چند شرط و همچنین
متغیر یا اصطلاحاً شمارندهای برای پایان دادن به شرط میباشند
168
صفحه 169:
0 مقدار نهایی 10 مقدار اولیه - اندیس For
۶ دستور
بايد توجه داشته باشید که در حلقه تعداد تکرار کاملاً مشخص است و حلقه دقیفاً به
.تعداد تکرار مشخص اجرا میشود
169
صفحه 170:
دستور برای انجام عمل یا اعمالی مشخص به تعداد تکرار معین بکار برده میشود.
نه bl: for یک اندیس ( 10065 ) مقدار اولیه ( ۷16 1011 ) مقدار نهایی
( ۷۵16 1۳881 ) و مقدار افزاینده میباشد. اين حلقه با قرار دادن مقدار اولیه در
س حلقه شروع شده و بعد از هر تکرار یک واحد به اندیس حلقه اضافه میکند تا
نهایت به مقدار نهایی برسد. شکل کلی حلقه بصورت زیر میباشد:
170
صفحه 171:
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 }
17
صفحه 172:
0 مقدار نهاي 001171180 مقدار اولیه - : لندیس ۴01
۶ دستون
بر این شکل از دستور 303 ابتدا مقدار اوليه در انديس حلقه قرار داده می شود
و بعد از آن در هر تکرار حلقه یک واحد از اندیس حلقه کم می شود تا به
مقدار نهایی برسد .
172
صفحه 173:
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.
eee heen
صفحه 174:
0 مقار نهایی 0 مقدار ایلیه - : لندیسا for
0 مقدار نهایی 0 مقدار اولیه - : اندیس 2 ۲0۲
Joe ع
صفحه 175:
in
For j:=1 to 3 do
Write (' pascal': 8) ;
Writeln ;
1
خروجی
Pascal Pascal Pascal J) a>» (i =
1)
Pascal Pascal 2856081 مرحله دهم ) 1 >
27
۳ دم Paceal Pacecal . si. .f 7)
صفحه 176:
مقدار
نهايي
مقدار
اولیه
سرهم
176
صفحه 177:
در حالت كلى هدف از بكار بردن این دستور انجام عملیاتی مشخص
به تعداد دفعات نامعین است
مينحلقه به صووتؤير بكار بردهمى شود:
0 عبارت منطقى While
Desay
177
صفحه 178:
Numbers ') ;
ReadIn (m,n) ;
While (m Mod n) > < 0 0
MOD n;
End ; { end of
صفحه 179:
179
صفحه 180:
اين دستور نيز از نوع دستورات تکراری میباشد و به کمک آن میتوان یک یا چند
.دستور را به تعداد نامعین بار اجرا کرد
لیردستور مشلبه دستور ۲16
:است. با تفاوتهایی که در زیر عنوان میکنیم
در دستور (1 1361068 بسرعکسدستور While
.شرط حلقه در انتهای حلقه بررسی میشود لذا حلقه حداقل یکبار اجرا میشود
1۳
صفحه 181:
۲) دستور 38606616 تا زمانی اجرا میشود که شرط خاصی تحقق
پیدا نکرده است در حالیکه دستور ۷۷0116 تا زمانی که شرط برقرار
al اجرامیشود.
۳ دستور :606۵ نیاز به بلوک ندارد و همراه 10 ظاهر میشود.
181
صفحه 182:
; شرط یا شروط until
182
صفحه 183:
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 ofsprogram }
صفحه 184:
صفحه 185:
** معرفي چند پروسیجر ( ۳۵6606
پروسیجرها یا زیر روالها قسمتهای مستقلی از برنامه اصلی میباشند که به
تنهایی اعمال خاصی را انجام داده و وظایف مستقل و بخصوصی بر عهده
آنها گذاشته میشود. یک مزیت بزرگ پروسیجرها اینست که یکبار در برنامه
گنجانده شده ولی در محلهای مختلف ازآن استفاده به عمل میآید و از
.اصول برنامهنویسی ساخت یافتهاست
صفحه 186:
هدف: انتقال کنترل برنامه به خارج از بلوک فعلی
Procedure Exit ;
استفاده از این پروسیجر در هر بلوک از برنامه باعث میشود که کنترل
برنامه بلافاصله به خارج از آن بلوک انتقال Lb
186
صفحه 187:
هدف: خاتمه دادن به اجرای یک حلقه
Procedure Break ;
استفاده از پروسیجر فوق باعث میشود. که اجرای. یک خلقه: خائمه یافته و
کنترل برنامه به دستورالعمل بعدی انتقال پابد.
187
صفحه 188:
هدف: باز گشت به ابتدای حلقه
Procedure continue ;
وقتی انم پزوسبحر, دزن taal USS apd ge GW UA اول خلقلة:اتتقاك
مییابد و دستورات بعد از پروسیجر اجرا نمیشوند.
صفحه 189:
غال : iso iS aS 5
را 0
۱ کب
از ورود ۳ 2
ی
دريافت 1 عد
فت کرده. ۱
0 بح در مبذ
jae 00
sé
یک مینای ۲ ببرد.
صفحه 190:
Power: = 1 ;
N:=0;
Write (' enter A Number: ') ;
1۳801 ( Number ) ;
Repeat
R: = Number MOD 2 ;
Number: = Number DIV
N: = N + Power* R ;
Power: = Power * 10 ;
Until Number < 2 ;
N: = N + Number * Power ;
Writeln ('Number In Base 2= '
ر ۱۲ ۳
ی ی وت ی ات اس ای ق قص م
صفحه 191:
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 ;
Eng, ; { end of for }
|, { end of program }
صفحه 192:
۳ 1 116
“ah: 3
۰
تمرینات Begin
۱- خروجی قطعه برنامههای زیر را تعیین کنید:
Sum: = Sum +i
۱
end ;
b)
is = 0.3
Sum: =°0';
While i<=20 do
Begin
عدت ;
صفحه 193:
be Di
Until (b div 3)=5 ;
d)
Count
Stop :
While Count < Stop Do
Begin
For K:=1 to Count
Do
Write (K:3) ;
193
Writeln ;
صفحه 194:
EE << << ">
** تمرينات برنامه نویسی
۱- برنامهای بنویسید که با استفاده از حلقه ها خروجی زير را تولید کند.
194
صفحه 195:
بسرنامهلوبنویسید که تسعدادیعدد از ورودیدویافتکرده مجموع -2
ايقام هر علد را در خروجىجا نايد ( پابانداده ها بسه ۱- ختممی
شود)
بسرنامهلوبنویسيد که دو علد صحیح را از ورودیدویافکرده -3
تن
.اعداد فيبوناجى بين اين دو عدد را جاب كند
برنامهلىيب:ويسيد كه يكلسكناس١٠٠٠ توملئنىرا به حلتهاى4
مخت نيعت يه لسکناس۲۰۰ تسوملنی ۱۰۰ تسوملنی 0۰ تسوملنی ۲۰
تسوملنی ۱۰ توملنیو سکه های۵ توملنیو ۲ توملنیو یکتوملنیخرد
Abo. 195
صفحه 196:
8 فصل
Arrayb 47
هدفهاي كلي
شناخت لزوم استفاده از ساختار داده ای به نام آرایه
شناخت انواع آرایهها و موارد استفاده از آنها
ا ا ل
شناخت الگوریتمهای مرتبسازی و جستجو
صفحه 197:
:دانشجو پس از مطالعه این فصل بايد بتواند
* آرایهها یک بعدی را در برنامههای خود بکار ببرد.
8 ماتریسها را پیادهسازی نماید.
عمل جستجو در آرایه انجام دهد.
#ایک لیست را توسط روشهای مرتب سازی حبابی انتخابی و غیره مرتب کند.
197
صفحه 198:
* آرایه و انواع آن
خانههای پشت سرهم از حافظه که همنوع بوده و توسط یک اسم معرفی
میشوند. آرایه نام دارد. نحوه دسترسی به هر یک از اعضاء ارایه از
تطر يق "انيسن ريه امكالوفة بر انتتی
براى تعريف آرايه ابتدا طول آرايه كه درحقيقت تعداد خانههاى آنرا مشخص
میکند. معين مى كردد. سيس نوع خانههايى كه دادهها در آن قرار خواهند
كرفت را تعيين مى كنند
198
صفحه 199:
آرایههای یک بعدی بصورت زیر تعریف میشوند:
Name ۳ array [1.. Length] of
| ولاه هه یرنه | ۱
كلمه ذخيره شده اسم آرايه
صفحه 200:
Var
No: Array [1..50] of
integer ;
id: Array [1.. 20] of Byte ;
Name , Fam: Array [ 1.. 30] of
char ;
200
صفحه 201:
۱- با استفاده از دستورات ورودی
۲- مقداردهی در طول برنامه
طریقه دسترسی به عناصر آرایه بصورت زير میباشد:
Name [ index ]
ای با
اندیس آرایه اسلم
ار
201
صفحه 202:
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[il] ;
Index: =i ;
End ;
Writeln ('The Maximum is =', Max) ;
Writeln ('And Index =', Index) ;
endl 0 program }
صفحه 203:
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];
— a[i]:=temp ;
End ;
صفحه 204:
برای نمایش ماتریس درحافظه معمولاً از آرایههایی بنام آرایههای دویعدی استفاده میکنند
رای فرزکا بیشتر ابیز آرایةها آنها را بضورت ماتربس دزانظر میگیرند
آرایههای دو بعدی بصورت زیر معرفی میشوند:
Name 1 array [1..row ,1.. column ] of
type 3
لا ا . ] | | |
نوع عناصر آرایه کلمه ذخیره شده تعداد ستونها_
تعداد سطرها كلمه ذخيره شده اسم ارايه
204
صفحه 205:
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 ;
Bonds;
1.
صفحه 206:
میتوان آرایههایی با ابعاد بیشتر از دو نیز تعریف کرد. بطور کلی برای
: معرفى يك آرايه جند بعد توان بصورت زد د
ی .1 [ مج 3 1 Name: psu (iene
length2 ] ....
Of array [ 1..
lengthN ] of Type
ويا
Name: array [ 1.. length1, 1.. length2,.... 1..
lengthN ] of Type
206
صفحه 207:
EEE EEE << << ">
Ry نکاتی جند در مورد آرایهها
” تعریف آرایه با محدوده منفی
برای مثال:
A:array[-10..10] of Real 1 ;
7 تعريف آرايه از نوع منطقى ) (Boolean
براى مثال:
A:array[1..20] of Boolean ;
صفحه 208:
ای مثال
A: array [ Boolean ] of ee
;integer
۲آرایهای با محدوده کاراکتری:
بزاع شال
۵1 05 1[ ۲2 .۲۸۰۰ ] 27727 :۱
"آرایهای که برای اعضای آن محدودیت قائل شویم
براى مثال:
A: array[1.. 20] of 1.. 0
208
صفحه 209:
© جستجو و مربسازي ( 2310 5621012
(Sort
یکی از مسائلی که در بحث طراحی الگوریتم بسیار مهم است. بحث مرتبسازی
و جستجو می باشد. منظور از جستجو اینست که یک مقداری را از یک لیست
جستجو کنیم و منظور از مرتب سازی اینست که یک لیست مرتب از داده ها را
ایجاد کنیم. حال تعدادی الگوریتم که برای مرتبسازی و جستجو بکار میروند
را بسررسیمرکنيم بخصوص زمانيكه ساختار داده ما يكآرليه باشد .
209
صفحه 210:
در كل دو نوع عمل جستجو را در اين كتاب بررسی میکنیم :
Linear search (+ oye >”
Binary search جستجو دودویی
210
صفحه 211:
در جستجوی خطی عبارت مورد جستجو را نخست با اولین عضو آرایه مقایسه
میکنيم. اگر برابر بود عمل جستجو با موفقیت همراه بوده و عمل جستجو
خاتمه مییابد در غیر اینصورت روند را ادامه داده و عبارت مورد جستجو را
بترتیب با عضو دوم سوم ... مقایسه میکنیم تا اینکه حالت تساوی حاصل شود
.و اگر این حالت حاصل نشد. عباریت مورد جستجو در لیست قرار ندارد
211
صفحه 212:
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
Waiteln ('The Element is not found') ;
صفحه 213:
درجستجوی دودوئی لیست اولیه بایدمرتب باشد. برای جستجو در چنین آرایهای
نخست انديس وسط آرايه را يبدا مى كنيم و عنصر واقع در اين انديس را با
:عبارت مورد جستجو مقايسه مى كنيم و حالات زير ممكن است حاصل شود
(0۲,] اندیس ابتدای آرایه و 13006 اندیس آخرین عناصرآرایه و
6 اندیس عنصر وسط میباشد.)
صفحه 214:
. ] ۸10016 [ < X Then
Low : = middle بر ایتصورت
و مقدار جدید 10010016 را که عبارتست از:
Middle : = ( low + middle ) / 2
214
صفحه 215:
1016 [ > Then
upper : = middle در اينصورت
و مقدار جدید 1010016 را که عبارتست از:
Middle : = ( low + middle ) / 2
215
صفحه 216:
idle ] =X Then
Write ('The Eiement is قر ابنضووة
found ' )
OW > ۱۷۵۳6۲ فيا ب لتفاقبیفند عملجستجو را تا زملنیکه ELL AS ope |
می باشد ادامه میدهیم و در هر مرحله که حالت سوم رخ دهد عمل جستجو خاتمه میيابد.
216
صفحه 217:
برای مرتبسازی دادهها روشهای متفاوتی وجود دارد . تفاوت روشهای
مرتبسازی در زمان اجرای آنها می باشد. در حالت کلی با توجه به تعداد
ورودیها (داده ها) و نوع مسئله مرتبسازی می توان از انواع روشهای
.مرتبسازی استفاده نمود
حال بعضی از روش های مرتب سازی عمومی را بررسی میکنیم.
*؟ مرتبسازی حبابی ) (Bubble sort
*مرتبسازی انتخابی ( 50۲۲ 5616611012 )
صفحه 218:
سادهترین روش مرتبسازی روش مرتبسازی حبابی میباشد. یکی از خصوصیات بارز این
نوع مرتبسازی این است که فهم آن ساده بوده و برنامهنویسی آن به سهولت انجام می كيرد
مرتبسازی حبابی نخست عنصر اول و دوم را با هم مقایسه میکند و در صورت GUS آنها
را جابجا میکند. سپس عنصر دوم و سوم را مقایسه میکند. این عمل را تا زمانیکه به انتهای
آرایه نرسیده تکرار میکند. در پایان مرحله اول بزرگترین عنصر در آخرین خانه آرایه قرار
عمل بالا را انجام میدهد. اين روند را 1 - N میگیرد. در مرحله دوم از خانه اول تا خانه
تا زمانیکه تمام عناصر آرایه مرتب نشدهاند ادامه میدهد و در نهایت یک لیست مرتب شده
بصورت صعودی در خروجی تولید میشود
صفحه 219:
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
صفحه 220:
در این روش مرتبسازی نخست کوچکترین عنصر را در کل آرایه پیدا کرده
در خانه اول آرایه قرار میدهيم سپس عنصر کوچکتر بعدی را یافته در خانه
دوم قرار میدهیم اين روند را تا زمانیکه کل آرایه مرتب نشده ادامه مید.
مرتب میدهیم
صفحه 221:
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 }
221
صفحه 222:
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 ;
k:=2;
=m,
صفحه 223:
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 }
صفحه 224:
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 }
56 End
Writeln ( sum: 8:2 ) ; Sum:=0 ;
صفحه 225:
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]);
صفحه 226:
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 ;
226 16: < 16 1 ۶
End : { end of while ۲
صفحه 227:
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 ;
oa End ; { end of merge }
id. { End of program }
صفحه 228:
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') ;
58 for 1: 21 to N do
Write (state[i]) ;
صفحه 229:
- کدامیک از دستورات زیر در مورد اعلان زیر صحیح است:
a: array['A'..'Z'] of
char
الف- 72 ۲ 2 :1 ۲۸] ۵
ب- ۸ 2 :1 ۲] ۰2
ج- 2-1 :1 ' ]1ه
د- 12 2 :1 ۲1 ] 2
ح- 12 2 :1 1۳1۰ 2
229
صفحه 230:
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
صفحه 231:
تمرینات برنامهنویسی
* برنامهای بنویسید که که یک آرایه حداکثر ۵۰ عنصری را از
ورودی دریافت کرده و سپس عناصری از ارایه که او هستند
را با صفر جایگزین کرده ارایه حاصل را در خروجی چاپ
کند.
برنامهای بنویسید که عددی از ورودی دریافت کرده سپس آن را به
عامل های اول تجزیه نماید و حاصل را بصورت زیر در خروجی
ذجاب: لمانب
برای مثال: ۳-۲۱ ۱ ۷ ۱)
231
صفحه 232:
برنامهاى ب که یک عدد از ورودی دریافت کرده سپس در صورت وجود صفرهای
آن را حذف نموده. نتيجه را در خروجى جاب نمايد.
* برنامه ای بنویسد که یک ماتریس ۵ * ۵ رااز ورودى دريافت كرده سبس مجموع هر
سطر را انتهای همان سطر و مجموع هر ستون را در انتهای همان ستون چاپ نماید.
232
صفحه 233:
ماتریس هم پر حسب ستون و هم بر حسب سطر مرتب نموده به همراه ماتریس اول
در يك سر عاك ابية
* برنامهاى بنويسيد كه يك آرايه ٠٠١ عنصرى ازنوع صحيح كه 16١ عنصرمرتب
درآن قرار مىكيرد را از ورودی دریافت کرده سپس آرایه دومی با ۵۰ عنصر را از
ورودی بخواند
صفحه 234:
فصل 9 0
هاي کتابخانه ای توابع و روال
هدفهاي كلي
شناخت ساختار تابع و روال
شناخت توابع و روالهای استاندارد برای نوعهای صحیح
شناخت توابع و روالهای استاندارد برای نوعهای اعشاری و کارکتری
اشناخت توابع و روالهای استاندارد ریاضی
234
صفحه 235:
:دانشجو يس از مطالعه اين فصل بايد بتواند
ا توابع و روالهای استاندارد را در صورت نياز در برنامه استفاده كند.
ا ساختار توابع و خروجيهاى آنها را تشخيص داده و در برنامه خود از آنها
استفاده كند.
"1 ساختار روالها و خروجيهاى آنها را تشخيص داده و نتايج حاصل از آنها را
مورد استفاده قرار دهد.
#توابع ریاضی را براى محاسبه عبارت رياضى در برنامه بكار يبره. 235
صفحه 236:
EEE EEE << << ">
ساختار تابع 4
در كل هدف تابع اينست كه متغير يا متغيرهايى را بعنوان يارامتر از برنامه
اصلى دريافت كرد. عمل خاصى را روى بارامترها انجام داده و نتيجه را به
برنامه اصلی برگرداند
:شکل کلی فراخوانی توابع در برنامه اصلی بصورت زیر میباشد
ساختار تابع: 1
Function Name ( parameters )
Type
| | | |
نوع تابع پارامترها
اسم تابع کلمه ذخیره شده
236
صفحه 237:
موممئي EE EE EEE EE
توابعي براي اعداد صحیح و اعشاري
4
Abs et
دف: باز گرداندن قدر مطلق ( 8۳5010116 ) پارامتري که به آن ارسال ميشود:
Function Abs (x: Integer ): Integer ;
Function Abs ( x: Real ): Real ;
اين تابع يك عبارت از نوع حقیقی یا صحیح را بعنوان آراگون دریافت کرده سپس
.قدر مطلق آن را محاسبه و حاصل را برگرداند
237
صفحه 238:
Real ;
Integer ;
: = Abs (- 191.15 ) ;
خروجیحاصل:
F= 191.15 I= 171
صفحه 239:
هدف: باز گرداندن سینوس یک عدد از نوع اعشاری
Function Sin ( X: Real ): Real تابع:
6 یک عبارت یا عدد از نوع اعشاری بوده و حاصل مقدار سینوس ا میباشد.
صفحه 240:
Var
X: Real ;
Begin
2 : < 510 ) 10( :
Write ('sin(10)=', x:8:2);
End.
240
صفحه 241:
هدف: باز گرداندن کسینوس یک عدد از نوع اعشاری.
تابع: Function cos ( X: Real ): Real
ی کعبارتبا عدد از نوع لعشاریبوده و حاصلمقدار کسینوس ilies
صفحه 242:
۴
X: Real ;
gin
X:=cos(10) ;
Write ('cos(10)=', x:8:2) ;
d.
صفحه 243:
هدف: بازگرداندن آرک تانژانت یک عدد از نوع اعشاری
; Function ArcTan ( X: Real ): Real تابع:
6 یک عبارت يا عدد از نوع اعشاری بوده حاصل مقدار آرک تانژانت X میباشد.
صفحه 244:
Var
X: Real ;
Begin
X:=ArcTan (10) ;
Write (' ArcTan (10) =', x:8:2);
End.
توجه: در صورتى كه در توابع مثلثاتى زاويه از نوع درجه ارائه شود
:مى توان با فرمول زير معادل راديان آن را محاسبه كرد
Real = Dey * 3.14159 / 180
صفحه 245:
هدف: عدد نپر ( 2.71828 < 6 ...) رابه توان یک عدد میرساند.
شکل تابع: :) Function Exp ( X: Real
Real ;
X عبایستیا متغیریاز نوع لعشاریوده و حاصلتلبع نیز یکعدد لعشاریسیاشد
اين تابع مقدار عبه توان ۴ را محاسبه میکند.
صفحه 246:
X: Real ;
i: integer ;
Begin
For i:=1 to 10 do
Begin
X:=exp (i) ;
Writeln ) ۶: 8:2 ( ۶
End ;
End.
246
صفحه 247:
هدف: قسمت اعشاری یک عدد اعشاری را برمیگرداند.
Function frac ( X: Real ): Real ی تابع:
عددعاز نوع لعشاییو حاصلتسلبع یکعدد لعناییکه قسمتلعشایی
عدد 26 است می باشد و بعبارت دیگر این تابع قسمت اعشاری عدد ورودی را
به عنوان خروجی باز میگرداند.
247
صفحه 248:
r
Y,X: Real ;
gin
X: = frac (24.769) ;
Y: = frac (- 12.75) ;
Write ('x=', 8: 3,"y= "ee 23
0 ۰
X= 0.769 حلا - 5
248
صفحه 249:
هدف: قسمت صحیح یک عدد اعشاری را برمی گرداند.
‘unction Int ( X: Real ): Real تابع:
ا يكعبارتيا متغير از نوعلمعشايىو خروجىتابع فيزيكعلد
اعشارى است اين تابع مقدار صحيح يك عدد اعشارى در خروجى
نشان میدهد.
249
صفحه 250:
X: = Int (2.87) ; {2.0}
Y:=Int(-8.76) ; {-
صفحه 251:
هدف: محاسبه لگاریتم یک عدد
اعشاري در مبناي ».
; Function Ln ( X: Real ): Real igh شکل
6 ی کعبایتی| متغیر ازنوع لعشاریوده وحاصلتلیع فسیز یک ادلءاییم ی شا
صفحه 252:
r
X: Real ;
»gin
X:=Ln (2.87) ; {x = 3.73767 }
Write (°x=',x:10:5) ;
id.
252
صفحه 253:
هدف: فرد بودن عدد صحیح را
بررسي مي کند.
unction odd ( X: logint ): Booleam کل تابع:
یکعبایساز نوع 10120110 لستو تسلبع .فرد بسودنعباینتوا بسروسیمیک:
اگر مقدار خروجی تابع 1۳016 باشد 16 فرد است و اگر مقدار خروجی تابع alse
باشد ک ردنست.
253
صفحه 254:
صفحه 255:
هدف: غالباً براى يبدا كردن كد اسكى يك متغير كاراكترى بكار میرود.
شکل تابع: :) Function Ord (x: char
ارت ۲ از نوع كاركتري را بعنوان بارامتر دریافت
وكد اسكي أن را برمي كرداند.
اكر : از نوع اسكالر باشد تابع بعنوان خروجي
ترتیب قرار گرفتن : رادر مجموعه
اي که ابتدا به عنوان اسکالر اعلان شده, باز
ميگرداند.
صفحه 256:
Var
ch: char ;
Begin
For ch:='A' to '‘'Z' do
Write (ord (ch):5) ;
کد اسکی " ۸" تا" 2 ' را درخروجی چاپ میکند
كد اسکی ۲ ۸ ۰ عدد 1۵ میباشد.
End .
256
صفحه 257:
هدف: عدد پی را بر میگرداند.
Function pi: Real کل تابع:
اين تابع برای بازگرداندن عددی پی ( ۳۱۶۱۵۹۲ ۰۰۰) مورد استفاده قرار میگیرد.
257
صفحه 258:
هدف: مقدار قبل مقدار پارامتر را
بر مي گرداند.
pn pred (x): < same type of parameter > ; ۲
پارامتر تابع می تواند از هر نوع باشد و با توجه به نوع پارامتر تابع نیاز از
هم نوع میباشد و خروجی تابع مقدار قبل از * میباشد.
258
صفحه 259:
{ flag =
{i=-
Ch: = pred ('d') ;
c'}
i: = pred (15) ;
14 }
flag: = pred ( True ) ;
false }
i: = pred (- 30) ;
31 }
صفحه 260:
۲ تابع 1۳۵۱000
هدف: برای تولید عدد تصادفی
:شکل تابع
Function Random: Real ; )1
2)Function Random (x: word ):
word ;
اگر تابع 13210010180 به شکل یک یعنی بدون آرگومان مورد
استفاده قرار گیرد یک عدد تساوی از نوع اعشاری بین صفر و یک
تولید می کند و اكر به شكل دو بكار رود باعث تولید یک عدد تصادفی
از نوع ۷۷0۵1 که بزرگتر یا مساوی صفر و کوچکتر از * است خواهد شد.
260
صفحه 261:
Var
i: integer ;
Begin
For i:=1 to 10 do
Begin
Writeln (Random :
B27) ; Writeln
(Random )20(:8) ;
End ;
End.
۰ عدد تصادفى بين صفر و یک.
و ۱۰ عدد تصادفی بین ۰ و ۶۰ تولید نماید.
صفحه 262:
هدف: برای گرد کردن اعداد اعشاری بکار می رود.
تابع: Function Round (x: Real ): Longint
( یکعبارتیامتفیر لعشاریسوده وخروجیتلبع Longint ¢ 5!) sess
یباشد که نتیجه گرد کردن26 میباشد. اين تابع 6 را به نزدیکترین مقدار
حیح گرد میکند.
صفحه 263:
er ee ee و
0 2 :) 1
13 1 9
هددع ein ee
{i=18 اللا
i: =Round (17.45 ) {i=18
صفحه 264:
هدف: برای محاسبه محذور یک عدد صحیح یا اعشاری بکار میرود.
شکل تابع:
Function sqr (x: Integer ): Integer ;
Function sqr (x: Real ): Real
7
* عبارتی یا متغییری از نوع صحیح یا اعشاری بوده و خروجی تابع فیزیک
یک عدد صحیح یا اعشاری می باشد این تابع مجذور 16 را بعنوان خروجی بر
میگرداند.
264
صفحه 265:
Var
i: integer ;
Begin
For i:=1 to 10 do
Writeln ('I* 2=' , sqr
)1(( ز
End.
صفحه 266:
Function sqrt (x: 0
0 ; Real ): Rea
بر کت ee ee
ah ltl ys جنر # را بسعنولنخروجوبر میگ ردلند
صفحه 267:
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.
267
صفحه 268:
هدف: مقدار بعد از مقدار فعلی را برمی گرداند.
Function succ (x): same type of شکل تابع:
زر parameters
X یک عبارت از نوع صحیح. اولین و غیره بوده و خروجی تابع نیز از همان
نوع 3 مى باشد اين تابع مقدار بعد از ۱ را بعنوان خروجی بر میگرداند.
268
صفحه 269:
ch: = suce ('a') {ch='b'}
ch: = suce('A') {ch='B'}
i: =suce (15) {i= 16}
flag : = suce ( false ) { flag = True }
flag : = suce ( True ) { situa = 5 }
269
صفحه 270:
هدف: قسمت صحیح یک عدد اعشار را بر میگرداند.
Function Trunc (x: Real ): شکل تابع:
; Longint
x یکضارتنا متعیر از نوع شاوی ودد و خروجیتسلبع یکعدد از نوع
Longint میباشد. این تابع قسمت صحیح عدد اعشاری ۶ را بعنوان
خروجی بر میگرداند.
صفحه 271:
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.
صفحه 272:
ee
توابع از نوع کاراکتری *
در این بخش توايعي رآ بررسي مي کنیم که خروجي
آنها ار نوع كاراكتري باشد
chr at ¥
هدف: معادل کاراکتری یک کد اسکی را بر میگرداند.
Function chr ( X: Byte ): char کل تابع:
يكعبارتيا متغير از نوع باتبوده و خروجىتالبع يككاركتر موياشد
ن تابع کد اسکی را دریافت کرده و معادل کارکتری آن را بر میگرداند.
صفحه 273:
Var ,
i: Byte ;
Begin
For i:=65 to 91 do
Writeln (chr(1)) ;
End. خروجی :
برنامه بالا حروف ۸ تا 2 را در خروجی le میکند.
صفحه 274:
هدف: براي تبديل يك كاراكتر به حرف
بزرگتر بکار ميرود.
Function Upcase (ch: char ): شکل تابع:
; Char
یک عبارت یا متفیر از نوع کاراکتر بوده و خروجی تلبع فیزیک کاراکتری
باشد این تلبع حرف کوچک رابه حرف بزرگ تبدیل کرده و بعنوان خروجی
حروف بزرك را بر مى كرداند.
274
صفحه 275:
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
صفحه 276:
EE EE EEE EE موممئي
روالهاي استانداره *
در بخش های قبل دیدید که در توابع پارامترها به تابع ارسال می شود و تابع نیز
مقداری را بعنوان خروجی برمیگرداند روالها نیز مشابه توابع عمل میکنند با
اين تفاوت که خروجی روالها از طریق پارامتر برمی گردانده میشود يا اعلان به
.سیستم عامل میباشد. بنابراین روالها بدون نوع هستند
:شکل کلی روالها بصورت زیر میباشد
; Procedure Name
,
| | |
پارامترهاي روال اسم روال علمه
276
صفحه 277:
هدف: یک یا چند واحد از پارامتر ارسالی کم می کند.
:شکل روال
Procedure Dec (Var X: longint ) ;
Procedure Dec ( Var X: longint , N: longint ) ;
۴ يكمتغير از نوع ]10100130 و بسصورمتفیریسویساشدلین
روللکولحد از پسارلمتر ایسالکسم موکسند
277
صفحه 278:
Var 5
N : integer
Begin
N:=1201;
Dec (N) ; {N= 1200 }
Writeln (N) ;
Dec (N, 200) ; {W=
1000 }
Writeln (N) ;
End.
صفحه 279:
هدف: کنترل برنامه را به خارج از بلوک جاری منتقل می کند.
Procedure شکل روال:
> Exit
این روال باعث می شود که کنترل برنامه از بلوک جاری خارج شود. اگر این
روال در برنامه اصلی بکار رود باعث خروج از برنامه میشود. و اگر در یک
روال يا تابع بکار رود باعث خروج از روال یا تابع شده و کنترل برنامه به
برنامه اصلی منتقل میشود.
279
صفحه 280:
Var 8
i,j: integer ;
Begin
i: = 100;
j:=20 ;
Dec (i,j) ;
Write (i) ;
Exit ;
End.
: خروجی
بعد از اتمام عملیات Exit ot باعث خروج از برنامه می شودیر
صفحه 281:
هدف: خاتمه دادن به اجرای برنامه
Procedure شکل روال:
; Halt
اين روال باعث خاتمه اجرای برنامه شده و کنترل برنامه به سیستم عامل بر
كردة.
281
صفحه 282:
هدف: اضافه کردن یک يا چند واحد به یک متغیر
شکل تلیع: ) cedure Inc ( Var X: longint
Inc ( Var X: longint , N: longint ) ; مد
ا يكهبايتيا متغير از نوع 108001126 مىباشد دين ولليه مقنار
متغير * يكيا جند واحد مضافه ميكند
صفحه 283:
Var
N,i,j: integer ;
Begin
{i=101}
inc(j,N); {j= 210}
Writeln (i=',i,'j=',j) ۰
End.
صفحه 284:
هدف: باعث تغیر نحوه تولید اعداد تصادفی می شود.
Procedure شکل روال:
; Randomize
وقتی در برنامه از تابع 18213010102 استفاده میکنیم اعداد تصادفی تولید
شده در اجراهای مختلف یکسان می باشد برای جلوگیری از این وضعیت قبل
از استفاده از تابع 182000100 روال 180110101026 را بکار میبريم. تا
باعث تولید اعداد تصادفی متفاوت در اجراهای مختلف گردد.
284
صفحه 285:
Var
i: word ;
Begin
Randomize;
For i:=1 to 10 do
Writeln (Random (50) ) ;
End.
صفحه 286:
EE E EE EEE
حل جند مثال برنامهنويسي **
1 : 9 )1 > < 10 ( مثال : برنامه اى بنويسيد كه يك ماتريس مربع
از مقادیر صحیح را از ورودی دریافت کرده آنگاه عناصری که مربع کامل
نیستند را صفر کرده و در نهایت ماتریس حاصل را در خروجی چاپ می کند.
۳
1 1 زر : ۲
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 (ali, jd);
onl”
صفحه 287:
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 e{ End of program }
صفحه 288:
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 }
صفحه 289:
+ تمرینات
i,j: integer = § 5 :
۱.خروجی تمرینات زیر را تعیین کنید: a integ
ز 20 < :[ 100 2< : 1
7 1001011
Dec (j,10) ;
Me Cis) 3
Writeln (1:25,j:5) ۶
y: integer ;
3
: =Round (18.31) MoD 5 ;
Wig OF)
صفحه 290:
Chi = "A" 3
Ch: = chr(ord(ch)+3) ;
Write (ch) ;
Xe S112" s
Suce Cx)
0: < BL
Pred (ch) ;
Write (x,ch) ;
290
صفحه 291:
:ی
* تمرینات برنامهنويسي
۱- برنامهای بنویسید که تعداد ۱۰۰۰ شماره حساب بانکی ۷ رقمی بطور
تصادفی بین ۵۱۱۹۶۳۲ و ۹۹۸۱۷۱۱ را تولید کرده و چاپ AS
۲- برنامه ای بنویسید تا تعداد ۳۸ عدد تصادفی صحیح بین ۱۰ تا ۹٩ راتولید
کرده سپس آن را در خروجی به شکل مربع وسط صفحه نمایش چاپ کند.
۳- برنامهای بنویسید که یک عدد ۲۰ رقمی از ورودی دریافت کرده آن
زار نگدعده: تک برقبی طرب: موجه و حامل رارجر خروعی جات تباتیت
291
صفحه 292:
فصل 10
عتفیرهاک ایلکتروو وشتهها (String)
هدفهاي كلي
بررسی ساختار آرایه هایی از نوع کاراکتر
معرفی نوع داد جدید به نام رشته
مقایسه آرایه ای از کاراکتر و رشته
شناخت توابع و روالهای استاندارد برای رشته ها
صفحه 293:
:دانشجو يس از مطالعه اين فصل بايد بتواند
ja
رایهای از کاراکترها را در پرنامه پکار ببرد.
8 آرایهای از کاراکترها را با رشته مقایسه کند.
"لا اسمی افراد و غیره را با استفاده از آرایهای از رشته مرتب نماید.
#توابع و روالهای استاندارد مربوط به رشتهها را در برنامه خود بكار ببرد.
293
صفحه 294:
* متغيرهايي از نوع کاراکتر
متغیرهای کاراکتری ظرفیت پذیرش یک کاراکتر ( شامل یک رقم. یک حرف از
.حروف و يا يك كاراكتر ديكر ) را دارا مىباشئد
مقدار دهیلینمتفیر ها بسه صوردویر مویاشد :
s Meh: = "A
اگر بخواهیم متغیر های کاراکتری را از ورودی بخوانیم باید دقت بیشتری
به ,خرج دهیم برای اينکه فضاهای خالی کاراکتر محسوب می شوند
294
صفحه 295:
Writeln (' equal ' )
Else
Writeln (' Not equal') ;
خروجی حاصل از قطعه برنامه بالا بصورت زیر است:
Not equal
295
صفحه 296:
تیقمها بسصویتزیر مقایسه میسوند -1
9 ع وين 1 مهد 35" هم 1 ۷ PQS
.رقمها از لحاظ كد اسكى يشت سر هم قرار كرفتهاند
مقايسه مىشوند -2
296
صفحه 297:
EEE EEE << << ">
) 51 ( متغيرهاي رشتهاي
تعریف: مجموعهای از کاراکتر را یک رشته نامیده و متغیر از نوع آن را
.یک متغیر رشتهای مینامند
این متغیر نیز مانند ساير متغیرها در قسمت تعاریف متغیرها ( ۷۵ ) معرفی
میشود. در تعریف یک متغیر رشتهای معمولاً طول آن را مشخص میکنند.
اگر طول تعیین نشود بطور قراردادی کامپایلر حداکثر طول را برای آن در نظر
مى كيرد. حداکثر طول رشته ۲۵۵ کاراکتر میباشد.
297
صفحه 298:
طول رشته
کلمه ذ<
عیرهاشده |
اسم رشته
298
صفحه 299:
Var
S:string[10] ;
Begin
S:='pascal' ;
Write (s) ;
‘End .
صفحه 300:
; Read (s )
هنگام خواندن متغیرهای رشتهای اگر طول رشته ورودی از طول تعریف
شده بیشتر باشد فقط به اندازه طول تعریف شده خوانده می شود و اگر طول
رشته ورودی کمتر از طول تعریف شده باشد. رشته ورودی در منتهیالیه
سمت چپ متغیر رشتهای قرار گرفته و بقیه متغیر رشته ای بدون محتوا
تاق مق هائك
300
صفحه 301:
7[ میتوان استفاده کرد:"
Write (s) ;
مثال : برنمهای بنویسید که شماره دانشجوئی. اسم و فامیل دانشجوثی را
.از ورودی دریافت کرده سپس در خروجی نمایش دهد
صفحه 302:
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
بو (۱
صفحه 303:
آرايهاي از رشته بصورت زیر تعریف ميشود:
iy [1..length] of string
نوع رشته اي طول آرايه
303
صفحه 304:
برای خواندن چنین آرایهای بصورت زیر عمل میکنیم:
r i:=1 to 50 do
ReadIn (Name [i]) ;
ly نمایش آرایه در خروجی بصورت:
For i:=1 to 50 do
Writeln ( Name [i] )
صفحه 305:
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 }
صفحه 306:
00 58 آسمي از ور و۳ اطلاعات اسم خوانده شده را در
.صورت وجود در خروجى نمايش دهد
Name , Family: array[1..50] of string[ 30] ;
id: array[1..50] of longint ;
Nam : string [ 30] ;
306
صفحه 307:
write ('Enter Name:') ;
ReadIn (Name ) ;
write ('Enter family:') ;
Readln ( family ) ;
write ('Enter student Number:') ;
ReadIin (Id) ;
end ;
writeln ;
write ('Enter Name:') ;
3ReadIn (Nam) ; -_
صفحه 308:
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 ) ;
400
صفحه 309:
موممئي EE EE EEE EE
* توايع و روالهاي کتابخانهاي براي متغيرهاي رشتهاي
Concat at v
مدف: الحاق دو يا چند رشته به یکدیگر
Function concat (S1,S2,...,Sn): :عبات شکل
; string
٩2 , 1 , ... , 88 متفیرهایی از نوع رشته هستند و خروجی تابع نیز
یک متغیر رشتهای است این تابع دویا چندتابع را به هم پیوند داده. و رشته
حاصل را برمی گرداند.
309
صفحه 310:
١ 5503 , 501 ر str2: string
egin
Str1 : ='Pascal' ;
572 : < ۲ 0016۲
Str3 : = Concat ( Str1 , Str2) ;
write ( Str3 ) ;
nd.
با اجرای برنامه فوق. عبارت 0016 Pascal نشان داده خواهد شد.
310
صفحه 311:
ندف: استخراج یک زیر رشته ( 511053110 ) از یک رشته
n copy (S:string ; Index:Integer; count: Integer): stri
يكهبايتيا متغير پشته لیک» میخولهيم از آنزیر پشته لیک» نقطه 5 _
میباشد جدا کنیم لنا زیر یشته legs Index ob , Count
لمستموياشد 0۷11 حاصل یکیشته که طوللنبه لنلازد
311
صفحه 312:
Var
Strycstnil: string: 5
Begin
Str: =' Pascal Book' ;
Siriv= Capy( Str, 7,4) 74 Sri]
Book }
write (Str1) ;
End.
صفحه 313:
هدف: حذف یک زیر رشته از یک رشته
شکلروال: Procedure delete (Var str: string;
Index:integer;length: integer ) ;
5 یبکمتفر رشته لی 1110102 یکعبارتیامتغیر صحیح و 1.61101 نب
٠ عبارت يا متغیر صحیح میباشد. روال 126166 یک زیر رشته را از یک
ته حذف میکند این روال از محل Index بطول 1.6۳01 از رشته ٩]
ف میکند و رشته حاصل بعنوان خروجی روال برگردانده میشود.
313
صفحه 314:
Var
St: string ;
Begin
St: = 'Pascal.Book' ;
Delete (St,7,5) ۶
writeln (St) ;
End.
خروجی حاصل از برنامه فوق 389081 میباشد.
صفحه 315:
هدف: درج ( وارد کردن ) یک رشته در یک رشته دیگر
Procedure Insert ( Str1: string ;Var :J\;, Js:
; Str2: string ; Index: Byte )
Str’ عبارت يا متغیر رشته ای. ٩12 منغیر رشته ای و 11206 عبارتی
دد از نوع os میباشد. روال 11561 رشته 9171 رادر رشته Str2
خانه Index درج میکند و رشته حاصل خروجی روال خواهد بود.
315
صفحه 316:
Var
Str1 , str2: string ;
Begin
Str1: =' Pascal 7' ;
Str2: ='Turbo' ;
Insert (Str1, Str2,6) ;
End.
خروجی حاصل )3 Turbo pascal 7 Yu ub, خواهد بود.
316
صفحه 317:
هدف: محاسبه طول رشته
Function length (Str: string): ۰ شکل تابع:
; Integer
Str يكعبارتوشته لمويوده و خروجىتلبع يكعدد صحيح موياشد
اين تابع طول رشته ورودی را محاسبه و بعنوان خروجی بر میگرداند.
صفحه 318:
Var
St: string ;
n: integer ;
Begin
St: = 'Turbo Pascal 7' ;
n:=length(S4); {n=14}
Write (' The length of string
ist) a) 3
End.
صفحه 319:
هدف: برای جستجوی یک رشته داخل رشته دیگر
Function pos ( Str1: string ; 512: شکل تابع:
رز String ): Byte
1 یک عبارت يا متفیر رشته ای و ٩112 نیز یک عبارت یا متفیر
رشته ای میباشد و خروجی تابع یک عدد صحیح می باشد. این تابع محل
اولین وقوع رشته ٩111 در رشته ٩۲2 را بعنوان خروجی بر میگرداند.
319
صفحه 320:
Var
Str1 , Str2: string ;
i: integer ;
Begin
Str1: =' Book' ;
Str2: = ' Pascal Book' ;
i: = Pos (Str1,Str2) ; {i=
8}
Write ('i=',i) ;
نکته: توجه کنید که اگر عمل جستجو با موفقیت انجام نشود ( JPG, gas
.در رشت نداشته باشد ) تابع مقدار صم اند
دز وستهة دوم ic cate a8 ر صفر بر مى كردا ae
صفحه 321:
هدف: برای تبدیل عدد به یک رشته عددی بكار مى رود.
ال. 1: ( Str: string ر تقم؟ :تعاطا :1 )او وتال0 ۵8(
Procedure Str (F: Real: format, Str: string) : ;
درشکل ۰۱ 1 یک عبارت یا متغیرعددی بوده و ٩ یک متغیر رشتهای
میباشد این روال یک عدد صحیح با فرمت مشخص را به یک رشته عددی
درشکل ۲ ۰ 17 یک عبارت یا متفیر رشتهای و ٩۲ یک متغیر رشتهای میباشد
321
صفحه 322:
Var
Number, Str: String ;
Begin
Str (543:5, Str) ; {Str='
543' }
Str (12.25: 7:2 Str) ; { Str
=' 12.25'}
Str (127: 3: Str) ; { Str=
'127'}
Str (3.1239: 7:3, Str) ;
{ Str =' 3.124'}
End.
322
صفحه 323:
هدف: تبدیل یک رشته عددی به یک عدد
; Procedure Val (S: String روال: ۱: 66۲ص :۲ ۷۵۲ ز
; (Var Error: inte¢
dure Val (S: String ; Var N: Real ; Var Error: inte¢
5 یکعبارتیامتغیر يشته لی ۷( يكمتغير از نوع صحيح يالمعشايىو
1 نیز یکمتفیر از نوع صحيح مئباشد دين ولليكيشته عددى
را ببه یکعدد صحیح یسا(عشاریتبدیلمیکند و لذرا توسطمتغير 1(
بسرمیگردلند دگر عملتسبدیلسطور صسحیح لنجام شود. مقلار متفیر
281101 برلبر صفر در غیر اینصور تم حل و جود لشکل لوا مشخص رمک ند
323
صفحه 324:
F: Real ;
عد غ56 ' 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
, ۲ ۱
End.
صفحه 325:
EEE EEE
**ارائه جند مثال در مورد رشتهها و کاراکترها
مثال : برنامهای بنویسید که یک جمله از ورودی دریافت کرده سپس در
صورتی که IS als وجود داشته باشد آنها را به 216 تبدیل نماید و در
نهایت رشته حاصل را در خروجی نمایش دهد.
توجه كنيد كه ممکن است بیش از یک بار کلمه 18 تکرار شده باشد
در اینصورت همه کلمات 5] را با 816 تبدیل کند.
325
صفحه 326:
Writeln (' Enter sentence
ReadIn (St) ;
Repeat
i: = Pos (‘is', St) ;
if 1< 0 Then
Begin
Delete ( St,
i,2);
Insert
(‘are', St,i) ;
326 end ;
1-141 يت د |)
صفحه 327:
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 ) ;
صفحه 328:
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)) ;
صفحه 329:
S1: string ;
i: integer ;
91: = 'ABCDEF' ;
For i:=1 to length(S1) ;
Delete (S1,i,1) ;
Writeln (S1) ;
Var
Begin
-End
صفحه 330:
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) ;
صفحه 331:
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
331
صفحه 332:
۳ 5 1 High
* تمرینات برنامهنویسی
*برنامهای بنویسید که یک پاراگراف را از ورودی دریافت کرده
( حداکثر ۱۰ خط ) سپس:
.الف) تعداد کلمات هر سطر را شمرده و انتهای سطر نمایش دهد
.ب) تعداد حروف صدا دار را شمرده جاب نمايد
.ج) تعداد خطوط برنامه را شمرده در خروجی چاپ کند
.د) تعداد جملات هر خط را محاسبه و در سطر های جداگانه نمایش دهد
332
صفحه 333:
*برنامهای بنویسید که یک عدد در مبنای مشخص را از ورودی دریافت
کرده سپس آن را به مبنای 102 که از ورودی خوانده می شود ببرد.
*برنامهای بنویسید که یک پاراگراف را از ورودی دریافت کرده
کلمات تکراری هر سطر را حذف نموده و پاراگراف حاصل را بهمراه
پاراگراف اولیه در خروجی با پیغام مناسب نمایش دهد.
صفحه 334:
*برنامهای بنویسید که دو عدد ۲۰ رقمی ( بصورت رشته باید خوانده شود )
را از ورودی دریافت کرده سپس مجموع و حاصل ضرب این دو عدد را
محاسبه و در خروجی با پیغام مناسب چاپ نماید.
*برنامهای بنویسید که یک رشته از ورودی دریافت کرده
سپس کلمات داخل آن را بصورت عمودی کاراکتر به کاراکتر نمایش دهد:
*یرنمای بنویسید. که یک پاراگراف با حداکتر ۵ خط را از ورودی دریافت
نماید. سپس مجموع ارقام یا اعداد ( در صورت وجود ) هر خط را محاسبه
نموده در انتهای همان سطر نمایش دهد.
ee
صفحه 335:
ges
برنامههاي فرعي
هدفهاي كلي
_- شناخت اجزاء تشکیل دهنده es و روالها
* بررسى انواع پارامترها و متغیرها در برنامههای فرعی
* شناخت تفاوتهای روالها و توابع
* معرفی مزایای استفاده از زیر برنامهها
ی
صفحه 336:
:دانشجو يس از مطالعه اين فصل بايد بتواند
"" برنامه خود را به جندين زيربرنامه تقسیمبندی نماید.
"" زيربرنامهها را با توجه به قوانين موجود. در ساختار برنامه جا دهد.
۴ باتوجه به مزایای استفاده از آنها را در برنامه خود بکار ببرد.
336
صفحه 337:
الم < << کچ
* روالها
روالها نوعی از برنامههای فرعی هستند. که به طور مستقل و جداگانه وظیفه
یا وظایف خاصی از برنامه اصلی را انجام میدهند. روال ها در صورت نیاز
اطلاعات خود را از طریق پارامترها دریافت و همچنین در صورت نیاز نتایج را
از طریق پارامترها به برنامه اصلی باز میگردانند. پارامترها در حقیقت خطوط
بالؤقباظق تق یرک مامتان ی تماقا اقرضی اهتنا نقزها ناقتهامی. فنزان
كه توابع و روال ها روانتر عمل کنند. زیرا آنها به برنامه های فرعی این قابلیت را
337
هند
.مى دهند كه با هر فراخوانی. دادههای مختلفی را مورد پردازش قرار ۱
صفحه 338:
Procedure Name (parameters list )
| | |
vious siaelS لیست پارامترها اسم روال
ar
{ List of locad variable }
Begin
1 { Procedure Body }
End af End of procedure }
صفحه 339:
5 اسم برنامه اصلی Program
: تعاریف برنامه اصلی
Procedure ... ۳
Begin {main program }
فراخوانی روال ها
End. { End of program ۳
صفحه 340:
(Formal parameters ) ¢5)50 sb xb.)
(Actual parameters ) (ily (bs LLY.
از پارامترهای صوری هنگام اعلان روال و از پارامترهای واقعی هنگام
رفخولت رو لها لستفادد مشود
340
صفحه 341:
پارامترهاي صوري در حالت كلي 2 نوعند؛ که با توجه به نوع روال و
تصمیم برنامه نویس مورد استفاده قرار مي گیرند:
” يارامترهاى مقدارى ( 122323126166375 71731116)
(Variable parameters ) «i يارامترهاى ”
صفحه 342:
پارامترهای مقداری. پارامترهایی هستند که مقدار متفیرهای فرستاده شده از
برنامه اصلی را دریافت می کنند و وظیفه آنها فقط عبور دادن مقدار به روال
میباشد. لذا تغییرات پارامترهای مقداری در روال به برنامه اصلی انتقال نمییابد
: پارلمترهایس قداریب صوردفیر تسعریفمیشوند
dure Name (varl: type ; var2:type,...
ع مقداری اسم روال کلمه ذخیره شده
342
صفحه 343:
ram = main
2,yl1, y2: integer
ure test (A1,A2,B1,B2:integer);{formal para
9
:1 اا 1 ضع ; { Actual parameters }
End of program سح و
343
صفحه 344:
در مثال بالا این تناظر برقرار است:
پارامترهای واقع
Al
A2
B1
B2
متناظر است با
نا
پارامرهای وافعي برنامه اصلی انتحاب شوند. این به gle این تست که
این پارامترها ( پارامترهای صوری ) همان پارامترهای واقعی هستند
صفحه 345:
متغیرهای ۰.۰ , ۷۵۲1 ر ۷۵32 پارامترهای مقداری هستند. توحه کنید. که
این پارامترها صوری هستند و نوع و ترتیب آنها بايد با نوع و ترتیب
پارامترهای واقعی در تناظر یک به یک باشند.
345
صفحه 346:
ram main
2, yl, y2: integer
lure test (A1,A2,B1, B2: integer ); {formal pai
Begin { main }
test (x1 ,x2,yl,y2) ; { Actual
سوت parameters
End. { End of program }
—_
صفحه 347:
همانطور که ملاحظه می کنید. روالی بنام 65 با ء پارامتر مقداری
در پرنامه استفاده شده است. متفیرهای 1 ر 22 , 971 ر ۷2 از برنامه
اصلی به روال 651 ارسال شده و بترتیب مقادیر این متغیرها در
متغیرهای با همان نوع در ۸1 , ۸2 , 191 , 192 قرار می گيرند.
347
صفحه 348:
یک پارامتر متفیری. تفیرات یک پارمترواقمی را منوان حروجی به پرنامه
اصلی برمی گرداند. تفاوت این گونه پارامترها با پارامترهای مقداری در ارسال
تغييرات ايجاد شده در پارامترها میباشد. وقتی نیاز است. که نتایج روال به
برنامه اصلی برگردد. از پارامترهای متغیری استفاده میکنند
اعلان پارامترهای متغیری به صورت زیر میباشد:
Name ( var id1 : type ; var id2: type ,...
مت پارامترهاي متغيري اسم رواال
as
تغيرهاى 1612 , 101 و ... يارامترهاى متغيرى مى باشند که نتایج روال. توسط
348
انها به برنامه اصلى بازكردانده مى شود.
صفحه 349:
را محاسبه و نتیجه را در برنامه اصلي چاپ نماید.
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 ,
صفحه 350:
پارامتر واقعی متناظر است با يارامتر هاى صورى
Num1 Num1
Num2 Num2
Total sum
Average ave
0 , 111721 پارلمترهایمتدایوو 2۷76 , SUM پارلمترهایمتغیرء
باشند. که توسط آنها نتایج به برنامه اصلی برگردانده میشود.
350
صفحه 351:
در برنامههای فرعى دو نوع متغير علاوه از پارامترها مورد استفاده قرار
میگيرند. اين متغیرها متفیرهای محلی یا متغیرهای سراسر هستند.متفیرهای
محلی. متغیرهایی هستند که در بلاک مربوط به خود قابل استفاده هستند. ولی
متغیرهای سراسری در تمام برنامههای فرعی قابل دسترس میباشند
متغیرهای محلی در داخل برنامههای فرعی در قسمت تعاریف معرفی میشوند
.و در خارج از روال قابل دسترسی نیستند
351
صفحه 352:
-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}
صفحه 353:
مر ری
x
Y.
353
صفحه 354:
>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}
:خروجی پبرنامه بالا بصورت زير است
b=2 c=5 16 وج
صفحه 355:
بکارگیری روالهای بدون پارامتر
بکارگیری روال همراه پارامترهای با خاصیت ورودی
بکارگیری روال همراه پارامترهای با خاصیت ورودی و خروجی
355
صفحه 356:
كاهى لازم است تا برنامه فرعی کاملاً مستقل (بینیاز از مقادیر برنامه اصلی) در
بخشهای مختلف یک برنامه اجرا شود. در اين صورت نیاز به استفاده از پارامتر
بیمفهوم میباشد و از روالهای بدون پارامتر استفاده مى كنند
غالبا زمانیکه بخواهيم پیفامهای خاصی را در قسمتهای مختلف برنامه نمایش
دهیم. این پیغامها را در یک روال قرار داده و در صورت نیاز روال
مربوطه را فراخوانی میکنیم.
صفحه 357:
Program Example ;
Procedure Head
Begin
WriteL((Name Family Age
No’);
۱۷۷ ا ا م م )ام از 0
End;
Begin{Main}
WriteLn(' open university ' ) ;
Head;
End.
صفحه 358:
همانطور که قبلاً اشاره کردیم» هدف از بکارگیری پارامترها انتقال مقادیر از
برنامه اصلی به روالها میباشد. اگر این انتقال یک طرفه باشد یعنی فقط از
برنامه اصلی به روال باشد. این نوع پارامترها فقط خاصیت ورودی خواهند
داشت. (قبلا در اين مورد توضیح داده شده است) در اين نوع روالها از
پارامترهای مقداری استفاده مى كنئد
358
صفحه 359:
(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}
صفحه 360:
ي روال همراهپارامترهاي با خاصیت ورودي و خروجي
در این نوع روالها پارامترها دو خاصیت مهم دارند یکی انتقال دادهها از
برنامه اصلی به روال و دیگری انتقال یا ارجاع نتایج از روال به برنامهاصلی
میباشد. در اين نوع روالها از پارامترهای متفیری استفاده می کنند
360
صفحه 361:
Program Example ; سيت
Var
A, b: integer ;
Procedure change (var x, y:
integer) ;
var
temp:integer;
Begin
Temp:=x;
Sy;
Y:=temp;
صفحه 362:
Begin { Main }
ReadLn(a,b);
Change(a,b);
WriteLn ('a=',a,'b=',b);
End.{End of program}
صفحه 363:
۰ ۳
** ارتباط روالها با یکدیگر
در پاسکال زیر برنمهها نهتنها از طریق برنامه اصلی بلکه از داخل یکدیگر
نیز ,فراخوانی میشوند
فراخوانی روالها از داخل یکدیگر تابع قوانین کلی زیر است:
۲ قلنون اول
قانون دوم
قانون سوم
صفحه 364:
از هر برنامه (اصلی یا فرعی) به برنامه فرعی در صورتی میتوان. دسترسی
داشت. که در بخش تعاریف Of برنامه (اصلی يا فرعی) قرار داشته باشد.
بطور مثال در شکل زیر پرنامه اصلی 11 میتواند. به كليه برنامههای فرعی
1,2 و... که در بخش تعاریف برنامه اصلی قرار دارند. مراجعه کند
صفحه 365:
صفحه 366:
nd;
egin {Main}
۳001:
رصم و
صفحه 367:
والهاى 23062 , 101061 داخل برنامه اصلی 118310 تعریف شدهاند. لذ
راحتی میتوان در برنامه اصلی به آنها دسترسی پیدا کرد.
والها خود نیز داخل هم میتوانند قرار بگیرند. دقیقاً مثل روالهای معمولی
این تفاوت که در داخل روال باید تعریف شوند. به اینگونه روالها. اصطلاحاً
والهای متداخل یا تودرتو میگویند.
367
صفحه 368:
اگر روالها در بخش تعاریف یک برنامه به موازات یکدیگر تعریف شوند و
نه در داخل هم. در روالهای بعدی امکان رجوع به روالهای قبلی وجود
خواهد داشت. بعبارت دیگر به روالی میتوان دسترسی پیدا کرد که قبلاً تعريف
شده باشد.
368
صفحه 369:
برنامه اصلى
روالها
در شکل بالا چون 102 قبلاً معرفی
شده است میتوان آنرا داخل 3
فراخوانی کرد.
Main
21
22
23
P2
صفحه 370:
گر روالها در بخش تعاریف برنامهأی بصورت متداخل باشند. در اینصورت
ز روال درونی میتوان به روالهای بیرونی که قبلا تعریف شده.
راجعه کرد و همچنین از روال درونی به روالهای بیرونی که به موازات
کدیگر قرار گرفتهاند. نیز میتوان دسترسی پیدا کرد.
لور مثال در شکل زیر روال 1 میتواند به روالهای 2,03 دسترسی
ییدا کند. وهمچنین روال درونی 124 میتواند بهروالهای 103 , 102 مراجعه کند
370
صفحه 371:
۳3
22
Pl
صفحه 372:
EE << << ">
** اعلان روالها به روش 1015172101
همانطور كه قبلاً اشاره كرديم از روالى مىتوان در روال ديكر استفاده کرد.
كه قبلاً تعريف شده باشد. در توربوياسكال نقيصه فوق به كمك اعلان
01 قابل حل است. بدین صورت كه اكر روالى به هنكام تعريف با
forward ore! همراه باشد. بدون رعایت از پیش تعریف شدن میتواند.
در روالهای دیگر ظاهر شود.
372
صفحه 373:
Procedure Name ( parameters ) ;
; forward
| ۱
| ! ۱
کلمه ذخیره شده لیست پارامترها اسم
روال کلمه ذخیره شده
صفحه 374:
صفحه 375:
End;
همانطور که ملاحظه میکنید با اعلان روال 97063 ۳
بصورت 1201080230 بقیه روالها میتوانند به آن 3 1
دسر لکد 212003
End. {End of program}
صفحه 376:
EE EE EEE EE موممئي
(Functions) توابع *
نوع دیگری از برنامههای فرعی, توابع میباشند. توایع مانند روالها:
پیمانههای مستقلی هستند. با اين تفاوت که روالها میتوانند. تعدادی
خروجی داشته باشند. در حالی که توابع فقط یک خروجی دارند. در روالها
معمولاً خروجیها توسط پارامتر به برنامه اصلی ارجاع داده میشود. ولی
در توابع اینکار به نحو دیگر انجام میگيرد.
376
صفحه 377:
Function Name ( List Of Parameters ) :
; Function Type
نوع تابع ليست پارامترها
wh pul كلمه ذخيره شده
صفحه 378:
۰ دکنه
—
تابع فقط میتواند. یک خروجی داشته باشد. نوع خروجی تابع. همان نوع تابع
محسوب مىشود. لذا با توجه به نوع خروجى تابع. نوع تابع تشخیص داده
میشود. ذکر اين نکته خالی از لطف نیست که نوع پارامترهای صوری توابع
معمولاً مقداری هستند چرا که توابع نوعی برنامههای فرعی هستند که فقط یک
خروجی برمی گردانند. لذا استفاده از پارامترهای از نوع متغیری پسندیده
نمیباشد. (اشکال کامپایلری در توربو پاسکال ندارد ولی در پاسکال استاندارد
این کار اشکال کامپایلری دارد.)
مقدار خروجی توابع توسط اسم تابع برگردانده میشود. توابع مثل روالها بعد
.از قسمت تعاریف پرنامه اصلی ظاهر میشود
378
صفحه 379:
Name := Resualt Of
Function ;
End ;
379
صفحه 380:
تمام پارامترهای تابع باید از نوع مقداری باشند
نوع داده نتیجه تابع در انتهای عنوان تابع و بعد از لیست پارامترهای صوری
قرار میگیرد
در بدنه تابع. خروجی تابع با نسبت دادن مقدار به نام تابع مشخص میشود
380
صفحه 381:
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
صفحه 382:
ناحیه داده هاي اصلي_ 201" ناحيه داده هاي
پارامترهای صوری
M پارامترهای واقعی
N
ee
متفیرهای محلی
نتیجه تابع P
2 I
نتیجه تابع
2
382
صفحه 383:
+ دوایع بار تسی IRCCULSLUIL)
(Functions
در پاسکال یک تابع یا روال میتواند. خودش را فراخوانی نماید. پیمانهای که
خودش را فراخوانی میکند یک پیمانه بازگشتی نام دارد. اين نوع توابع در
۶ ی و واه وت اد وت ۰ ارت s
شرط خاص که غالباً به یک عدد ثابت ختم میشود. ادامه پیدا میکند. سپس
مقدار تابع از پایین به بالا محاسبه میشود و در نهایت نتیجه تابع حاصل
.می شود
383
صفحه 384:
را در محلی از حافظه بنام پشته (8126016) قرار میدهد. اگر بازگشت به تابع
بازكشتى مجدداً صورت گیرد. مقادیر فعلی متغیرها مجدداً بدنبال مقادیر قبلی
و اصطلاحاً در پشت مقادیر اولیه قرار میگیرند. هنگامی که شرط پایانی در
تابع بازگشتی رخ می دهد. در اولین بازگشت مقادیری را که هنگام مراجعه
به خود. در پشته نگهداری کرده مجدداً در دسترس قرار میدهد و بهمین
ترتیب در بازگشتهای بعدی این عمل تکرار میشود تا مقدار تابع محارییه شود.
صفحه 385:
شرط پایانی | مقادیر متفیرها درآخرین بازگشت به تابع
مقادیر متغیرها در سومین بازگشت به تابع
مقادیر متغیرها در دومین بازگشت به تابع
مقادیر متغیرها در اولین بازگشت به تابع
38
صفحه 386:
مقادیر متفیرها در سومین بازكشت به تابع
مقادیر متفیرها در دومین بازگشت به تابع
مقادير متغيرها در اولين بازكشت به تابع 386
صفحه 387:
۳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
صفحه 388:
388
صفحه 389:
Function GCD ( N,M:integer ):
Integer ;
Begin
If (N<=M) and (M Mod N =
0) Then
GCD:=N
Else
GCD:= GCD(M,NmodM);
End ;
389
صفحه 390:
EEE EEE << << ">
۰ ۳۹ 2
** مقايسه توابع و روالها
توابع و روالها هر دو برنامههای فرعی هستند. که بطور مستقل وظایفی را بر
:عهده دارند. ولی در اين میان از بعضی جنبهها متفاوت میباشند که عبارتند از
حوم فرلخولنیآنها با هم متفاوتلست روا ها از طریقعبارلتو وا لفرلخولنده .1
یشوند. درصورتی که فراخوانی تابع توسط عبارات مقایسهأی و یا تخصیص
بجه به يك متغير صورت مى كيرد
كام معلانيكتلبع. نوع تلبع يانوع نتيجه حاصلاز تلبع بايد ذكر شود.
مورتى كه روالها نيازى به اين كار ندارند
ولبع فسقط یک خروجوبرمیگ ردلنند ولیروا فا میسولنند چندینخریجی3
گردانند. درضمن نتیجه توابع توسط اسم تابع فرستاده میشود ولی alan
pois پارامترها. نتایج را تیک دانتن
صفحه 391:
* طربقه ارسال آرایهها به توابع و روالها
آرایهها خود مجموعهی از دادهها میباشند. لذا برای ارسال آنها نمیتوانیم
از روش معمولی ارسال پارامترها استفاده کنیم. و بطور مستقیم نمیتوان آنها
را به برنامههای فرعی انتقال داد. برای ارسال آرایهها به عنوان پارامتر به
برنامههای فرعی از دستور 137106 استفاده میکنند. دستور 11/06 قبل از
تعاریف برنامه اصلی بکار میرود و توسط این دستور در واقع یک نوع
سادهسازی در تعاریف فراهم میشود. و با این سادهسازی میتوان دادههای
391
صفحه 392:
تعریف داده ساخت یافته = شناسه Type
برای مثال یک ارایه از نوع صحیح را تعریف میکنیم:
Type No = array [1...100] of intec ;
در اینصورت تعريف آرایه به © نسبت داده میشود. اگر بخواهیم متغیری
از نوع آرایه بالا تعریف کنیم. آنرا از نوع 1*0 تعریف میکنیم:
ar
Number: No ;
392
صفحه 393:
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 ;
حص
صفحه 394:
Index:= I ;
Flag:= FALSE ;
End ;
Inc (1);
End ;
Search:= Index ;
End ;
LORE EOE OEE CETTE eee
1
<a
صفحه 395:
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) );
Ends{ End Of Program }
صفحه 396:
* تمرینات
" روال Down را در نظر بگیرید:
601111 Down ( N: Integer) ;
in
While N>0 do
Begin
Write (N: 3);
Dec (N);
End ;
7
ب) وقتی روال بصورت )5( down فراخوانی شود. چه چیزی چاپ میشود
ب) مقدار پارامتر واقعى 7 بعد از اجرای روال چیست؟
396
صفحه 397:
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 ر 5< لا فراخوانی كنيل
صفحه 398:
:ی
© تمرینات برنامهنويسي
" برنامهای بنویسید که اطلاعات حداکثر ۱۰۰ دانشجو که عبارتند از:
vt Family Nanie
اسم 900 شماره
دانشجوئی
را از ورودی دریافت کرده سپس:
الف) توسط روالی بنام :501 اطلاعات را برحسب شماره دانشجوئی مرتب کند.
ب) توسط تابعی بنام 5628۳610 شماره دانشجوئی فردی را از ورودی دریافت
نماید. در صورتی که شخص موردنظر در لیست باشد. سایر اطلاعات انا
صفحه 399:
* آرایهآی از نوع صحیح با حداکثر ۱۰۰ عنصر را در نظر بگیرید.
برنامهأى بنويسيد كه ابتدا آرايه را از ورودى دريافت کرده سپس با استفاده از
يك تابع بازكشتى بيشترين مقدار آرايه را محاسبه نمايد.
۴ دو آرایه مرتب حداکثر ۱۰۰ عنصری که شامل اسامی افراد میباشد را درنظر
بگیرید.
برنامهای بنویسید که نخست دو آرایه را از ورودی دریافت نموده سپس توسط
روالى بنام 6 اين دو آرايه در هم ادغام نموده و در آرایه سومی قرار دها
399
صفحه 400:
فصل 12
هدفهاي كلي
,
مفهوم مجموعه و دادههای شما شی در زبان پاسکا
J Ob} )
e
جموعه و داد شمارث
ههای شمارشی به عنوان متغیر
: Rostra
صفحه 401:
:دانشجو يس از مطالعه اين فصل بايد بتواند
5 مفهوم مجموعه و دادههای شمارشی را درک کند.
۴ بتواند در صورت لزوم از مجموعه و دادههای شمارشی استفاده کند.
صفحه 402:
تعداد محدودی از دادهها که از نظر نوع یکسان هستند. در غالب مجموعه و يا
.گونههای شمارشی نگهداری میشوند که مفهومی شبیه در ریاضیات دارند
برای استفاده در مواردی خاص نظیر روزهای هفته و یا نوع ماشينها و... كه
ترتیبی هستند و یا یک مجموعه از دادههای پشت سر هم میباشند. استفاده از
این ساختارها کار را بسیار راحت میکند. هر چند وجود آنها به عنوان
ساختارهای دادهای. الزامینیست. بهرحال به عنوان ابزارهایی از زبان پاسکال
هستند که در مواقعی. ضروری بنظر میرسند و مسئله را به صورتی قابلفهم و
.راحت حل مى كند ۳
تس
صفحه 403:
* مجموعهها (عاه6)
در زبان پاسکال مجموعه مفهومی شبیه به مفهوم مجموعه در ریاضیات جدید
دارد. متفیری است که شامل لیستی از اعداد صحیح. SINS بولین و یا از نوع
همارشفئ :و ياشد كه :دا راق داد هاض موه بجهدا رده ها می پاش ناو
این جهت بسیار شییه به یک ail در زبان پاسکال است که شامل دادهعانی از
یک نوع میباشد. ولی آرایه دارای عناصر محدودی نیست و در ضمن مانند
.آرایه تعریف نمیشود
403
صفحه 404:
برای تعریف يك مجموعه از کلمات کلیدی 0 56 بصورت زیر استفاده میکنیم:
Type
Name= Set of Type Of Set;
Type
Digit_type = 0..9;
Digit = Set of
Digit_type
404
صفحه 405:
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';
405
صفحه 406:
عضو مجموعه میباشد يا خیر. این عمل در زبان پاسکال با کلمه کلیدی
in
صورت میگیرد. اگر عضویت صحیح باشد جواب 11116 وگرنه
False
میباشد. همچنین دو مجموعه را میتوان با علامات شرطی = < >
<- و >-مقایسه کرد که همگی دارای خروجی درست يا غلط میباشند.
ولیعلامات شرطی < و > در مورد مجموعهها کاربردی ندارد. مور
صفحه 407:
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
“407
write([1,2] <= [1,2,3]);
صفحه 408:
در ریاضیات میتوانیم مجموعهها را با هم اجتماع اشتراک و تفاضل کنیم که
این عملیات در پاسکال با عملگرهای + # و -به ترتیب میباشد. اجتماع
دو مجموعه ترکیبی از همه عضوهای آنها است و اشتراک یعنی عضوهایی
که در هر دو مجموعه مشترک است و تفاضل یعنی اعضایی که در مجموعه
اول میباشد و در مجموعه دوم وجود ندارد.
408
صفحه 409:
eto
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; d=[2,3]
e:= a-b; e=[0,1]
id.
صفحه 410:
۱. آرگومان ورودی روالها میتواند مجموعه باشد که قبلاً در تایپ تعریف شده
باشد. نه اينكه مستقيم در روال به عنوان آرگومان بياید. ولی خروجی یک تابع
نمیتواند از نوع مجموعه باشد.
۲ برای نوشتن يا خواندن مجموعهها باید عضو به عضو عملیات صورت
بگیرد و مستقیماً توابع Read ۰ روی آنها کار نمی کنند.
410
صفحه 411:
Program test ;
Var
num , temp : set of byte;
I, c: integer ;
Begin
Writln (‘Enter numbers:
Readln( 1) ;
Num :=[];
0 (0) 2
==
صفحه 412:
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 }
412
صفحه 413:
>" << << آآآآآاسا"اآ۳
* دادههای شمارشی
(Enumeration)
دادههای شمارشی. یک مجموعه مرتب از اعداد است که در برنامه. هر عدد
دارای نام بخصوصی است. این نامها در داخل دو پرانتز باز و بسته قرار
میگیرند و بترتیب از صفر مقدار میگیرند مگر اینکه برنامهنویس به آنها
.مقدار مخصوصی بدهد
413
صفحه 414:
۷06
0
Jar
Cars_type = (Peykan, Pride, Pegout,
Cars: cars_type;
حال در پرنامه 0815 میتواند مقادیر داخل دادههای شمارشی را بگیرد:
cars:= Pride;
cars:= PK;
414
صفحه 415:
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.
i=3 j=5
415
: خروجی
صفحه 416:
متغیر داده شمارشی شبیه مجموعهها حداکثر دارای ۲۵۹ عضو میتواند باشد که
از صفر تا ۲۵۵ شماره گذاری میشود و لذا یک بایت حافظه را اشغال میکند.
416
صفحه 417:
و به عنوان آرگومانهای روالها و یا خروجی توابع میتواند درنظر گرفته شود
ولى حتماً بايد در 1106 تعریف شده باشد و مستقیماً نمیتوان بکار برد.
اين عمل مشابه مجموعهها و آرایهها نیز میباشند. لذا ابتدا در 13706 تعریف
میشود. سپس به عنوان ورودی و یا خروجی روالها استفاده میشود وگرنه
خطای کامپایلری پیش خواهد آمد. همچنین میتوان در آرایهها از دادهها
شمارشى استفاده كرد. 417
صفحه 418:
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
صفحه 419:
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;
‘Readin(i):
صفحه 420:
٠ تمرینات
A=[1,3,5,7] , , [8-12,4,6 و [1,2,3]-0) باشد عبارات زير ر
فى کنید.
الف- (00- 8) + لكر
ب A + (B*C)
ج- A+B+C
inA2 -8
صفحه 421:
"برنامهای بنویسید تا مجموعه ای از کاراکترهای کوچک را گرفته و به یک
مجموعه از کاراکترهای حروف بزرگ متناظر با آن تبدیل کند.
به کمک دادههای شمارشی. برنامه ای بنویسید که نام دانشجویان يك كلاس را
در برگیرد و هر دانشجو نیز یک شماره داشته باشد. سپس با دریافت نام او
شماره او در نمایشگر چاپ شود.
421
صفحه 422:
فصل 13 ِ
وكورهها (00105ع18)
هدفهاي كلي
* مفهوم ركورد و اجزاى آن
* انواع ركوردها و استفاده از آن در برنامه
* معرفى مزاياى ركوردها در برنامه
صفحه 423:
:دانشجو پس از مطالعه این فصل باید بتواند
* مواقع لزوم رکورد را تشخیص دهد.
8 از رکوردها در برنامهاش استفاده کند.
MF پرنامههای بزرگ و با دادههای زیاد بنویسد.
صفحه 424:
نوع داده ساخت یافتهای که در اینجا مطرح میشود. ر کورد نام دارد که حهت
نگهداری دادههای مختلف نظیر نام نام خانوادگی. سن و آدرس برای یک
دانشجو بكار میرود. رکوردها برخلاف آرایهها که دارای عناصر از یک
جنس و نوع هستند. دارای عناصر از انواع مختلف میباشند. اطلاعات از
نوع مختلف را نمیتوان در آرایه نگهداری کرد چرا که دارای جنس مشابه
نیستند و لذا از ساختاری به نام رکورد استفاده میشود.
م ع
تس
صفحه 425:
ب ب ب <ج ب ب << 1۳11[
** تعریف ركوردها
نوع داده ساختيافته اى كه از يك سرى داده ها يا اطلاعات مرتبط به هم
تخل مق شوه
هر کدام از اطلاعات را یک فیلد می نامند
بطور کلی تعریف نوع رکورد در زیر آمده است:
ype
Name = Record
Field1-list : type1;
Field2-list : type2;
Fieldn-list : typen;
End;
صفحه 426:
Type
Student = Record
Name: String [10];
Family: String [15];
Age: integer;
Address: String;
End;
در اين تعريف Student 3 ¢ 18600۲0 است. حال میتوان در
1 برنامه تعریف کرد:
Var
ae S: Student;
صفحه 427:
براي دسترسي به فيلدهاي رکورد ازعلامت *." استفاده ميشود. يعني بصورت زیر:
نام فیلد . نام متغیر رکورد
مثال: برنامهای بنویسید که رکوردی از نوع اعداد ایجاد کرده و مقادیر
آنرا مقدارهی کند.
427
صفحه 428:
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);
Evid.
صفحه 429:
Type
Student = record
Id: integer;
Name: string[10];
Family: string[15];
Sex: char;
Age: integer;
End;
Var
Stu: student;
429
صفحه 430:
Stu.sge: =18;
Case sex of
'M': write('Mr.');
'F': write('Mrs.');
end;
write(stu.name, ''
stu.family);
End.
صفحه 431:
برای بدست آوردن فضای اشغال شده توسط رکورد ابتدا باید فضای اشغال
شده توسط تمامیفیلدها را بدست آورده و سپس باهم جمع کنیم.
مثال زیر را درنظر بگیرید:
431
صفحه 432:
A, B: Real; = yer
C, D: String [10]; 3 ett
F: Array [1... 10] of Boolean; 3 Yee
G: list1; 3 ۷*۵
x: Rectype;
۱۰+۱۰+۱۱+۱۲-۳ بایت فضا اشغال میشود.
ir
صفحه 433:
EEE EEE
F399 Go 495, *
فیلدهای یک رکورد میتوانند از هر نوعی باشد. از جمله میتوانند از نوع
رکورد دیگری باشند. در اینجا نیز مشابه قبل دسترسی به همان صورت
میباشد فقط به تعذاد رکوردهای تودرتو؛ ۱ پیش میآید Type
به مثال زیرتوجه کنید:
Rec = recor
a, b:
nteger;
c: char;
x: Record
p:
integer;
q:
integer;
ا 5
صفحه 434:
0
Rec;
دراینجا یک رکورد تودرتو به نام 1*00 تعریف شده است که متغیر ۲ از آن
نوع تعریف شده است. سپس برای دسترسی به فیلدهای 6, 0 , 2 میتوان
به صورت زير عمل کرد:
ra
r.b
ولی برای دسترسی به فیلدهای ]6, 0 چون متعلق به رکورد > نیز هستند داریم:
9
r.x.q
434
صفحه 435:
:ی
٠ آرايهاي از رکوردها
هنكامى كه ما تعدادى داده مشابه داريم ولى در هريك. دادههاى مختلفى وجود
دارد میتوانیم یک رکورد تعریف کرده. سيس آرايهاى از آن تعريف كنيم.
e
student = record
Name: string[10];
Id: integer;
Age: integer;
End;
Arr_stu: array[1..10] of student;
5: Ang stu;
صفحه 436:
از نوع آن تعریف شده است. ۱
مشابه ساختار ارایه جیزی عوض نشده است و فقط هر عنصر ارایه. یک
رکورد میباشد که دارای سه فیلد مطابق جدول فوق میباشد.
برای دسترسی به آرایه فوق داریم: cnt
S[1].age
S[2].name
S[2].id
436
صفحه 437:
ب ب ب <ج ب ب << 1۳11[
ارسال ر کورد به زیربرنامهها
ید زا نیت ومع ور Sg a پارامترهای
نتغیر و مقدار به زیربرنامه ارسال کرد. ولی نوع برگشتی fi نمىتوانة ا
ز نوع رکورد باشد. یعنی حتماً باید از نوع ساده نظیر ..g integer. Char
اشد و از انواع ترکیبی نظیر رکورد. eu مجموعه و فایل نمیتواند باشد.
اگر بخواهيم رکوردی را بصورت پارامتر به زیربرنامه ارسال كنيم, ابتدا بايد
آنرا در 706 تعریف کرده و سپس ارسال شود وگرنه کامپایلر خطا صادر
میکند.
437
صفحه 438:
Type
Stu-rec = Record
Name: string [10];
ID: integer;
Age: record
Day: integer;
Month: integer;
Year: integer;
End;
End;
Stu serr=array[1..no] of سک
و
صفحه 439:
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;
صفحه 440:
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.
440
صفحه 441:
>" << ااا
تمرینات
"برای گونههای حیوانات یک پارک نظیر پرندگان وحشی رکوردی شامل
نام. دسته. محیط زندگی. سن بسازید. در نظر بگیرید که در پارک ۱۰۰
گونه از یک پرنده وحشی وجود دارد
(راهنمایی: آرایهای از رکورد با فیلدهای گفته شده بسازید).
* برنامهای بنویسید که برای نگهداری تاریخ به صورت روز. ماه و سال
براى ٠٠١ سال بكار رود. در واقع به صورت تقویم باشد و جملهای در مورد
آن تاريخ را نكهدارى كنيد؟ (راهنمايى: آرايهاى 17 تابى از روز بهمراه
آرایهای از ۱۲ ماه و یک سال و یک رشته را به صورت يك ركورد در نظر
گرفته سپس برای ۱۰۰ سال بصورت یک آرایه صدتایی در نظر بگیرید.)
441
صفحه 442:
١ ْ 14 فصل
(Files) Gut
هدفهاي كلي
* مفهوم فايل و انواع آن
* موارد استفاده از فايلها
صفحه 443:
:دانشجو يس از مطالعه اين فصل بايد بتواند
#" در برنامهداش از فايلها استفاده كند..
"" براى برنامههاى با دادههاى زياد از فايل استفاده كند..
* با فایلهای دادهای و بایزی برنامهنویسی کند.
at a رت
صفحه 444:
برای ذخیره دائمی دادهها از ساختاری به نام فایل ile) استفاده مى كنيم.
تاکنون همه عملیات لازم در حافظه اصلی انجام میگرفت که گذرا و فقط
به زمان اجرای برنامه و روشن بودن کامپیوتر بستگی داشت. ولی در فایلها
چنین نیست. بلکه دادهها در فایلهایی قرار دارند که حتی بعد از خاموش
کردن کامپیوتن بعدها قابل دسترسی است.
صفحه 445:
EEE EEE << << ">
(Text) io sb *
یک فایل متتی از تعداد کاراکتر تشکیل شده است که با یک اسم در روی دیسک
ذخیره شده است. چون فایل از نوع متنی است میتوانید دادههای داخل آنرا
مشاهده کنید.
ساختار دادهها در یک فایل متنی بدین صورت است که تعدادی خط وجود دارد
كه به علامت 801-17 ختم مىشوند و در انتهاى فايل نيز علامت "18001 قرار
دارد. طول خطوط نامشخص است و اندازه فايل ممكن است بسيار بزرك يا
كوجك و يا تهى باشد.
صفحه 446:
نعويف يك متغير فايلى ١١
نسبت دادن اسم فایل به متفیر فایلی ۷
6۷30 ایجاد فایل با دستور .۳
صفحه 447:
Name : Text;
نسبت دادن اسم فایل به متفیر فایلی
Assign(FileVar ,
‘NamefFile’
} ایجاد فاپل با دستور ©
Rewrite( FileVar
447 )
صفحه 448:
۰ مجموع آنها را بنویسد.
:
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.
صفحه 449:
Writeln (f, A[il);
Writeln (f, Sum);
Close (f);
End.
بعد از نوشته شدن اطلاعات در فایل . فایل باید بسته شود برای اینکار از
: روال زیر استفاده می شود
Close(FileName)
صفحه 450:
تعییف یک متفیر فایلی ۱۰
نسبت دادن اسم فایل به متغیر فایلی ۲۰
باز کردن فایل برای خواندن پا .۳
1 دستور
صفحه 451:
ستور 13680 و 1362011۳ برای خواندن اطلاعات از فایل بکار می روند .
7 بعد از خولندندادههایمورد نسظر بسه سطر بسعد میرود. لینعمل
ای 1038010 نیز چنین میباشد. ولی قبل از استفاده از اين دستورات بايد
ایل متنی برای خواندن یا نوشتن باز شود. دستور 36596 فایل متنی را برای
خواندن باز میکند و مکان نما را ابتدای فایل میبرد.
ستور 1*6۲0۲1:6 فایل متنی را برای نوشتن در آن باز كرده. و مکان نما را به
451
اتداى أن ميرف
صفحه 452:
f: Text;
str1, str2: string; a, b, c, d, e: integer;
gin
Assign (f, ' Test. dat ');
Reset (f);
ReadIn (f, str1);
Readln (f, a, b, c);
Readln (f, d, e, str2);
Write (str2, ':', a+ b+ c+ d+ e);
Close (f);
452
صفحه 453:
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) 0
rewrite(f2);
صفحه 454:
در این برنامه ابتدا دو فایل به نامهایشان نسبت داده میشوند و ترتیب برای
خواندن و نوشتن باز میشوند. سپس توسط 60 شرط خاتمه فایل ورودی
یعنی 81 بررسی میشوند و در یک حلقه تو در تو ۷۷10116 شرط خاتمه خطوط
نیز توسط 60139 بررسی شده و کاراکترها از فایل ورودی خوانده شده و در
فایل خروجی نوشته میشوند.
454
صفحه 455:
begin
while not eoln(f1 )
do
begin
read(f1,ch);
write(f2,ch);
end;
readIn(f1);
writeln(f2);
end;
Close(f1);
Slose(f2);
End.
صفحه 456:
EE EE EEE EE موممئي
(Binary & Typed) ,to€53 9 فايلهاي دودوبي **
ن نوع فایلها در زبان پاسکال از تایبهای مختلف 3729, 1600۲0
نل 122161©1, 620 و ... تشكيل شده است كه نياز به يردازش متنوء
بیه مرتبسازی. جستجو. حذف nung دارند. این فایلها پس از ایجاد توسط
رنامه. قابل رؤيت توسط ویراشگرها نیستند. بلکه به صورت کدهای اسکی
میباشند یعنی دودویی میباشند. نحوه دسترسی به اطلاعات آنها نیز به
cw! (Random) سورت تصادفى
456
صفحه 457:
نعويف يك متغير فايلى ١١
نسبت دادن اسم فایل به متفیر فایلی ۷
6۷30 ایجاد فایل با دستور .۳
صفحه 458:
Name: File Of FileType ;
نسبت دادن اسم فایل به متفیر فایلی
Assign(FileVar ,
'N File’
ایجاد فاپل با دستور ات ©
Rewrite( FileVar
458 )
صفحه 459:
Const n=100;
Type
Student = Record
Name: string[10];
Family: String[15];
Age: integer;
ID: integer;
end;
Sarray = Array [1..n] of
student;
459
صفحه 460:
Var
دودویی از نوع صحيح ;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,
صفحه 461:
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;
4siClose (Bf);
+ oo
صفحه 462:
در جدول صفحه بعد تمام روالهای کتابخانهای پاسکال جهت کار با فایلها
آورده شده است که به همراه توضیحات لازمه جهت کار با آنها میباشد.
همچنین برای هر تابع و رویه محل مورد استفاده آن در ستونی مشخص
شده است .
462
صفحه 463:
صفحه 464:
x
۱ شماره رکورد 7 انتهاي فایل
تعداد ee جاري را
| حذف يك رکورد از انتهاي فایل وگ 17
صفحه 465:
>,
مثال های حل شده *
مثال : برنامهای بنویسید که تعداد خطوط یک فایل متنی را باست. آورف
Var
F: text ;
ch: char,
str: string[20];
count: integer;
Begin
Write (‘Enter the file name:
Readln(str);
Assign(f,str);
Reset(f);
صفحه 466:
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.
466
صفحه 467:
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; بون
صفحه 468:
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.
صفحه 469:
پگ « 5
Ww تمرینات
*برنامهای بنویسید که از یک فایل متنی از اعداد حقیقی که در سطرها و
ستونها مختلف قرار دارند. میانگین دادهها را بدست آورده و در مانیتور
چاپ کند.
*برنامهای بنويسيد كه در انتهای یک فایل متنی. همان فایل متنی را اضافه کند.
" برنامهاى بنويسيد که در یک فایل نوع دار از کاراکترهاء اطلاعات آماری
هر کاراکتر را بدست آورده. یعنی تعداد هر کاراکتر را بدست آورد.
مثلاً کاراکتر 8 به تعداد 40 تا و کاراکتر "13" به تعداد ۳۹ تا و...
صفحه 470:
* مفهوم و تعریف الگوریتم
° مفهوم کارایی یک الگوریتم
* مرتبه یک الگوریتم
ee ~ ۱
صفحه 471:
:دانشجو پس از مطالعه این فصل باید بتواند
"" پرنامه خود را تحلیل زمانی نماید.
* مرتبه الگوریتم را بدست آورد.
* الگوریتمهای بازگشتی را تحلیل نماید.
صفحه 472:
تحلیل یک الگوریتم یعنی ارزیابی روشهای مختلف حل آن مسئله. بررسی و
محاسبه بهترین و بدترین حالتهاء بصورتی که با توجه به شرایط بهترین
حالت را بتوان انتخاب کرد. الگوریتم در واقع تعداد محدودی از دستورالعملها
می باشد که بترتیب اجرا میشوند و هدف خاصی را دنبال میکنند
صفحه 473:
** تعریف مرتبه یا پيچيدگي الگوریتم ( 0 بزرگ)
براي بدست آوردن بدترین حالت اجراي يك الگوریتم
یا مرتبه پيچيدگي الگوریتم از
0 بزرگ استفاده ميکنيم و بنا به تعریف عبارتست
از ((00(<0))0؟ و
no خوانیم ()] از مرتبه 620 ميباشد, اگر و تنها
Ac> 0, Vn > n0= f(x)<cg(x)
—
صفحه 474:
n>=3 <= cg(n)=In+2A(n)
لذا میتوان گفت. پیچیدگی زمانی (610] از مرتبه O(n) میباشد.
صفحه 475:
EEE EEE << << ">
* بدست آوردن مرتبه الکوریتمها
برای بدست آوردن مرتبه اجرای الگوریتمها باید به دقت بررسی شود و تعداد
تکرار آن الگوریتم بدست آورده شود. یعنی در واقع تعداد تکرارها بدست
آورده شود و سپس با هم جمع شده و مطابق مثالهای قبلی به پیچیدگی زمان
واقعی رسید. برای این منظور از الگوریتمهای ساده شروع کرده و به پیچیده
میرسیم.
صفحه 476:
x:= 0;
For I:=1 ton
do
:=x+1;
که در آن « تعداد ورودی میباشد. یعنی حلقه 601 بستگی به پارامتر 9 دارد.
همان طور که از تعریف حلقه 50۲ برمیآید تعداد 11-۱+۱ تکرار یعنی
1 تسکرار یجود دارد و لنا قطعه برنامه فوقاز مرتبه(6()10 مریاشد
تسس
‘Croup
صفحه 477:
Function fact ( n: integer
integer ;
var
f,i: integer;
begin
f:=1,
for I:=1 to n do
f:=f*i;
fact:=f;
end;
سس
‘Croup
مس ee
صفحه 478:
تابع فوق فاکتوریل عدد « را بر میگرداند. همانطور که میبینید تابع شامل
یک حلقه 701 ساده بوده که از یک تا 9 متغیر بوده و لذا بار تکرار میشود
۲ جمله ساده نیز وجود دارد که زمان های ثابتی دارند
براین مرتبه تابع بالا برابر است با
0)
صفحه 479:
۲ پیچیدگی زمانی توابع زیر را بدست آورید:
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)!
479
صفحه 480:
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;
4est: =x;
Cra
مبانی کامپیوتر
مولفین :
جعفر تنها – مهدی یوسف خانی
:ارائه دهنده
جعفر تنها
1
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
اهداف كلي این درس
:دانشجو پس از مطالعه اين درس بايد بتواند
الگوریتمی برای حل مسئله ارائه دهد
اصول و مبانی اولیه نرم افزار و سخت افزار را بشناسد
اهداف و مفا هیم زبان های برنامه نویسی را بداند
مفاهیم اولیه برنامه نویسی ساخت یافته را بداند و اصول الزم را در
مرحله اجراء بکار ببرد
دستورات زبان پاسکال را در برنامه ها بکار ببرد
استفاده
از توابع و روال های استاندارد زبان پاسکال در صورت لوزم
2
نماید
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
•از توابع ،روال ها برای جدا کردن قطعات برنامه استفاده کند
•فایل ها را به عنوان محلی برای ذخیره داده ها در برنامه استفاده
کند
•با استفاده از قابلیت های زبان پاسکال برنامه ای را برای یک
سیستم بنویسد.
3
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
جایگاه این درس در رشته مهندسی کامپیوتر
این درس اولین درس دانشگاهی رشته می باشد و نقطه شروعی برای ورود به
دنیای جالب برنامه نویسی و علم و فن کامپیوتر هست .بنابراین یاد گیری
.اصول اولیه برنامه نویسی در این درس از جایگاه ویژه ای برخوردار است
این درس پایه و اساس برنامه نویسی که جزء اصول این رشته می باشد را به
.فرگیران یاد می دهد
بنابراین یادگیری دقیق این درس به همراه ارائه پروژه های عملی که الزمه این
.درس می باشد جزء اهم مسائل می باشد
4
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
طرح درس
:توصیه می شود این درس در بیست جلسه بصورت ذیل ارائه شود
بخش اول (:در پنج جلسه )
اهداف درس و فصل اول و دوم کتاب درسی
:بخش دوم
:جلسه ششم
:جلسه هفتم
فصل سوم کتاب درسی
فصل چهارم کتاب درسی
5
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:جلسه هشتم
:جلسه نهم
فصل پنجم کتاب درسی
فصل ششمکتاب درسی
:جلسه دهم و یازدهم
فصل هفتم کتاب درسی
:جلسه دوازدهم
:جلسه سیزدهم
فصل هشتم کتاب درسی
فصل نهم کتاب درسی
6
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:جلسه چهاردهم
فصل دهم کتاب درسی
:جلسه پانزدهم و شانزدهم
فصل یازدهم کتاب درسی
:جلسه هفدهم
فصل دوازدهم کتاب درسی
:جلسه هیجدهم
فصل سیزدهم کتاب درسی
:جلسه نوزدهم
فصل چهاردهم کتاب درسی
7
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:جلسه بیستم
فصل پانزدهم کتاب درسی و
ارائه پروژه نهائی درس
8
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 1
الگوریتم ها Algorithm
هدفهاي كلي
شناخت حل مسئله و ارائه الگوریتم
شناخت اجزاء الزم برای حل مسئله
بررسی صحت الگوریتم
9
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هدفهاي رفتاري
:دانشجو پس از مطالعه اين فصل بايد بتواند
الگوریتمی را برای حل مسئله ارائه دهد.
الگوریتم های مختلف برای یک مسئله را مقایسه کند.
شرط ها و حلقه ها را در الگوریتم بکار ببرد .
10
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مقدمه
در زندگي روزمره ،انسان با مسائل مختلفي روبروست و براي هر كدام
از اين مسائل (حل مشكالت) راه حلي و روشي را بر ميگزيند.
مسائلی از قبيل راه رفتن ،غذا خوردن ،خوابيدن و غيره كه بشر تقريبًا
هر روز آنها را پيش روي خود دارد.
همه اين مسائل نياز به روشي براي حل كردن دارند مثال راه رفتن بايد
با ترتيب خاصي و مراحل معيني انجام شود .تا مسئله راه رفتن براي
بشر حل شود .اصطالحًا روش انجام كار يا حل مسئله را الگوريتم آن
مسئله مينامند
11
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعريف الگوريتم
الگوريتم مجموعهاي از دستورالعمل ها ،براي حل مسئله ميباشد كه
شرايط زير را بايد دارا باشد:
• دقيق باشد
• جزئيات كامل حل مسئله را داشته باشد.
پايانپذير باشد.
•
12
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مراحل الگوريتم
براي حل يك مسئله بايد الگوريتم آن مسئله را مشخص كنيم (يا بيابيم) .كه
اصطالحًا طراحي الگوريتم براي آن مسئله ناميده ميشود .در طراحي
الگوريتم معموًال سه مرحله زير را از هم جدا ميكنند:
•خواندن دادهها
•انجام محاسبات
•خروجيها
13
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :الگوريتمي بنويسيد كه دو عدد از ورودي دريافت كرده مجموع
دو عدد را محاسبه و چاپ نمايد.
خروجيها
مجموع دو عدد
انجام محاسبات
جمع دو عدد
وروديها
a , b
0ـ شروع
1ـ b ,aرا بخوان.
2ـ مجموع b , aرا محاسبه و در sumقرار بده.
3ـ sumرا در خروجي چاپ كن
4ـ پايان
14
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :الگوريتمي بنويسيد كه سه عدد از ورودي دريافت كرده مجموع و ميانگين
.سه عدد را محاسبه و چاپ كند
c
چاپ مجموع
چاپ ميانگين
خروجيها
محاسبه مجموع
محاسبه ميانگين
انجام محاسبات
a
b
وروديها
0ـ شروع
1ـ سه عدد از ورودي بخوان
2ـ مجموع سه عدد را محاسبه و در sumقرار بده.
3ـ sumرا بر سه تقسيم كرده،در aveقرار بده.
4ـ ave , sumرا در خروجي چاپ كن.
5ـ پايان.
15
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
معموال درك يك الگوريتم با شكل راحتر از نوشتن آن بصورت متن
ميدهند.
ميباشد .لذا الگوريتم را با فلوچارت( ) flowchartنمايش
ميشود.
شكلهاي زير تشكيل
فلوچارت از
ميكنند:
عالمتهاي شروع و پايان :كه معموال از يك بيضي استفاده
End
Begin
ميشود:
متوازياالضالع استفاده
عالمتهاي ورودي و خروجي :كه معموال از
چاپ کردن write
خواندن یا
Read
16
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عالمتهاي محاسباتي و جايگزيني :براي نمايش دستورات جايگزيني
و محاسباتي از مستطيل استفاده ميكنند:
جایگزین یا
محاسبات
•عالمت شرط :براي نمايش شرط از لوزي استفاده ميشود.
•عالمت اتصال :براي اتصال شكلهاي مختلف بهم از فلشهاي
جهتدار استفاده ميكنند.
17
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• فلوچارت مجموع سه عدد
Begin
Read(a,b,c)
Sum
a+b+c
Ave
sum/3
Write(sum,ave)
End
18
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتی رسم نمائيد كه دو عدد از ورودي دريافت كرده سپس
محتويات دو عدد را با هم جابجا نمايد.
راي حل اين مسئله b , aرا دو متغير كه در آنها دو عدد خوانده شده،
قرار ميگيرند در نظر ميگيريم .سپس با استفاده از يك متغير كمكي
محتويات اين دو عدد را جابجا ميكنيم :
19
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
a
temp
12
b
a
b
15
12
15
temp
12
temp
20
a
b
a
b
15
15
15
12
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
12
12
temp
temp
فلوچارت مسئله باال بصورت زير خواهد بود:
Begin
Read(a,b)
temp
a
a
b
b
temp
Write(a,b)
21
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
End
تمرين
1ـ فلوچارتي رسم نمائيد كه طول و عرض مستطيل را از ورودي دريافت
كرده محيط و مساحت آنرا محاسبه و چاپ كند.
2ـ فلوچارتي رسم نمائيد كه شعاع دايرهاي را از ورودي دريافت كرده،
محيط و مساحت آنرا محاسبه و چاپ نمايد.
فلوچارتي رسم كنيد كه سه عدد Third , second, firstرا از ور
يافت كرده ،محتويات آنها را جابجا نموده ،حاصل را در خروجي
پ كند.
22
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
4ـ فلوچارتي رسم نمائيد كه دو عدد از ورودي دريافت كرده ،سپس
محتويات دو عدد را بدون استفاده از متغير كمكي جابجا كند.
5ـ فلوچارتي رسم نمائيد كه عددي (درجه حرارت برحسب سانتيگراد)
را از ورودي دريافت كرده سپس آنرا به درجه فارنهايت تبديل كند.
23
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دستورالعملهاي شرطي
در حل بسياري از مسائل يا تقريبًا تمام مسائل نياز به استفاده از شروط
جزء ،نيازهاي اساسي محسوب ميشود .همانطور كه ما خودمان در
زندگي روزمره با اين شرطها سركار داريم .بطور مثال اگر هوا ابري
باشد ممكن است چنين سخن بگوييم:
•
اگر هوا باراني باشد سپس چتري برميدارم.
در غير اينصورت چتر برنميدارم.
24
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در حالت كلي شرط را بصورت زير نمايش ميدهند:
yes
عمل يا اعمال
شرط یا شروط If
then
NO
عمل يا اعمال بعدي
25
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده ،فرد يا
زوج بودن آن را تشخيص دهد.
Begin
)Read(a
R
a mod 2
yes
)’Write(‘even
if R=0 then
No
)’Write(‘odd
End
26
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد
را پيدا كرده در خروجي چاپ نمايد.
Begin
)Read(a,b
a
b
max
yes
max
if b>max
No
)Write(max
End
27
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begin
مثال :فلوچارتي رسم نمائيد كه سه عدد از ورودي
دريافت كرده ،كوچكترين عدد را يافته
در خروجي چاپ نمايد:
)Read(a,b,c
a
b
max
yes
min
if b<min then
No
c
min
yes
if c<min then
No
)Write(min
End
28
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نمونه اجراي فلوچارت باال بصورت زير ميباشد:
c
Min
12 1
2
12 3
11 4
11 5
11
11
a
b
17
خروج
11
29
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرين
-1فلوچارتي رسم كنيد که عددي را از ورودي دريافت كرده ،قدر مطلق
عدد را در خروجي چاپ كند.
-2فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده مثبت ،منفي
يا صفر بودن عدد را تشخيص داده ،در خروجي با پيغام مناسب
چاپ كند.
-3فلوچارتي رسم نمائيد كه عددي را از ورودي دريافت كرده ،بخشپذيري
آن بر 3و 5را بررسي نمايد.
4ـ فلوچارتي رسم نمائيد كه ضرايب يك معادله درجه دوم را از ورودي
ريشههاي آن را محاسبه در خروجي چاپ كند.
دريافت كرده،
30
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حلقهها
در حل بسياري از مسائل با عملياتي روبرو ميشويم ،كه نياز به تكرار
دارند و عمل تكرار آنها به تعداد مشخصي انجام ميگيرد .فرض كنيد،
بخواهيم ميانگين 100عدد را محاسبه كنيم ،در اينصورت منطقي بنظر
نميرسد كه 100متغير مختلف را از ورودي دريافت كنيم سپس آنها را
جمع كنيم.
31
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• انواع حلقه ها
• حلقه های با تکرار مشخص
• حلقه های با تکرار نا مشخص
32
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• حلقه های با تکرار مشخص
در اين نوع حلقهها تعداد تكرار مشخص ميباشد اين حلقه از اجزاء زير
تشكيل ميشود:
1ـ انديس حلقه
2ـ مقدار اوليه براي انديس حلقه
-3مقدار افزاينده براي انديس حلقه (معموال يك واحد در هر مرحله)
4ـ مقدار نهايي (تعداد تكرا حلقه)
5ـ شرطي براي كنترل تعداد تكرار حلقه
33
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
اين حلقهها را غالبًا با فلوچارت بصورت زير نمايش ميدهند:
1
اتمام كار حلقه
No
i
if i<=n
yes
مجموعه دستورات حلقه
i+1
i
34
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم نمائيد كه عدد nرا از ورودي دريافت كرده،
مجموع اعداد از يك تا nرا محاسبه كند.
n
i
مقدار نهايي
انديس حلقه
35
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begi
n
Read(n)
I
sum
1
0
if I<=n
End
sum
36
Write(sum)
yes
حلقه
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
No
I
sum+I
I+1
نمونه اجراي فلوچارت باال بصورت زير است:
I
sum
1
2
3
4
5
6
7
5
N
1
0
2
3
4
5
6
خروجي
15
1
3
6
10
15
37
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم كنيد كه nعدد از ورودي دريافت كرده،
بزرگترين مقدار از بين nعدد را پيدا كرده در خروجي چاپ نمايد.
انديس حلقه
مقدار نهايي
i
n
بزرگترين مقدار
Max
38
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begin
Read(n)
I
max
2
a
No
if i<=n then
write(max)
yes
End
Read(a)
حلقه
yes
if a > max
No
39
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
i
i+1
max
a
مثال :فلوچارتي رسم نمائيد كه ، n , xدو عدد صحيح مثبت را از
ورودي دريافت كرده سپس xبه توان nرا محاسبه كند.
• انديس حلقه
• مقدار نهايي
• عدد به توان pown
i
n
40
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begin
Read(n,x)
i
pow
1
1
if i<=n then
No
write(pow)
yes
حلقه
41 •گروه
آموزشی مهندسی ایران
Iranian Engineering
Group
pow
i
pow*x
i+1
End
حلقههايي كه تعداد تكرار آنها مشخص نيست
(در پاسكال به حلقه whileمشهورند).
در اين حلقهها با توجه به ورودي ،تعداد تكرار مشخص ميشود .و دقيقًا
نميتوان تعداد تكرار حلقه را بدون ورودي معين كرد .اين حلقه ها فقط
شامل شرطي هستند كه تا زمانيكه برقرار باشد حلقه اجرا ميشود.
42
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميشوند:
حلقهها بصورت زير نمايش داده
در حالت كلي اين نوع
No
شرط يا شروط If
yes
محموعه دستورالعملها
و جاگزينها
43
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم كنيد كه عددي را از ورودي دريافت كرده
سپس تعداد ارقام آن را شمرده در خروجي چاپ نمايد.
• عدد خوانده شده
• تعداد ارقام
N
count
44
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begi
n
count
0
Read(N)
if N>0 then
No
write(count)
yes
N
N div 10
حلقه
count
45
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
count+1
End
مثال :فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،سري
فيبوناچي قبل از آنرا توليد نمايد.
در حالت كلي جمالت سري بصورت:
عدد خوانده شده
جمله اول سري
fk=fk-1+fk-2
N
f1
جمله دوم سري
f2
جمله سوم سري
f3
46
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begin
F1
0
f2
1
Read(N)
f3
f1+f2
if f3>N then
yes
write(f3)
حلقه
47
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
f1
f2
f3
f2
f3
f1+f2
No
End
تمرين
-1فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،كامل بودن
عليههاي
آنرا بررسي نمايد( .عدد كامل ،عددي است كه مجموع مقسوم
آن با خودش برابر باشد).
-2فلوچارتي رسم كنيد كه Nرا از ورودي دريافت كرده N ،جمله سري
فيبوناچي را توليد نماید.
3ـ فلوچارتي رسم نمائيد كه دو عدد N , Mرا از ورودي خوانده،
بزرگترين مقسومعليه مشترك دو عدد را محاسبه و چاپ كند.
48
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حلقههاي تودرتو
الگوريتمهايي كه تا حال بكار برديم ،فقط شامل يك حلقه بودند.
در صورتي كه در بسياري از مسائل ممكن است نياز به استفاده از چند
حلقه در داخل هم باشيم .در اين نوع حلقهها بايد دقت بيشتري به خرج
دهيم ،تا مشكلي پيش نيايد .اگر از حلقههاي نوع اول بصورت تودرتو
استفاده كنيم در اينصورت براي هر حلقه شرط نهايي و انديس اوليه
جداگانه بايد تعريف كنيم .
49
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حلقههاي تودرتو به ازاي يكبار تكرار حلقه اوليه ،حلقه داخلي به اندازه
در
ميشود .در كل اگر حلقه اوليه nبار تكرار شود و
مقدار نهايي خود تكرار
حلقه داخلي mبار ،در اينصورت كل حلقه :
nm
بار تكرار خواهد شد.
50
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فلوچارت حلقههاي تودرتو را ميتوان بصورت زير نشان داد:
1
i
.
.
.
A
اتمام كار حلقه هاي تو در تو
No
if i<=n then
yes
1
مجموعه دستورات و جايگزيني ها
No
j
if j<=m then
yes
i
i+1
A
حلقه
مجموعه دستورات و جايگزيني ها
j+1
j
51
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم نمائيد كه Nرا از ورودي دريافت كرده ،مجموع
سري زير را محاسبه نمايد:
N
!N
....
3
!3
• انديس حلقه اول I
• ورودي N
• محاسبه فاكتوريل fact
j
• انديس حلقه داخلي
• مجموع Sum
S 1
2
!2
52
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
i
2
sum
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
53 •گروه
آموزشی مهندسی ایران
Iranian Engineering
Group
j
fact*j
j+1
i
i+1
A
تمرينات آخر فصل
-1فلوچارتي رسم نمائيد كه Nعدد از ورودي دريافت كرده تعداد
اعداد اول و كامل را شمرده در خروجي چاپ نمايد.
-2فلوچارتي رسم نمائيد كه N , Xرا از ورودي خوانده مقدار سري
زير را محاسبه كند:
xn
!N
....
x4
!4
x2
!2
S 1
54
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
-3فلوچارتي رسم نمائيد كه عددی را از ورودي دريافت كرده مقلوب
عدد را محاسبه و در خروجي چاپ كند.
4ـ فلوچارتي رسم كنيد كه تاريخ تولد شخصي را از ورودي خوانده،
سن شخص را با تاريخ روز ،محاسبه نموده در خروجي چاپ كند.
-5فلوچارتي رسم نمائيد كه ( N ,M )m>nرا از ورودي دريافت
كرده سري فيبوناچي بين N ,Mرا توليد كرده ،در خروجي چاپ كند
55
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 2
كاربرد آرايه ها در الگوريتم ها
هدفهاي كلي
شناخت آرایه ها و مفهوم آن
شناخت الگوریتم های الزم برای جستجو و مرتب سازی
مقایسه انواع روش های جستجو با هم
56
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هدفهاي رفتاري
:دانشجو پس از مطالعه اين فصل بايد بتواند
از آرایه ها در حل مسئله استفاده کند .
با استفاده از آرایه ها لیستی را مرتب نماید .
در صورت لزوم در لیستی جستجو انجام دهد .
57
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مقدمه
فرض كنيد بخواهيم اطالعات 100كارمند را از ورودي بخوانيم و
سپس آنها را مرتب كنيم ،در اينصورت بايد وروديها را در جايي از
حافظه ذخيره كنيم .در زبانهاي برنامهنويسي معموال از آرايه براي
ذخيره اطالعات در حافظه استفاده ميكنند .در آرايهها ما با توجه به
تعداد وروديها ،طول آن را مشخص ميكنيم .سپس دادهها را خوانده در
آن قرار ميدهيم.
58
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعريف آرايه
خانههاي پشت سر هم از حافظه ،كه همنوع بوده و توسط يك اسم معرفي
ميشوند ،آرايه نام دارد.
نحوه دسترسي به هر يك از اعضاء آرايه ،از طريق انديس آرايه امكانپذير
است .براي تعريف آرايه ابتدا طول آرايه كه در حقيقت تعداد خانههاي آن
را مشخص ميكند ،معين ميكنيم .سپس نوع خانهها بايد معين شوند.
در فلوچارتها آرايهها را بصورت زير نمايش ميدهيم:
] Name[ 1 .. Length
طول آرايه
اسم آرايه
59
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
براي خواندن يك آرايه از ورودي از حلقهها استفاده ميكنيم .فلوچارت
خواندن آرايه از ورودي بصورت زير ميباشد:
]a[1..100
1
No
i
if i<=100
yes
)]Read(a[i
i+1
i
60
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
با توجه به فلوچارت باال براي دسترسي به عنصر iام آرايه در حالت
كلي بصورت :
[ inde
Nam
انديس آرايه اسم آرايه
ميكنند.
عمل
مثال :فلوچارتي رسم كنيد كه يك آرايه حداكثر 100عنصري را از ورودي
دريافت كرده ،سپس آن را خروجي نمايش دهد.
61
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
62
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
N div 2
N
i
63
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده سپس
اعداد اول قبل از آن را توليد نموده ،در يك آرايه قرار دهد.
]a[1..100
i
1
)Read(N
3
2
1
k
]a[1
]a[2
64
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
A
if i<=N
No
i
yes
j
k
2
0
if j<=i div 2
write(a[i])
No
if k=0
yes
No
i
i+1
yes
if I mod j = 0
No
65
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
End
yes
i
j
No
if i<k
1
j+1
k
1
A
i+1
yes
a[k]
k
i
k+1
جستجو و مرتب سازي ( ) search and sort
يكي از مسائلي كه در بحث طراحي الگوريتم بسيار مهم است ،بحث
مرتبسازي و جستجو ميباشد .منظور از جستجو اينست كه يك مقداري
را از يك ليست جستجو كنيم و منظور از مرتبسازي اينست كه يك ليست
مرتب از دادهها را توليد كنيم.
براي جستجو و مرتبسازي الگوريتمهاي مختلفي وجود دارد در زير
الگوريتمهای اوليه ،براي جستجو و مرتبسازي را بررسي ميكنيم.
66
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
الگوریتم های جستجو ( )search
دو الگوريتم زير غالبًا براي جستجو بكار ميروند:
•جستجوي خطي linear search
•جستجوي دودوئی binary search
67
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• جستجوي خطي linear search
در جستجوي خطي عبارت مورد جستجو را به ترتيب با اولين ،دومين
و … عنصرآرايه مقايسه ميكنيم اگر عنصر مورد جستجو پيدا شد
اندیس آن را نمايش ميدهيم.
68
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
69
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
i
i+1
yes
index
flag
i
1
• جستجوي دودوئی binary search
در جستجوي دودوئی ،ليست مورد جستجو ،مرتب ميباشد .لذا براي
جستجو اعمال زير انجام ميشود:
-1عنصر Xبا عنصر وسط آرايه كه انديس آن برابر
(low+high)/2
middle
مقايسه ميشود.
70
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
2ـ اگر xاز عنصر وسط كوچكتر باشد ،عنصر مورد نظر احتماًالدر
قسمت باالی ليست قرار دارد .لذا آرايه با انديس ،جديد در نظر گرفته
ميشود و قسمت پايين ليست از فضاي جستجو حذف ميشود.
3ـ اگر xاز عنصر وسط آرايه بزرگتر باشد قسمت باالي ليست حذف
ميشود و فضاي جستجو ،قسمت پايين آرايه خواهد بود.
-4اگر xبرابر عنصر وسط باشد عمل جستجو خاتمه ميپذيرد.
71
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مرتب سازي () sort
مرتبسازي بحث بعدي اين فصل ميباشد .براي مرتب كردن دادهها نيز
الگوريتمهاي مختلفي وجود دارد ،كه هر كدام مزايا و معايب خاص خود
فصلهاي بعد واگذار ميكنيم.
را دارد .بحث مفصل در اين مورد را به
72
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرين
•فلوچارتي رسم نمائيد كه عددي از ورودي دريافت كرده ،اعداد كامل
قبل از خود را توليد و در يك آرايه قرار دهد.
•فلوچارتي رسم نمائيد كه يك آرايه حداكثر 100عنصري از ورودي
دريافت كرده ،عناصري از آن كه اول هستند را با صفر كردن حذف نمايد.
•فلوچارتي رسم نمائيد كه يك عدد حداكثر 20رقمي را توسط آرايهاي
از ورودي دريافت نمايد .سپس يك عدد تک رقمي را از ورودي خوانده
در عدد 20رقمي ضرب نموده ،حاصل را در خروجي چاپ نمايد.
73
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 3
كامپيوترباآشنايي
هدفهاي كلي
شناخت كامپيوترهاي نسل قديم و امروزي
سختافزارهاي الزم براي كامپيوترهاي شخصي
شناخت
نرمافزارها و انواع آن
بررسي
74
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هدفهاي رفتاري
:دانشجو پس از مطالعه اين فصل بايد بتواند
كامپيوترهاي نسل جديد را با كامپيوترهاي نسل قديم مقايسه كند.
سختافزارهاي الزم براي كامپيوترهاي شخصي را بشناسد.
انواع حافظه ،مزايا و معايب آنها را شناخته و با هم مقايسه نمايد.
سيستم عامل و انواع آن را مقايسه نمايد.
برنامهنويسي را تعريف كند.
نرمافزار و زبانهاي
75
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
كامپيوترهاي قديمي
اولين كامپيوتر بزرگ ( )Super Computerهمه منظوره
ديجيتال
الكترونيك ،تحت عنوان ENIACدر سال 1946ميالدي در
دانشگاه پنسيلوانيا ساخته شد .اين كامپيوتر با سرمايه ارتش آمريكا
طراحي شد .وزن اين كامپيوتر 30تن و ابعاد آن 30×50فوت بود.
اين كامپيوتر براي محاسبه جدول پرتابهها ،پيشگويي وضع آب و هوا
و محاسبات انرژي اتمي بكار ميرفت.
76
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در كامپيوترهاي اوليه از المپهاي خالء بعنوان عنصر الكترونيكي پايه
استفاده ميكردند .در اين ماشينها 19000المپ خالء استفاده شده
بود و براي انرژي مصرفي المپها و همچنين دستگاههاي تهويه و
خنككننده ماشين حدود kw 130انرژي الكتريكي مصرف ميشد.
اين ماشينها داراي حجم زيادي بودند و سطحي را معادل 9015
مترمربع اشغال ميكردند .اين كامپيوترها به كامپيوترهاي نسل اول
معروف شدند.
77
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
كامپيوترهاي امروزي
كامپيوترهاي امروزي با بكارگيري ريزپردازنده به كامپيوترهاي
نسل چهارم معروفند .البته نسلهاي جديد ديگر كامپيوترها نيز
.به بازار ارائه ميشود
در كامپيوترهاي امروزي سرعت پردازش بسيار باال ،حجم
اجزاء سختافزاري بسيار كوچك ،حجم حافظه باال و غيره
.آنها را از نسل هاي ديگر متمايز ميسازد
78
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:اجزاء تشکيل دهنده کامپيوتر عبارتند از
سخت افزار
نرم افزار
79
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
سخت افزار
Out put
process
خروج
ي
پرداز
ش
Input
ورود
ي
80
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
كامپيوترهاي امروزي معموًال از قطعات زير تشكيل ميشوند:
•
•
•
•
•
دستگاههاي ورودي
حافظههاي جانبي
حافظههاي اصلي
واحد پردازشگر مركزي
دستگاههاي خروجي
81
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نرم افزار
نرمافزار يكي از بخشهاي اساسي كامپيوتر به شمار ميآيد ،كه در
واقع سختافزار را بكار ميگيرد .بعبارت ديگر رابط بين كاربر و
سختافزار را نرمافزار مينامند .نرمافزار در حقيقت روح و جان يك
كامپيوتر است ،كه به سختافزار هويت ميبخشد.
82
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نرم افزار سيستم عامل
• سيستم عامل ( )OS: Operating Systemمشهورترين
نوع نرمافزارهاي سيستمي ميباشد .كه مديريت منابع سيستمي را بر
عهده دارد .سيستمعامل ،همچنين ارتباط بين كاربر و اجزاء
سختافزاري و نرمافزاري ديگر را برقرار ميكند.
83
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
84
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
زبانهاي برنامهنويسي
• نرمافزارها توسط زبانهاي برنامهنويسي نوشته ميشوند .زبانهاي
برنامهنويسي ،يك سيستم ارتباطي هستند كه توسط آنها ميتوان
دستورات الزم را به ماشين انتقال داد.
• هرزبان برنامهنويسي به مجموعهأي از عاليم ،قواعد و
دستورالعملها گفته ميشود كه امكان ارتباط با كامپيوتر را جهت
بيان كاري يا حل مسئلهاي فراهم ميكند.
85
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در حالت كلي زبانهاي برنامهنويسي را به سه دسته زير تقسيمبندي
:ميكنند
• زبانهاي سطح باال
• زبانهاي سطح پايين
• زبانهاي سطح مياني
86
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
كامپايلر برنامه نوشته در يك زبان سطح باال را به برنامه مقصد تبديل
.ميكند
Object
program
Compil
er
Source
program
87
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
زبان Pascal
در اين كتاب زبان پاسكال ( )Pascalرا براي آموزش و نوشتن
برنامهها انتخاب كرديم .اين زبان كه به افتخار بلز پاسكال دانشمند
فرانسوي قرن هفدهم ميالدي ،پاسكال نامگذاري شده است ،در اواخر
سال 1960و اوايل 1970توسط پروفسور نيكالس ويژت در انستيتو
فني فدرال سوئيس مطرح گرديد
88
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 4
ساختار برنامه در زبان پاسکال
هدفهاي
كلي
شناخت اجزاي تشكيل دهنده يك برنامه
شناخت ساختار يك برنامه در زبان پاسكال
بررسي دستگاههاي خروجي و دستورات الزم در زبان
پاسكال براي توليد خروجي
89
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هدفهاي رفتاري
:دانشجو پس از مطالعه اين فصل بايد بتواند
اجزاء الزم براي نوشتن برنامه در زبان پاسكال را بداند.
يك شناسه صحيح در زبان پاسكال را تعريف كند.
ساختار يك برنامه در زبان پاسكال و اعالنهاي مربوط به برنامه را
تعريف نمايد.
يك برنامه ساده به زبان پاسكال كه فقط خاصيت خروجي دارد ،بنويسد.
90
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
اجزاي تشکيلدهنده يک برنامه
• کلمات ذخيرهشده ( ) Reserved Words
• شناسهها ( ) identifier
91
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
کلمات ذخيرهشده ( Reserved
) Words
کلمات ذخيره شده ،کلماتي هستند که مترجم زبان آنها را ميشناسد و
معناي خاصي براي زبان دارند .مترجم زبان به محض مشاهده اين کلمات اعمال خاصي را
انجام ميدهد .هر زبان داراي تعداد مشخصي
کلمات ذخيره شده ميباشد و اين تعداد قابل افزايش توسط برنامهنويس
نيست.
92
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ليست کلمات ذخيره شده در پاسکال عبارتند از:
and
shr
exports
mod
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 93
inline
record
with
downto
interface
repeat
while
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
شناسهها ( ) identifier
• شناسه در پاسکال براي نامگذاري ثابتها ،تايپها ،پروسيجروها ،توابع،
ميدانهاي يک رکورد ،برنامه و همچنين يونيت مورد استفاده قرار
ميگيرد.
94
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:در حالت کلي دو نوع شناسه وجود دارد
id هاي استاندارد :اين نوع idها از قبل در زبان پاسکال تعريف
برنامهها ،معناي خاصي دارند .
شدهاند و در
id هاي غيراستاندارد :اين نوع idها بوسيله کاربر بطور مجزا تعريف
ميشوند و اصطالحًا به آنها userdefinedگفته ميشود.
95
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ساختار برنامه در زبان پاسکال
:اجزاء اصلي يک برنامه به زبان پاسکال بصورت زير ميباشد
عنوان برنامه
قسمت تعاريف برنامه
قسمت دستور العملها
96
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
قسمت تعاريف برنامه
Constant Declaration
اعالن ثابتها
Type Declaration
اعالن انواع
Declaration Variable اعالن متغيرها
Declaration Label
اعالن برچسبها
97
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
•
•
•
•
درحالت کلي ميتوان شکل يک برنامه در زبان پاسکال را
بصورت زير بيان کرد:
•
•
•
•
استفاده از کلمه ذخيره شده Programو اسم برنامه ( که ميتواند
بکار برده نشود )
قسمت تعاريف شناسهها
بلوک اصلي برنامه که با Beginشروع و به Endهمراه نقطه
( ) .ختم ميشود.
هر دستور در پاسکال به ( ; ) ختم ميشود.
98
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:نمودارهاي يک برنامه و بلوک بترتيب به صور ت زير ميباشد
0
block
;
(
شناسه
)
شناسه
Program
,
.End
Statement
Begin
;
99
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
خروجي ( ) Output
مشهورترين دستگاههاي خروجي عبارتنداز:
Monitor
Printer
Terminale
Plotter
صفحه نمايش
چاپگر
ترمينال
رسام
100
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال هاي حل شده
Program
Print ( output ) ;
Begin
Writeln ( ' Pascal Language
');
Writeln ( ' Hello '
);
End.
101
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:خروجي برنامه باال بصورت زير ميباشد
Pascal Language
Hello
102
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 5
انواع عملگرها و دادهها در زبان پاسکال
هدفهاي
كلي
معرفي انواع عملگرها در زبان پاسكال
شناخت انواع دادهها
بررسي اولويت عملگرها
معرفي دستورات جايگزيني در پاسكال
103
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هدفهاي رفتاري
:دانشجو پس از مطالعه اين فصل بايد بتواند
انواع عملگرها در زبان پاسكال را بكار ببرد
انواع دادهها براي يك برنامه را تعريف كند.
اولويت عملگرها در يك عبارت را تشخيص دهد.
يك برنامه ساده با عمليات معمولي را بنويسد.
104
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عملگرها
عملگرها نمادهايي هستند که براي انجام اعمال خاصي مورد استفاده
قرار مي گيرند.عملگرها براي انجام اعمال خاصي روي عملوندها
( ) Operandsبکار ميروند .با توجه به نوع عملگر ممکن
است يک يا دو عملوند وجود داشته باشد .عملگرها در زبان
پاسکال از تنوع زيادي برخوردارند.
105
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در پاسکال چهار دسته عملگر وجود دارند :
محاسباتي
رابطه اي
منطقي
بيتي
106
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عملگرهاي محاسباتي
رديف عملگر
1
+
3
-
3
4
5
6
*
/
div
mod
نام
مثال
جمع
تفريق و منهاي
يکاني
ضرب
تقسيم
تقسيم
باقيمانده تقسيم
x+y
x – y , -x
x*y
x/y
a div b
a mod b
107
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عملگرهاي رابطه اي
عملگر
نام
=<
بزرگتر مساوي
=>
کوچکتر مساوي
<>
نامساوي
<
>
=
بزرگتر
کوچکتر
مساوي بودن
مثال
x>y
x >=y
x<y
x <= y
x=y
x <> y
108
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عملگرهاي منطقي
عملگر
نام
And
و
OR
يا
Not
نقيض
مثال
a>y and
y<x
x>y or
y<x
) Not ( x
109
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عملگرهاي بيتي
عملگر
AND
OR
XOR
NOT
Shl
Shr
نوع عمل
و
يا
يا انحصاري
نقيض
انتقال به سمت چپ
انتقال به سمت راست
110
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تقدم عملگرها
)
( باالترين تقدم
Not
div
/
mod
-
+
Shl
>
shr
=>
=<
><
=
And
XOR
111
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
*
OR
<
) data types ( انواع دادهها
)Simple data type( دادههاي ساده
Structural Data ( ( دادههاي ساختيافته
Types
)Pointer Data Types( دادههاي اشارهگر
112
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
)Simple data type( دادههاي ساده
)Char type( نوع کاراکتري
) integer ( صحيح
)اعشاري (حقيقي
)String type( نوع رشته اي
)Boolean type( نوع منطقي
113
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
صحيح ( ) integer
نوع
محدوده
Byte
Shortint
Integer
Word
از 0تا 255
از -128تا 127
از -32768تا 32767
از 0تا 65535
از -2147483648تا
2147483647
Longint
اندازه بر
حسب
بايت
1
1
2
2
4
114
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
اعشاري (حقيقي)
نوع
محدوده
… 2.2 e – 39
Real
1.7 e 38
تعداد ارقام
معني دار
13-11
اندازه
برحسب
بايت
6
e -45 … 1.5
Single
3.4 e 37
8-7
e -324 … 5.0
Double
1.7 e 308
16-15
8
e -4932 … 3.4 Extend
1.1 e 4932
ed
30-19
10
Comp
e 18 … 9.2-
30-19
4
115
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
8
ساختيافته ( ( Structural Data Types
دادههاي
انواع دادههاي ساختيافته عبارتند از:
آرايهها
رکوردها
مجموعهها
فايلها
116
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دادههاي اشارهگر ()Pointer Data Types
ممکن است در نوشتن برنامه ،نوع دادههاي بحث شده در باال به داليل
مختلف از جمله مشخص نبودن تعداد وروديهاي مسئله و غيره مشخص
نباشد لذا نياز به متغيرهايي هست که بتوانند آدرس متغيرهاي ديگر را در
خود نگه دارند ،اين نوع دادهها ،دادههاي اشارهگر نام دارند .
117
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
متغيرها ()Variables
ميباشد .نوع متغير همان
متغير ،محلي از حافظه است که داراي نوع و اسم
ميکند
.نوع داده بوده و اسم متغير از قواعد اسمگذاري شناسه تبعيت
ميکنند:
در پاسکال براي معرفي متغيرها بصورت زير عمل
;
)کلمه ذخيره شده( Var
نوع متغير :اسم متغير
118
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ثابتها ()Constants
شناسهاي است که در آغاز يک برنامه ،يک مقدار در آن جاگزين
يک ثابت نام
خانههايي از حافظه در نظر
ثابتها را ميتوان بعنوان
ميشود .درست مانند متغيرها .
يباشد،
ميشود ولي مقدار ثابت مشخص م
بگيريم که مقدار دادهها در آنها ذخيره
نميتوان مقدار يک ثابت را در برنامه خود بوسيله يک دستور تغيير داد
.طوري که
ميکنيم :
براي تعريف يک ثابت بصورت زيرعمل
مقدار ثابت = اسم متغير Const
119
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دستور جايگزيني
براي قرار دادن يک مقدار يا مقدار يک متغير داخل يک متغير ديگر ،از دستور
ميکنند
.جايگزيني استفاده
شکل کلي يک دستور جايگزيني در پاسکال بصورت زير است:
عبارت محاسباتي = :اسم شناسه
عبارت قياسي
عبارت منطقي
يا
120
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
افزودن توضيحات به برنامه
()Comment
افزودن مطلب توضيحي در درون خود برنامه عملي پسنديده و مطلوب است
ميرود و در
بدين ترتيب که بعد از مدتي امکان فراموشي کار با برنامه از بين
ميبرد
يتوان گفت که نوشتن توضيحات در برنامه خوانايي آن را باال
.کل م
ميشوند.
در پاسکال توضيحات بين دو آکوالد محصور
} { This is comment
{ This program written by A.
} Pascal
121
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال
جابجا کردن مقدار دو متغير
b
a
17
15
b
17
a
15
temp
15
b
17
a
17
temp
15
b
15
a
17
122
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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);
123
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نکاتي چند در مورد برنامهنويسي
•
•
•
•
استفاده از اسامي با مفهوم براي متغيرها
استفاده از دستور Constدر صورتي که مقدار
ثابت در برنامه وجود داشته باشد.
سوال جوابي بودن برنامه (وروديها و خروجيها بايد
داراي پيغام مناسب باشند)
نوشتن برنامه با فرمت مناسب (رعايت قرار گرفتن
خطوط مختلف برنامه زير هم و فاصله گذاشتن آنها از
اول سطر و غيره)
124
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
حاصل عبارتهاي زير را بدست آوريد:
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 )
<125> 3 ))
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: حاصل عبارتهاي منطقي را به ازاء مقادير زير مشخص کنيد
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 = ?
126
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات برنامهنويسي
•
•
•
برنامهاي بنويسيد که ابعاد مثلث که عبارتند از 1.3 , 3را در نظر
گرفته محيط و مساحت آن را محاسبه و با پيغام مناسب در
خروجي چاپ کند.
برنامهاي بنويسيد که دو متغير صحيح با مقادير 15 , 3را در نظر
گرفته محتويات دو عدد را بدون استفاده از متغير کمکي جابجا
نمايد.
برنامهاي بنويسيد که سه عدد بنام هاي Third ,
Second , Firstبترتيب با مقادير 13 , 15 , 17را در
نظر گرفته بطور چرخشي مقادير آنها را جابجا نموده در خروجي
با پيغام مناسب چاپ کند.
127
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 6
ورودي و خروجي
هدفهاي
كلي
معرفي دستورات خروجي Writeln
فرمتبندي شده
معرفي خروجي
بررسي دستورات ورودي Readو ReadLn
128
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هدفهاي رفتاري
:دانشجو پس از مطالعه اين فصل بايد بتواند
عبارات مورد نظر را در خروجي نمايش دهد.
عبارات خروجي را با فرمت مناسب چاپ كند.
متغيرهاي مورد نياز برنامه را از ورودي دريافت نمايد.
برنامههاي ساده به زبان پاسكال بنويسد.
129
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
خروجي با دستور Write
ميرود .اطالعات خروجي
اين دستور براي نوشتن اطالعات در خروجي بکار
ميتوانند ثابتهاي عددي ،مقادير متغيرها ،عبارات و غيره باشند .شکل دستور در
:حالت کلي بصورت زير است
( .......و متغير 2و متغيرwrite) 1
( .......و' عبارت '2و'عبارت)' 1
يا
يا
( .......و ثابت 2وثابت ) 1
130
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
A , B: integer ;
Ch: char ;
R: Real ;
مثال
Begin
A: = 10 ; B: = 15 ;
Ch: = ' T ' ;
R: = 12.25
Write ( ' A = ' , A, ' B = ' , B ) ;
Write ( ' ch = ' , ch , ' R= ' , R ) ;
Write ( ' sum of A and B = ' , A + B ) ;
End. { end of program }
اي برنامه فوق در خروجي خواهيم داشت
B = 15 ch = TR = 1.2250000000 e + 01 sum of A and B
131
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
خروجي با دستور Writeln
ميکند با اين تفاوت که بعد از
اين دستور همانند دستور Writeعمل
ميکند در نتيجه موجب چاپ
اجرا ،کنترل را به ابتداي سطر بعد منتقل
ميشود.
دادههاي بعدي در ابتداي سطر بعد
132
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
Sum133of A and B = 25
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فرمتبندي شده
خروجي
اگر بخواهيم اطالعات با فاصله هاي مشخص يا در مکان
مشخصي در صفحه نمايش قرار گيرند ،بايد فرمت چاپ
.را در دستورات بيان شده مشخص کنيم
134
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
طريقه تعيين فرمت چاپ براي اعداد صحيح
ميشود
:فرمت اعداد صحيح بصورت زير مشخص
( طول ميدان :داده صحيح ) Writeln
يا
Write
135
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دادههايي از نوع صحيح به نکات زير توجه کنيد:
در تعريف طول ميدان براي متغيرها يا
•
•
اگر طول ميدان از طول ارقام عدد صحيح بيشتر تعريف شود ،عدد در
ميشود.
منتهياليه سمت راست ميدان نوشته
اگر طول ميدان از طول ارقام عدد صحيح کمتر تعريف شود ،طول ميدان به
بياثر
ميشود و طول ميدان تعريف شده
اندازه تعداد ارقام در نظر گرفته
خواهد بود.
136
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال
X:= 3200 ;
A: = 12 ;
B: = 217 ;
Write ( X:3 , A:5 , B:5 ) ;
: خروجي
3200
137
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
12
217
طول ميدان اعداد اعشاري
براي نمايش اعداد اعشاري بصورت دلخواه ،مي توان با تعريف طول
.ميدان و تعداد ارقام اعشاري ،عدد مزبور را نمايش داد
يتوان به صورت زير تعريف کرد :
در حالت کلي طول ميدان را م
) تعداد ارقام بعد از مميز :طول ميدان :متغير اعشاري ( Write
Writelnيا
138
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در تعريف فرمت براي اعداد اعشاري به نکات زير بايد توجه کرد:
اگر طول ميدان بزرگتر از تعداد ارقام عدد ذکر شود ،عدد در منتهي اليه سمت راست
ميشود
.ميدان چاپ
اگر فقط طول ميدان ذکر شود ،عدد به صورت نماد علمي در طول ميدان مشخص شده
.چاپ می شود
از آنجائي که براي نمايش اعداد در نماد علمي حداقل 8محل مورد نياز است ،لذا
هنگامي که تنها طول ميدان ذکر شده باشد ،اگر از 8رقم کمتر باشد ،حداقل 8رقم
.در نظر گرفته ميشود
139
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
هنگامي که طول ميدان همراه با تعداد ارقام بعد از مميز ذکر شود ،اگر طول
اندازهاي
ميدان کوچکتر از مقدار عدد باشد ،پاسکال تنها طول ميدان را به
که مورد نياز است تصحيح کرده و آنرا برابر اندازه واقعي که عدد در آن
ميکند.
ميگيرد ،اصالح
قرار
اگر تعداد ارقام بعد از مميز زياد باشد و تعداد ارقام بعد از مميز ذکر شده د
ر طول ميدان کمتر از تعداد ارقام اعشاري عدد باشد ،تعداد ارقام اعشار
مطابق درخواست برنامهنويس نشان داده خواهد شد و رقم آخر اعشار آن
ميشود.
نسبت به عدد بعدي گرد
140
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
طول ميدان کاراکترها و رشتهها
براي نمايش رشتهها و کاراکترهاي با طول ميدان بصورت زير عمل
ميکنيم.
) طول ميدان :متغير يا عبارت رشتهاي يا کاراکتري ( Write
در توربو پاسکال ،کليه موارد گفته شده در مورد اعداد صحيح براي
رشتهها نيز صادق است
.
141
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ورودي با Readln , Read
از اين دستور براي خواندن داده ها و اختصاص آنها به متغيرها
ميشود .در خواندن داده ها به دو موضوع بايد دقت شود
:استفاده
دادهها خوانده 1-
دادهها يعني دستگاه ورودي که از آن
منبع
ميشود
.
ميگيرد . 2-
دادههاي خوانده شده در آن قرار
متغيري که
142
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
شکل کلي دستور ورودي Readبصورت زير ميباشد:
;( .....و متغير 2و متغير ( 1Read
دادهها و ذخيره آنها در متغيرها را انجام
اين دستور عمل خواندن
ميدهد
نوشتنهاي بعدي
و پس از اتمام عمل خواندن کنترل را براي خواندن و
ميدارد .
در همان خط نگه
143
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال جابجا کردن محتويات دو عدد
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 }
144
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:خروجي برنامه باال به صورت زير ميباشد
Please Enter two numbers
15
17
First = 17 second = 15
145
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
: خروجي قطعه برنامه زير را تعيين کنيد
Value1: = 27.3 ;
Value2: = -8.5 ;
Writeln ( ' Value1 is ' , Value1 ) ;
Writeln ( ' Value2 is ' , Value2 ) ;
Sum: = Value1 + Value2 ;
Writeln ( ' Sum of Two Values = ' ,
Sum: 6: 2 ) ;
146
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
اگر متغير 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
147
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات برنامه نويسي
برنامهاي بنويسيد که دو عدد را از ورودي دريافت کرده و
.محتويات آنها را بدون استفاده از متغير کمکي جابجا نمايد
برنامهاي بنويسيد که سه عدد صحيح Third ,
Second , firstرا از ورودي با پيغام مناسب دريافت
کرده سپس محتويات اين سه متغير را بصورت چرخشي جابجا
نموده با پيغام مناسب در خروجي چاپ کند.
148
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهاي براي يک حسابدار اداره جمع آوري ماليات بنويسيد که صورت
.حسابهاي ماليات را محاسبه نمايد
:ورودي
شماره شناسايي ماليات دهنده
بهاي ارزيابي شده
نرخ ماليات
:خروجي
صورت حساب بافرمت مناسب شامل تمام دادههاي ورودي و ميزان بدهي
149
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 7
ساختارهاي شرطي و كنترلي
هدفهاي كلي
معرفي دستور شرطيIf and Else
معرفي دستور case
بررسي دستورات تكرار for ، while ، repeat
untilدستورات شرطي متداخل
معرفي
بررسي چند تابع و روال استاندارد زبان پاسکال
150
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
برنامههايي را بنويسد كه در آنها نياز به استفاده از شرط وجود دارد.
تفاوتهاي بين دستورات مختلف با ifو else- ifرا تشخيص دهد.
برنامههايي كه نياز به تكرار تعدادي عمليات داشته باشند را بنويسد.
در صورت نياز بتواند در برنامهها ،از روالها و توابع استاندارد زبان استفاده نمايد
151
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دستورات شرطي
ميتوان بر حسب شرايط مختلف،
بطور کلي توسط اينگونه دستورات
تصميمات متفاوتي را اتخاذ نمود و برحسب برقرار بودن يا نبودن شرايط
.دستورات متفاوتي را اجرا نمود
ميشوند:
ات شرطي در حالت کلي به دو نوع تقسيم
دستور if
دستور Case
152
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• دستور if
هرگاه در طول برنامه نياز به استفاده از شرط يا شروط داشته باشيم ،از دستور
ميکنيم
. Ifستفاده
دستور ifبطور کلي به سه شکل بر حسب نياز ممکن است ظاهر شود:
ifساده
ifهمراه Else
ifهاي متداخل
153
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• – If
then
در اين نوع دستور شرطي اگر شرط خاصي تحقق يافته باشد ،عمل يا اعمال
ميکند،
ميشود .در غير اينصورت برنامه روال عادي خود را طي
خاصي انجام
ميگيرد و
در صورتي که شرط برقرار باشد ارزش منطقي Tureبه خود
اگر شرط برقرار نباشد ،ارزش منطقي Falseبه خود خواهد گرفت.
154
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• ( If – thenادامه )
ميباشد:
شکل کلي دستور ifبصورت زير
شرط يا شروط
; دستور
ميباشد
:دياگرام دستور باال بصورت زير
شناسه ;
دستور
Then
شرط ياشروط
if
155
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
156
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• دستور ifهمراه else
• در اين دستور ابتدا شرط بررسي ميشود ،در
صورتي که شرط برقرار
باشد ،عمل يا اعمال خاصي را انجام ميدهد و در
صورتي که شرط برقرار نباشد ،عمل يا اعمال
بخصوص ديگري را انجام خواهد داد .اينگونه
دستورات در واقع حالت توسعه يافته دستورات if
ميباشند.
157
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
شکل کلي اين دستور بصورت زير است:
thenعبارت يا عبارات منطقي if
; دستور1
else
; دستور2
دياگرام دستور بصورت:
then
عبارت يا عبارات منطقي
;دستور
else
if
دستور
158
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
159
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• مثال
:خروجي برنامه باال بصورت زير است
صورت ديگر دستور
Thenعبارت منطقي If
Begin
; دستور 1
; دستور 2
.
.
.
End
Else
Begin
; دستور 1
; دستور 2
.
160
.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• Ifهاي متداخل
هرگاه در نوشتن برنامه نياز به انتخاب يک شرط از بين چند شرط داشته
ميکنند .در چنين مواقعي استفاده از If
باشيم ،معموًال از Ifمتداخل استفاده
ميبرد زيرا بجاي کنترل تمام شروط فقط تا
متداخل کارائي برنامه را باال
ميشوند .بعد از برقرار شدن يکي
زمانيکه شرط برقرار نشده If ،ها بررسي
ميشود و اين در بهبود کارائي
از شروط ،کنترل برنامه به بعد از Ifمنتقل
ميتواند بسيار موثر باشد.
يک برنامه
161
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در حالت کلي Ifمتداخل به صورت هاي زير ممکن است ،در برنامه ظاهر شود.
then
عبارت شرطي1
if ( 2
دستور 1
then
then
عبارت شرطي 1
if
عبارت شرطيif 2
thenعبارت شرطي else if 2
دستور 1
دستور2
else
thenعبارت شرطيelse If 3
;دستور2
دستور 3
else
.
.
.
162
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :برنامهاي بنويسيد که نمره دانشجوئي را از ورودي دريافت کرده ،با توجه به
:مقدار نمره يکي از خروجي هاي زير را نمايش دهد
خروجي
A
B
C
D
F
Grade
17 – 20
14 - 17
12 – 14
10 – 12
0 – 10
163
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
) ; 164
Readln ;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دستور
Case
زبان پاسکال دستور Caseرا بصورت زير در نظر ميگيرد:
عبارت
Of
; دستور 1
.
:
Case
مقدار 1
; دستور 2
:
مقدار 2
; دستور 3
:
مقدار3
} End ; { End of case
.
.
Otherwise
; دستور
165
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 )
166
;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دياگرام دستور Caseبصورت زير ميباشد:
End
دستورات
ثابت
:
of
عبارت
Case
,
;
167
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ساختارهاي کنترلي
.بسياري از مواقع الزم است عمل يا اعمال به تعداد دفعات معين يا نامعين انجام شوند
در چنين مواقعي زبانهاي برنامهنويسي دستوراتي دارند که ميتوان اين اعمال تکراري
را انجام داد .در حالت کلي ساختارهاي کنترلي شامل يک يا چند شرط و همچنين
متغير يا اصطالحًا شمارندهاي براي پايان دادن به شرط ميباشند
168
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
شکل کلي حلقه بصورت زير ميباشد:
Doمقدار نهايي Toمقدار اوليه = :انديس For
; دستور
بايد توجه داشته باشيد که در حلقه تعداد تکرار کامًال مشخص است و حلقه دقيقًا به
.تعداد تکرار مشخص اجرا ميشود
169
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حلقه for
دستور براي انجام عمل يا اعمالي مشخص به تعداد تکرار معين بکار برده ميشود.
قه forشامل يک انديس ( ) indexمقدار اوليه ( ) initial valueمقدار نهايي
( ) final valueو مقدار افزاينده ميباشد .اين حلقه با قرار دادن مقدار اوليه در
يس حلقه شروع شده و بعد از هر تکرار يک واحد به انديس حلقه اضافه ميکند تا
نهايت به مقدار نهايي برسد .شکل کلي حلقه بصورت زير ميباشد:
170
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عدد از ورودي100 برنامهاي بنويسيد که: مثال
. عدد را محاسبه و چاپ نمايد100 مجموع،دريافت کرده
Var
i , number , Sum: integer ;
Begin
Writeln ( ' please enter 100 Numbers:
') ;
For I: = 1
to
100
do
Begin
Readln ( number ) ;
Sum:= Sum + number ;
End ;
Writeln ( ' Sum = ' , Sum ) ;
End. { end of program }
171
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دستور forرا بصورت زير هم ميتوان بکار برد.
doمقدار نهايي downtoمقدار اوليه = :انديس for
; دستور
در اين شکل از دستور Forابتدا مقدار اوليه در انديس حلقه قرار داده مي شود
و بعد از آن در هر تکرار حلقه يک واحد از انديس حلقه کم مي شود تا به
مقدار نهايي برسد .
172
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 .
173
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
do
Forهاي متداخل
doمقدار نهايي toمقدار اوليه = :انديسfor 1
doمقدار نهايي
toمقدار اوليه = :انديس for 2
; دستور
174
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
i: = 1
to
3
do
مثال:
gin
For
j: = 1
to
3
do
Write ( ' pascal ': 8 ) ;
Writeln ;
d ;
Pascal
1)
Pascal
2175)
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
خروجي
Pascal
Pascal ( مرحله اولi =
Pascal
Pascal ( مرحله دومi =
دياگرام دستور for
مقدار
نهايي
To
مقدار
اوليه
=:
انديس
For
Downto
دستور
d
o
176
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حلقه While
در حالت کلي هدف از بکار بردن اين دستور انجام عملياتي مشخص
به تعداد دفعات نامعين است
اين حلقه به صورت زير بکار برده مي شود :
Do
عبارت منطقي While
; دستور
177
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
m , n , r: integer ;
Begin
بزرگترين مقسوم عليه دو عدد: مثال
Writeln ( ' Please Enter Two
Numbers ' ) ;
Readln ( m, n ) ;
While ( m Mod n ) < > 0 Do
Begin
178
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
r: = m MOD n ;
m: = n ;
n: = r ;
End ; { end of while }
دياگرام دستور Whileبصورت زير مي باشد:
دستور
do
عبارت شرطي
While
و در صورتي که دستور مرکب باشد دياگرام بصورت زیر است :
End
دستور
Begin
;
179
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دستور
Repeat
اين دستور نيز از نوع دستورات تکراري ميباشد و به کمک آن ميتوان يک يا چند
.دستور را به تعداد نامعين بار اجرا کرد
اين دستور مشابه دستور while
:است ،با تفاوتهايي که در زير عنوان ميکنيم
در دستور ) Repeat 1برعکس دستور While
.شرط حلقه در انتهاي حلقه بررسي ميشود لذا حلقه حداقل يکبار اجرا ميشود
180
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
)2دستور Repeateتا زماني اجرا ميشود که شرط خاصي تحقق
پيدا نکرده است در حاليکه دستور Whileتا زماني که شرط برقرار
باشد ،اجرا ميشود.
)3دستور Repeatنياز به بلوک ندارد و همراه Untilظاهر ميشود.
181
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
شکل کلي اين دستور بصورت زير ميباشد:
Repeat
; دستور1
; دستور2
.
.
;
شرط يا شروط
until
182
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنام ه مجموع و ميانگين تعدادي عدد صحيح مثبت
, 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
183 program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دياگرام دستور Repeatبصورت زير ميباشد:
شرط يا شروط
Until
دستور
Repeat
;
184
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
معرفي چند پروسيجر ( Procedure
)
ميباشند که به
قسمتهاي مستقلي از برنامه اصلي
روالها
پروسيجرها يا زير
تنهايي اعمال خاصي را انجام داده و وظايف مستقل و بخصوصي بر عهده
ميشود .يک مزيت بزرگ پروسيجرها اينست که يکبار در برنامه
آنها گذاشته
ميآيد و از
گنجانده شده ولي در محلهاي مختلف ازآن استفاده به عمل
.اصول برنامهنويسي ساخت يافتهاست
185
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پروسيجر Exit
هدف :انتقال کنترل برنامه به خارج از بلوک فعلي
; Exit
Procedure
استفاده از اين پروسيجر در هر بلوک از برنامه باعث ميشود که کنترل
برنامه بالفاصله به خارج از آن بلوک انتقال يابد.
186
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پروسيجر Break
هدف :خاتمه دادن به اجراي يک حلقه
; Procedure Break
ميشود که اجراي يک حلقه خاتمه يافته و
استفاده از پروسيجر فوق باعث
کنترل برنامه به دستورالعمل بعدي انتقال يابد.
187
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پروسيجر continue
هدف :بازگشت به ابتداي حلقه
; Procedure continue
وقتي اين پروسيجر در حلقه ظاهر ميشود کنترل برنامه بــه اول حلقــه انتقــال
مييابد و دستورات بعد از پروسيجر اجرا نميشوند.
188
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ارائه چند مثال از کاربرد حلقه ها و شرطها
مثال :برنامهاي بنويسيد که يک عدد صحيح در مبناي ده
را
از ورودي دريافت کرده ،به يک عدد در مبناي 2ببرد.
189
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 )190;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عدد را از ورودي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 }
191
d. { end of program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
192
i:=i+1 ;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ;
193
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات برنامه نویسی
برنامهاي بنويسيد که با استفاده از حلقه ها خروجي زير را توليد کند.
-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
194
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهاي بنويسيد که تعدادي عدد از ورودي دريافت کرده مجموع ارقام 2-
هر عدد را در خروجي چاپ نمايد ( .پايان داده ها به -1ختم مي شود )
برنامهاي بنويسيد که دو عدد صحيح را از ورودي دريافت کرده سپس 3-
:
.اعداد فيبوناچي بين اين دو عدد را چاپ کند
برنامهاي بنويسيد که يک اسکناس 1000توماني را به حالتهاي مختلف 4-
يعني به اسکناس 200توماني 100 ،توماني 50 ،توماني 20 ،توماني10 ،
.توماني و سکه هاي 5توماني و 2توماني و يک توماني خرد نمايد
195
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 8
آرایه هاArray
هدفهاي كلي
شناخت لزوم استفاده از ساختار داده اي به نام آرايه
شناخت انواع آرايهها و موارد استفاده از آنها
شناخت مفاهيم مرتبسازي و جستجو
شناخت الگوريتمهاي مرتبسازي و جستجو
196
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
آرايهها يك بعدي را در برنامههاي خود بكار ببرد.
پيادهسازي نمايد.
ماتريسها را
عمل جستجو در آرايه انجام دهد.
يك ليست را توسط روشهاي مرتب سازي حبابی ،انتخابي و غيره مرتب كند.
197
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايه و انواع آن
خانههاي پشت سرهم از حافظه که همنوع بوده و توسط يک اسم معرفي
ميشوند ،آرايه نام دارد .نحوه دسترسي به هر يک از اعضاء آرايه از
امکانپذير است
.طريق انديس آرايه
براي تعريف آرايه ابتدا طول آرايه که درحقيقت تعداد خانههاي آنرا مشخص
دادهها در آن قرار خواهند
ميگردد .سپس نوع خانههايي که
ميکند ،معين
گرفت را تعيين مي کنند
198
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايههاي يک بعدي
ميشوند:
آرايههاي يک بعدي بصورت زير تعريف
of
] [ 1 . . Length
array
:
Name
;
طول آرايه
نوع آرايه کلمه ذخيره شده
اسم آرايه
کلمه ذخيره شده
199
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: برای مثال
Var
No: Array [ 1.. 50 ] of
integer ;
id: Array [ 1.. 20 ] of Byte ;
Name , Fam: Array [ 1.. 30 ] of
char ;
200
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
امکانپذير است
آرايهها مثل متغيرها به دو صورت
:مقداردهي
-1با استفاده از دستورات ورودي
-2مقداردهي در طول برنامه
ميباشد:
طريقه دسترسي به عناصر آرايه بصورت زير
] [ index
Name
انديس آرايه
اسم
آرايه
201
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
بيشترين، عدد صحيح از ورودي دريافت کرده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 ) ;
202
{ End of program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
عنصري را از ورودي دريافت کرده100 برنامهاي بنويسيد که يک آرايه:مثال
.عناصر آرايه را معکوس نمايد
i , temp : integer ; a : array [1 .. 100 ] of
integer ;
Begin
203
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 ;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايههاي دو بعدي
براي نمايش ماتريس درحافظه معموًال از آرايههايي بنام آرايههاي دوبعدي استفاده ميکنند
.براي درک بيشتر اين آرايهها آنها را بصورت ماتريس در نظر ميگيرند
of
ميشوند:
آرايههاي دو بعدي بصورت زير معرفي
] [ 1 .. row , 1 .. column
array
type
:
;
Name
نوع عناصر آرايه کلمه ذخيره شده تعداد ستونها
اسم آرايه
کلمه ذخيره شده
تعداد سطرها
204
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
سپس، را از ورودي دريافت کرده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
205 ;
d.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايههاي چند بعدي
ميتوان آرايههايي با ابعاد بيشتر از دو نيز تعريف کرد .بطور کلي براي
:معرفي يک آرايه چند بعدي مي توان بصورت زيرعمل کرد
array [ 1..
Name : array [ 1.. length1 ] of
length2 ] ….
Of array [ 1..
lengthN ] of Type
و يا
Name: array [ 1.. length1 , 1.. length2 , …. 1..
lengthN ] of Type
206
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايهها
نکاتي چند در مورد
تعريف آرايه با محدوده منفي
براي مثال:
; A: array [ -10.. 10 ] of Real
تعريف آرايه از نوع منطقي ( ) Boolean
براي مثال:
; A: array [1.. 20 ] of Boolean
207
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايههاي با محدوده منطقي:
براي مثال
A: array [ Boolean ] of
;integer
آرايهاي با محدوده کاراکتري:
براي مثال
A: array [ 'A'.. 'Z' ] of Real
آرايهاي که براي اعضاي آن محدوديت قائل شويم
براي مثال:
A: array [ 1.. 20 ] of 1.. 30
208
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
جستجو و مرتبسازي ( Search and
) Sort
مرتبسازي
يکي از مسائلي که در بحث طراحي الگوريتم بسيار مهم است ،بحث
و جستجو مي باشد .منظور از جستجو اينست که يک مقداري را از يک ليست
جستجو کنيم و منظور از مرتب سازي اينست که يک ليست مرتب از داده ها را
ميروند
مرتبسازي و جستجو بکار
ايجاد کنيم .حال تعدادی الگوريتم که براي
ميکنيم بخصوص زمانيکه ساختار داده ما يک آرايه باشد .
را بررسي
209
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
جستجو در آرايه
ميکنيم :
در کل دو نوع عمل جستجو را در اين کتاب بررسي
جستجوي خطي Linear search
جستجو دودويي Binary search
210
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
جستجوي خطي Linear search
در جستجوي خطي عبارت مورد جستجو را نخست با اولين عضو آرايه مقايسه
ميکنيم ،اگر برابر بود عمل جستجو با موفقيت همراه بوده و عمل جستجو
مييابد در غير اينصورت روند را ادامه داده و عبارت مورد جستجو را
خاتمه
ميکنيم تا اينکه حالت تساوي حاصل شود
بترتيب با عضو دوم ،سوم ...مقايسه
.و اگر اين حالت حاصل نشد ،عباريت مورد جستجو در ليست قرار ندارد
211
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:قطعه برنامه زير را مي توان در حالت کلي براي جستجوي خطي بکار برد
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 ' ) ;
212
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
جستجو دودويي Binary search
درجستجوي دودوئي ليست اوليه بايدمرتب باشد .براي جستجو در چنين آرايهاي
ميکنيم و عنصر واقع در اين انديس را با
نخست انديس وسط آرايه را پيدا
ميکنيم و حاالت زير ممکن است حاصل شود
:عبارت مورد جستجو مقايسه
( Lowانديس ابتداي آرايه و upperانديس آخرين عناصرآرايه و
ميباشد).
middleانديس عنصر وسط
213
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حالت اول:
A [ middle ] < X Then
Low : = middle
در اينصورت
: را که عبارتست ازmiddle و مقدار جديد
Middle : = ( low + middle ) / 2
214
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حالت دوم:
ddle ] <X Then
upper : = middle
در اينصورت
: را که عبارتست ازmiddle و مقدار جديد
Middle : = ( low + middle ) / 2
215
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:حالت سوم
ddle ] =X Then
در اينصورت
) ' found
Write ( ' The Eiement is
ر صورتي که حالتهاي الف يا ب اتفاق بيفتد ،عمل جستجو را تا زمانيکه Low < upper
مييابد.
مي باشد ادامه ميدهيم و در هر مرحله که حالت سوم رخ دهد عمل جستجو خاتمه
216
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مرتبسازي
مرتبسازي دادهها روشهاي متفاوتي وجود دارد .تفاوت روشهاي
براي
مرتبسازي در زمان اجراي آنها مي باشد .در حالت کلي با توجه به تعداد
روشهاي
مرتبسازي مي توان از انواع
وروديها (داده ها) و نوع مسئله
مرتبسازي استفاده نمود
.
ميکنيم.
حال بعضي از روش هاي مرتب سازي عمومي را بررسي
مرتبسازي حبابي ( ) Bubble sort
مرتبسازي انتخابي ( ) Selection sort
217
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مرتبسازي حبابي ( ) Bubble sort
سادهترين روش مرتبسازي روش مرتبسازي حبابي ميباشد .يکي از خصوصيات بارز اين
.نوع مرتبسازي اين است که فهم آن ساده بوده و برنامهنويسي آن به سهولت انجام مي گيرد
ميکند و در صورت نياز ،آنها
مرتبسازي حبابي نخست عنصر اول و دوم را با هم مقايسه
را جابجا ميکند ،سپس عنصر دوم و سوم را مقايسه ميکند .اين عمل را تا زمانيکه به انتهاي
آرايه نرسيده تکرار ميکند ،در پايان مرحله اول بزرگترين عنصر در آخرين خانه آرايه قرار
ميگيرد .در مرحله دوم از خانه اول تا خانه
ميدهد .اين روند را N – 1
عمل باال را انجام
ميدهد و در نهايت يک ليست مرتب شده
تا زمانيکه تمام عناصر آرايه مرتب نشدهاند ادامه
.بصورت صعودي در خروجي توليد ميشود
218
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
219
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مرتبسازي انتخابي ( ) Selection sort
مرتبسازي نخست کوچکترين عنصر را در کل آرايه پيدا کرده
در اين روش
ميدهيم سپس عنصر کوچکتر بعدي را يافته در خانه
در خانه اول آرايه قرار
ميدهيم
ميدهيم اين روند را تا زمانيکه کل آرايه مرتب نشده ادامه
دوم قرار
220
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:ميباشد
ميتوان نوشت بصورت زير
مرتبسازي انتخابي
قطعه برنامهاي که براي
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 }
221
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
چند مثال در مورد آرايهها
مثال :برنامهاي بنويسيد که يک عدد صحيح از ورودي دريافت کرده سپس
.اعداد اول قبل از آن را توليد و در آرايه قرار دهد
; 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
222
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
For i : = 4 to N
do
Begin
For j : = 2 to ( i div 2 ) do
If ( i mod j ) = 0 Then
Flag : = false ;
If flag Then
Begin
K:=k+1 ;
A[k]:=i ;
End ;
Flag : = Ture ;
End ; { end of for }
Writeln ( ' The prime Numbers before N ' )
For
j : = 1 to
K
do
Writeln ( a [ i ] : 5 ) ;
End . { End of program }
223
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 }
224
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
End ;
Writeln ( sum: 8: 2 ) ; Sum : = 0 ;
آرايه، برنامهاي بنويسيد که از ادغام دو آرايه مرتب: مثال
. ايجاد کند بطوريکه آرايه سوم مرتب باشدL3 سومي بنام
Var
L1 , L2: array [ 1.. 30 ] of integer ;
L3: array [ 1.. 60 ] of integer ;
M , N , i , j , k: Byte ;
Begin
Write ( ' Enter Dimention of arrays: ' ) ;
Readln ( N , M ) ;
225
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ;
226
k: = k + 1 ;
End ; { end of while }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 }
227
nd. { End of program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
کاراکتري را از ورودي دريافت80 برنامه ای بنويسيد که يک جمله حداکثر: مثال
کرده وسپس کاراکترهاي فضاي خالي را با کاراکترستاره جايگزين کند.
Var
state: array [ 1.. 80 ] of char ;
i , N : integer ;
Begin
Writeln ( ' Enter Number of sentence: ' )
;
Readln ( N ) ;
228
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 -
229
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
. تعداد بايتهايي که هر کدام از اعالنهاي زير اشغال مي کنند را محاسبه نمائيدa: array [ -20.. 10 ] of char
' a: array [ -20.. -20 , 0.. -20 ] of ' A '.. ' Z
a: array [ Booleam ] of char
a: array [ 1.. 10 , ' A '.. ' Z ' ] of integer
230
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
•
•
•
•
تمرينات برنامهنويسی
• برنامهاي بنويسيد که که يک آرايه حداکثر 50عنصري را از
ورودي دريافت کرده و سپس عناصري از آرايه که اول هستند
را با صفر جايگزين کرده آرايه حاصل را در خروجي چاپ
کند.
برنامهاي بنويسيد که عددي از ورودي دريافت کرده سپس آن را به
عامل هاي اول تجزيه نمايد و حاصل را بصورت زير در خروجي
:چاپ نمايد
براي مثال) 1 ^ 7 ( * ) 1 ^ 3 ( = 21 :
231
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• برنامهاي بنويسيد که يک عدد از ورودي دريافت کرده سپس در صورت وجود صفرهاي
آن را حذف نموده ،نتيجه را در خروجي چاپ نمايد.
• برنامه اي بنويسد که يک ماتريس 5 * 5را از ورودي دريافت کرده سپس مجموع هر
سطر را انتهاي همان سطر و مجموع هر ستون را در انتهاي همان ستون چاپ نمايد.
232
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
•
برنامهاي بنويسيد که يک ماتريس حداکثر 10 * 10را از ورودي دريافت کرده
ماتريس هم بر حسب ستون و هم بر حسب سطر مرتب نموده به همراه ماتريس اولي
در يک سطر چاپ نمايد.
•برنامهاي بنويسيد که يک آرايه 200عنصري ازنوع صحيح که 150عنصرمرتب
درآن قرار ميگيرد را از ورودي دريافت کرده سپس آرايه دومي با 50عنصر را از
ورودي بخواند.
233
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 9
هاي كتابخانه ای توابع و روال
هدفهاي كلي
شناخت ساختار تابع و روال
شناخت توابع و روالهاي استاندارد براي نوعهاي صحيح
شناخت توابع و روالهاي استاندارد براي نوعهاي اعشاري و كاركتري
شناخت توابع و روالهاي استاندارد رياضي
234
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
توابع و روالهاي استاندارد را در صورت نياز در برنامه استفاده كند.
ساختار توابع و خروجيهاي آنها را تشخيص داده و در برنامه خود از آنها
استفاده كند.
ساختار روالها و خروجيهاي آنها را تشخيص داده و نتايج حاصل از آنها را
مورد استفاده قرار دهد.
توابع رياضي را براي محاسبه عبارت رياضي در برنامه بكار ببرد.
235
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ساختار تابع
در کل هدف تابع اينست که متغير يا متغيرهايي را بعنوان پارامتر از برنامه
اصلي دريافت کرد .عمل خاصي را روي پارامترها انجام داده و نتيجه را به
.برنامه اصلي برگرداند
ميباشد
:شکل کلي فراخواني توابع در برنامه اصلي بصورت زير
ساختار تابع:
) ( parameters
Name
نوع تابع
اسم تابع
Function
: Type
پارامترها
کلمه ذخيره شده
236
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
توابعي براي اعداد صحيح و اعشاري
تابع Abs
هدف :باز گرداندن قدر مطلق ( ) absoluteپارامتري که به آن ارسال ميشود:
; Function Abs ( x: Integer ): Integer
; Function Abs ( x: Real ): Real
اين تابع يک عبارت از نوع حقيقي يا صحيح را بعنوان آراگون دريافت کرده سپس
.قدر مطلق آن را محاسبه و حاصل را برگرداند
237
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Real ;
Integer ;
: = Abs ( - 191.15 ) ;
: = Abs ( - 171 ) ;
Writeln ( ' f = ' , f : 8 : 2 , ' I = ' , I ) ;
F = 191.15
238
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
I = 171
: خروجي حاصل
تابع Sin
هدف :باز گرداندن سينوس يک عدد از نوع اعشاري
ل تابع:
Sin ( X: Real ): Real
Function
ميباشد.
Xيک عبارت يا عدد از نوع اعشاري بوده و حاصل مقدار سينوس X
239
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
X : Real ;
Begin
X : = sin ( 10 ) ;
Write ( ' sin ( 10 ) = ' , x :8 : 2 ) ;
End.
240
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Cos
هدف :باز گرداندن کسينوس يک عدد از نوع اعشاري.
ل تابع:
cos ( X: Real ): Real
Function
ميباشد
Xيک عبارت با عدد از نوع اعشاري بوده و حاصل مقدار کسينوس X
241
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
r
X : Real ;
gin
X : = cos ( 10 ) ;
Write ( ' cos ( 10 ) = ' , x : 8 : 2 ) ;
d.
242
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع ArcTan
هدف :بازگرداندن آرک تانژانت يک عدد از نوع اعشاري
ل تابع:
ArcTan ( X: Real ): Real
; Function
ميباشد.
Xيک عبارت يا عدد از نوع اعشاري بوده حاصل مقدار آرک تانژانت X
243
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
; X : Real
Begin
; ) X : = ArcTan ( 10
; ) Write ( ' ArcTan ( 10 ) = ' , x : 8 : 2
End .
توجه :در صورتي که در توابع مثلثاتي زاویه از نوع درجه ارائه شود
ميتوان با فرمول زير معادل راديان آن را محاسبه کرد
:
Real = Dey * 3.14159 / 180
244
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Exp
هدف :عدد نپر ( ) … e = 2.71828را به توان يک عدد ميرساند.
شکل تابع:
; Real
Exp ( X: Real ):
Function
Xعبارت يا متغيري از نوع اعشاري بوده و حاصل تابع نيز يک عدد اعشاري ميباشد
اين تابع مقدار eبه توان Xرا محاسبه ميکند.
245
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
X : Real ;
i : integer ;
Begin
For
i:=1
to
10
do
Begin
X : = exp ( i ) ;
Writeln ( x : 8 : 2 ) ;
End ;
End .
246
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
تابع frac
برميگرداند.
هدف :قسمت اعشاري يک عدد اعشاري را
ل تابع:
frac ( X: Real ): Real
Function
Xعددي از نوع اعشاري و حاصل تابع يک عدد اعشاري که قسمت اعشاري
عدد Xاست مي باشد و بعبارت ديگر اين تابع قسمت اعشاري عدد ورودي را
ميگرداند.
به عنوان خروجي باز
247
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
r
Y , X : Real ;
gin
X : = frac ( 24.769 ) ;
Y : = frac ( - 12.75 ) ;
Write ( ' x = ' , 8 : 3 , ' y = ' , 8 : 2
nd .
X=
248
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
0.769
Y=
) ;
- 0.75
: روجي
تابع Int
هدف :قسمت صحيح يک عدد اعشاري را برميگرداند.
ل تابع:
Int ( X: Real ): Real
Function
Xيک عبارت يا متغير از نوع اعشاري و خروجي تابع فيزيک عدد
اعشاري است اين تابع مقدار صحيح يک عدد اعشاري در خروجي
نشان ميدهد.
249
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
y , x : Real ;
Begin
X : = Int ( 2.87 ) ;
Y : = Int ( - 8.76 ) ;
8.0 }
End .
250
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
{ 2.0 }
{-
تابع Ln
هدف :محاسبه لگاريتم يک عدد
اعشاري در مبناي .e
شکل تابع:
Ln ( X: Real ): Real
; Function
ميباشد.
Xيک عبارت يا متغير ازنوع اعشاري بوده وحاصل تابع فيزيک عدداعشاري
251
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
ar
X : Real ;
egin
X : = Ln ( 2.87 ) ;
{ x = 3.73767 }
Write ( ' x = ' , x : 10 : 5 ) ;
nd .
252
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Odd
هدف :فرد بودن عدد صحيح را
بررسي مي کند.
کل تابع:
odd ( X: logint ): Booleam
unction
Xيک عبارت از نوع longintاست و تابع ،فرد بودن عبارت را بررسي مي کند
اگر مقدار خروجي تابع Trueباشد Xفرد است و اگر مقدار خروجي تابع alse
باشد Xفرد نيست.
253
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
i : integer ;
n
For
i:=1
to
100
do
If odd ( i ) Then
Writeln ( ' i = ' , j : 3 ) ;
254
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Ord
ميرود.
هدف :غالبًا براي پيدا کردن کد اسکي يک متغير کاراکتري بکار
شکل تابع:
; Longint
عبارت xاز نوع کارکتري را بعنوان پارامتر دريافت
و کد اسکي آن را برمي گرداند.
اگر xاز نوع اسکالر باشد تابع بعنوان خروجي
ترتيب قرار گرفتن xرا در مجموعه
اي که ابتدا به عنوان اسکالر اعالن شده ،باز
ميگرداند.
Ord ( x: char ):
Function
255
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :
Var
do
''Z
to
; ch : char
Begin
For
' ch : = ' A
; ) Write ( ord ( ch ) : 5
End .
:خروجی
ميکند
کد اسکي' ' Aتا' ' Zرا درخروجي چاپ
ميباشد.
کد اسکي ' ' Aعدد 65
256
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع pi
هدف :عدد پي را بر ميگرداند.
کل تابع:
pi: Real
Function
اين تابع براي بازگرداندن عددي پي ( ) … 3.141592مورد استفاده قرار ميگيرد.
257
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Pred
هدف :مقدار قبل مقدار پارامتر را
بر مي گرداند.
ع
; > pred ( x ): < same type of parameter
ion
پارامتر تابع مي تواند از هر نوع باشد و با توجه به نوع پارامتر تابع نياز از
ميباشد.
ميباشد و خروجي تابع مقدار قبل از x
هم نوع
258
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Ch: = pred ( ' d ' ) ;
c'}
{ ch = '
i: = pred ( 15 ) ;
14 }
{i=
flag: = pred ( True ) ;
false }
{ flag =
i: = pred ( - 30 ) ;
31 }
{i=-
259
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
تابع Random
هدف :براي توليد عدد تصادفي
:شکل تابع
; 1) Function Random: Real
2) Function Random ( x: word ):
; word
اگر تابع Randomبه شکل يک يعني بدون آرگومان مورد
استفاده قرار گيرد يک عدد تساوي از نوع اعشاري بين صفر و يک
توليد مي کند و اگر به شکل دو بکار رود باعث توليد يک عدد تصادفي
از نوع wordکه بزرگتر يا مساوي صفر و کوچکتر از xاست خواهد شد.
260
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 و
261
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
خروجی:
تابع Round
هدف :براي گرد کردن اعداد اعشاري بکار مي رود.
تابع:
Round ( x: Real ): Longint
Function
Xيک عبارت يامتغير اعشاري بوده وخروجي تابع يک عدد ازنوع Longint
ميباشد .اين تابع Xرا به نزديکترين مقدار
ميباشد که نتيجه گرد کردن X
ميکند.
صحيح گرد
262
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 : =263Round ( 17.45 )
{ i = 18
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
تابع sqr
ميرود.
هدف :براي محاسبه مجذور يک عدد صحيح يا اعشاري بکار
شکل تابع:
; Function sqr ( x: Integer ): Integer
Function sqr ( x: Real ): Real
;
Xعبارتي يا متغييري از نوع صحيح يا اعشاري بوده و خروجي تابع فيزيک
يک عدد صحيح يا اعشاري مي باشد اين تابع مجذور Xرا بعنوان خروجي بر
ميگرداند.
264
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
i : integer ;
Begin
For
i:=1
to
10
do
Writeln ( ' I ^ 2 = ' , sqr
(I)) ;
End .
265
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع sqrt
هدف :براي محاسبه جذر يک عدد بکار ميرود.
شکل تابع:
; Real ): Real
Function sqrt ( x:
Xيک عبارت از نوع اعشاري بوده و خروجي تابع فيزيک عدد اعشاري
ميگرداند.
ميباشد اين تابع جذر Xرا بعنوان خروجي بر
266
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 .
267
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع succ
هدف :مقدار بعد از مقدار فعلي را برمي گرداند.
شکل تابعFunction succ ( x ): same type of :
; parameters
Xيک عبارت از نوع صحيح ،اولين و غيره بوده و خروجي تابع نيز از همان
ميگرداند.
نوع Xمي باشد اين تابع مقدار بعد از Xرا بعنوان خروجي بر
268
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
ch : = suce ( ' a ' )
{ ch = ' b ' }
ch : = suce ( ' A ' )
{ ch = ' B ' }
i : = suce ( 15 )
{ i = 16 }
flag : = suce ( false )
{ flag = True }
flag : = suce ( True )
{ } تعريف نشده
269
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Trunc
ميگرداند.
هدف :قسمت صحيح يک عدد اعشار را بر
شکل تابع:
; Longint
Function Trunc ( x: Real ):
Xيک عبارت يا متغير از نوع اعشاري بوده و خروجي تابع يک عدد از نوع
ميباشد .اين تابع قسمت صحيح عدد اعشاري Xرا بعنوان
Longint
ميگرداند.
خروجي بر
270
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
x , i , j : Longint ;
Begin
i : = trunc ( 12.5 ) ;
{ i = 12 }
j : = trunc ( 12.4 ) ;
{ i = 12 }
k : = trunc ( 13.5 ) ;
{ k = 13 }
Writeln ( ' I = ' , i : 5 , ' j = ' , j : 5 , '
k=',k:5) ;
End .
271
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
توابع از نوع کاراکتري
در اين بخش توابعي را بررسي مي کنيم که خروجي
آنها از نوع کاراکتري باشد.
تابع chr
ميگرداند.
هدف :معادل کاراکتري يک کد اسکي را بر
کل تابع:
chr ( X: Byte ): char
Function
ميباشد.
Xيک عبارت يا متغير از نوع بايت بوده و خروجي تابع يک کارکتر
ميگرداند.
اين تابع کد اسکي را دريافت کرده و معادل کارکتري آن را بر
272
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :
Var
; i : Byte
do
91
to
i : = 65
Begin
For
; ) ) Writeln ( chr ( I
:خروجی
End .
ميکند.
برنامه باال حروف Aتا Zرا در خروجي چاپ
273
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Upcase
هدف :براي تبديل يک کاراکتر به حرف
ميرود.
بزرگتر بکار
شکل تابع:
; char
Upcase ( ch: char ):
Function
chيک عبارت يا متغير از نوع کاراکتر بوده و خروجي تابع فيزيک کاراکتري
باشد اين تابع حرف کوچک را به حرف بزرگ تبديل کرده و بعنـــوان خروجي
ميگرداند.
حروف بزرگ را بر
274
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 }
275
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روالهاي استاندارد
در بخش هاي قبل ديديد که در توابع پارامترها به تابع ارسال مي شود و تابع نيز
ميکنند با
برميگرداند روالها نيز مشابه توابع عمل
مقداري را بعنوان خروجي
ميشود يا اعالن به
برميگردانده
اين تفاوت که خروجي روالها از طريق پارامتر
ميباشد .بنابراين روالها بدون نوع هستند
.سيستم عامل
ميباشد
روالها بصورت زير
:شکل کلي
Name
; Procedure
پارامترهاي روال
اسم روال
کلمه
276
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Dec
هدف :يک يا چند واحد از پارامتر ارسالي کم مي کند.
:شکل روال
; ) Procedure Dec ( Var X: longint
; ) Procedure Dec ( Var X: longint , N: longint
Xيک متغير از نوع longintو بصورت متغيري ميباشد اين
روال يک واحد از پارامتر ارسالي کم ميکند.
277
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
N : integer
Begin
N : = 1201 ;
Dec ( N ) ;
{ N = 1200 }
Writeln ( N ) ;
Dec ( N , 200 ) ;
{W=
1000 }
Writeln ( N ) ;
End .
278
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Exit
هدف :کنترل برنامه را به خارج از بلوک جاري منتقل مي کند.
شکل روال:
; Exit
Procedure
اين روال باعث مي شود که کنترل برنامه از بلوک جاري خارج شود .اگر اين
روال در برنامه اصلي بکار رود باعث خروج از برنامه ميشود .و اگر در يک
روال يا تابع بکار رود باعث خروج از روال يا تابع شده و کنترل برنامه به
برنامه اصلي منتقل ميشود.
279
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :
Var
:خروجی
; i , j : integer
Begin
; i : = 100
; j : = 20
; ) Dec ( i , j
; ) Write ( i
; Exit
End .
بعد از اتمام عمليات تابع Exitباعث خروج از برنامه مي شود.
•گروه 280
آموزشی مهندسی ایران
Iranian Engineering
Group
روال Halt
هدف :خاتمه دادن به اجراي برنامه
شکل روال:
; Halt
Procedure
اين روال باعث خاتمه اجراي برنامه شده و کنترل برنامه به سيستم عامل بر
ميگردد.
281
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Inc
هدف :اضافه کردن يک يا چند واحد به يک متغير
شکل تابع:
) ocedure Inc ( Var X: longint
; ) edure Inc ( Var X: longint , N: longint
Xيک عبارت يا متغير از نوع Longintمي باشد اين روال به مقدار
متغير xيک يا چند واحد اضافه ميکند.
282
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
N , i , j : integer ;
Begin
i : = 100 ;
j : = 200 ;
N : = 10 ;
inc ( i ) ;
{ i = 101 }
inc ( j , N ) ;
{ j = 210 }
Writeln (' i = ' , i , ' j = ' , j ) ;
End .
283
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Randomize
هدف :باعث تغير نحوه توليد اعداد تصادفي مي شود.
شکل روال:
; Randomize
Procedure
ميکنيم اعداد تصادفي توليد
وقتي در برنامه از تابع Randomاستفاده
شده در اجراهاي مختلف يکسان مي باشد براي جلوگيري از اين وضعيت قبل
ميبريم .تا
از استفاده از تابع Randomروال Rondomizeرا بکار
باعث توليد اعداد تصادفي متفاوت در اجراهاي مختلف گردد.
284
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
i : word ;
Begin
Randomize;
For
i:=1
to
10
do
Writeln ( Random ( 50 ) ) ;
End .
285
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهنويسي
حل چند مثال
مثال :برنامه اي بنويسيد که يک ماتريس مربع ( 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
286
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 .287{ End of program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهاي بنويسيد که يک جمله از ورودي دريافت کرده سپس حروف
: مثال
.بزرگ جمله را به حروف کوچک تبديل نمائيد
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 ] ) ;
288
End of program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
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
289 ( y ) ;
d.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:خروجي دستورات زير را محاسبه نمائيد2.
Ch: = ' A ' ;
Ch: = chr ( ord ( ch ) + 3 ) ;
Write ( ch ) ;
X: = 12 ;
Succ ( x ) ;
Ch: = ' B ' ;
Pred ( ch ) ;
Write ( x , ch ) ;
290
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهنويسي
تمرينات
-1برنامهاي بنويسيد که تعداد 1000شماره حساب بانکي 7رقمي بطور
تصادفي بين 5119432و 9981711را توليد کرده و چاپ کند.
-2برنامه اي بنويسيد تا تعداد 38عدد تصادفي صحيح بين 10تا 99راتوليد
کرده ،سپس آن را در خروجي به شکل مربع وسط صفحه نمايش چاپ کند.
-3برنامهاي بنويسيد که يک عدد 20رقمي از ورودي دريافت کرده آن
را در يک عدد تک رقمي ضرب نموده و حاصل را در خروجي چاپ نمائيد.
291
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 10
متغيرهاي كاراكتري و رشتهها )(String
هدفهاي كلي
بررسي ساختار آرايه هايي از نوع كاراكتر
معرفي نوع دادة جديد به نام رشته
مقايسه آرايه اي از كاراكتر و رشته
شناخت توابع و روالهاي استاندارد براي رشته ها
292
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
آرايهاي از كاراكترها را در برنامه بكار ببرد.
آرايهاي از كاراكترها را با رشته مقايسه كند.
اسمي افراد و غيره را با استفاده از آرايهاي از رشته مرتب نمايد.
توابع و روالهاي استاندارد مربوط به رشتهها را در برنامه خود بكار ببرد.
293
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
متغيرهايي از نوع کاراکتر
متغيرهاي کاراکتري ظرفيت پذيرش يک کاراکتر ( شامل يک رقم ،يک حرف از
ميباشند
.حروف و يا يک کاراکتر ديگر ) را دارا
ميباشد :
مقدار دهي اين متغير ها به صورت زير
; ' ch: = ' A
اگر بخواهيم متغير هاي کاراکتري را از ورودي بخوانيم بايد دقت بيشتري
به .خرج دهيم براي اينکه فضاهاي خالي کاراکتر محسوب مي شوند
294
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
.مثال :خروجي قطعه برنامه زير را تعيين کنيد
; ' Ch: = ' A
; ' C: = ' a
If ch = c Then
) ' Writeln ( ' equal
Else
; ) ' Writeln ( ' Not equal
خروجي حاصل از قطعه برنامه باال بصورت زير است:
equal
Not
295
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميتوان کاراکترها را از لحاظ اردينال (مرتبه) بصورت زير
درکل
دستهبندي کرد
:
ميشوند 1-
:رقم ها بصورت زير مقايسه
''0' < '1' < '2' < '3' < … < '9
گرفتهاند
رقمها از لحاظ کد اسکي پشت سر هم قرار
.
ر مقايسه مي شوند 2-
' < … < 'Z'< … <'a' < 'b' < … < 'z
296
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رشتهاي ( ) String
متغيرهاي
مجموعهاي از کاراکتر را يک رشته ناميده و متغير از نوع آن را
تعريف:
مينامند
.يک متغير رشتهاي
اين متغير نيز مانند ساير متغيرها در قسمت تعاريف متغيرها ( ) Varمعرفي
ميکنند.
ميشود .در تعريف يک متغير رشتهاي معموًال طول آن را مشخص
اگر طول تعيين نشود بطور قراردادي کامپايلر حداکثر طول را براي آن در نظر
ميباشد.
ميگيرد .حداکثر طول رشته 255کاراکتر
297
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نحوه تعريف متغير رشته اي بصورت زير ميباشد:
Name
طول رشته کلمه ذخيره شده
اسم رشته
298
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميتوان مقداردهي کرد:
رشتهاي را بصورت زير
متغيرهاي
Var
; ] S : string [ 10
.
.
.
Begin
.
.
; ' S : = ' pascal
; ) Write ( s
.
.
299
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
End .
رشتهاي ازدستور Readيا Readlnبصورت
متغيرهاي
براي خواندن
استفاده کرد:
توان
زيرمي
) ; Read ( s
رشتهاي اگر طول رشته ورودي از طول تعريف
هنگام خواندن متغيرهاي
شده بيشتر باشد فقط به اندازه طول تعريف شده خوانده مي شود و اگر طول
منتهياليه
رشته ورودي کمتر از طول تعريف شده باشد ،رشته ورودي در
سمت چپ متغير رشتهاي قرار گرفته و بقيه متغير رشته اي بدون محتوا
،باقي مي ماند
300
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
براي چاپ يک متغير رشتهاي نيز ازدستور Writeيا
ميتوان استفاده کرد:
Writeln
) ; Write ( s
مثال :برنامهاي بنويسيد که شماره دانشجوئي ،اسم و فاميل دانشجوئي را
.از ورودي دريافت کرده سپس در خروجي نمايش دهد
301
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
' ) ;302
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
writeln ( Id: 7 , Name ,
Family
ميشود:
آرايهاي از رشته بصورت زير تعريف
string
نوع رشته اي
of
] [ 1 .. length
ay
طول آرايه
303
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميکنيم:
آرايهاي بصورت زير عمل
براي خواندن چنين
i:=1
to
50
do
; ) ] Readln ( Name [ i
or
براي نمايش آرايه در خروجي بصورت:
For
i: = 1
to
50
do
) ] Writeln ( Name [ i
304
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نفر از ورودي دريافت کرده و آنها را برحسب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 ] ) ;
305
nd of program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :برنامهاي بنويسيد که اسم ،فاميلي و شماره دانشجوئي حداکثر
50دانشجو را از ورودي دريافت نمايد.
سپس با خواندن اسمي از ورودي ،ساير اطالعات اسم خوانده شده را در
.صورت وجود در خروجي نمايش دهد
; ] Name , Family : array [ 1 .. 50 ] of string [ 30
; id : array [ 1 .. 50 ] of longint
; ] Nam : string [ 30
306
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 : ' ) ;
307
Readln ( Nam ) ;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ) ;
308
end ;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
توابع و روالهاي کتابخانهاي براي متغيرهاي رشتهاي
تابع Concat
هدف :الحاق دو يا چند رشته به يکديگر
شکل تابع:
; string
Function concat ( S1 , S2 , … , Sn ):
Sn , … , S2 , S1متغيرهايي از نوع رشته هستند و خروجي تابع نيز
يک متغير رشتهاي است اين تابع دويا چندتابع را به هم پيوند داده ،و رشته
برميگرداند.
حاصل را
309
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
Str3 , str1 , str2 : string
: مثال
Begin
Str1 : = ' Pascal ' ;
Str2 : = ' Book ' ;
Str3 : = Concat ( Str1 , Str2 ) ;
write ( Str3 ) ;
End.
. نشان داده خواهد شدPascal Book عبارت،با اجراي برنامه فوق
310
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Copy
هدف :استخراج يک زير رشته ( ) substringاز يک رشته
n copy (S:string ; Index:Integer; count: Integer): strin
يک عبارت يا متغير رشته اي که مي خواهيم از آن زير رشته اي که نقطه S
مي باشد جدا کنيم .لذا زير رشته Countو طول آن Indexشروع آن
ميباشد Countحاصل ،يک رشته که طول آن به اندازه
.است ،
311
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
Str , str1: string ;
Begin
Str: = ' Pascal Book ' ;
Str1: = Copy ( Str , 7 , 4 ) ; { Str1 =
Book }
write ( Str1 ) ;
End.
312
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Delete
هدف :حذف يک زير رشته از يک رشته
شکلروال:
;Procedure delete (Var str: string
) ; Index:integer;length: integer
Sيک متغر رشته اي Index ،يک عبارت يا متغير صحيح و Lengthنيز
ميباشد .روال Deleteيک زير رشته را از يک
ک عبارت يا متغير صحيح
ميکند اين روال از محل Indexبطول Lengthاز رشته Str
شته حذف
ميشود.
ميکند و رشته حاصل بعنوان خروجي روال برگردانده
ف
313
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
St : string ;
Begin
St: = 'Pascal.Book' ;
Delete ( St , 7 , 5 ) ;
writeln ( St ) ;
End.
.ميباشد
Pascal خروجي حاصل از برنامه فوق
314
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Insert
هدف :درج ( وارد کردن ) يک رشته در يک رشته ديگر
شکل روالProcedure Insert ( Str1: string ;Var :
) ; Str2: string ; Index: Byte
Str1عبارت يا متغير رشته اي Str2 ،متغير رشته اي و Indexعبارتي
ميباشد .روال ، Insertرشته Str1رادر رشته Str2
دد از نوع صحيح
ميکند و رشته حاصل خروجي روال خواهد بود.
ز خانه Indexدرج
315
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
Str1 , str2: string ;
Begin
Str1: = ' Pascal 7' ;
Str2: = ' Turbo' ;
Insert ( Str1 , Str2 , 6 ) ;
End.
. خواهد بودTurbo pascal 7 خروجي حاصل از برنامه باال
316
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Length
هدف :محاسبه طول رشته
شکل تابع:
; Integer
Function length ( Str: string ):
ميباشد.
Strيک عبارت رشته اي بوده و خروجي تابع يک عدد صحيح
ميگرداند.
اين تابع طول رشته ورودي را محاسبه و بعنوان خروجي بر
317
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Var
St: string ;
n: integer ;
Begin
St: = 'Turbo Pascal 7' ;
n: = length ( S4 ) ; { n = 14 }
Write ( ' The length of string
is: ' , n ) ;
End.
318
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع Pos
هدف :براي جستجوي يک رشته داخل رشته ديگر
شکل تابعFunction pos ( Str1: string ; Str2: :
; string ): Byte
Str1يک عبارت يا متغير رشته اي و Str2نيز يک عبارت يا متغير
ميباشد و خروجي تابع يک عدد صحيح مي باشد .اين تابع محل
رشته اي
ميگرداند.
اولين وقوع رشته Str1در رشته Str2را بعنوان خروجي بر
319
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :
Var
; Str1 , Str2: string
; i: integer
Begin
; ' Str1: = ' Book
; ' Str2: = ' Pascal Book
= i: = Pos ( Str1 , Str2 ) ; { i
}8
; ) Write ( ' i = ' , i
End.اول
نکته :توجه کنيد که اگر عمل جستجو با موفقيت انجام نشود ( يعني رشته
ميگرداند
.در رشته دوم وجود نداشته باشد ) تابع مقدار صفر بر
320
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Str
هدف :براي تبديل عدد به يک رشته عددي بکار مي رود.
والocedure Str( I: integer: format , Str: string ) :1 :
; Procedure Str ( F: Real: format , Str: string ) :2
درشکل I ،1يک عبارت يا متغيرعددي بوده و Strيک متغير رشتهاي
ميباشد اين روال يک عدد صحيح با فرمت مشخص را به يک رشته عددي
تبديل مي کند.
ميباشد.
درشکل F ، 2يک عبارت يا متغير رشتهاي و Strيک متغير رشتهاي
321
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
Number , Str: String ;
: مثال
Begin
Str ( 543: 5 , Str ) ;
{ Str = '
543' }
Str ( 12.25: 7: 2 ,Str ) ;
{ Str
= ' 12.25' }
Str ( 127: 3: Str ) ;
{ Str =
'127' }
Str ( 3.1239: 7: 3 , Str ) ;
{ Str = ' 3.124' }
End.
322
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روال Val
هدف :تبديل يک رشته عددي به يک عدد
روال; Procedure Val ( S: String ; Var N: integer :1 :
; ) Var Error: integ
edure Val ( S: String ; Var N: Real ; Var Error: integ
Sيک عبارت يا متغير رشته اي N ،يک متغير از نوع صحيح يا اعشاري و
Errorنيز يک متغير از نوع صحيح مي باشد .اين روال يک رشته عددي را
به يک عدد صحيح يا اعشاري تبديل مي کند و آن را توسط متغير N
برميگرداند .اگر عمل تبديل بطور صحيح انجام شود ،مقدار متغير Error
ميکند.
برابر صفر در غير اينصورت محل وجود اشکال را مشخص
323
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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}
324
End.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ارائه چند مثال در مورد رشتهها و کاراکترها
مثال :برنامهاي بنويسيد که يک جمله از ورودي دريافت کرده سپس در
صورتي که کلمه ISوجود داشته باشد آنها را به areتبديل نمايد و در
نهايت رشته حاصل را در خروجي نمايش دهد.
توجه کنيد که ممکن است بيش از يک بار کلمه ISتکرار شده باشد
در اينصورت همه کلمات ISرا با areتبديل کند.
325
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ) ;
326
end ;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ) ;
327
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
328
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:•خروجي قطعه برنامه زير را تعيين کنيد
Var
S1: string ;
i: integer ;
Begin
S1: = 'ABCDEF' ;
For
i: = 1
to
length ( S1 ) ;
Delete ( S1 , i , 1 ) ;
Writeln ( S1 ) ;
.End
329
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:•خروجي قطعه برنامه زير را تعيين کنيد
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 ) ;
330
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ;
331
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات برنامهنويسی
•برنامهاي بنويسيد که يک پاراگراف را از ورودي دريافت کرده
( حداکثر 10خط ) سپس:
.الف) تعداد کلمات هر سطر را شمرده و انتهاي سطر نمايش دهد
.ب) تعداد حروف صدا دار را شمرده چاپ نمايد
.ج) تعداد خطوط برنامه را شمرده در خروجي چاپ کند
.د) تعداد جمالت هر خط را محاسبه و در سطر هاي جداگانه نمايش دهد
332
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
•برنامهاي بنويسيد که يک عدد در مبناي مشخص را از ورودي دريافت
کرده سپس آن را به مبناي mکه از ورودي خوانده مي شود ببرد.
•برنامهاي بنويسيد که يک پاراگراف را از ورودي دريافت کرده
کلمات تکراري هر سطر را حذف نموده و پاراگراف حاصل را بهمراه
پاراگراف اوليه در خروجي با پيغام مناسب نمايش دهد.
333
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
•
برنامهاي بنويسيد که دو عدد 20رقمي ( بصورت رشته بايد خوانده شود )
را از ورودي دريافت کرده سپس مجموع و حاصل ضرب اين دو عدد را
محاسبه و در خروجي با پيغام مناسب چاپ نمايد.
•
برنامهاي بنويسيد که يک رشته از ورودي دريافت کرده
سپس کلمات داخل آن را بصورت عمودي کاراکتر به کاراکتر نمايش دهد:
•
برنامهاي بنويسيد که يک پاراگراف با حداکثر 5خط را از ورودي دريافت
نمايد .سپس مجموع ارقام يا اعداد ( در صورت وجود ) هر خط را محاسبه
نموده در انتهاي همان سطر نمايش دهد.
334
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 11
برنامههاي فرعي
هدفهاي كلي
شناخت اجزاء تشكيلدهنده توابع و روالها
بررسي انواع پارامترها و متغيرها در برنامههاي فرعي
شناخت تفاوتهاي روالها و توابع
معرفي مزاياي استفاده از زير برنامهها
335
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
برنامه خود را به چندين زيربرنامه تقسيمبندي نمايد.
زيربرنامهها را با توجه به قوانين موجود ،در ساختار برنامه جا دهد.
باتوجه به مزاياي استفاده از آنها را در برنامه خود بكار ببرد.
336
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روالها
روالها نوعي از برنامههاي فرعي هستند ،که به طور مستقل و جداگانه وظيفه
ميدهند .روال ها در صورت نياز
يا وظايف خاصي از برنامه اصلي را انجام
اطالعات خود را از طريق پارامترها دريافت و همچنين در صورت نياز نتايج را
ميگردانند .پارامترها در حقيقت خطوط
از طريق پارامترها به برنامه اصلي باز
،ارتباطي بين برنامه اصلي و برنامههاي فرعي هستند .پارامترها باعث مي شوند
که توابع و روال ها روانتر عمل کنند ،زيرا آنها به برنامه هاي فرعي اين قابليت را
337
دادههاي مختلفي را مورد پردازش قرار دهند
.مي دهند که با هر فراخواني ،
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:شکل کلي روالها بصورت زير مي باشد
Procedure
Name
( parameters
list )
کلمه ذخيره ش
اسم روال
ليست پارامترها
Var
{ List of locad variable }
Begin
.
.
{ Procedure Body }
.
.
338
End ; { End of procedure }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در حالت کلي روال ها در برنامه اصلي بصورت زير ظاهر ميشوند:
; اسم برنامه اصلي Program
; تعاريف برنامه اصلي
..... Procedure
;
Begin
} { main program
.
.
.
فراخواني روال ها
.
.
339
} End. { End of program
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پارامترها با توجه به محل وقوع آنها به دو دسته تقسيم مي شوند:
.1پارامترهاي صوري ( ) Formal parameters
2.پارامترهاي واقعي ( ) Actual parameters
از پارامترهاي صوري هنگام اعالن روال و از پارامترهاي واقعي هنگام
ميشود .
فراخواني روال ها استفاده
340
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پارامترهاي صوري در حالت کلي 2نوعند ،که با توجه به نوع روال و
تصميم برنامه نويس مورد استفاده قرار مي گيرند:
پارامترهاي مقداري ( ) Value parameters
پارامترهاي متغيري ( ) Variable parameters
341
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پارامترهاي مقداري ( ) Value parameters
پارامترهاي مقداري ،پارامترهايي هستند که مقدار متغيرهاي فرستاده شده از
برنامه اصلي را دريافت مي کنند و وظيفه آنها فقط عبور دادن مقدار به روال
نمييابد
ميباشد .لذا تغیيرات پارامترهاي مقداري در روال به برنامه اصلي انتقال
پارامترهاي مقداري بصورت زير تعريف مي شوند :
Name ( var1 : type ; var2 : type , . . .
وع مقداري
اسم روال
edure
کلمه ذخيره شده
342
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: به برنامه زير توجه کنيد: مثال
ram
main
x2 , y1 , y2 : integer
ure test (A1,A2,B1,B2:integer);{formal param
{ main }
x1 , x2 , y1 , y2 ) ; { Actual parameters }
End of program }
343
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
نکته :پارامترهايي که در روال بکار برده مي شود ،هيچ ارتباطي به پارامترهاي
ارسالي از برنامه اصلي ندارند و فقط مقادير اين متغيرها از برنامه اصلي
ارسال مي شود .لذا اسامي پارامترهاي صوري ممکن است هم اسم با
پارامترهاي واقعي برنامه اصلي انتخاب شوند ،اين به معناي اين نيست که
.اين پارامترها ( پارامترهاي صوري ) همان پارامترهاي واقعي هستند
در مثال باال اين تناظر برقرار است:
پارامترهاي واقعي
A1
A2
B1
B2
متناظر است با
پارامترهاي صوري
X1
X2
Y1
Y2
344
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
متغيرهاي … Var2 , Var1 ,پارامترهاي مقداري هستند .توجه کنيد ،که
اين پارامترها صوري هستند و نوع و ترتيب آنها بايد با نوع و ترتيب
پارامترهاي واقعي در تناظر يک به يک باشند.
345
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: به برنامه زير توجه کنيد: مثال
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 }
346
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
همانطور که مالحظه مي کنيد ،روالي بنام testبا 4پارامتر مقداري
در برنامه استفاده شده است .متغيرهاي y2 , y1 , x2 , x1از برنامه
اصلي به روال testارسال شده و بترتيب مقادير اين متغيرها در
متغيرهاي با همان نوع در B2 , B1 , A2 , A1قرار مي گيرند.
347
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پارامترهاي متغيري ( ) Variable parameters
يك پارامتر متغيري ،تغييرات يك پارامتر واقعي را بعنوان خروجي به برنامه
برميگرداند .تفاوت اين گونه پارامترها با پارامترهاي مقداري در ارسال
اصلي
ميباشد .وقتي نياز است ،كه نتايج روال به
تغييرات ايجاد شده در پارامترها
ميكنند
.برنامه اصلي برگردد ،از پارامترهاي متغيري استفاده
ميباشد:
اعالن پارامترهاي متغيري به صورت زير
… Name ( var id1 : type ; var id2 : type ,
ست پارامترهاي متغيري
اسم رواال
كلمه
ميباشند كه نتايج روال ،توسط
تغيرهاي id1 , id2و … پارامترهاي متغيري
ميشود.
آنها به برنامه اصلي بازگردانده
348
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
و ميانگين دو عدد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);
349
WriteLn('The Sum is= ', sum:8:2 ,
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
پارامترهاي واقعي و صوري عبارتند از:
پارامتر واقعي
Num1
Num2
sum
ave
متناظر است با
پارامترهاي صوري
Num1
Num2
Total
Average
Num1 , Numپارامترهاي مقداري و sum , aveپارامترهاي متغيري
ميشود.
يباشند ،كه توسط آنها نتايج به برنامه اصلي برگردانده
350
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
متغيرهاي محلي و سراسري ( )Local and Global Variable
در برنامههاي فرعي دو نوع متغير عالوه از پارامترها مورد استفاده قرار
ميگيرند .اين متغيرها متغيرهاي محلي يا متغيرهاي سراسر هستند.متغيرهاي
محلي ،متغيرهايي هستند كه در بالك مربوط به خود قابل استفاده هستند .ولي
ميباشند
.متغيرهاي سراسري در تمام برنامههاي فرعي قابل دسترس
ميشوند
متغيرهاي محلي در داخل برنامههاي فرعي در قسمت تعاريف معرفي
.و در خارج از روال قابل دسترسي نيستند
351
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
. روالي براي محاسبه مجموع و ميانگين دو عدد بنويسيد: مثال
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}
352
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميباشند .براي فراخواني روال
در مثال باال sum , Aveمتغيرهاي محلي
) ;CalcSumAve(x.yكه درآن x.yدو متغير ازنوع Real
ميباشند .به شكل زيرتوجهكنيد:
پارامترهاي صوري
پارامترهاي واقعي
X
Num1
Num2
Y
متغيرهاي محلي
Sum
Ave
353
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
. خروجي برنامه زير را تعيين كنيد: مثال
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}
خروجي برنامه باال بصورت زير است:
a354=16 b=2 c=5
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روالها معموًال به سه شكل ظاهر ميشوند:
بكارگيري روالهاي بدون پارامتر
بكارگيري روال همراه پارامترهاي با خاصيت ورودي
بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي
355
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روالهاي بدون پارامتر
بكارگيري
(بينياز از مقادير برنامه اصلي) در
گاهي الزم است تا برنامه فرعي كامًال مستقل
بخشهاي مختلف يك برنامه اجرا شود .در اين صورت نياز به استفاده از پارامتر
ميكنند
ميباشد و از روالهاي بدون پارامتر استفاده
بيمفهوم
.
پيغامهاي خاصي را در قسمتهاي مختلف برنامه نمايش
غالبًا زمانيكه بخواهيم
پيغامها را در يك روال قرار داده و در صورت نياز ،روال
دهيم ،اين
ميكنيم.
مربوطه را فراخواني
356
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
.ميشود
بدون دريافت پارامتري فراخوانيHead روال: مثال
Program
Procedure
Begin
Example ;
Head ;
WriteL('Name
Family
Age
No');
WriteLe('……………………………...');
End;
Begin{Main}
WriteLn( ' open university ' ) ;
Head;
End.
357
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
بكارگيري روال همراه پارامترهاي با خاصيت ورودي
همانطور كه قبًال اشاره كرديم ،هدف از بكارگيري پارامترها انتقال مقادير از
ميباشد .اگر اين انتقال يك طرفه باشد يعني فقط از
برنامه اصلي به روالها
برنامه اصلي به روال باشد ،اين نوع پارامترها فقط خاصيت ورودي خواهند
داشت( .قبال در اين مورد توضيح داده شده است) در اين نوع روالها از
ميكنند
.پارامترهاي مقداري استفاده
358
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
. را درخروجي چاپ نمايد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) ;
359
. {End of program}
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
بكارگيري روال همراه پارامترهاي با خاصيت ورودي و خروجي
دادهها از
در اين نوع روالها پارامترها دو خاصيت مهم دارند يكي انتقال
برنامه اصلي به روال و ديگري انتقال يا ارجاع نتايج از روال به برنامهاصلي
ميكنند
ميباشد .در اين نوع روالها از پارامترهاي متغيري استفاده
.
360
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :روالي بنام changeبنويسيد كه توسط آن دوعدد بعنوان پارامتر
دريافت كرده ،مقادير اين دو متغير را جابجا نموده و نتيجه را در برنامه
اصلي چاپ نمايد.
; Program Example
Var
; A , b: integer
Procedure change (var x , y:
; )integer
var
;temp:integer
Begin
;Temp:=x
;X:=y
;Y:=temp
361
;End
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begin { Main }
ReadLn( a , b ) ;
Change( a , b );
WriteLn (' a= ' , a , ' b= ' , b ) ;
End.{End of program}
362
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ارتباط روالها با يكديگر
در پاسكال زير برنامهها نه تنها از طريق برنامه اصلي بلكه از داخل يكديگر
ميشوند
نيز .فراخواني
روالها از داخل يكديگر تابع قوانين كلي زير است:
فراخواني
قانون اول
قانون دوم
قانون سوم
363
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
قانون اول
ميتوان ،دسترسي
از هر برنامه (اصلي يا فرعي) به برنامه فرعي در صورتي
داشت ،كه در بخش تعاريف آن برنامه (اصلي يا فرعي) قرار داشته باشد.
برنامههاي فرعي
ميتواند ،به كليه
بطور مثال در شكل زير برنامه اصلي M
p1,p2و… كه در بخش تعاريف برنامه اصلي قرار دارند ،مراجعه كند
364
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Main
برنامه
اصلي
Proc1
Proc2
برنامه هاي فرعي
.
.
.
.
ProcN
365
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
rogram Main;
ar
……..
rocedure proc1;
ar
……..
Begin
………
End;
rocedure proc2;
Var
………
Begin
……
nd;
Begin {Main}
Proc1;
Proc2;
366
End.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: به برنامه زير توجه كنيد: مثال
شدهاند .لذ
روالهاي proc1 , proc2داخل برنامه اصلي Mainتعريف
ميتوان در برنامه اصلي به آنها دسترسي پيدا كرد.
براحتي
روالهاي معمولي
ميتوانند قرار بگيرند .دقيقًا مثل
روالها خود نيز داخل هم
ا اين تفاوت كه در داخل روال بايد تعريف شوند .به اينگونه روالها ،اصطالحًا
ميگويند.
روالهاي متداخل يا تودرتو
367
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
قانون دوم
روالها در بخش تعاريف يك برنامه به موازات يكديگر تعريف شوند و
اگر
روالهاي بعدي امكان رجوع به روالهاي قبلي وجود
نه در داخل هم ،در
ميتوان دسترسي پيدا كرد كه قبًال تعريف
خواهد داشت .بعبارت ديگر به روالي
شده باشد.
368
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميتوان
بطور مثال اگر p1,p2,p3سه روال باشند دراينصورت
بصورت زيرعمل كرد:
برنامه اصلي
Main
P1
روال ها
در شكل باال چون p2قبًال معرفي
ميتوان آنرا داخل p3
شده است
فراخواني كرد.
P2
P3
P2
369
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
قانون سوم
برنامهأي بصورت متداخل باشند ،در اينصورت
روالها در بخش تعاريف
اگر
شده،
ميتوان به روالهاي بيروني كه قبًال تعريف
از روال دروني
مراجعه كرد و همچنين از روال دروني به روالهاي بيروني كه به موازات
ميتوان دسترسي پيدا كرد.
يكديگر قرار گرفتهاند ،نيز
روالهاي p2,p3دسترسي
ميتواند به
طور مثال در شكل زير روال p1
روالهاي p2 , p3مراجعه كند
ميتواند به
پيدا كند .وهمچنين روال دروني p4
370
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامه اصلي
Main
P3
روال ها
P2
P1
371
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
اعالن روالها به روش forward
ميتوان در روال ديگر استفاده كرد،
همانطور كه قبًال اشاره كرديم از روالي
كه قبًال تعريف شده باشد .در توربوپاسكال نقيصه فوق به كمك اعالن
forwardقابل حل است .بدين صورت كه اگر روالي به هنگام تعريف با
ميتواند،
اعالن forwardهمراه باشد ،بدون رعايت از پيش تعريف شدن
در روالهاي ديگر ظاهر شود.
372
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميباشد:
شكل اعالن به روش forwardبصورت زير
; ) Name ( parameters
كلمه ذخيره شده
Procedure
; forward
اسم
ليست پارامترها
كلمه ذخيره شده
روال
373
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ogram forward_Main ;
r
………
ocedure
proc3 ; forward ;
ocedure
proc1;
r
……..
gin
………
d;
ocedure
proc2;
r
………
gin
………
proc3;
……
d; 374
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مثال
Procedure
proc3;
var
……..
Begin
…….
End;
Begin {Main program}
………
proc1;
proc3 ميكنيد با اعالن روال
همانطور كه مالحظه
proc2;
ميتوانند به آن
بقيه روالها،forward بصورت
proc3;
.دسترسي پيدا كنند
………
End. {End of program}
375
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
توابع ()Functions
روالها،
ميباشند .توابع مانند
نوع ديگري از برنامههاي فرعي ،توابع
ميتوانند ،تعدادي
روالها
پيمانههاي مستقلي هستند .با اين تفاوت كه
خروجي داشته باشند ،در حالي که توابع فقط يك خروجي دارند .در روالها
معموًال
ميشود .ولي
خروجيها توسط پارامتر به برنامه اصلي ارجاع داده
ميگيرد.
در توابع اينكار به نحو ديگر انجام
376
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميباشد:
شكل كلي اعالن يك تابع بصورت زير
Function Name ( List Of Parameters ) :
; Function Type
نوع تابع
اسم تابع
ليست پارامترها
کلمه ذخيره شده
377
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:نکته
ميتواند ،يك خروجي داشته باشد .نوع خروجي تابع ،همان نوع تابع
تابع فقط
ميشود .لذا با توجه به نوع خروجي تابع ،نوع تابع تشخيص داده
محسوب
ميشود .ذكر اين نكته خالي از لطف نيست كه ،نوع پارامترهاي صوري توابع
برنامههاي فرعي هستند كه فقط يك
معموًال مقداري هستند چرا كه توابع نوعي
برميگردانند .لذا استفاده از پارامترهاي از نوع متغيري پسنديده
خروجي
نميباشد( .اشكال كامپايلري در توربوپاسكال ندارد ولي در پاسكال استاندارد
اين كار اشكال كامپايلري دارد).
ميشود .توابع مثل روالها بعد
مقدار خروجي توابع توسط اسم تابع برگردانده
ميشود
.از قسمت تعاريف برنامه اصلي ظاهر
378
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:ميباشد
شكل كلي توابع بصورت زير
Name ( Parameters ) :
Function
Type ;
Var
………..
Begin
……………..
……………..
……………..
Name := Resualt Of
Function ;
End ;
379
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميرسد:
توجه به نكات زير در بكارگيري توابع ضروري بنظر
.تمام پارامترهاي تابع بايد از نوع مقداري باشند
نوع داده نتيجه تابع در انتهاي عنوان تابع و بعد از ليست پارامترهاي صوري
ميگيرد
.قرار
ميشود
.در بدنه تابع ،خروجي تابع با نسبت دادن مقدار به نام تابع مشخص
380
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
381
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ناحيه دادهها بعد از فراخواني بشكل زير ميباشد:
ناحيه داده هاي اصلي
پارامترهاي صوري
M
متغيرهاي محلي
P
I
Factناحيه داده هاي
پارامترهاي واقعي
N
نتيجه تابع
?
نتيجه تابع
?
382
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
توابع بازگشتي (Recursion
)Functions
پيمانهاي كه
ميتواند ،خودش را فراخواني نمايد.
در پاسكال يك تابع يا روال
ميكند يك پيمانه بازگشتي نام دارد .اين نوع توابع در
خودش را فراخواني
ميكنند .اين فراخواني تا برقراري يك
بدنه خود ،خودشان را فراخواني
ميكند .سپس
ميشود ،ادامه پيدا
شرط خاص كه غالبًا به يك عدد ثابت ختم
ميشود و در نهايت نتيجه تابع حاصل
مقدار تابع از پايين به باال محاسبه
ميشود
.
383
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميكند ،مقادير فعلي متغيرهاي خود
هنگامي كه تابع بازگشتي به خود مراجعه
ميدهد ،اگر بازگشت به تابع
را در محلي از حافظه بنام پشته ( )stackقرار
بازگشتي مجددًا صورت گيرد ،مقادير فعلي متغيرها مجددًا بدنبال مقادير قبلي
ميگيرند .هنگامي كه شرط پاياني در
و اصطالحًا در پشت مقادير اوليه قرار
تابع بازگشتي رخ مي دهد ،در اولين بازگشت مقاديري را كه هنگام مراجعه
ميدهد و بهمين
به خود ،در پشته نگهداري كرده ،مجددًا در دسترس قرار
محاسبه شود.
ميشود تا مقدار تابع
بازگشتهاي بعدي اين عمل تكرار
ترتيب در
384
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميدهد.
شكل زير نحوه قرار گفتن مراجعههاي يك تابع بازگشتي به پشته را نمايش
شرط پاياني
مقادير متغيرها درآخرين بازگشت به تابع
.
.
.
.
.
مقادير متغيرها در سومين بازگشت به تابع
مقادير متغيرها در دومين بازگشت به تابع
مقادير متغيرها در اولين بازگشت به تابع
385
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ترتيب دسترسي به مقادير هنگام بازگشت از تابع بازگشتي از باال به پايين ميباشد و
ميتوان آنرا بصورت زير نمايش داد:
مقادير متغيرها درآخرين بازگشت به تابع
.
.
.
.
.
مقادير متغيرها در سومين بازگشت به تابع
مقادير متغيرها در دومين بازگشت به تابع
مقادير متغيرها در اولين بازگشت به تابع
386
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهأي بنويسيد كه با استفاده از توابع بازگشتي فاكتوريل عدد صحيح: مثال
. را محاسبه نمايد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
387
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميباشد:
در برنامه باال ترتيب قرار گرفتن مقادير در پشته بصورت زير
N=1
Fact := 1
) 2 * Fact ( 1
) 3 * Fact ( 2
) 4 * Fact ( 3
N=5
) Fact ( 4
* 5
388
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابعي براي محاسبه بزرگترين مقسوم عليه مشترك دو عدد صحيح: مثال
. بنويسيدN , M
Function
GCD ( N , M: integer ) :
Integer ;
Begin
If ( N <= M ) and ( M Mod N =
0 ) Then
GCD:= N
Else
GCD:= GCD ( M ,N mod M ) ;
End ;
389
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
روالها
مقايسه توابع و
روالها هر دو برنامههاي فرعي هستند ،كه بطور مستقل وظايفي را بر
توابع و
ميباشند كه عبارتند از
:عهده دارند .ولي در اين ميان از بعضي جنبهها متفاوت
روالها از طريق عبارات روال فراخوانده
نحوه فراخواني آنها با هم متفاوت است.
ميشوند ،درصورتي كه فراخواني تابع توسط عبارات مقايسهأي و يا تخصيص
ميگيرد
.نتيجه به يك متغير صورت
هنگام اعالن يك تابع ،نوع تابع يا نوع نتيجه حاصل از تابع بايد ذكر شود ،در 2.
روالها نيازي به اين كار ندارند
.صورتي كه
ميتوانند ،چندين خروجي 3.
روالها
برميگردانند ،ولي
توابع فقط يك خروجي
390ها
روال
ميشود ولي
برگردانند .درضمن نتيجه توابع توسط اسم تابع فرستاده
برميگردانند
.از طريق پارامترها ،نتايج را
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايهها به توابع و روالها
طريقه ارسال
نميتوانيم
ميباشند ،لذا براي ارسال آنها
دادهها
مجموعهأي از
آرايهها خود
نميتوان آنها
از روش معمولي ارسال پارامترها استفاده كنيم .و بطور مستقيم
را به برنامههاي فرعي انتقال داد .براي ارسال آرايهها به عنوان پارامتر به
ميكنند .دستور Typeقبل از
برنامههاي فرعي از دستور Typeاستفاده
ميرود و توسط اين دستور در واقع يك نوع
تعاريف برنامه اصلي بكار
دادههاي
ميتوان
سادهسازي
ميشود .و با اين
سادهسازي در تعاريف فراهم
ساخت يافته را به برنامههاي فرعي منتقل كرد.
391
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فرم كلي دستور Typeدر بخش تعاريف بصورت زير است:
تعريف داده ساخت يافته
= شناسه
Type
ميكنيم:
براي مثال يك ارايه از نوع صحيح را تعريف
integ
array [1…100] of
= No
; Type
ميشود .اگر بخواهيم متغيري
در اينصورت تعريف آرايه به No ،نسبت داده
ميكنيم:
از نوع آرايه باال تعريف كنيم ،آنرا از نوع Noتعريف
ar
; Number: No
392
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ثال :برنامهاي بنويسيد كه يك آرايه حداكثر 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
393
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
While
( I <= N ) And ( flag ) do
Begin
If b[ I ] = x Then
Begin
Index:= I ;
Flag:=
FALSE ;
End ;
Inc ( I ) ;
End ;
Search:= Index ;
End ;
{*********************************************
} 394
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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 ) ) ;
395{ End
End.
Of Program }
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
• روال Downرا در نظر بگيريد:
cedure
; ) Down ( N: Integer
in
While N > 0 do
Begin
; ) Write ( N: 3
; ) Dec ( N
; End
;
ميشود
ف) وقتي روال بصورت ) down (5فراخواني شود ،چه چيزي چاپ
ب) مقدار پارامتر واقعي Nبعد از اجراي روال چيست؟
396
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
• تابع بازگشتي زير را در نظر بگيريد:
ion
MyStery ( M , N: Integer ) : integer
If
N = 1 Then
MyStery:= 1
Else
; ) MyStery:= M * MyStery ( M , N – 1
} { End Of Function
ف) تابع بازگشتي باال را به ازاء مقادير N=4 , M=5فراخواني كنيد.
ب) تابع بازگشتي باال را به ازاء مقادير N=5 , M=3فراخواني كنيد.
397
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات برنامهنويسي
برنامهاي بنويسيد كه اطالعات حداكثر 100دانشجو كه عبارتند از:
Name
Familyفاميلي
اسم
دانشجوئي
را از ورودي دريافت كرده سپس:
الف) توسط روالي بنام sortاطالعات را برحسب شماره دانشجوئي مرتب كند.
St_Noشماره
ب) توسط تابعي بنام searchشماره دانشجوئي فردي را از ورودي دريافت
نمايد ،در صورتي كه شخص موردنظر در ليست باشد ،ساير اطالعات آنرا
398
نمايش دهد.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايهأي از نوع صحيح با حداكثر 100عنصر را در نظر بگيريد.
برنامهأي بنويسيد كه ابتدا آرايه را از ورودي دريافت كرده سپس با استفاده از
يك تابع بازگشتي بيشترين مقدار آرايه را محاسبه نمايد.
ميباشد را درنظر
عنصري كه شامل اسامي افراد
دو آرايه مرتب حداكثر100
بگيريد.
برنامهاي بنويسيد كه نخست دو آرايه را از ورودي دريافت نموده سپس توسط
روالي بنام mergeاين دو آرايه در هم ادغام نموده و در آرايه سومي قرار دهد
399
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 12
مجموعهها و دادههاي شمارشي
هدفهاي كلي
مفهوم مجموعه و دادههاي شمارشي در زبان پاسكال
مجموعه و دادههاي شمارشي به عنوان متغير
برنامه
استفاده از مجموعهها و دادههاي شمارشي در
400
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
مفهوم مجموعه و دادههاي شمارشي را درك كند.
بتواند در صورت لزوم از مجموعه و دادههاي شمارشي استفاده كند.
401
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مقدمه
دادهها كه از نظر نوع يكسان هستند ،در غالب مجموعه و يا
تعداد محدودي از
ميشوند كه مفهومي شبيه در رياضيات دارند
گونههاي شمارشي نگهداري
.
براي استفاده در مواردي خاص نظير روزهاي هفته و يا نوع ماشينها و ...كه
ميباشند ،استفاده از
دادههاي پشت سر هم
ترتيبي هستند و يا يك مجموعه از
ميكند .هر چند وجود آنها به عنوان
اين ساختارها كار را بسيار راحت
الزامينيست .بهرحال به عنوان ابزارهايي از زبان پاسكال
دادهاي،
ساختارهاي
قابلفهم و
ميرسند و مسئله را به صورتي
هستند كه در مواقعي ،ضروري بنظر
ميكند
.راحت حل
402
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مجموعهها ()Sets
در زبان پاسكال مجموعه ،مفهومي شبيه به مفهوم مجموعه در رياضيات جديد
دارد .متغيري است كه شامل ليستي از اعداد صحيح ،كاراكتر ،بولين و يا از نوع
ميباشد .از
ميباشد كه داراي تعداد عناصر محدود به حداكثر 256تا
شمارشي
دادههايي از
اين جهت بسيار شبيه به يك آرايه در زبان پاسكال است كه شامل
ميباشد ،ولي آرايه داراي عناصر محدودي نيست و در ضمن مانند
يك نوع
نميشود
.آرايه تعريف
403
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعريف مجموعه
ميكنيم:
براي تعريف يك مجموعه از كلمات كليدي set ofبصورت زیر استفاده
Type
;Name= Set of Type Of Set
:مثال
Type
;Digit_type = 0..9
Digit = Set of
Digit_type
404
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال:
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';
405
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مجموعهها
عمليات روي
در رياضيات عمل عضويت وجود دارد كه به اين معني است كه متغيري
ميباشد يا خير .اين عمل در زبان پاسكال با كلمه كليدي
عضو مجموعه
in
ميگيرد .اگر عضويت صحيح باشد جواب Trueوگرنه
صورت
False
ميتوان با عالمات شرطي =،>< ،
ميباشد .همچنين دو مجموعه را
ميباشند.
<= و >= مقايسه كرد كه همگي داراي خروجي درست يا غلط
وليعالمات شرطي < و > در مورد مجموعهها كاربردي ندارد.
406
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
a: set of byte;
مثال:
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
407
write([1,2] <= [1,2,3]);
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مجموعهها
عملگرها روي
ميتوانيم مجموعهها را با هم اجتماع ،اشتراك و تفاضل كنيم كه
در رياضيات
ميباشد .اجتماع
اين عمليات در پاسكال با عملگرهاي * ،+و -به ترتيب
دو مجموعه تركيبي از همه عضوهاي آنها است و اشتراك يعني عضوهايي
كه در هر دو مجموعه مشترك است و تفاضل يعني اعضايي كه در مجموعه
ميباشد و در مجموعه دوم وجود ندارد.
اول
408
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال:
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.
409
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
d=[2,3]
e=[0,1]
:در استفاده از مجموعه ها به نکات زیر توجه کنید
ميتواند مجموعه باشد كه قبًال در تايپ تعريف شده
.1آرگومان ورودي روالها
باشد ،نه اينكه مستقيم در روال به عنوان آرگومان بيايد .ولي خروجي يك تابع
نميتواند از نوع مجموعه باشد.
.2براي نوشتن يا خواندن مجموعهها بايد عضو به عضو عمليات صورت
نميكنند.
بگيرد و مستقيمًا توابع Write، Readروي آنها كار
410
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :برنامهاي بنويسيد كه تعداد محدودي عدد مختوم به -1را از ورودي
بخواند و در يك مجموعه از اعداد صحيح قرار بدهد .سپس اعضاي اين
مجموعه را با توجه به مجموعه ساخته شده در خروجي چاپ كند:
; Program test
Var
;num , temp : set of byte
; I , c : integer
Begin
Writln ('Enter numbers:
;)
; ) Readln( I
; ] [ =Num :
; c := 0
411
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
while ( i > -1) do
begin
c := c + 1 ;
temp := [ I ] ;
num := num + temp ;
Readln( I ) ;
end;
for I := 0 to 255 do
if ( i in num ) then
write( i:5 ) ;
End.{ End Of Program }
412
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دادههاي شمارشي
()Enumeration
دادههاي شمارشي ،يك مجموعه مرتب از اعداد است كه در برنامه ،هر عدد
داراي نام بخصوصي است .اين نامها در داخل دو پرانتز باز و بسته قرار
ميگيرند مگر اينكه برنامهنويس به آنها
ميگيرند و بترتيب از صفر مقدار
.مقدار مخصوصي بدهد
413
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: به مثال زير توجه كنيد
Type
Cars_type = (Peykan, Pride, Pegout,
K);
Var
Cars: cars_type;
:دادههاي شمارشي را بگيرد
ميتواند مقادير داخل
cars حال در برنامه
cars:= Pride;
cars:= PK;
414
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: به مثال زير توجه كنيد
Type
Days_type = ( sat, sun, mon, tue, wed, thu,
fri );
Var
Day: Days_type;
Begin
Day:= Mon;
i:= ord (sat) + ord (day) + (succ(sat));
j:= ord ( pred (sun) + ord (pred (fri));
writeln(i:5, j:5);
End.
خروجی:
i=3
j=5
415
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:نکته
ميتواند باشد كه
متغير داده شمارشي شبيه مجموعهها حداكثر داراي 256عضو
ميكند.
ميشود و لذا يك بايت حافظه را اشغال
شمارهگذاري
از صفر تا 255
416
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عمليات روي دادههاي شمارشي
ميتوانند در typeبرنامه تعريف شود
دادههاي شمارشي همانند هر نوع تايپي
ميتواند درنظر گرفته شود
و به عنوان آرگومانهاي روالها و يا خروجي توابع
نميتوان بكار برد.
ولي حتمًا بايد در typeتعريف شده باشد و مستقيمًا
ميباشند ،لذا ابتدا در typeتعريف
آرايهها نيز
اين عمل مشابه مجموعهها و
ميشود وگرنه
ميشود ،سپس به عنوان ورودي و يا خروجي روالها استفاده
دادهها
ميتوان در آرايهها از
خطاي كامپايلري پيش خواهد آمد .همچنين
شمارشي استفاده كرد.
417
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :مشابه مجموعهها نميتوان دادههاي شمارشي را مستقيمًا 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
418
Case
I
Of
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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;
419
Readln(i);
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
ر ] 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
420
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهاي بنويسيد تا مجموعه اي از كاراكترهاي كوچك را گرفته و به يك
مجموعه از كاراكترهاي حروف بزرگ متناظر با آن تبديل كند.
دادههاي شمارشي ،برنامه اي بنويسيد كه نام دانشجويان يك كالس را
به كمك
در برگيرد و هر دانشجو نيز يك شماره داشته باشد .سپس با دريافت نام او
شماره او در نمايشگر چاپ شود.
421
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 13
ركوردها )(Records
هدفهاي كلي
مفهوم ركورد و اجزاي آن
انواع ركوردها و استفاده از آن در برنامه
معرفي مزاياي ركوردها در برنامه
•گروه 422
آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
مواقع لزوم ركورد را تشخيص دهد.
از ركوردها در برنامهاش استفاده كند.
برنامههاي بزرگ و با دادههاي زياد بنويسد.
423
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مقدمه
ميشود ،ركورد نام دارد كه جهت
يافتهاي كه در اينجا مطرح
ساخت
نوع داده
دادههاي مختلف نظير نام ،نام خانوادگي ،سن و آدرس براي يك
نگهداري
ميرود .ركوردها برخالف آرايهها كه داراي عناصر از يك
دانشجو بكار
ميباشند .اطالعات از
جنس و نوع هستند ،داراي عناصر از انواع مختلف
نميتوان در آرايه نگهداري كرد چرا كه داراي جنس مشابه
نوع مختلف را
ميشود.
نيستند و لذا از ساختاري به نام ركورد استفاده
424
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعريف ركوردها
ساختيافته ای که از یک سری داده ها یا اطالعات مرتبط به هم
نوع داده
.تشکیل می شود
.هر کدام از اطالعات را یک فیلد می نامند
بطور كلي تعريف نوع ركورد در زير آمده است:
ype
Name = Record
;Field1-list : type1
;Field2-list : type2
..
..
;Fieldn-list : typen
425
;End
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: استفاده ميشود كه مطابق زيرميباشدRecord از كلمه كليدي،راي ساختن ركورد
Type
Student = Record
Name: String [10];
Family: String [15];
Age: integer;
Address: String;
End;
ميتوان در
حال. استRecord از نوعStudent در اين تعريف
: برنامه تعريف كردvar
Var
S: Student;
426
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دسترسي به فيلدهاي ركورد
براي دسترسي به فيلدهاي ركورد ازعالمت ' '.استفاده ميشود .يعني بصورتزير:
نام فيلد .نام متغير ركورد
مثال :برنامهاي بنويسيد كه ركوردي از نوع اعداد ايجاد كرده و مقادير
ي كند.
آنرا مقداره
427
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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);
428
End.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهاي بنويسيد كه ركورد يك دانشجو را داشته باشد و با توجه
مثال :
به جنس او كلمه آقا و يا خانم را به همراه نام و نام خانوادگياش را چاپ كند.
Type
Student = record
;Id: integer
;]Name: string[10
;]Family: string[15
;Sex: char
;Age: integer
;End
Var
;Stu: student
429
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Begin
Stu.id:= 80132;
Stu.name:='Ali';
Stu.family:='Ahmadi';
Stu.sex:='M';
Stu.sge:=18;
Case sex of
'M': write('Mr.');
'F': write('Mrs.');
end;
write(stu.name, ' ' ,
stu.family);
End.
430
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
بدست آوردن حجم يك ركورد
براي بدست آوردن فضاي اشغال شده توسط ركورد ابتدا بايد فضاي اشغال
تماميفيلدها را بدست آورده و سپس باهم جمع كنيم.
شده توسط
مثال زير را درنظر بگيريد:
431
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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
432
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ركوردهاي تودرتو
ميتوانند از نوع
ميتوانند از هر نوعي باشد ،از جمله
فيلدهاي يك ركورد
ركورد ديگري باشند .در اينجا نيز مشابه قبل دسترسي به همان صورت
Type
ميآيد.
ميباشد فقط به تعداد ركوردهاي تودرتو '.' ،پيش
Rec = record
به مثال زيرتوجه كنيد:
a, b:
;integer
;c: char
x: Record
p:
;integer
q:
433
;integer
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
Var
r:
;Rec
دراينجا يك ركورد تودرتو به نام Recتعريف شده است كه متغير rاز آن
ميتوان
نوع تعريف شده است .سپس براي دسترسي به فيلدهاي a , b ,c
به صورت زير عمل كرد:
r.a
r.b
ولي براي دسترسي به فيلدهاي p ,qچون متعلق به ركورد xنيز هستند داريم:
r.x.p
r.x.q
434
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
آرايهاي از ركوردها
دادههاي مختلفي وجود
هنگاميكه ما تعدادي داده مشابه داريم ولي در هريك ،
آرايهاي از آن تعريف كنيم.
ميتوانيم يك ركورد تعريف كرده ،سپس
دارد
pe
Student = record
;]Name: string[10
;Id: integer
;Age: integer
;End
;Arr_stu: array[1..10] of student
;S: Arr_stu
435
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در باال ابتدا يك ركورد دانشجو تعريف شده است ،سپس به تعداد 10نفر
دانشجو تحت آرايه Arr_stuشكل گرفته است و سرانجام متغيري به نام S
از نوع آن تعريف شده است.
مشابه ساختار آرايه ،چيزي عوض نشده است و فقط هر عنصر آرايه ،يک
ميباشد.
ميباشد كه داراي سه فيلد مطابق جدول فوق
ركورد
براي دسترسي به آرایه فوق داريم:
S[1].name
S[1].id
S[1].age
S[2].name
S[2].id
..
..
.. 436
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ارسال ركورد به زيربرنامهها
ميتوان مشابه انواع تعاريف ساده ديگر به صورت پارامترهاي
ركوردها را
نميتواند
متغير و مقدار به زيربرنامه ارسال كرد .ولي نوع برگشتي توابع
از نوع ركورد باشد ،يعني حتمًا بايد از نوع ساده نظير integer، charو...
نميتواند باشد.
باشد و از انواع تركيبي نظير ركورد ،آرايه ،مجموعه و فايل
اگر بخواهيم ركوردي را بصورت پارامتر به زيربرنامه ارسال كنيم ،ابتدا بايد
آنرا در typeتعريف كرده و سپس ارسال شود وگرنه كامپايلر خطا صادر
ميكند.
437
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
دانشجو ايجاد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;
438
Stu_arr=array[1..no]
of
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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;
439
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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.
440
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
گونههاي حيوانات يك پارك نظير پرندگان وحشي ركوردي شامل
براي
نام ،دسته ،محيط زندگي ،سن بسازيد .در نظر بگيريد كه در پارك 100
گونه از يك پرنده وحشي وجود دارد
(راهنمايي :آرايهاي از ركورد با فيلدهاي گفته شده بسازيد).
برنامهاي بنويسيد كه براي نگهداري تاريخ به صورت روز ،ماه و سال
براي 100سال بكار رود .در واقع به صورت تقويم باشد و جملهاي در مورد
آن تاريخ را نگهداري كنيد؟ (راهنمايي :آرايهاي 366تايي از روز بهمراه
آرايهاي از 12ماه و يك سال و يك رشته را به صورت يك ركورد در نظر
گرفته سپس براي 100سال بصورت يك آرايه صدتايي در نظر بگيريد).
441
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 14
فــايـلها )(Files
هدفهاي كلي
مفهوم فايل و انواع آن
موارد استفاده از فايلها
442
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
در برنامهاش از فايلها استفاده كند..
براي برنامههاي با دادههاي زياد از فايل استفاده كند..
با فايلهای دادهاي و بايزي برنامهنويسي كند.
443
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مقدمه
ميكنيم.
دادهها از ساختاري به نام فايل ( )Fileاستفاده
براي ذخيره دائمي
ميگرفت كه گذرا و فقط
تاكنون همه عمليات الزم در حافظه اصلي انجام
به زمان اجراي برنامه و روشن بودن كامپيوتر بستگي داشت .ولي در فايلها
دادهها در فايلهايي قرار دارند كه حتي بعد از خاموش
چنين نيست ،بلكه
كردن كامپيوتر ،بعدها قابل دسترسي است.
444
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فايلهاي متني ()Text
يك فايل متني از تعداد كاراكتر تشكيل شده است كه با يك اسم در روي ديسك
دادههاي داخل آنرا
ميتوانيد
ذخيره شده است .چون فايل از نوع متني است
مشاهده كنيد.
دادهها در يك فايل متني بدين صورت است كه تعدادي خط وجود دارد
ساختار
ميشوند و در انتهاي فايل نيز عالمت EOFقرار
كه به عالمت EOLNختم
دارد .طول خطوط نامشخص است و اندازه فايل ممكن است بسيار بزرگ يا
كوچك و يا تهي باشد.
445
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
طريقه ایجاد يك فايل متني
تعریف یک متغیر فایلی 1.
نسبت دادن اسم فایل به متغیر فایلی 2.
Rewriteایجاد فایل با دستور 3.
446
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعریف یک متغیر فایلی
;Name : Text
نسبت دادن اسم فایل به متغیر فایلی
Rewriteایجاد فایل با دستور
Assign(FileVar ,
) ’‘NameFile
Rewrite( FileVar
)
447
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مثال :برنامهاي بنويسيد كه از ورودي 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
448
Assign
;)'(f, 'out.dat
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
do
For
i: = 1
to 10
;)]Writeln (f, A[i
;)Writeln (f, Sum
;)Close (f
End.
بعد از نوشته شدن اطالعات در فایل ،فایل باید بسته شود برای اینکار از
:روال زیر استفاده می شود
)Close(FileName
449
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
طريقه خواندن اطالعات از يك فايل متني
تعریف یک متغیر فایلی 1.
نسبت دادن اسم فایل به متغیر فایلی 2.
باز کردن فایل برای خواندن با 3.
Resetدستور
450
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
باز کردن فایل برای خواندن با دستور
) Reset ( FileName
دستور Readو Readlnبرای خواندن اطالعات از فایل بکار می روند .
ميرود .اين عمل
دادههاي مورد نظر به سطر بعد
Readlnبعد از خواندن
ميباشد .ولي قبل از استفاده از اين دستورات بايد
براي Writelnنيز چنين
فايل متني براي خواندن يا نوشتن باز شود .دستور Resetفايل متني را براي
ميبرد.
ميكند و مكان نما را ابتداي فايل
خواندن باز
دستور Rewriteفايل متني را براي نوشتن در آن باز كرده ،و مكان نما را به
ميبرد.
ابتداي آن
451
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميخواهيم اعداد داخل فايل
'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);
452
nd.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
برنامهاي بنويسيد كه يك فايل متني شامل چند جمله را از ورودي دريافت: مثال
.كرده و يك كپي از فايل درخروجي بسازد
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);
453
rewrite(f2);
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در اين برنامه ابتدا دو فايل به نامهايشان نسبت داده ميشوند و ترتيب براي
ميشوند .سپس توسط eofشرط خاتمه فايل ورودي
خواندن و نوشتن باز
يعني f1بررسي ميشوند و در يك حلقه تو در تو whileشرط خاتمه خطوط
نيز توسط eolnبررسي شده و كاراكترها از فايل ورودي خوانده شده و در
ميشوند.
فايل خروجي نوشته
454
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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);
455
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فايلهاي دودويي و نوعدار() Binary & Typed
ن نوع فايلها در زبان پاسكال از تايپهاي مختلف record ,array
read ,integer ,charو … تشكيل شده است كه نياز به پردازش متنوع
مرتبسازي ،جستجو ،حذف و… دارند .اين فايلها پس از ايجاد توسط
شبيه
كدهاي اسكي
رنامه ،قابل رؤيت توسط ويراشگرها نيستند ،بلكه به صورت
ميباشند .نحوه دسترسي به اطالعات آنها نيز به
ميباشند يعني دودويي
صورت تصادفي
( )Randomاست.
456
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
طريقه ایجاد يك فايل نوع دار
تعریف یک متغیر فایلی 1.
نسبت دادن اسم فایل به متغیر فایلی 2.
Rewriteایجاد فایل با دستور 3.
457
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعریف یک متغیر فایلی
Name : File Of
FileType ;
نسبت دادن اسم فایل به متغیر فایلی
Assign(FileVar ,
‘NameFile’ )
458
ایجاد فایل با دستورRewrite
Rewrite( FileVar
)
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:نحوه تعريف يك فايل دودويي نوعدار از انواع مختلف در زير آوردهشدهاست
Const n=100;
Type
Student = Record
Name: string[10];
Family: String[15];
Age: integer;
ID: integer;
end;
Sarray = Array [1..n] of
student;
459
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
:مثال
ل دودويي از نوع صحيح
ل دودويي از نوع ركورد دانشجو
فايل دودويي از نوع كاراكتر
Var
;Bf2: file of integer
;Bf3: file of student
;Bf1: file of char
ل دودويي از مجموعه Aتا Bf6: file of set of 'A'..'Z
;'Z
460
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تايي) از ورودي خوانده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;
461Close (Bf);
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
در جدول صفحه بعد تمام روالهاي كتابخانهاي پاسكال جهت كار با فايلها
ميباشد.
آورده شده است كه به همراه توضيحات الزمه جهت كار با آنها
همچنين براي هر تابع و رويه محل مورد استفاده آن در ستونی مشخص
شده است .
462
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
عمليات مربوطه
نام دستور
رديف
فايلها فايلها
ي
ي
متن
نوع
ي
دار
+
+
نام فايل را به متغير فايل نسبت
ميدهد.
Assign
1
+
+
فايل مربوطه را براي خواندن باز
ميكند.
Reset
2
+
+
فايل مربوطه را براي نوشتن باز
ميكند.
Rewrite
3
+
+
خواندن از فايل
Read
4
×
+
خواندن از فايل متني
Readln
5
+
+
نوشتن در فايل
Write
6
×
+
نوشتن در فايل متني
Writeln
7
×
+
مشخص نمودن انتهاي خط
Eoln
8
+
+
مشخص نمودن انتهاي فايل
Eof
9
بازنمودن فايل متني جهت اضافه
•گروه 463
آموزشی مهندسی ایران
Iranian Engineering
Group
+
+
+
بستن فايل
Close
11
+
+
×
انتقال وحركت مكاننمادر فايل
دودويي
Seek
12
×
×
+
مشخص نمودن رسيدن به انتهاي
خط فايل متني
Seekoln
13
×
×
+
مشخص نمودن رسيدن به انتهاي
فايل متني
Seekeof
14
+
+
×
شماره ركورد از انتهاي فايل
Filefos
15
+
+
×
تعداد ركوردهاي فايل جاري را
برميگرداند
Filesize
16
+
+
×
حذف يك ركورد از انتهاي فايل
17 Truncate
+
+
+
براي حذف فايلها بكار ميرود.
Erase
18
+
+
+
براي تغيير نام فايلها بكارميرود.
Rename
19
×
×
+
محتويات بازفايل متني را به
ديسكت انتقال ميدهد.
Flush
20
×
×
+
اندازه بافر براي فايلهاي متني را
464
SetTextb
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
21
مثال های حل شده
. برنامهاي بنويسيد كه تعداد خطوط يك فايل متني را بدست آورد: مثال
Var
F: text ;
ch : char ;
str: string[20];
count: integer;
Begin
Write ('Enter the file name:
);
Readln(str);
Assign(f,str);
465
Reset(f);
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
count:=0;
While not eof(f) do
begin
While not eoln(f) do
Read(f,ch);
Readln(f);
count:=count+1;
end;
Write('the number of lines in file is:
',count);
End.
466
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
كتاب را در يك10 تعداد،كتابها در نظر گرفته
ركوردي از: مثال
.فايل نوع دار ذخيره كنيد
Const
n = 10;
Type
Booktype = Record
name: string[20];
ID: integer;
end;
Var
Bf: file of Booktype;
I , ID : integer;
name: string[20];
Book: Book type;
467
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
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);
468
End.
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
برنامهاي بنويسيد كه از يك فايل متني از اعداد حقيقي كه در سطرها و
دادهها را بدست آورده و در مانيتور
ستونها مختلف قرار دارند ،ميانگين
چاپ كند.
برنامهاي بنويسيد كه در انتهاي يك فايل متني ،همان فايل متني را اضافه كند.
برنامهاي بنويسيد كه در يك فايل نوع دار از كاراكترها ،اطالعات آماري
هر كاراكتر را بدست آورده ،يعني تعداد هر كاراكتر را بدست آورد.
مثًال كاراكتر ' 'Aبه تعداد 45تا و كاراكتر ' 'Bبه تعداد 36تا و…
469
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
فصل 15
تحليل الگوريتمها
هدفهاي كلي
مفهوم و تعريف الگوريتم
مفهوم كارايي يك الگوريتم
مرتبه يك الگوريتم
470
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
رفتاري
هدفهاي÷
:دانشجو پس از مطالعه اين فصل بايد بتواند
برنامه خود را تحليل زماني نمايد.
مرتبه الگوريتم را بدست آورد.
الگوريتمهاي بازگشتي را تحليل نمايد.
471
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
مقدمه
تحليل يك الگوريتم يعني ارزيابي روشهاي مختلف حل آن مسئله ،بررسي و
محاسبه بهترين و بدترين حالتها ،بصورتي كه با توجه به شرايط بهترين
حالت را بتوان انتخاب كرد .الگوريتم در واقع تعداد محدودي از دستورالعملها
ميكنند
ميشوند و هدف خاصي را دنبال
می باشد كه بترتيب اجرا
472
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تعريف مرتبه يا پيچيدگي الگوريتم ( Oبزرگ)
براي بدست آوردن بدترين حالت اجراي يك الگوريتم
يا مرتبه پيچيدگي الگوريتم از
Oبزرگ استفاده ميكنيم و بنا به تعريف عبارتست
از )) f(n)=O(g(nو
ميخوانيم ) f(xاز مرتبه ) g(xميباشد ،اگر و تنها
)c 0,n n0 f (x) c.g(x
473
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
ميتوان با در ر
نظرگرفتن g(n)=nو c =3رابطه زیر
مثال n 2=f(n)+1 :
حاصل می شود :
)n>=3 <= cg(n)=1n+2f(n
ميباشد.
ميتوان گفت ،پيچيدگي زماني ) f(nاز مرتبه ) O(n
لذا
474
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
بدست آوردن مرتبه الگوريتمها
براي بدست آوردن مرتبه اجراي الگوريتمها بايد به دقت بررسي شود و تعداد
تكرار آن الگوريتم بدست آورده شود .يعني در واقع تعداد تكرارها بدست
آورده شود و سپس با هم جمع شده و مطابق مثالهاي قبلي به پيچيدگي زمان
واقعي رسيد .براي اين منظور از الگوريتمهاي ساده شروع كرده و به پيچيده
ميرسيم.
475
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
حلقههاي ساده به شكل زير باشد:
فرض كنيد الگوريتمي داراي
;x:= 0
For I :=1 to n
do
;x:=x+1
ميباشد .يعني حلقه forبستگي به پارامتر nدارد.
كه در آن nتعداد ورودي
برميآيد تعداد n-1+1تكرار يعني
همان طور كه از تعريف حلقه for
ميباشد.
nتكرار وجود دارد و لذا قطعه برنامه فوق از مرتبه)O(n
476
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: مرتبه تابع زير را بدست آوريد: مثال
Function fact ( n : integer ) :
integer ;
var
f,i: integer;
begin
f:=1;
for I := 1 to n do
f:=f*i;
fact:=f;
end;
477
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تابع فوق فاكتوريل عدد nرا بر ميگرداند .همانطور كه ميبينيد تابع شامل
يك حلقه forساده بوده كه از يك تا nمتغير بوده و لذا nبار تكرار ميشود.
2جمله ساده نيز وجود دارد که زمان های ثابتی دارند.
بنابراین مرتبه تابع باال برابر است با :
)O(n
478
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
تمرينات
: پيچيدگي زماني توابع زير را بدست آوريد
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)!
479
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group
: پيچيدگي زماني تابع زير را بدست آوريد
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;
480
test:=x;
• گروه آموزشی مهندسی ایران
Iranian Engineering
Group