2,174 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 $\text{P}$ by

1. value
2. reference
3. name

### 1 comment

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.

### Subscribe to GO Classes for GATE CSE 2022

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 the 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 $\text{P}$ becomes,
$x := 2;$
$z := x + x*y;$

So, printed value will be  b$x = 2, z = 12$
by

@arjun sir,

for call by reference here:

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

x*y will be stored in a temporary and reference to that memory will be passed.
 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 ?
nice explanation @Arjun sir

if call by need was also asked;

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

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

....

A) 1) 1,100       2) 2,7    3) 2,12

B)  1) 5,10    2) 1,2

1
2,557 views
2