Download presentation
Presentation is loading. Please wait.
Published byAshlynn Armstead Modified over 9 years ago
1
Chapter 2.7 Modula 2 Procedures
2
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
3
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
4
Subroutines CCC DoCCC Subroutine DoCCC End DoCCC
5
The Return Address The problem : During execution of a subroutine the control unit has to "remember" from where it was called (the return address) The solution : When a subroutine is called, the address of the next instruction is written in data memory. At the end of the subroutine this address is fetched and execution resumes at that location
6
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
7
PROCEDURES and MODULES MODULE Module Identifier ; Import/export lists BLOCK Module Identifier. PROCEDURE Procedure Identifier ; Parameters list BLOCK Procedure Identifier ;
8
Block BEGIN Constant Declarations Statement ; Type Declarations Variable Declarations END Procedure Declarations Local Module Declarations
9
Block Structured Languages A program is a set of nested blocks BEGIN... END BLUE. BEGIN... END PURPLE; BEGIN... END RED; BEGIN... END GREEN;
10
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
11
Block Structured Languages An identifier can be used everywhere within the block where it is declared VAR A: CARDINAL; VAR B: REAL; VAR C: CHAR; BEGIN... A:=...; B:=...; C:=...;... END BLUE. BEGIN... A:=...; B:=...; C:=...;... END PURPLE; BEGIN... A:=...; B:=...; C:=...;... END RED; BEGIN... A:=...; B:=...; C:=...;... END GREEN; XX X X
12
Block Structured Languages A global identifier can be redefined The local definition dominates VAR A: CARDINAL; VAR B: REAL; VAR A,C: CHAR; BEGIN... A:= 3;... END BLUE. BEGIN... A:= 2; B:=...; END PURPLE; BEGIN... A:="$"; B:=...; C:=...;... END RED; BEGIN... A:= 1; B:=...;... END GREEN;
13
Computing the GCD Top level design : Read value of x and y Compute g, the GCD of x and y Write the value of g MODULE GCD1;... VAR x,y,g : CARDINAL; BEGIN (* Read value of x and y *)... (* Compute g, the GCD of x and y *)... (* Write value of g *)... END GCD1.
14
Computing the GCD with global variables BEGIN... END AskNumbers; BEGIN... END ComputeGCD; BEGIN … END PrintGCD; VAR x,y,g : CARDINAL; BEGIN AskNumbers; ComputeGCD; PrintGCD END GCD. PROCEDURE AskNumbers; PROCEDURE ComputeGCD; PROCEDURE PrintGCD MODULE GCD;
15
Computing the GCD Main MODULE MODULE GCD3;... VAR x,y,g : CARDINAL; PROCEDURE AskNumbers;... END AskNumbers; PROCEDURE ComputeGCD;... END ComputeGCD; PROCEDURE PrintGCD;... END PrintGCD; BEGIN AskNumbers; ComputeGCD; PrintGCD; END GCD3.
16
Computing the GCD PROCEDURE AskNumbers PROCEDURE AskNumbers; BEGIN (* Read value of global variables x and y *) WriteString("Enter a cardinal number please "); ReadCard(x); WriteString("Enter a cardinal number please "); ReadCard(y); END AskNumbers;
17
Computing the GCD PROCEDURE ComputeGCD PROCEDURE ComputeGCD; (* Computes g, the GCD of x and y *) (* x,y and g are global CARDINAL variables *) BEGIN WHILE x # y DO IF x > y THEN x := x - y ELSE y := y - x END (* IF *) END; (* WHILE *) g := x; END ComputeGCD;
18
Computing the GCD PROCEDURE PrintGCD PROCEDURE PrintGCD; (* Write value of global variable g *) BEGIN WriteString(" The GCD of these numbers is : "); WriteCard(g,10); WriteLn END PrintGCD;
19
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
20
Scope of Procedure Calls BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN …;YELLOW; PURPLE; RED; GREEN;... END PURPLE; BEGIN …YELLOW; PURPLE; RED; GREEN;... END RED; BEGIN... YELLOW; PURPLE; RED; GREEN;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN …;YELLOW; ORANGE;PURPLE;... END YELLOW; BEGIN …;YELLOW; ORANGE;PURPLE;... END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE;
21
Data Memory Usage (1) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Activation Record
22
Data Memory Usage (2) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : YELLOW BLUE Activation Records Return Address
23
Data Memory Usage (3) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : YELLOW ORANGE BLUE Activation Records
24
Data Memory Usage (4) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : YELLOW BLUE Activation Records
25
Data Memory Usage (5) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Activation Records
26
Data Memory Usage (6) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : PURPLE BLUE Activation Records
27
Data Memory Usage (7) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : PURPLE BLUE RED Activation Records
28
Data Memory Usage (8) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : PURPLE BLUE Activation Records
29
Data Memory Usage (9) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : PURPLE BLUE GREEN Activation Records
30
Data Memory Usage (10) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : PURPLE BLUE Activation Records
31
Data Memory Usage (11) BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN … RED; GREEN;... END PURPLE; BEGIN …END RED; BEGIN... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Activation Record
32
Dynamic Links Base Register Data Memory BLUE Activation Record YELLOW Activation Record ORANGE Activation Record
33
Data Accessibility (1) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Local : BLUE Global 1 : Global 2 :
34
Data Accessibility (2) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE Local : PURPLE Global 1 : BLUE Global 2 :
35
Data Accessibility (3) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN Local : GREEN Global 1 : PURPLE Global 2 : BLUE
36
Data Accessibility (4) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN YELLOW Local : YELLOW Global 1 : BLUE Global 2 :
37
Data Accessibility (5) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN YELLOW ORANGE Local : ORANGE Global 1 : YELLOW Global 2 : BLUE
38
Data Accessibility (6) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN YELLOW Local : YELLOW Global 1 : BLUE Global 2 :
39
Data Accessibility (7) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN Local : GREEN Global 1 : PURPLE Global 2 : BLUE
40
Data Accessibility (8) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE Local : PURPLE Global 1 : BLUE Global 2 :
41
Data Accessibility (9) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Local : BLUE Global 1 : Global 2 :
42
Static Links Base Register Static links Data Memory BLUE Activation Record PURPLE Activation Record GREEN Activation Record YELLOW Activation Record ORANGE Activation Record Dynamic links
43
Data Accessibility (1) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Local : BLUE Global 1 : Global 2 :
44
Data Accessibility (2) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE Local : PURPLE Global 1 : BLUE Global 2 : BLUE
45
Data Accessibility (3) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN Local : GREEN Global 1 : PURPLE Global 2 : BLUE
46
Data Accessibility (4) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN YELLOW Local : YELLOW Global 1 : BLUE Global 2 :
47
Data Accessibility (5) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN YELLOW ORANGE Local : ORANGE Global 1 : YELLOW Global 2 : BLUE
48
Data Accessibility (6) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN YELLOW Local : YELLOW Global 1 : BLUE Global 2 :
49
Data Accessibility (7) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE GREEN Local : GREEN Global 1 : PURPLE Global 2 : BLUE
50
Data Accessibility (8) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE PURPLE Local : PURPLE Global 1 : BLUE Global 2 :
51
Data Accessibility (8) BEGIN…; PURPLE;... END BLUE. MODULE BLUE BEGIN … GREEN;... END PURPLE; BEGIN …END RED; BEGIN …YELLOW;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN … ORANGE... END YELLOW; BEGIN … END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE; Data Memory : BLUE Local : BLUE Global 1 : Global 2 :
52
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
53
Procedure Parameters CCC abc CCC uvw CCC xyz DoCCC(abc) DoCCC(uvw) Subroutine DoCCC(xyz) End DoCCC Actual Parameters Formal Parameters
54
Procedure Parameters Formal parameters are declared in the procedure. Actual parameters appear in the procedure call. Formal and actual parameters MUST have STRICTLY the same type ( = a common type declaration - identical but distinct declarations are not good enough). Association between actual and formal parameters is positional: –PROCEDURE DoIt(a,b,c) DoIt(x,y,z) –a ~ x ; b ~ y; c ~ z;
55
Parameter Passing Base Register Data Memory Calling Block Activation Record Called Block Activation Record Static link Dynamic links Actual Parameters
56
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
57
Value Parameters The formal parameter is a local variable The value of the actual parameter is assigned to the formal parameter The actual parameter can be any expression, as long as its value belongs to the type of the formal parameter Assigning a new value to the formal parameter has no effect on the actual parameter. The formal parameter requires as much memory space as the actual parameter.
58
Value Parameters MODULE TestValPar (* Parameter passing by Value *); FROM InOutIMPORT Write,WriteLn; VARx: CHAR; PROCEDURE P (c:CHAR); BEGINWrite(c);c:='B';Write(c); RETURN END P; BEGIN x:='A';P(x);Write(x);WriteLn END TestValPar. ABAABA
59
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
60
Variable Parameters (also called “parameter passing by address”) The formal parameter is the address of a variable. The address of the actual parameter is assigned to the formal parameter The actual parameter must be a variable Assigning a new value to the formal parameter assigns this value to the actual parameter. The size of the formal parameter in memory is the size of an address (usually 4 bytes)
61
Variable Parameters MODULE TestValPar (* Parameter passing by Variable *); FROM InOutIMPORT Write,WriteLn; VARx: CHAR; PROCEDURE P (VAR c:CHAR); BEGINWrite(c);c:='B';Write(c); RETURN END P; BEGIN x:='A';P(x);Write(x);WriteLn END TestValPar. ABBABB
62
Computing the GCD Main MODULE, with parameters MODULE GCD4;... VAR x,y,g : CARDINAL; PROCEDURE AskNumber();... END AskNumbers; PROCEDURE ComputeGCD();... END ComputeGCD; PROCEDURE PrintGCD();... END PrintGCD; BEGIN AskNumber(x); AskNumber(y); ComputeGCD(x,y,g); PrintGCD(x,y,g); END GCD4.
63
Computing the GCD PROCEDURE AskNumber PROCEDURE AskNumber( VAR n:CARDINAL); BEGIN (* Reads value of a variable parameter n *) WriteString("Enter a cardinal number please "); ReadCard(n); END AskNumber;
64
Computing the GCD PROCEDURE ComputeGCD PROCEDURE ComputeGCD(x,y:CARDINAL; VAR g:CARDINAL); (* Computes g, the GCD of x and y *) BEGIN WHILE x # y DO IF x > y THEN x := x - y ELSE y := y - x END (* IF *) END; (* WHILE *) g := x; END ComputeGCD;
65
Computing the GCD PROCEDURE PrintGCD PROCEDURE PrintGCD(x,y,g:CARDINAL); (* Write value of parameters x,y and g *) BEGIN WriteString(" The GCD of "); WriteCard(x,1); WriteString(" and "); WriteCard(y,1); WriteString(" is : "); WriteCard(g,1); WriteLn END PrintGCD;
66
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
67
Open Arrays Strong typing causes absurd complexity: TYPE Table20 = ARRAY[1..20] OF REAL; Table30 = ARRAY[1..30] OF REAL;... PROCEDURE Sort20(VAR a:Table20);... END Sort20; PROCEDURE Sort30(VAR a:Table30);... END Sort30;
68
Open Arrays with one-dimensional arrays used as formal parameters, the index type can be omitted VAR Tab20 = ARRAY[1..20] OF REAL; Tab30 = ARRAY[1..30] OF REAL;... PROCEDURE Sort(VAR a:ARRAY OF REAL);... END Sort;... Sort(Tab20);... Sort(Tab30);...
69
The function HIGH PROCEDURE Sort(VAR a:ARRAY OF...);... last := HIGH(a);... END Sort; HIGH(A) = ORD(index of last element of array a) x:ARRAY[0..20]OF... Sort(x) HIGH(a) = 20 y:ARRAY[1..30]OF... Sort(y) HIGH(a) = 29 z:ARRAY[mon..sun]OF... Sort(z) HIGH(a) = 6
70
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
71
Function Procedures for computing a simple value function return statement
72
Value Returned by Function Base Register Data Memory Calling Block Activation Record Called Block Activation Record Static link Dynamic links Actual Parameters Returned Value
73
Computing the GCD Main MODULE, with parameters MODULE GCD4;... VAR x,y,g : CARDINAL; PROCEDURE AskNumber();... END AskNumbers; PROCEDURE ComputeGCD();... END ComputeGCD; PROCEDURE PrintGCD();... END PrintGCD; BEGIN AskNumber(x); AskNumber(y); ComputeGCD(x,y,g); PrintGCD(x,y,g); END GCD4.
74
Computing the GCD Main MODULE, with function procedures MODULE GCD5;... VAR x,y,g : CARDINAL; PROCEDURE AskNumber():CARDINAL;...; PROCEDURE ComputeGCD():CARDINAL;...; PROCEDURE PrintGCD();... END PrintGCD; BEGIN x := AskNumber(); y := AskNumber(); g := ComputeGCD(x,y); PrintGCD(x,y,g); END GCD5.
75
Computing the GCD Main MODULE, with function procedures MODULE GCD6;... VAR x,y : CARDINAL; PROCEDURE AskNumber():CARDINAL;...; PROCEDURE ComputeGCD():CARDINAL;...; PROCEDURE PrintGCD();... END PrintGCD; BEGIN x := AskNumber(); y := AskNumber(); PrintGCD(x,y, ComputeGCD(x,y)); END GCD6.
76
Computing the GCD Function PROCEDURE AskNumber PROCEDURE AskNumber():CARDINAL; VAR n : CARDINAL; BEGIN (* Reads value of a variable parameter n *) WriteString("Enter a cardinal number please "); ReadCard(n); RETURN n END AskNumber;
77
Computing the GCD PROCEDURE ComputeGCD PROCEDURE ComputeGCD(x,y:CARDINAL):CARDINAL; (* Computes the GCD of x and y *) BEGIN WHILE x # y DO IF x > y THEN x := x - y ELSE y := y - x END (* IF *) END; (* WHILE *) RETURN x; END ComputeGCD;
78
Computing the GCD PROCEDURE PrintGCD PROCEDURE PrintGCD(x,y,g:CARDINAL); (* Write value of parameters x,y and g *) BEGIN WriteString(" The GCD of "); WriteCard(x,1); WriteString(" and "); WriteCard(y,1); WriteString(" is : "); WriteCard(g,1); WriteLn END PrintGCD;
79
Side Effects Functions are intended for computing a value, and nothing else! Functions can modify global variables and VAR parameters. Such modifications are "Side Effects" Side effects should be avoided. Some functions also perform Input/Output operations. Such side effects are harmless.
80
Computing the GCD PROCEDURE ComputeGCD, With side effect PROCEDURE ComputeGCD(VAR x,y:CARDINAL):CARDINAL; (* Passing x and y by VARiable causes a side effect *) (* Computes the GCD of x and y *) BEGIN WHILE x # y DO IF x > y THEN x := x - y ELSE y := y - x END (* IF *) END; (* WHILE *) RETURN x; END ComputeGCD;
81
Computing the GCD Function PROCEDURE AskNumber PROCEDURE AskNumber():CARDINAL; BEGIN (* Reads value of a variable parameter n *) (* The following statement can be considered as a harmless side effect *) WriteString("Enter a cardinal number please "); ReadCard(n); RETURN n END AskNumber;
82
Summary Subroutines Procedures –Block structured languages –Scope rules –Memory Management Procedure Parameters –Value Parameters –Variable Parameters –Open Arrays Function Procedures Recursion
83
Block Structured MODULE BEGIN…;YELLOW; PURPLE;... END BLUE. MODULE BLUE BEGIN …;YELLOW; PURPLE; RED; GREEN;... END PURPLE; BEGIN …YELLOW; PURPLE; RED; GREEN;... END RED; BEGIN... YELLOW; PURPLE; RED; GREEN;... END GREEN; PROCEDURE PURPLE; PROCEDURE RED; PROCEDURE GREEN; BEGIN …;YELLOW; ORANGE;PURPLE;... END YELLOW; BEGIN …;YELLOW; ORANGE;PURPLE;... END ORANGE; PROCEDURE YELLOW; PROCEDURE ORANGE;
84
Hide in Doll (1)
85
Hide in Doll (2)... PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll.
86
Hide in Doll (3)
87
Hide in Doll (4) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll.
88
Hide in Doll (5)
89
Hide in Doll (6) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
90
Hide in Doll (7)
91
Hide in Doll (8) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
92
Hide in Doll (9)
93
Hide in Doll (10) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
94
Hide in Doll (11)
95
Hide in Doll (12) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
96
Hide in Doll (13)
97
Hide in Doll (14) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
98
Hide in Doll (15)
99
Hide in Doll (16) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
100
Hide in Doll (17)
101
Hide in Doll (18) PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; BEGIN Hide END HideInDoll. PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide; PROCEDURE Hide; BEGIN OpenDoll; IF AnotherDoll THEN Hide ELSE PutSweet END; CloseDoll END Hide;
102
Recursive Procedures (1) Data Memory : MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion.
103
Data Memory : v = 3 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 3 Recursive Procedures (2)
104
Data Memory : v = 2 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 32 Recursive Procedures (3)
105
Recursive Procedures (4) Data Memory : v = 2 v = 1 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 321
106
Recursive Procedures (5) Data Memory : v = 2 v = 1 v = 0 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. v = 0 3210
107
Data Memory : v = 2 v = 1 v = 0 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. v = 0 32100 Recursive Procedures (6)
108
Data Memory : v = 2 v = 1 v = 0 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 32100 Recursive Procedures (7)
109
Data Memory : v = 2 v = 1 v = 0 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 321000 Recursive Procedures (8)
110
Data Memory : v = 2 v = 1 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 321000 Recursive Procedures (9)
111
Data Memory : v = 2 v = 1 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 3210001 Recursive Procedures (10)
112
Data Memory : v = 2 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 3210001 Recursive Procedures (11)
113
Data Memory : v = 2 MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 32100012 Recursive Procedures (12)
114
Data Memory : MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN P(3); WriteLn END Recursion. 32100012 Recursive Procedures (13)
115
Data Memory : MODULE Recursion; FROM InOut IMPORT WriteCard, WriteLn; VAR x : CARDINAL; PROCEDURE P(VAR v:CARDINAL); BEGIN WriteCard(v,1); IF v # 0 THEN v:=v-1; P(v) END; WriteCard(v,1); END P; BEGIN x:=3;P(x); WriteLn END Recursion. Recursive Procedures (13)
116
Recursive Algorithms Factorial Fac(n) = 1*2*3*4*…*(n-1)*n Recursive definition : Fac(n) = (n)*Fac(n-1) Trivial solution : Fac(1) = 1 Recursive procedure : PROCEDURE Fac(n:CARDINAL): CARDINAL; BEGIN IF n > 1 THEN RETURN n*Fac(n-1) ELSE RETURN 1 END (* IF *) END Fac;
117
Binary Search # elements > 1 Binary Search No Yes # keys > 1 No Yes Key > Key middle No Yes Key = Only Key Binary Search left half Binary Search right half Not Found Find a given key in a sorted array of keys
118
Quicksort Partition array A into two parts A1 and A2 in such a way that all keys in A1 are Pivot (Pivot has a value close to the median of key values) More than 1 element in A1 ? Apply QuickSort to array A1 More than 1 element in A2 ? Apply QuickSort to array A2 Yes
119
Towers of Hanoi ABC
120
ABC
121
ABC
122
ABC
123
Towers of Hanoi Global Organization MODULE Hanoi;... CONST Rings = 4; PROCEDURE MoveTower (Height:CARDINAL;From,Towards,Using:CHAR); PROCEDURE MoveDisk(TakeOff,PutOn:CHAR);.... END MoveDisk; BEGIN.... END MoveTower; BEGIN MoveTower(Rings,'A','C','B') END Hanoi.
124
MoveTower PROCEDURE MoveTower (Height:CARDINAL;From,Towards,Using:CHAR); PROCEDURE MoveDisk(TakeOff,PutOn:CHAR); BEGIN WriteString("Move one ring from "); WriteChar(TakeOff); WriteString(" to "); WriteChar(PutOn); WriteLn END MoveDisk; BEGIN IF Height > 0 THEN MoveTower(Height-1,From,Using,Towards); MoveDisk(From,Towards); MoveTower(Height-1,Using,Towards,From) END END MoveTower;
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.