ﻣﺪرس :ﻧﻮري
آذر 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 2026 Paperzz