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:
- para vincular celdas a sus subrutinas, si ya están presentes
- 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