Рубрики

ВОРОТА | GATE-CS-2006 | Вопрос 56

Рассмотрим следующий код, написанный на языке передачи по ссылкам, например, FORTRAN, и эти утверждения о коде.

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: компилятор сгенерирует код для выделения временной безымянной ячейки, инициализирует ее до 13 и передаст адрес перестановки ячеек
S2: При выполнении код сгенерирует ошибку времени выполнения в строке L1
S3: При выполнении код сгенерирует ошибку времени выполнения в строке L2
S4: программа напечатает 13 и 8
S5: программа напечатает 13 и -2
Точно следующий набор утверждений является правильным:
(А) S1 и S2
(B) S1 и S4
(С) S3
(D) S1 и S5

Ответ: (Б)
Объяснение:
Передаточный характер Фортрана заставляет его передавать указатели:

  1. привязать клетки к своим подпрограммам, если они уже присутствуют
  2. к неназванным временным ячейкам, которые потом будут связаны, если их там нет

Теперь давайте проанализируем приведенные утверждения:

(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]

Следовательно, ответ должен быть (B) S1 и S4

Это объяснение было внесено Vineet Purswani.
Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2006 | Вопрос 56

0.00 (0%) 0 votes