ﻣﺪرس :ﻧﻮري آذر 88 زﻳﺮﺑﺮﻧﺎﻣﻪ ) Procedure yزﻳﺮﺑﺮﻧﺎﻣﻪ(: yﻣﺎﻧﻨﺪ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻛﻮﭼﻚ اﺳﺖ ﺑﺎ ﻫﻤﺎن ﺳﺎﺧﺘﺎر. yﺑﻠﻮك ﺳﺎﺧﺘﻤﺎﻧﻲ ﻳﻚ ﺑﺮﻧﺎﻣﻪ اﺳﺖ. yاز ﻫﺮ ﺟﺎﻳﻲ ﻗﺎﺑﻞ ﻓﺮاﺧﻮاﻧﻲ اﺳﺖ )از ﺟﻤﻠﻪ زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎي دﻳﮕﺮ( 2 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﺗﻌﺮﻳﻒ و ﻓﺮاﺧﻮاﻧﻲ زﻳﺮﺑﺮﻧﺎﻣﻪSyntax procedure pname (formal parameters); declaration section begin ﺗﻌﺮﻳﻒ زﻳﺮﺑﺮﻧﺎﻣﻪ procedure body end; pname(actual parameters); ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻓﺮاﺧﻮاﻧﻲ زﻳﺮﺑﺮﻧﺎﻣﻪ 3 ﻗﻮاﻋﺪ اﺳﺘﻔﺎده از زﻳﺮﺑﺮﻧﺎﻣﻪ yاﻧﻄﺒﺎق ﭘﺎراﻣﺘﺮﻫﺎي اﺻﻠﻲ و ﻗﺮاردادي از روي ﻣﺤﻞ آﻧﻬﺎ در ﻟﻴﺴﺖ ﭘﺎراﻣﺘﺮﻫﺎ ﻣﺸﺨﺺ ﻣﻲﺷﻮد. yﻧﻮع ﭘﺎراﻣﺘﺮ اﺻﻠﻲ در ﻣﻮرد ﭘﺎراﻣﺘﺮﻫﺎي ﻣﺘﻐﻴﺮي ):(variable yﺑﺎ ﻧﻮع ﭘﺎراﻣﺘﺮ ﻗﺮاردادي ﺑﺎﻳﺪ ﻋﻴﻨﺎً ﻳﻜﻲ ﺑﺎﺷﺪ. yﻧﻮع ﭘﺎراﻣﺘﺮ اﺻﻠﻲ در ﻣﻮرد ﭘﺎراﻣﺘﺮﻫﺎي ﻣﻘﺪاري ):(value yﻛﺎﻓﻲ اﺳﺖ ﻗﺎﺑﻞ اﻧﺘﺴﺎب ﺑﻪ ﻧﻮع ﭘﺎراﻣﺘﺮ ﻗﺮاردادي ﺑﺎﺷﺪ. yﭘﺎراﻣﺘﺮ اﺻﻠﻲ در ﻣﻮرد ﭘﺎراﻣﺘﺮﻫﺎي ﻣﺘﻐﻴﺮي: yﺣﺘﻤﺎً ﺑﺎﻳﺪ ﻣﺘﻐﻴﺮ ﺑﺎﺷﺪ. yﭘﺎراﻣﺘﺮ اﺻﻠﻲ در ﻣﻮرد ﭘﺎراﻣﺘﺮﻫﺎي ﻣﻘﺪاري: yﻣﻲﺗﻮاﻧﺪ ﻣﺘﻐﻴﺮ ،ﻣﻘﺪار ﺛﺎﺑﺖ ﻳﺎ ﻳﻚ ﻋﺒﺎرت ﺑﺎﺷﺪ. 4 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري var x,y,z : real; m, n : integer; ﻣﺜﺎل procedure Message(var A,B:real; x: real); … Message(x,y,z); Message(m,y,n); Message(25.0, 15,x); Message(y+z,y-z,m); Message(x,y,m+n); Message(z,y, MaxInt); ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 5 ﻗﻮاﻋﺪ اﺳﺘﻔﺎده از زﻳﺮﺑﺮﻧﺎﻣﻪ yﺑﻬﺘﺮ اﺳﺖ از ﻣﺘﻐﻴﺮﻫﺎي ﻫﻢ ﻧﺎم ﻛﻪ ﻳﻜﻲ ﺳﺮاﺳﺮي و دﻳﮕﺮي ﻣﺤﻠﻲ اﺳﺖ اﺳﺘﻔﺎده ﻧﺸﻮد )ﺑﺮاي ﺟﻠﻮﮔﻴﺮي از اﺷﺘﺒﺎه ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ( yﻫﻨﮕﺎم اﺳﺘﻔﺎده از ﻣﺘﻐﻴﺮ ﺑﻪ ﺣﻮزه دﺳﺘﺮﺳﻲ آن ﺗﻮﺟﻪ ﻛﻨﻴﺪ. yﻣﺘﻐﻴﺮﻫﺎي ﺳﺮاﺳﺮي در ﻛﻞ ﺑﺮﻧﺎﻣﻪ ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ ﻫﺴﺘﻨﺪ yﻣﺘﻐﻴﺮﻫﺎي ﻣﺤﻠﻲ ﻓﻘﻂ در زﻳﺮﺑﺮﻧﺎﻣﻪاي ﻛﻪ در آن ﺗﻌﺮﻳﻒ ﺷﺪهاﻧﺪ. yﺗﻌﺮﻳﻒ ﻫﻤﻪ ﻣﺘﻐﻴﺮﻫﺎي ﻻزم ﺑﻪ ﺻﻮرت ﺳﺮاﺳﺮي ﻣﺸﻜﻼت ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ را ﺣﻞ ﻧﻤﻲ ﻛﻨﺪ. yدر ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﺑﺰرگ ﺗﻌﻴﻴﻦ اﻳﻦ ﻛﻪ ﻛﺪام زﻳﺮﺑﺮﻧﺎﻣﻪ ﻣﻘﺪار ﻣﺘﻐﻴﺮ ﺳﺮاﺳﺮي را ﺗﻐﻴﻴﺮ ﻣﻲدﻫﺪ دﺷﻮار اﺳﺖ. 6 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﺧﺮوﺟﻲ اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﭼﻴﺴﺖ؟ program MUSIC (output); const SCALE = 'The note is '; var JohnnyOneNote : char; procedure Tune; const SCALE = 'The note now is '; var JohnnyOneNote : char; begin JohnnyOneNote := 'A'; writeln(SCALE, JohnnyOneNote ) end; The note is D The note now is A The note is D begin JohnnyOneNote := 'D'; writeln(SCALE, JohnnyOneNote ); Tune; writeln(SCALE, JohnnyOneNote ) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 7 ﻋﻤﻠﻜﺮد اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﭼﻴﺴﺖ؟ var w,x,y,z : integer; procedure SumDiff(n1,n2: integer; var n3,n4:integer); begin n3 := n1+n2 ; n4 := n1- n2; end; begin x:= 5; y:=3; z:=7; w:=9; SumDiff(x,y,z,w); SumDiff(x,z,w,y); SumDiff(x,w,z,y); SumDiff(x,y,z,w); end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 8 ﻓﺮاﺧﻮاﻧﻲ زﻳﺮﺑﺮﻧﺎﻣﻪ yﻋﻼوه ﺑﺮ اﻳﻦ ﻛﻪ زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎ را ﻣﻲﺗﻮان از ﺑﺮﻧﺎﻣﻪ اﺻﻠﻲ ﻓﺮاﺧﻮاﻧﻲ ﻛﺮد ،از زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎي دﻳﮕﺮ ﻧﻴﺰ ﻗﺎﺑﻞ ﻓﺮاﺧﻮاﻧﻲ ﻫﺴﺘﻨﺪ. yﻓﻘﻂ زﻳﺮﺑﺮﻧﺎﻣﻪ ﻓﺮاﺧﻮاﻧﻲ ﺷﺪه ﺑﺎﻳﺪ ﻗﺒﻞ از زﻳﺮﺑﺮﻧﺎﻣﻪ ﻓﺮاﺧﻮاﻧﻨﺪه ﺗﻌﺮﻳﻒ ﺷﺪه ﺑﺎﺷﺪ. 9 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﻓﺮاﺧﻮاﻧﻲ زﻳﺮﺑﺮﻧﺎﻣﻪ procedure B; begin WriteLn('B is called'); WriteLn('B is finished'); end; procedure A; Begin WriteLn('A is called'); WriteLn('Calling B'); B; WriteLn('A is finished'); end; Begin WriteLn('Calling A'); A; WriteLn('Calling B'); B; end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 10 زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎي ﺗﻮ در ﺗﻮ y y y y 11 ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﮔﻔﺘﻪ ﺷﺪ ،زﻳﺮﺑﺮﻧﺎﻣﻪ ،ﺧﻮد ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻛﻮﭼﻚ اﺳﺖ. ﺑﻨﺎﺑﺮاﻳﻦ ﻣﻲﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﻫﻤﻪ ﭼﻴﺰﻫﺎﻳﻲ ﻛﻪ در ﻳﻚ ﺑﺮﻧﺎﻣﻪ وﺟﻮد دارد ﺑﺎﺷﺪ، از ﺟﻤﻠﻪ ﻳﻚ زﻳﺮﺑﺮﻧﺎﻣﻪ دﻳﮕﺮ. ﻣﺘﻐﻴﺮﻫﺎي ﻣﺤﻠﻲ زﻳﺮﺑﺮﻧﺎﻣﻪ ﺑﻴﺮوﻧﻲ ،ﻫﻤﺎﻧﻨﺪ ﻣﺘﻐﻴﺮﻫﺎي ﺳﺮاﺳﺮي ﺑﺮاي زﻳﺮﺑﺮﻧﺎﻣﻪ داﺧﻠﻲ ﻣﻲﺑﺎﺷﻨﺪ. زﻳﺮﺑﺮﻧﺎﻣﻪ داﺧﻠﻲ ،ﻓﻘﻂ از زﻳﺮﺑﺮﻧﺎﻣﻪ ﺑﻴﺮوﻧﻲ ﻗﺎﺑﻞ ﻓﺮاﺧﻮاﻧﻲ اﺳﺖ و از ﺳﺎﻳﺮ ﺑﺨﺶﻫﺎ ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ ﻧﻴﺴﺖ. ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري زﻳﺮﺑﺮﻧﺎﻣﻪ ﺗﻮ در ﺗﻮ procedure A; var x, y: integer; procedure B; var y, z: real; begin y := 10; z := 54; writeln(x + y + z) end; begin x := 6; y := 4; writeln(x + y); B; writeln(x + y) end; begin A end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 12 زﻳﺮﺑﺮﻧﺎﻣﻪ ﺑﺎزﮔﺸﺘﻲ yﻋﻼوه ﺑﺮ اﻳﻦ ﻛﻪ ﻳﻚ زﻳﺮﺑﺮﻧﺎﻣﻪ ﻣﻲﺗﻮاﻧﺪ زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎي دﻳﮕﺮ را ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﺪ ،ﻣﻲﺗﻮاﻧﺪ ﺧﻮد را ﻧﻴﺰ ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﺪ. yدر اﻳﻦ ﺻﻮرت ﻳﻚ زﻳﺮﺑﺮﻧﺎﻣﻪ ﺑﺎزﮔﺸﺘﻲ ﺧﻮاﻫﻴﻢ داﺷﺖ. 13 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﻣﺜﺎل program RecursiveProcedure; var n : Integer; procedure Print(index: Integer); begin WriteLn(index); if index > 0 then Print(index-1) end; begin Print(10); Print(4); n := 7; Print(n) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 14 ﻣﺜﺎل program RecursiveProcedure; var n : Integer; procedure Print(index: Integer); begin if index > 0 then Print(index-1); WriteLn(index) end; begin Print(10); Print(4); n := 7; Print(n) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 15 ﺗﻐﻴﻴﺮ ﭘﺎراﻣﺘﺮ ﻣﻘﺪاري program RecursiveProcedure; var n : Integer; procedure Print(index: Integer); begin WriteLn(index); index := index – 1; if index > 0 then Print(index) end; begin n := 7; Print(n); WriteLn(n) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 16 ﺗﻐﻴﻴﺮ ﭘﺎراﻣﺘﺮ ﻣﻘﺪاري program RecursiveProcedure; var n : Integer; procedure Print(var index: Integer); begin WriteLn(index); index := index – 1; if index > 0 then Print(index) end; begin n := 7; Print(n); WriteLn(n) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 17 زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎي ﺑﺎزﮔﺸﺘﻲ yاﮔﺮ دو زﻳﺮﺑﺮﻧﺎﻣﻪ Aو ،Bﻫﺮ ﻛﺪام از دﻳﮕﺮي اﺳﺘﻔﺎده ﻛﻨﻨﺪ ،ﻳﻚ ﺣﻠﻘﻪ را ﺗﺸﻜﻴﻞ ﻣﻲدﻫﻨﺪ ﻛﻪ در اﻳﻦ ﺻﻮرت ﻧﻴﺰ در زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎزﮔﺸﺖ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ. yﭼﻮن زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪ ﺗﺮﺗﻴﺐ ﺗﻌﺮﻳﻒ ﻣﻲﺷﻮﻧﺪ و ﻫﻨﮕﺎم ﺗﻌﺮﻳﻒ اوﻟﻲ، زﻳﺮﺑﺮﻧﺎﻣﻪ دوم ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻧﻴﺴﺖ ،ﭘﺎﺳﻜﺎل ﻣﻔﻬﻮﻣﻲ را ﺑﺎ ﻋﻨﻮان forward referenceﻣﻌﺮﻓﻲ ﻣﻲﻛﻨﺪ. yﺑﺎ اﻳﻦ ﻣﻔﻬﻮم ﻣﻲﺗﻮان ﭘﻴﺶ از ﺗﻌﺮﻳﻒ ﻛﺎﻣﻞ ﻳﻚ زﻳﺮﺑﺮﻧﺎﻣﻪ از آن اﺳﺘﻔﺎده ﻛﺮد. 18 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﻣﺜﺎل program ForwardReferenceExample; procedure B(index : Integer); forward; procedure A(index : Integer); begin if index > 0 then B(index div 2) end; procedure B(index : Integer); begin if index > 0 then A(index-2) end; begin B(10); A(50); end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 19 ﻣﺜﺎل program ForwardReferenceExample; procedure B(index : Integer); forward; procedure A(index : Integer); begin if index > 0 then B(index div 2) end; procedure B; begin if index > 0 then A(index-2) end; begin B(10); A(50); end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 20 ﻣﺜﺎل program ForwardReferenceExample; Var NumberOfTimes : Integer; procedure WriteALine(var count : Integer); forward; procedure Decrement(var index : Integer); begin index := index – 1; if index > 0 then WriteALine(index) end; procedure WriteALine; begin WriteLn(‘The value of the count is now ‘, count); Decrement(count) end; begin NumberOfTimes := 7; Decrement(NumberOfTimes); WriteLn; NumberOfTimes := 7; WriteALine(NumberOfTimes) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 21 ﺗﺎﺑﻊ yﻳﻚ ﺗﺎﺑﻊ ﻫﻤﺎﻧﻨﺪ ﻳﻚ زﻳﺮﺑﺮﻧﺎﻣﻪ اﺳﺖ ،ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﻛﻪ ﻫﻤﻮاره ﻳﻚ ﻣﻘﺪار ﺑﺮﮔﺸﺘﻲ ﻧﻴﺰ دارد. yﺑﻨﺎﺑﺮاﻳﻦ ﺑﻌﺪ از ﻟﻴﺴﺖ ﭘﺎراﻣﺘﺮﻫﺎي ﺗﺎﺑﻊ ،ﺑﺎﻳﺪ ﻧﻮع ﻣﻘﺪار ﺑﺮﮔﺸﺘﻲ را ﻣﺸﺨﺺ ﻛﻨﻴﻢ. yﭘﺎﺳﻜﺎل در ﺑﺪﻧﻪ ﺗﺎﺑﻊ ،ﻣﺘﻐﻴﺮي ﻫﻤﻨﺎم ﺑﺎ ﻧﺎم ﺗﺎﺑﻊ در اﺧﺘﻴﺎر ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﻗﺮار ﻣﻲدﻫﺪ ﺗﺎ ﺑﺘﻮاﻧﺪ ﻣﻘﺪار ﺑﺮﮔﺸﺘﻲ را در آن ﻗﺮار دﻫﺪ. 22 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﺗﺎﺑﻊ ﺟﻤﻊ زدن دو ﻋﺪد program TestFunction; var a, b, c: Integer; function Add(x, y : Integer) : Integer; begin Add := x + y; end; begin ReadLn(a, b); c := Add(a, b); WriteLn(‘The sum is ‘, c) end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 23 ﺗﺎﺑﻊ yﻳﻚ ﺗﺎﺑﻊ را ﻧﻤﻲﺗﻮان ﺑﻪ ﺻﻮرت ﻳﻚ دﺳﺘﻮر ﻣﺠﺰا ﻓﺮاﺧﻮاﻧﻲ ﻛﺮد ،ﺑﻠﻜﻪ ﺑﺎﻳﺪ در ﻳﻚ ﻋﺒﺎرت اﺳﺘﻔﺎده ﺷﻮد. ;)Add(a, b yﻣﻲﺗﻮان ﺗﺎﺑﻊ را ﺑﻪ ﺻﻮرت ﭘﺎراﻣﺘﺮي از ﻳﻚ زﻳﺮﺑﺮﻧﺎﻣﻪ ﻳﺎ ﺗﺎﺑﻊ دﻳﮕﺮ اﺳﺘﻔﺎده ﻛﺮد )آن ﭘﺎراﻣﺘﺮ ﺑﺎﻳﺪ ﻣﻘﺪاري ﺑﺎﺷﺪ( ;)):= Add(10, Add(a, b 24 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ c ﻣﺪرس: ﻧﻮري ﺗﺎﺑﻊ ﻣﺤﺎﺳﺒﻪ ﺣﺎﺻﻠﻀﺮب function Multiply(x, y : Integer) : Integer; var temp : Integer; begin temp := x * y; Multiply := temp; end; ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 25 ﺗﺎﺑﻌﻲ ﺑﺮاي ﺳﺆال از ﻛﺎرﺑﺮ var i : Integer; function UserQuits : Boolean; var Answer : Char; begin Write(‘Another value ? (Y/N)’); ReadLn(Answer); UserQuits := Upcase(Answer) <> ‘Y’ end; begin i := 0; repeat i := i + 1; WriteLn(‘i = ‘, i) until UserQuits end. ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 26 ﺗﺎﺑﻊ yدر ﺑﺪﻧﻪ ﺗﺎﺑﻊ ﻧﺒﺎﻳﺪ ﻣﺘﻐﻴﺮ ﻫﻤﻨﺎم ﺗﺎﺑﻊ را در ﺳﻤﺖ راﺳﺖ ﻳﻚ ﻋﻤﻠﻴﺎت اﻧﺘﺴﺎب ﻗﺮار داد. ;function Fact(n : Integer) : Integer var ;i : Integer اﺷﺘﺒﺎه اﺳﺖ ،زﻳﺮا ﭘﺎﺳﻜﺎلFact ، begin ﺳﻤﺖ راﺳﺖ را ﺑﻪ ﻋﻨﻮان ;Fact := 1 ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ در ﻧﻈﺮ ﻣﻲﮔﻴﺮد. for i := 1 to n do Fact := i * Fact ;end 27 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﺗﺼﺤﻴﺢ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ function Fact(n : Integer) : Integer; var i : Integer; f : Integer; begin f := 1; for i := 1 to n do f := i * f; Fact := f end; ﻧﻮري: ﻣﺪرس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 28 ﺗﺎﺑﻊ ﺑﺎزﮔﺸﺘﻲ yﻫﻤﺎﻧﻨﺪ زﻳﺮﺑﺮﻧﺎﻣﻪ ،ﻳﻚ ﺗﺎﺑﻊ ﻣﻲﺗﻮاﻧﺪ ﺧﻮد را ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﺪ. yدر اﻳﻦ ﺻﻮرت ﺗﺎﺑﻊ ﺑﺎزﮔﺸﺘﻲ ﺧﻮاﻫﻴﻢ داﺷﺖ. yاﺳﺘﻔﺎده از ﺗﺎﺑﻊ ﺑﺎزﮔﺸﺘﻲ ﺑﺮاي ﺣﻞ ﺑﺴﻴﺎري از ﻣﺴﺎﻳﻞ دﺷﻮار ﻣﻨﺎﺳﺐ اﺳﺖ. yوﻟﻲ ﻛﺎراﻳﻲ ﺗﻮاﺑﻊ ﺑﺎزﮔﺸﺘﻲ ﺑﻪ ﻧﺴﺒﺖ ﺗﻮاﺑﻊ ﻣﻌﻤﻮﻟﻲ ﻛﻤﻲ ﻛﻤﺘﺮ اﺳﺖ. 29 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﻣﺤﺎﺳﺒﻪ ﻓﺎﻛﺘﻮرﻳﻞ ﺑﻪ روش ﺑﺎزﮔﺸﺘﻲ ;function Fact(n : Integer) : Integer begin if n <= 0 then Fact := 1 else )Fact := n * Fact(n-1 ;end 30 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري دﺳﺘﻮر Exit yﺑﺮاي ﺧﺮوج از زﻳﺮﺑﺮﻧﺎﻣﻪﻫﺎ و ﺗﻮاﺑﻊ در ﺷﺮاﻳﻂ ﺧﺎص ،ﻣﻲﺗﻮان از دﺳﺘﻮر Exitاﺳﺘﻔﺎده ﻛﺮد. ;function Fact(n : Integer) : Integer begin if n <= 0 then begin ;Fact := 1 Exit ;end )Fact := n * Fact(n-1 ;end 31 ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﺪرس: ﻧﻮري ﺗﻌﺮﻳﻒ ﺗﻌﺪادي ﺗﺎﺑﻊ و زﻳﺮﺑﺮﻧﺎﻣﻪ program UnCapping; const UPPERLowerDifF = 32; procedure UnCapOf(Ch: Char; var LowerCh: Char); var Code, NewCode: Integer; begin if ('A' <= Ch) and (Ch <= 'Z') then begin Code := Ord(Ch); NewCode := Code + UpperLowerDiff; LowerCh := Chr(NewCode); end else LowerCh := Ch; end; { UnCapOf } ﻧﻮري: ﻣﺪرس procedure UnCap(var Ch: Char); begin if ('A' <= Ch) and (Ch <= 'Z') then Ch := Chr(Ord(Ch) + UpperLowerDiff); end; { UnCap } function UnCapped(Ch: Char): Char; begin if ('A' <= Ch) and (Ch <= 'Z') then UnCapped := Chr(Ord(Ch) + UpperLowerDiff) else UnCapped := Ch; end; { UnCapped } ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 32 اداﻣﻪ function IsUnCapped(Ch: Char): Boolean; begin if ('A' <= Ch) and (Ch <= 'Z') then IsUnCapped := False else IsUnCapped := True; end; { IsUnCapped } var Ch, NewCh, Extra: Char; begin { Main } { Testing UnCapOf } Write('Enter a Character followed by Return: '); ReadLn(Ch); UnCapOf(Ch, NewCh); WriteLn('The lower case is ', NewCh); ﻧﻮري: ﻣﺪرس { Testing UnCap } Write('Enter a Character followed by Return: '); ReadLn(Ch); UnCap(Ch); WriteLn('The lower case is ', Ch); { Testing UnCapped } Write('Enter a Character followed by Return: '); ReadLn(Ch); WriteLn('The lower case is ', UnCapped(Ch)); { Testing IsUnCapped } Write('Enter a Character followed by Return: '); ReadLn(Ch); if IsUnCapped(Ch) then WriteLn('It is lower case ') else WriteLn('It is capitalized'); end. { UnCapping } ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﭘﺎﺳﻜﺎل – داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ 33
© Copyright 2025 Paperzz