847 views

Consider the following pseudo-code (all data items are of type integer):

procedure P(a, b, c);
a := 2;
c := a + b;
end {P}

begin
x := 1;
y := 5;
z := 100;
P(x, x*y, z);
Write ('x = ', x, 'z = ', z);
end

Determine its output, if the parameters are passed to the Procedure P by

1. value
2. reference
3. name
edited | 847 views
+4

Note that pass by name is similar to pass by reference in the sense that by substituting the actual parameters into the function body, the function body can both read and write the given parameters.

1. Pass by value: Function cannot modify a variable in the calling function. So,
$x = 1, z = 100$

2. Pass by reference: An alias of the variable (a different name but having same memory location) is used to pass the variable to a function. So, whatever change occurs for the variable in the called function is reflected in the calling function.
$x = 2, z = 7 (2 + 5)$

3. Pass by name: The expression used to call a function is copy pasted for each formal parameter. So, the body of P becomes,
$x := 2;$
$z := x + x*y;$

So, printed value will be
$x = 2, z = 12$
answered by Veteran (396k points)
edited by
0

@arjun sir,

for call by reference here:

how address of x*y will pass to b in procedure P(a, b, c)??

+9
x*y will be stored in a temporary and reference to that memory will be passed.
0
 Write ('x = ', x, 'z = ', z); ... sir can you plz explain this line as i am not getting it .. what is meant by 'x = ' ?? and why two value not 4 ?
0
nice explanation @Arjun sir
0

if call by need was also asked;

then output would be 2,7 only, am i right??

0

Then I think this ques answer is wrong for Call By Name
https://gateoverflow.in/94333/gate1988-2xv#97815

....

answered by Boss (13.9k points)
A) 1) 1,100       2) 2,7    3) 2,12

B)  1) 5,10    2) 1,2
answered by Loyal (6.9k points)

1
2