lecture 5.pdf

‫دستور شرط‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل ‪ -‬ﺟﻠﺴﻪ ﭘﻨﺠﻢ‬
‫ﻣﺪرس‪ :‬ﻧﻮري‬
‫داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫آﺑﺎن‬
‫‪1 / 24‬‬
‫آبان ‪88‬‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫گرامر دستور ‪ if‬با دستورات ساده‬
‫دستور شرط ساده‬
‫‪if Condition then‬‬
‫;‬
‫‪if Condition then‬‬
‫‪StatementT‬‬
‫‪StatementT‬‬
‫‪else‬‬
‫‪StatementF‬‬
‫‪2 / 24‬‬
‫آبان ‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫ با دستورات ترکیبی‬if ‫گرامر دستور‬
if Condition then
begin
StatementT ;
StatementT ;
StatementT
if Condition then
begin
StatementT ;
StatementT ;
StatementT
end
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
end
;
else
begin
StatementF ;
StatementF ;
StatementF
end
‫برنامهنویسی پاسکال‬
88 ‫آبان‬
3 / 24
‫دستور شرط‬
‫مرتب کردن دو عدد به صورت غیر نزولی‬
‫دستور شرط ترکیبی‬
‫‪if X > Y then‬‬
‫}‪begin {switch X and Y‬‬
‫;‪Temp := X‬‬
‫;‪X := Y‬‬
‫‪Y := Temp‬‬
‫}‪end {if‬‬
‫‪4 / 24‬‬
‫آبان ‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫شکلدهی اعداد حقیقی‬
‫•‬
‫•‬
‫‪5 / 24‬‬
‫ﻗﺒﻞ و ﺑﻌﺪ از ﻛﻠﻤﺎت ﻛﻠﻴﺪي ‪ else ،then‬و ‪ ; ،begin‬ﻗﺮار‬
‫ﻧﻤﻲﮔﻴﺮد‬
‫ﻣﻤﻜﻦ اﺳﺖ ﺑﻌﺪ از ‪ end‬ي ﻛﻪ ‪ if‬را ﺧﺘﻢ ﻣﻲﻛﻨﺪ ; ﻗﺮار ﺑﮕﻴﺮد‪.‬‬
‫آبان ‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫برنامه شمارش روزهای گذشته از سال‬
program DayCounter;
var
Day, Month, D : Integer;
begin
Write(’Please enter day [1-31]:’);
ReadLn(Day);
Write(’Please enter month [1-12]:’);
ReadLn(Month);
D := Day;
if Month <= 7 then
D := D + (Month - 1)*31
else if Month <= 12 then
D := D + 6*31 + (Month - 7)*30
else {Month > 12}
WriteLn(’You must enter a month not greater than 12’);
if Month <= 12 then
WriteLn(’This is the ’, D, ’th day of the year’)
end.
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88 ‫آبان‬
6 / 24
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫برنامه تبدیل واحدهای اینچ و سانتیمتر‬
program LengthConvertor;
const
I2C = 2.54;
var
Length : Real;
Scale, Space : Char;
begin
WriteLn(’Please enter length in Cm or Inch.’);
Write(’(eg. 32 cm or 24.5 in)’);
ReadLn(Length, Space, Scale);
if (Scale <> ’c’) and (Scale <> ’C’)
and (Scale <> ’i’) and (Scale <> ’I’) then
WriteLn(’Sorry, invalid scale’)
else
begin
Write(’This corresponds to: ’);
if (Scale = ’i’) or (Scale = ’I’) then
WriteLn(Scale * I2C :3:1, ’cm’)
else
WriteLn(Scale / I2C:3:1, ’in’)
end
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
end.
88 ‫آبان‬
7 / 24
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫برنامه محاسبه حقوق‬
‫•‬
‫•‬
‫•‬
‫‪8 / 24‬‬
‫ﺷﺮﻛﺘﻲ ﺣﻘﻮق ﻛﺎرﻣﻨﺪاﻧﺶ را ﺑﺮاﺳﺎس ﺳﺎﻋﺖ ﻛﺎر آﻧﻬﺎ ﺑﻪ اﺿﺎﻓﻪ‬
‫ﻧﺼﻒ ﺳﺎﻋﺖﻫﺎي اﺿﺎﻓﻪ ﺑﺮ ‪ 40‬ﺳﺎﻋﺖ در ﻫﻔﺘﻪ ﭘﺮداﺧﺖ ﻣﻲﻛﻨﺪ‪.‬‬
‫ﻛﺎرﻣﻨﺪاﻧﻲ ﻛﻪ ﺣﻘﻮق آﻧﻬﺎ ﺑﻴﺸﺘﺮ از ‪ 100‬ﻫﺰار ﺗﻮﻣﺎن ﺑﺎﺷﺪ‪ ،‬ﺑﺎﻳﺪ‬
‫‪ 20‬ﻫﺰار ﺗﻮﻣﺎن ﺑﻪ اﺗﺤﺎدﻳﻪ ﭘﺮداﺧﺖ ﻛﻨﻨﺪ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺣﻘﻮق ﺑﺪون ﭘﺮداﺧﺘﻲ ﺑﻪ ﺻﻨﺪوق و ﺑﺎ‬
‫ﭘﺮداﺧﺖ ﺑﻪ ﺻﻨﺪوق را ﺣﺴﺎب ﻛﻨﺪ‪.‬‬
‫آبان ‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫رابطههای محاسبه حقوق‬
• gross pay = hours worked × hourly rate
• gross pay =
40 × hourly rate + 1.5 × overtime hours × hourly rate
• net pay = gross pay − union dues
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88 ‫آبان‬
9 / 24
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫شرط الزم برای محاسبه حقوق‬
if Hours <= MAX_NO_OVERTIME then
Gross := Hours * Rate
{no overtime pay}
else
Gross := MAX_NO_OVERTIME * Rate +
{overtime}
BONUS_RATE * (Hours - MAX_NO_OVERTIME) * Rate
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88
‫آبان‬
10 / 24
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫برنامه محاسبه حقوق‬
program Payroll;
const
MAX_NO_OVERTIME = 40;
BONUS_RATE = 1.5;
MAX_NO_DUES = 100.0;
DUES = 20.0;
var
Hours, Rate,
Gross, Net : Real;
begin
Write(’Hours worked> ’);
ReadLn(Hours);
Write(’Hourly rate> ’);
ReadLn(Rate);
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88
‫آبان‬
11 / 24
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫ادامه‬
if Hours <= MAX_NO_OVERTIME then
Gross := Hours * Rate
else
Gross := MAX_NO_OVERTIME * Rate +
BONUS_RATE * (Hours - MAX_NO_OVERTIME) *
Rate;
if Gross < MAX_NO_DUES then
Net := Gross
else
Net := Gross - DUES;
WriteLn(’Gross pay is $’, Gross:4:2);
WriteLn(’Net pay is $’, Net:4:2)
end.
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88
‫آبان‬
12 / 24
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫خروجی برنامه‬
‫‪Hourly worked> 40‬‬
‫‪Hrouly rate> 5.0‬‬
‫‪Gross pay is $200.00‬‬
‫‪Net pay is $180.00‬‬
‫‪13 / 24‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫دستور شرط ترکیبی‬
‫مزایای استفاده از ثابت‬
‫•‬
‫ﺗﻐﻴﻴﺮ ﺳﺎدهﺗﺮ اﻧﺠﺎم ﻣﻲﺷﻮد‪(MAX_NO_OVERTIME) .‬‬
‫•‬
‫دﺳﺘﻮر ‪ if‬ﻧﻮﺷﺘﻪ ﺷﺪه ﺧﻮاﻧﺎﺗﺮ اﺳﺖ‪.‬‬
‫‪14 / 24‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط تو در تو‬
‫‪if‬های تو در تو‬
‫•‬
‫ﺑﺮاي اﻳﺠﺎد ﺗﺼﻤﻴﻢ ﺑﺎ ﭼﻨﺪﻳﻦ ﺣﺎﻟﺖ اﻧﺘﺨﺎب‬
‫‪if X > 0 then‬‬
‫‪NumPos := NumPos + 1‬‬
‫‪else‬‬
‫‪if X < 0 then‬‬
‫‪NumNeg := NumNeg + 1‬‬
‫‪else‬‬
‫}‪{X = 0‬‬
‫‪NumZero := NumZero + 1‬‬
‫‪15 / 24‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط تو در تو‬
‫‪if‬های تو در تو‬
‫•‬
‫اﻳﻦ ﻣﺠﻤﻮﻋﻪ دﺳﺘﻮر ﺑﻪ ﺻﻮرت ﻋﺎدي ﺑﻪ ﺷﻜﻞ زﻳﺮ ﻧﻮﺷﺘﻪ ﻣﻲﺷﻮد‪.‬‬
‫‪if X > 0 then‬‬
‫;‪NumPos := NumPos + 1‬‬
‫‪if X < 0 then‬‬
‫;‪NumNeg := NumNeg + 1‬‬
‫‪if X = 0 then‬‬
‫‪NumZero := NumZero + 1‬‬
‫‪16 / 24‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط تو در تو‬
‫مزایای استفاده از ‪ if‬تو در تو‬
‫•‬
‫•‬
‫‪17 / 24‬‬
‫‪ if‬ﺗﻮ در ﺗﻮ ﺧﻮاﻧﺎ ﺗﺮ اﺳﺖ و راﺣﺖﺗﺮ ﻣﻲﺗﻮان ﻓﻬﻤﻴﺪ ﻛﻪ ﺑﺎ ﻳﻚ‬
‫دﻟﺨﻮاه ﻓﻘﻂ ﻳﻜﻲ از ﺧﻄﻮط اﺟﺮا ﻣﻲﺷﻮد‪.‬‬
‫‪X‬‬
‫از ﻟﺤﺎظ ﻛﺎراﻳﻲ ﺑﺮﻧﺎﻣﻪ‪ if ،‬ﺗﻮ در ﺗﻮ ﺳﺮﻳﻌﺘﺮ اﺳﺖ‪ ،‬ﭼﻮن وﻗﺘﻲ‬
‫ﻣﺜﺒﺖ ﺑﺎﺷﺪ‪ ،‬ﻓﻘﻂ ﺷﺮط اول ﺑﺮرﺳﻲ ﻣﻲﺷﻮد و اﮔﺮ ‪ X‬ﻣﻨﻔﻲ ﺑﺎﺷﺪ‪،‬‬
‫ﻓﻘﻂ دو ﺷﺮط اول‪.‬‬
‫‪X‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط تو در تو‬
‫ تو در تو‬if ‫ابهام در‬
if X > 0 then
if Y > X then
WriteLn(’Y > X > 0’)
else
WriteLn(’(X > 0) and (Y <= X)’)
if X > 0 then
begin
if Y > X then
WriteLn(’Y > X > 0’)
end
else
WriteLn(’X <= 0’)
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88
‫آبان‬
18 / 24
‫دستور شرط‬
‫شرط چند انتخابی‬
‫شکل چند انتخابی ‪ if‬تو در تو‬
‫ﻫﻴﭻ ﻛﺪام از ﺷﺮاﻳﻂ ﺑﺮﻗﺮار ﻧﺒﻮد‪ ،‬ﺟﻤﻠﻪ‬
‫‪19 / 24‬‬
‫آبان‬
‫‪88‬‬
‫‪if Condition1 then‬‬
‫‪Statement1‬‬
‫‪else if Condition2 then‬‬
‫‪Statement2‬‬
‫‪else if Condition3 then‬‬
‫‪Statement3‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪else if Conditionn then‬‬
‫‪Statementn‬‬
‫‪else‬‬
‫ﻏﻴﺮ ﺿﺮوري‬
‫ﺑﻌﺪ از ‪ else‬اﺟﺮا ; ‪Statemente‬‬
‫ﻣﻲﺷﻮد‪.‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط چند انتخابی‬
‫شکل چند انتخابی ‪ if‬تو در تو‬
‫‪if X > 0 then‬‬
‫‪NumPos := NumPos + 1‬‬
‫‪else if X < 0 then‬‬
‫‪NumNeg := NumNeg + 1‬‬
‫‪else‬‬
‫‪NumZero := NumZero + 1‬‬
‫‪20 / 24‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط چند انتخابی‬
‫برنامه نمره دادن حرفی بر اساس نمره امتحان‬
‫‪A‬‬
‫‪B‬‬
‫‪• 80 - 89‬‬
‫‪C‬‬
‫‪• 70 - 79‬‬
‫‪D‬‬
‫‪• 60 - 69‬‬
‫‪F‬‬
‫‪21 / 24‬‬
‫آبان‬
‫‪88‬‬
‫برنامهنویسی پاسکال‬
‫ﺑﻴﺸﺘﺮ‬
‫‪• 90 -‬‬
‫زﻳﺮ‬
‫‪• 60‬‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط چند انتخابی‬
‫برنامه نمره دادن حرفی بر اساس نمره امتحان‬
if Score >= 90 then
Write(’A’)
else if Score >= 80 then
Write(’B’)
else if Score >= 70 then
Write(’C’)
else if Score >= 60 then
Write(’D’)
else
Write(’F’);
WriteLn(’is the exam grade - score is ’, Score)
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88
‫آبان‬
22 / 24
‫دستور شرط‬
‫شرط چند انتخابی‬
‫برنامه محاسبه مالیات‬
‫درﺻﺪ اﺿﺎﻓﻪ ﻣﺎﻟﻴﺎت ﭘﺎﻳﻪ ﻣﺎﻟﻴﺎت‬
‫‪15%‬‬
‫‪16%‬‬
‫‪18%‬‬
‫‪20%‬‬
‫‪25%‬‬
‫‪23 / 24‬‬
‫آبان‬
‫‪88‬‬
‫‪0‬‬
‫‪255‬‬
‫‪465‬‬
‫‪825‬‬
‫‪1425‬‬
‫برنامهنویسی پاسکال‬
‫ﻣﺤﺪوده ﺣﻘﻮق‬
‫‪0 - 1499.99‬‬
‫‪1500 - 2999.99‬‬
‫‪3000 - 4999.99‬‬
‫‪5000 - 7999.99‬‬
‫‪8000 - 15000‬‬
‫)دانشگاه صنعتی شریف( مدرس‪ :‬نوری‬
‫دستور شرط‬
‫شرط چند انتخابی‬
‫برنامه محاسبه مالیات‬
if Salary < 0.0 then
WriteLn(’Error. Negative salary $’, Salary:10:2)
else if Salary < 1500.0 then
Tax := 0.15 * Salary
else if Salary < 3000.0 then
Tax := (Salary - 1500.0) * 0.16 + 225
else if Salary < 5000.0 then
Tax := (Salary - 3000.0) * 0.18 + 465
else if Salary < 8000.0 then
Tax := (Salary - 5000.0) * 0.20 + 825
else if Salary < 15000.0 then
Tax := (Salary - 8000.0) * 0.25 + 1425
else
WriteLn(’Error. too large salary $’, Salary:10:2)
‫ نوری‬:‫)دانشگاه صنعتی شریف( مدرس‬
‫برنامهنویسی پاسکال‬
88
‫آبان‬
24 / 24