lecture 8.pdf

‫ﻣﺪرس ‪ :‬ﻧﻮري‬
‫آﺑﺎن ‪88‬‬
‫ﺳﺎﺧﺘﺎرﻫﺎي ﻛﻨﺘﺮﻟﻲ‬
‫ﺳﺎﺧﺘﺎر ﺷﺮﻃﻲ‬
house
House or
Stick Figure?
stick figure
Draw a
triangle
Draw a
triangle
Draw a
circle
Draw
parallel
lines
Draw
a triangle
Draw
a baseline
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺳﺎﺧﺘﺎر ﺗﺮﺗﻴﺒﻲ‬
Draw
intersecting
Draw
parallel
lines
Draw
a baseline
lines
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
2
‫ﺳﺎﺧﺘﺎرﻫﺎي ﺗﻜﺮار‬
‫‪ y‬ﺳﻪ ﻧﻮع ﺳﺎﺧﺘﺎر ﺗﻜﺮار‬
‫‪for y‬‬
‫‪while y‬‬
‫‪repeat until y‬‬
‫‪3‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻧﻮري‪: ‬ﻣﺪرس‬
while ‫ دﺳﺘﻮر‬Syntax
While boolean-expression do
Statement
While boolean-expression do
begin
Statement;
Statement
end;
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
4
Set
CountEmp
to 0
CountEmp < 4
false
while ‫دﺳﺘﻮر‬
‫ﻣﺘﻐﻴﺮ ﻛﻨﺘﺮل ﺣﻠﻘﻪ‬
true
Read rate
and hours
Compute
pay
Output pay
Exit loop
‫ﻧﻮري‬: ‫ﻣﺪرس‬
Increase
CountEmp
by 1
‫ﺷﺮط ﺗﻜﺮار ﺣﻠﻘﻪ‬
CountEmp := 0;
while CountEmp < 4 do
begin
Write('Hours: ');
ReadLn(Hours);
Write('Rate: ');
ReadLn(Rate);
Pay := Hours * Rate;
WriteLn('Weekly pay is', Pay);
CountEmp := CountEmp + 1
end; {while}
WriteLn('Pay for ', CountEmp,
Employees calculated');
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﺑﺪﻧﻪ ﺣﻠﻘﻪ‬
5
‫ﻧﻜﺎت دﺳﺘﻮر ‪while‬‬
‫‪y‬‬
‫‪y‬‬
‫‪y‬‬
‫‪y‬‬
‫ﻗﺒﻞ از اﺟﺮاي ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﺷﺮط ﺗﻜﺮار ﺣﻠﻘﻪ ﺑﺮرﺳﻲ ﻣﻲﺷﻮد‪.‬‬
‫در ﺻﻮرت ﺑﺮﻗﺮاري ﺷﺮط‪ ،‬ﺑﺪﻧﻪ اﺟﺮا ﻣﻲﺷﻮد‪.‬‬
‫ﺗﺎ زﻣﺎﻧﻲ ﻛﻪ ﺷﺮط ﺑﺮﻗﺮار ﺑﺎﺷﺪ‪ ،‬اﺟﺮاي ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﺗﻜﺮار ﻣﻲﺷﻮد‪.‬‬
‫در ﺻﻮرﺗﻲ ﻛﻪ ﻫﻤﻮاره ﺷﺮط ﺑﺪﻧﻪ درﺳﺖ ﺑﺎﺷﺪ‪ ،‬ﺣﻠﻘﻪ ﺑﻲﻧﻬﺎﻳﺖ ﺧﻮاﻫﻴﻢ‬
‫داﺷﺖ‪.‬‬
‫‪while true do‬‬
‫;‪Statement‬‬
‫‪while 1 = 1 do‬‬
‫‪Statement‬‬
‫‪6‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﻣﺘﻐﻴﺮﻛﻨﺘﺮل ﺣﻠﻘﻪ‬
‫‪ y‬ﻣﻘﺪار اﻳﻦ ﻣﺘﻐﻴﺮ اﻣﻜﺎن ﺗﻜﺮار ﺣﻠﻘﻪ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪ y‬اﻳﻦ ﻣﺘﻐﻴﺮ ﺑﺎﻳﺪ‬
‫‪ y‬ﻣﻘﺪار دﻫﻲ اوﻟﻴﻪ ﺷﻮد‪.‬‬
‫‪y‬‬
‫در ﻣﺜﺎل ﻗﺒﻞ ﻣﻘﺪار اوﻟﻴﻪ ‪ 0‬اﺳﺖ‪.‬‬
‫‪ y‬ﻣﻘﺎﻳﺴﻪ ﺷﻮد‪.‬‬
‫‪y‬‬
‫در ﻣﺜﺎل ﻗﺒﻞ ﭘﻴﺶ از ﻫﺮ ﺑﺎر اﺟﺮاي ﺑﺪﻧﻪ ﻛﻤﺘﺮ از ‪ 4‬ﺑﻮدن ﺑﺮرﺳﻲ ﻣﻲﺷﻮد‪.‬‬
‫‪ y‬ﻣﻘﺪار آن ﺗﻐﻴﻴﺮ ﻳﺎﺑﺪ‪.‬‬
‫‪y‬‬
‫‪7‬‬
‫در ﻫﺮ ﺑﺎر اﺟﺮاي ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﻣﻘﺪار آن ‪1‬واﺣﺪ اﻓﺰاﻳﺶ ﻣﻲﻳﺎﺑﺪ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﻧﻜﺎت دﺳﺘﻮر ‪while‬‬
‫‪ y‬در ﺻﻮرت ﺑﺮوز ﻳﻜﻲ از ﺧﻄﺎﻫﺎي زﻳﺮ ﺣﻠﻘﻪ ﺑﻲﻧﻬﺎﻳﺖ ﺧﻮاﻫﻴﺪ داﺷﺖ‪:‬‬
‫;‬
‫‪ y‬ﺑﻌﺪ از ﻛﻠﻤﻪ ‪ do‬ﻗﺮار ﺑﮕﻴﺮد‪.‬‬
‫‪ y‬ﻋﺪم وﺟﻮد دﺳﺘﻮري ﺑﺮاي ﺗﻐﻴﻴﺮ ﻣﻘﺪار ﻣﺘﻐﻴﺮ ﻛﻨﺘﺮل ﺣﻠﻘﻪ در ﺑﺪﻧﻪ ﺣﻠﻘﻪ‪.‬‬
‫‪8‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫اﻧﻮاع ﺣﻠﻘﻪ‬
‫‪ y‬ﺣﻠﻘﻪﻫﺎي ﺷﻤﺎرﺷﻲ‬
‫‪ y‬ﺗﻌﺪاد ﺗﻜﺮار ﺗﻮﺳﻂ ﻳﻚ ﻣﺘﻐﻴﺮ ﺷﻤﺎرﻧﺪه ﻣﺸﺨﺺ ﻣﻲﺷﻮد‪ .‬ﻣﺎﻧﻨﺪ ﺣﻠﻘﻪ ‪.for‬‬
‫‪ y‬ﺣﻠﻘﻪﻫﺎي ﻛﻨﺘﺮل ﺷﺪه ﺑﺎ ﺷﺮط‬
‫‪ y‬ﻣﻘﺪار ﻣﺤﺎﻓﻆ ‪ :‬ورود ﻳﻚ ﻣﻘﺪار از ﻗﺒﻞ ﻣﻌﻠﻮم‪ ،‬ﻣﺜﻞ ﻋﺪد ‪ -1‬ﭘﺎﻳﺎن ﺣﻠﻘﻪ را‬
‫ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪ y‬ﻣﻘﺪار ﺑﻮﻟﻲ ‪ :‬ﻳﻚ ﻣﺘﻐﻴﺮ ﺑﻮﻟﻲ‪ ،‬ﺗﻜﺮار ﻳﺎ ﻋﺪم ﺗﻜﺮار ﺣﻠﻘﻪ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪9‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﺣﻠﻘﻪ ﺷﻤﺎرﺷﻲ‬
CountStar := 0;
While CountStar < N do
begin
Write(‘*’);
CountStar := CountStar + 1
end
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
10
‫ﺣﻠﻘﻪﻫﺎي ﺷﻤﺎرﺷﻲ‬
‫ ﻣﺤﺎﺳﺒﻪ ﻣﻴﺎﻧﮕﻴﻦ ﻣﺠﻤﻮﻋﻪاي از اﻋﺪاد‬y
....
Write('Enter number of students');
ReadLn(NumofStd);
TotalResult := 0;
StdCount := 0;
while StdCount < NumofStd do
begin
Write('Enter result for Student',StdCount);
ReadLn(Result);
TotalResult := TotalResult + Result;
StdCount := StdCount + 1;
end;
WriteLn('The average is ', TotalResult/StdCount);
...
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
11
‫ﺣﻠﻘﻪﻫﺎي ﻛﻨﺘﺮل ﺷﺪه ﺑﺎ ﺷﺮط‬
ReadLn (InitialBal);
Balance := InitialBal;
while Balance >= 0.0 do
begin
Write ('Enter next creditor >');
ReadLn (Creditor);
Write ('Enter amount owed >$');
ReadLn (Bill);
if Balance >= Bill then
WriteLn ('Issue check for $', Bill :3:2,
' to ', Creditor)
else
WriteLn ('No check issued -- ',
'final balance is ', Balance :3:2);
WriteLn;
{skip a line}
Balance := Balance - Bill
{update balance}
end; {while}
‫ي‬WriteLn
‫ﻧﻮر‬: ‫ﻣﺪرس‬
‫ ﺷﺮﻳﻒ‬to
‫ﺻﻨﻌﺘﻲ‬pay
‫– داﻧﺸﮕﺎﻩ‬any
‫ﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل‬
‫ ﺑﺮﻧﺎﻣﻪ‬bills');
('Insufficient funds
more
12
‫ﻣﺘﻐﻴﺮ ﻛﻨﺘﺮل ﺣﻠﻘﻪ‬
‫‪ y‬در اﻳﻦ ﻧﻮع ﺣﻠﻘﻪﻫﺎ ﻧﻴﺰ ﺳﻪ ﻣﺮﺣﻠﻪ ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪ‪ ،‬ﻣﻘﺎﻳﺴﻪ و ﺗﻐﻴﻴﺮ در‬
‫ﻣﻮرد ﻣﺘﻐﻴﺮ ﻛﻨﺘﺮل ﺣﻠﻘﻪ وﺟﻮد دارد‪.‬‬
‫‪ y‬در ﻣﺜﺎل ﻗﺒﻠﻲ‪ Balance ،‬ﺑﻪ ﻣﻘﺪار ‪ InititialBal‬ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪ ﺷﺪه‬
‫اﺳﺖ‪.‬‬
‫‪ y‬ﻣﻌﺘﺒﺮ ﺑﻮدن ﻣﻘﺪار ‪) Balance‬ﻧﺎﻣﻨﻔﻲ( در اﺑﺘﺪاي ﺣﻠﻘﻪ ﺑﺮرﺳﻲ ﻣﻲﺷﻮد‪.‬‬
‫‪ y‬ﻣﻘﺪار ‪ Balance‬ﺑﻌﺪ از ﻫﺮ ﺑﺎر اﺟﺮاي ﺣﻠﻘﻪ ﺑﻪروز ﻣﻲﺷﻮد‪.‬‬
‫‪13‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﺣﻠﻘﻪﻫﺎي ﻛﻨﺘﺮل ﺷﺪه ﺑﺎ ﻣﻘﺪار ﻣﺤﺎﻓﻆ‬
‫‪ y‬ﮔﺎﻫﻲ اوﻗﺎت ﺗﻌﺪاد وروديﻫﺎي ﻛﺎرﺑﺮ ﻣﺸﺨﺺ ﻧﻴﺴﺖ‪.‬‬
‫‪ y‬ﺗﻌﺪاد زﻳﺎدي ﻧﻤﺮه‬
‫‪y‬‬
‫‪y‬‬
‫‪y‬‬
‫‪y‬‬
‫‪14‬‬
‫ﺑﺎﻳﺪ روﺷﻲ را ﺑﺮاي اﺗﻤﺎم ﺗﻜﺮار ﺣﻠﻘﻪ ﺗﻮﺳﻂ ﻛﺎرﺑﺮ ﻓﺮاﻫﻢ آورﻳﻢ‪.‬‬
‫ﻣﻘﺎدﻳﺮ ﻣﺤﺎﻓﻆ در ﭼﻨﻴﻦ ﻣﺴﺎﻳﻠﻲ اﺳﺘﻔﺎده ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫زﻣﺎﻧﻲ ﻛﻪ ﻛﺎرﺑﺮ ﻣﻘﺪار ﻣﺤﺎﻓﻆ را وارد ﻛﺮد‪ ،‬ﺣﻠﻘﻪ ﭘﺎﻳﺎن ﻣﻲﻳﺎﺑﺪ‪.‬‬
‫ﻣﻘﺪار ﻣﺤﺎﻓﻆ ﺑﺎﻳﺪ درﺳﺖ اﻧﺘﺨﺎب ﺷﻮد‪ ،‬و ﺟﺰو ﻣﺠﻤﻮﻋﻪ وروديﻫﺎي ﻣﺠﺎز‬
‫ﻧﺒﺎﺷﺪ‪ ،‬ﻣﺜﻞ ﻧﻤﺮه ﻣﻨﻔﻲ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﺣﻠﻘﻪﻫﺎي ﻛﻨﺘﺮل ﺷﺪه ﺑﺎ ﻣﻘﺪار ﻣﺤﺎﻓﻆ‬
read the ID of the first student
while ID is not equal to ‐999 do
begin
read first exam result;
read second exam result;
calculate grade;
read ID of the next student
end
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
15
‫ﺣﻠﻘﻪﻫﺎي ﻛﻨﺘﺮل ﺷﺪه ﺑﺎ ﻣﺘﻐﻴﺮ ﺑﻮﻟﻲ‬
‫‪ y‬ﻳﻚ ﻣﺘﻐﻴﺮ ﺑﻮﻟﻲ ﺑﺎ ﻧﺎم ‪ Flag‬ﺗﻌﺮﻳﻒ ﻣﻲﺷﻮد ﻛﻪ ﻣﻘﺪار آن ﺑﺮوز ﻳﻚ واﻗﻌﻪ‬
‫را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪ y‬در اﺑﺘﺪا اﻳﻦ ﻣﺘﻐﻴﺮ ﻣﻘﺪار ‪ False‬دارد‪.‬‬
‫‪ y‬در اداﻣﻪ‪ ،‬در ﺻﻮرت وﻗﻮع ﻳﻚ ﺷﺮط ﺧﺎص‪ ،‬اﻳﻦ ﻣﺘﻐﻴﺮ ﻣﻘﺪار ‪True‬‬
‫ﻣﻲﮔﻴﺮد‪.‬‬
‫‪ y‬ﺣﻠﻘﻪ ﺗﺎ زﻣﺎﻧﻲ ﻛﻪ ﻣﻘﺪار اﻳﻦ ﻣﺘﻐﻴﺮ ﺗﻐﻴﻴﺮ ﻧﻜﻨﺪ‪ ،‬ﺗﻜﺮار ﻣﻲﺷﻮد‪.‬‬
‫‪16‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﺣﻠﻘﻪﻫﺎي ﻛﻨﺘﺮل ﺷﺪه ﺑﺎ ﻣﺘﻐﻴﺮ ﺑﻮﻟﻲ‬
DigitRead := False;
while not DigitRead do
begin
Write('Enter another data character : ');
ReadLn(NextChar);
DigitRead := ('0' <= NextChar) and (NextChar <= '9')
end; {while}
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
17
N ‫ﺑﺮﻧﺎﻣﻪ ﺗﺴﺖ اول ﺑﻮدن ﻋﺪد‬
IsPrime := True;
Divisor := 2;
while (IsPrime) and (Divisor <= sqrt(N)) do
begin
IsPrime := N mod Divisor <> 0;
Divisor := Divisor + 1
end;
if IsPrime then
WriteLn(N, ‘ is a prime number’)
else
WriteLn(N, ‘ is not a prime number’)
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
18
repeat ‫دﺳﺘﻮر‬
repeat Statement
until boolean‐expression
repeat Statement;
Statement
until boolean‐expression
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
19
‫دﺳﺘﻮر ‪repeat‬‬
‫‪ y‬اﻳﻦ دﺳﺘﻮر ﻣﺎﻧﻨﺪ دو دﺳﺘﻮر ‪ for‬و ‪ while‬ﺑﺮاي اﻳﺠﺎد ﺗﻜﺮار اﺳﺘﻔﺎده‬
‫ﻣﻲﺷﻮد‪.‬‬
‫‪ y‬ﺑﺮﺧﻼف دﺳﺘﻮر ‪ while‬زﻣﺎﻧﻲ دﺳﺘﻮر ‪ repeat‬ﭘﺎﻳﺎن ﻣﻲﻳﺎﺑﺪ ﻛﻪ ﺷﺮط‬
‫ﺣﻠﻘﻪ ﺑﺮﻗﺮار ﺷﻮد‪.‬‬
‫‪ y‬ﭼﻮن ﺷﺮط در اﻧﺘﻬﺎي ﺑﺪﻧﻪ ﺣﻠﻘﻪ ذﻛﺮ ﻣﻲﺷﻮد‪ ،‬ﺣﻠﻘﻪ ﺣﺪاﻗﻞ ﻳﻚﺑﺎر اﺟﺮا‬
‫ﻣﻲﺷﻮد )ﺑﺮﺧﻼف ‪ for‬و ‪.(while‬‬
‫‪20‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
repeat ‫ و‬while ‫ﻣﻘﺎﻳﺴﻪ‬
CountEmp := 0;
repeat
Write('Hours: '); ReadLn(Hours);
Write('Rate: '); ReadLn(Rate);
Pay := Hours * Rate;
WriteLn('Weekly pay is', Pay);
CountEmp := CountEmp + 1
until CountEmp>=4;
WriteLn(CountEmp,' Employees calculated');
CountEmp := 0;
while CountEmp < 4 do
begin
Write('Hours: '); ReadLn(Hours);
Write('Rate: '); ReadLn(Rate);
Pay := Hours * Rate;
WriteLn('Weekly pay is', Pay);
CountEmp := CountEmp + 1
end; {while}
WriteLn(CountEmp,' Employees calculated');
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
21
‫ﻣﻘﺎﻳﺴﻪ ‪ while‬و ‪repeat‬‬
‫‪ y‬ﻳﻚ ﺣﻠﻘﻪ ‪ repeat‬را ﻣﻲﺗﻮان ﺑﻪ راﺣﺘﻲ ﺑﻪ ﻳﻚ ﺣﻠﻘﻪ ‪ while‬ﺗﺒﺪﻳﻞ ﻛﺮد‪.‬‬
‫‪ y‬ﻫﻤﻪ ﺣﻠﻘﻪﻫﺎي ‪ while‬را ﻧﻤﻲﺗﻮان ﺑﻪ ﺣﻠﻘﻪ ‪ repeat‬ﺗﺒﺪﻳﻞ ﻛﺮد‬
‫)دﺳﺘﻮرات اﺿﺎﻓﻲ ﻣﻮرد ﻧﻴﺎز اﺳﺖ(‪.‬‬
‫‪ y‬ﭼﻮن در ﺣﻠﻘﻪ ‪ while‬اﻣﻜﺎن ﭘﺮش از ﻛﻞ ﺣﻠﻘﻪ وﺟﻮد دارد )ﻋﺪم اﺟﺮاي‬
‫ﺑﺪﻧﻪ ﺣﻠﻘﻪ(‪ ،‬ﻧﺴﺒﺖ ﺑﻪ ‪ repeat‬ﺗﺮﺟﻴﺢ دارد‬
‫‪ y‬در ﺑﺮﺧﻲ ﻣﻮارد اﺟﺮاي ﺣﺪاﻗﻞ ﻳﻚﺑﺎر ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﻣﻮرد ﻧﻴﺎز اﺳﺖ ﻛﻪ‬
‫ﻣﻲﺗﻮان از ‪ repeat‬اﺳﺘﻔﺎده ﻛﺮد‪.‬‬
‫‪22‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﭘﺮﺳﺶ از ﻛﺎرﺑﺮ ﺑﺮاي اداﻣﻪ ﻛﺎر‬
Repeat
Writeln(‘Your program is running!’);
Readln (c)
Until c = ‘N’ ;
Writeln(‘Your program is finished!’);
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
23
‫ﺳﺮي ﻓﻴﺒﻮﻧﺎﺗﭽﻲ‬
‫‪ y‬ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻋﺪدي را از ﻛﺎرﺑﺮ درﻳﺎﻓﺖ ﻛﻨﺪ و دﻧﺒﺎﻟﻪ اﻋﺪاد‬
‫ﻓﻴﺒﻮﻧﺎﺗﭽﻲ ﻛﻮﭼﻜﺘﺮ از ﻋﺪد وارد ﺷﺪه را ﭼﺎپ ﻧﻤﺎﻳﺪ‪.‬‬
‫‪24‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﺳﺮي ﻓﻴﺒﻮﻧﺎﺗﭽﻲ‬
var
A, B, C, N : Integer;
begin
Readln(N);
A := 0;
B := 1;
Repeat
WriteLn(B);
C := B;
B := A + B;
A := C
until B > N
end.
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
25
‫دﺳﺘﻮرات ﻛﻨﺘﺮل ﺟﺮﻳﺎن ﺣﻠﻘﻪ‬
‫‪ : Break y‬اﺟﺮاي ﺣﻠﻘﻪ را ﻣﺘﻮﻗﻒ ﻣﻲ ﻛﻨﺪ و ﻛﻨﺘﺮل ﺑﺮﻧﺎﻣﻪ ﺑﻪ دﺳﺘﻮر ﺑﻌﺪ از‬
‫ﺣﻠﻘﻪ ﻣﻲ رود‪.‬‬
‫‪ : Continue y‬اﺟﺮاي ﺑﺪﻧﻪ ﺣﻠﻘﻪ را ﻣﺘﻮﻗﻒ ﻣﻲﻛﻨﺪ و ﻣﺮﺣﻠﻪ ﺑﻌﺪي اﺟﺮاي‬
‫ﺣﻠﻘﻪ را آﻏﺎز ﻣﻲﻛﻨﺪ‪.‬‬
‫‪26‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﺣﻠﻘﻪﻫﺎي ﺗﻮ در ﺗﻮ‬
.‫ ﺣﻠﻘﻪﻫﺎ ﻣﻲﺗﻮاﻧﻨﺪ ﺑﻪ ﺻﻮرت ﺗﻮ در ﺗﻮ اﺳﺘﻔﺎده ﺷﻮﻧﺪ‬y
for I:=1 to 4 do
begin
repeat
Write('enter a character: ');
ReadLn(Ch1);
DigitRead := ('0' <= Ch1) and (Ch1 <= '9')
until DigitRead; {repeat}
WriteLn('The digit number ' I, ' is ', Ch1)
end;
WriteLn(I, 'digits read!');
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
27
‫ﻣﻘﺎﻳﺴﻪ اﻋﺪاد اﻋﺸﺎري‬
‫‪0.0000000000E+00‬‬
‫;‪A := 111111.1111111112‬‬
‫;‪B := 111111.1111111111‬‬
‫;)‪WriteLn(A – B‬‬
‫‪1.0000000000E-10‬‬
‫‪28‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫;‪A := 0.0000000002‬‬
‫;‪B := 0.0000000001‬‬
‫;)‪WriteLn(A – B‬‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﻣﻘﺎﻳﺴﻪ اﻋﺪاد اﻋﺸﺎري‬
‫‪ y‬ﺑﺮاي ﻣﻘﺎﻳﺴﻪ ﺗﺴﺎوي ﻳﺎ ﻋﺪم ﺗﺴﺎوي دو ﻋﺪد اﻋﺸﺎري از ﻋﻤﻠﮕﺮ = ﻳﺎ ><‬
‫اﺳﺘﻔﺎده ﻧﻜﻨﻴﺪ‪.‬‬
‫‪ y‬اﮔﺮ ﻣﻲﺗﻮاﻧﻴﺪ از > ﻳﺎ < اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪ ،‬در ﻏﻴﺮ اﻳﻨﺼﻮرت از ﻳﻚ ﻣﻘﺪار‬
‫‪ Delta‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫‪Average > 12 – 0.001‬‬
‫‪ y‬ﻣﺜﻼً ﻋﺪم ﻣﺸﺮوﻃﻲ داﻧﺸﺠﻮ‪:‬‬
‫‪29‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬
‫ﻣﺘﻐﻴﺮ ﻛﻨﺘﺮل ﺣﻠﻘﻪ اﻋﺸﺎري‬
A := 1.0;
while A <> 0.0 do
begin
WriteLn(A:8:5);
A := A – (1/3);
ReadLn
end
A := 2.0;
while A <> 0.0 do
begin
WriteLn(A:8:5);
A := A – (1/3);
ReadLn
end
while A > 0.0001 do
‫ﻧﻮري‬: ‫ﻣﺪرس‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
30
‫ﺗﻤﺮﻳﻦ‬
‫‪ y‬ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪد ﺻﺤﻴﺢ را درﻳﺎﻓﺖ ﻛﺮده و ﺗﻌﺪاد ارﻗﺎم آن‬
‫را ﭼﺎپ ﻧﻤﺎﻳﺪ‪.‬‬
‫‪31‬‬
‫ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﮑﺎل – داﻧﺸﮕﺎﻩ ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻣﺪرس‪: ‬ﻧﻮري‬