360 likes | 449 Views
ساختارهای کنترلی. موسوی ندوشنی ویراست پاییز 1388. ساختارهای کنترلی. در یک زبان ساختار یافته، میتوان روی اجرا یک یا چند دستور و همچنین تقدم و تاخر آنها کنترل داشت. این کنترلها بطور عمده به دو صورت بیان میشوند. شرط ها حلقه ها. فلوچارت (روندنما) یک شرط. شرط ساده.
E N D
ساختارهای کنترلی موسوی ندوشنی ویراست پاییز 1388 دانشگاه صنعت آب و برق
ساختارهای کنترلی • در یک زبان ساختار یافته، میتوان روی اجرا یک یا چند دستور و همچنین تقدم و تاخر آنها کنترل داشت. این کنترلها بطور عمده به دو صورت بیان میشوند. • شرطها • حلقهها دانشگاه صنعت آب و برق
فلوچارت (روندنما) یک شرط دانشگاه صنعت آب و برق
شرط ساده • گرامر شرط ساده به صورت زیر است. • If(logical expr.) exec-statement • مثال: • Real :: x, Absolute_x • Read*, x • Absolute_x = x • IF(x < 0.0) Absolute_x = -x • Print*, 'Absolute value of', x, 'is', Absolute_x • End دانشگاه صنعت آب و برق
بلوک IF • در اینجا ساختار شرط پیچیدهتر است، بدین معنی که در صورت برقراری شرط باید چند جمله اجرا شود. گرامر آن به صورت زیر است: • If (logical expr.) Then • exec-statement(s) • End if دانشگاه صنعت آب و برق
مثال بلوک IF • در مثال زیر اگر متغیر دوم از متغیر اول بزرگتر بود، برنامه زیر جای آنها را با هم عوض میکند. • Integer :: x, y, temp • Read*, x, y • IF (y>x) Then • temp = y • y = x • x = temp • End IF • Print*, x, y • End دانشگاه صنعت آب و برق
بلوک IF در حالت پیچیدهتر • میتوان حالت پیچیدهتر را در بلوک IF اعمال نمود. • If (logical expr.) Then • exec-statement(s)_1 • Else • exec-statement(s)_2 • End if دانشگاه صنعت آب و برق
مثال بلوک IF در حالت پیچیدهتر • مثال • Integer :: Number • Read*, Number • IF (mod(Number, 2) == 0) Then • Write(*,*) Number, 'is even ' • Else • Write(*,*) Number, 'is odd' • End IF • End دانشگاه صنعت آب و برق
شرط تو در تو (nested IF) • میتوان در داخل یک شرط، یک یا چند شرط دیگر را به کار برد. • IF (logical expression) Then • Block_1 • IF (logical expr.) Then • Block_2 • Else • Block_3 • EndIF • Block_4 • Else • Block_5 • End IF دانشگاه صنعت آب و برق
مثال شرط تو در تو • برنامه تعیین کوچکترین عدد بین سه عدد داده شده • IF (a < b) Then • IF (a < c) Then • Result = a • Else • Result = c • End IF • Else • IF (b < c) Then • Result = b • Else • Result = c • End IF • End IF دانشگاه صنعت آب و برق
دنباله شرط تو در تو (else if) • اگر تعدادIFهای تو در تو زیاد باشد، میتوان از گرامر زیر استفاده نمود: • IF (logical expression_1) Then • Block_1 • ElseIF(logical expression_2) Then • Block_2 • ElseIF(logical expression_3) Then • Block_3 • Else • Block_4 • End IF دانشگاه صنعت آب و برق
مثال (1): else if • مثال: برنامه تعیین کوچکترین عدد بین سه عدد داده شده • IF (a < b .AND. a < c) Then • Result=a • ElseIF (b < a .AND. b < c) Then • Result = b • Else • Result = c • End IF دانشگاه صنعت آب و برق
مثال (روش 1) Read*, x if (x <= -5) Then F = 0 Elseif (x <= 5) Then F = 1 Else F = 0 End if Print*, F End دانشگاه صنعت آب و برق
مثال (روش 2) Read*, x if (x > -5 .AND. x <= 5) Then F = 1 Else F = 0 End if Print*, F End دانشگاه صنعت آب و برق
مثال (روش 3) Read*, x if (x <= -5 .OR. x > 5) Then F = 0 Else F = 1 End if Print*, F End دانشگاه صنعت آب و برق
مثال (2): else if • Integer :: x • Character(Len = 1) :: Grade • IF (x < 50) Then • Grade = 'F' • Else IF (x < 60) Then • Grade = 'D' • Else IF (x < 70) Then • Grade = 'C' • Else IF (x < 80) Then • Grade = 'B' • Else • Grade = 'A' • End IF دانشگاه صنعت آب و برق
ساختار select case • وقتی تعداد شاخههای شرط زیاد باشد، میتوان از ساختاری به نام select caseاستفاده نمود. گرامر آن به صورت زیر است: • select case(selector) • case(label-list-1) • statements_1 • case(label-list-2) • statements_2 • ........................................... • ........................................... • case(label-list-n) • statements_n • case default • statements default • End select دانشگاه صنعت آب و برق
مثال ساختار select case • سه عدد را بخوانید، میانگین آنها را محاسبه کنید، آنها را گردکنید و مطابق جدول زیر درجهشان به دست آورید. دانشگاه صنعت آب و برق
کدهای مثال select case • Real :: Mark1, Mark2, Mark3 • Real :: Average • Character(Len = 2) :: Grade • Read(*,*) Mark1, Mark2, Mark3 • Average = (Mark1+Mark2+Mark3)/3.0 • select case(NINT(Average)) • case(:59) • Grade = 'F' • case(60:64) • Grade = 'D' دانشگاه صنعت آب و برق
کدهای مثال select case • case(65:69) • Grade = 'CD' • case(70:74) • Grade = 'C' • case(75:79) • Grade = 'BC' • case(80:84) • Grade = 'B' • case(85:89) • Grade = 'AB' • case default • Grade = 'A' • End select دانشگاه صنعت آب و برق
فلوچارت select case دانشگاه صنعت آب و برق
حلقه (loop) • در بسیاری از موارد باید یک یا چند دستور به تعداد معین یا نامعین تکرار شوند. به مثالهای زیر توجه کنید. • میخواهید اعداد زوج بین صفر تا 1000 را چاپ کنید • یا مقسومعلیههای یک عدد را پیدا کنید. • همانطور که در بالا نیز به آن اشاره شد، دو نوع حلقه را میتوان از همتمیز داد: • حلقه با تعداد تکرار معلوم • حلقه با تعداد تکرار نامعلوم دانشگاه صنعت آب و برق
فلوچارت یک حلقه تکرار دانشگاه صنعت آب و برق
حلقه با تعداد تکرار معلوم • برای این کار از دستورDOاستفاده میشود که گرامر آن به شرح زیر است: • DO var = initial_value, final_value [, step_size] • statements • End DO • مقادیر شروع، خاتمهو مقدار و مقدار افزایشباید صحیح باشند. • اگر مقدار افزایش حذف شود، مقدار پیشفرض آن یک خواهد بود. • برای هر مقدار ازvarجملات حلقه فقط یک بار اجرا میشوند. • پس از اتمام حلقه، کنترل برنامه به جمله بعد از end do منتقل میشود. دانشگاه صنعت آب و برق
مثال حلقه (1) • میانگین 10 عدد را به دست آورید. • Integer :: count, sum, input • Real :: average • sum = 0 • DO count = 1, 10 • Read(*,*) input • sum = sum + input • EndDO • Average = sum/10.0 دانشگاه صنعت آب و برق
مثال حلقه (2) • فاکتوریل یک عدد مانندnرا به دست آورید. • Integer :: Factorial, n, i • Read(*,*) n • Factorial = 1 • DO i = 1, n • Factorial = Factorial*i • EndDO دانشگاه صنعت آب و برق
مثال حلقه (3) • مقادیر شروع، خاتمه و مقدار افزایش میتواند عبارت نیز باشند. • Integer :: a, b, c • Integer :: List • Read(*,*) a, b, c • DO List = Max(a,b,c), Min(a,b,c), -1 • Write(*,*) List • End DO دانشگاه صنعت آب و برق
حلقه با تعداد تکرار نامعلوم (1) • به فرم زیر توجه کنید: • DO • statements • End DO • همانطور که ملاحظه میکنید، عملیات داخل حلقهDOدائماً تکرار میشود و انتهایی ندارد چون مکانیزمی برای خروج از حلقه تعبیه نشده است. برای خروج از حلقه از فرمانExitاستفاده میشود. به دو گرامر زیر توجه کنید. • DO • statements_1 • IF (logical-expression) Exit • statement_2 • End DO دانشگاه صنعت آب و برق
حلقه با تعداد تکرار نامعلوم (2) • گرامر فرم دوم به صورت زیر است. • DO • statements_1 • IF (logical-expression) Then • statements • Exit • EndIF • statements_2 • End DO دانشگاه صنعت آب و برق
مثال حلقه با تعداد تکرار نامعلوم • برنامه زیر اعداد را با هم جمع میکند و متوقف نمیشودمگر آنکه یک عدد منفی وارد شود. • Integer :: x, sum • sum = 0 • DO • Read(*,*) x • IF (x < 0) Exit • sum = sum + x • End DO دانشگاه صنعت آب و برق
مثال حلقه با تعداد تکرار نامعلوم • برنامه زیر اعداد را با هم جمع میکند و متوقف نمیشودمگر آنکه یک عدد منفی وارد شود. • Integer :: x, sum, n • sum = 0 • n = 0 • DO • Read(*,*) x • IF (x<0) Exit • IF (x == 0) Cycle • sum = sum + x • n = n + 1 • End DO • Print*, 'Average = ', sum / Real(n) • End دانشگاه صنعت آب و برق
حلقه Do While • فرم دیگری را میتوان برای حلقه با تعداد تکرار نامعلوم به کار برد که گرامر آن بهشرح زیر است: • DO While(logical-expression) • statements • End DO • حلقهDO Whileمعادل حلقه زیر است: • DO • IF(.NOT. logical expression) Exit • statements • EndDO دانشگاه صنعت آب و برق
فلوچارت حلقه Do While دانشگاه صنعت آب و برق
مثال حلقه Do While • برنامه زیر عدد فردی را میخواند )بزرگتر از ۳(و معلوم میکند کهاول است یا خیر؟ • Integer :: n=3 • Integer :: p, Rem • Read(*,*) p • Rem = mod(p,n) • DO • IF(Rem == 0 .OR. n >= sqrt(Real(p))) Exit • n = n+2 • Rem = mod(p,n) • End DO • IF (Rem /= 0) Then • Write(*,*) p, ' is prime' • Else • Write(*,*) p, ' is not prime' • End IF • End دانشگاه صنعت آب و برق
حلقههای تو در تو (nested loops) • میتوان در یک حلقه تکرار، حلقه و یا حلقههای تکرار دیگری را به کار برد، تنهانکته مهم این است که حلقهها نباید با هم تداخل داشته باشند. بدین معنی کهحلقه داخلی باید دیرتر از حلقه خارجی شروع شود و زودتر از آن خاتمه یابد. • به مثال زیر توجه کنید: • برنامه زیر میتواند رشته زیر را محاسبه نماید. • 1, 1+2, 1+2+3, 1+2+3+4, ..., 1+2+3+...+10 دانشگاه صنعت آب و برق
کدهای مثال قبل • Integer :: i, j, sum • DO i = 1, 10 • sum = 0 • DO j = 1, i • sum = sum+j • EndDO • Write(*,*) sum • EndDO • End دانشگاه صنعت آب و برق