PUERTA | PUERTA-CS-2006 | Pregunta 56

Considere el siguiente código escrito en un lenguaje de paso por referencia como FORTRAN y estas declaraciones sobre el código.

subroutine swap(ix,iy)
     it = ix
L1 : ix = iy
L2 : iy = it
end
  ia = 3
  ib = 8
  call swap (ia, 1b+5)
  print *, ia, ib
end 

S1: el compilador generará código para asignar una celda temporal sin nombre, la inicializará en 13 y pasará la dirección del intercambio de celdas
S2: al ejecutarse, el código generará un error de tiempo de ejecución en la línea L1
S3: al ejecutarse, el código generará un error de tiempo de ejecución en la línea L2
S4: el programa imprimirá 13 y 8
S5: el programa imprimirá 13 y -2
Exactamente el siguiente conjunto de declaraciones es correcto:
(A) S1 y S2
(B) S1 y S4
(C) ) S3
(D) S1 y S5

Respuesta: (B)
Explicación:  
La naturaleza de paso por referencia de FORTRAN hace que pase punteros:

  1. para vincular celdas a sus subrutinas, si ya están presentes
  2. a celdas temporales sin nombre para luego vincularlas, si no están allí

Ahora analicemos las declaraciones dadas:

(S1) Because the second argument is an expression, which could be evaluated 
easily by compiler SDT rules to a value 13, compiler itself will generate code 
to define and declare an unnamed temporary cell with value 13 and pass it to swap 
subroutine. [CORRECT]

(S2) 'ix' and 'iy' are variables bound to valid mutable cells, thus there is no 
reason to get a run time error on line L1. [INCORRECT]

(S3) Incorrect due to same reason as of S2 [INCORRECT]

(S4) Due to the pass-by-reference nature of the language, the cell bound to 
variable 'ia' will get value 13 and the temporary unnamed cell which was allocated 
and passed to the swap subroutine will get value 3. Seemingly, cell bound to variable
 'ib' is unchanged, thus printing 13 and 8 at the end of this routine. [CORRECT]

(S5) Incorrect due to same reason as of S4 [INCORRECT]

Por lo tanto, la respuesta debería ser (B) S1 y S4

Esta explicación ha sido aportada por Vineet Purswani.
Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *