2001-gre-vs-practice.pdf/Q07 — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
(Объяснение)
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{reserve-task|[[Участник:Tiniakov.ad|Tiniakov.ad]] 13:27, 20 декабря 2024 (UTC)}}
 
 
 
== Вопрос: Q07-e5724f ==
 
== Вопрос: Q07-e5724f ==
  
<blockquote>
 
 
Рассмотрим следующий фрагмент кода на языке Pascal
 
Рассмотрим следующий фрагмент кода на языке Pascal
  
<source lang="pascal">
+
<code-pascal>
 
var i, j: integer;
 
var i, j: integer;
 
procedure P(k, m: integer)
 
procedure P(k, m: integer)
Строка 17: Строка 14:
 
j := 3;
 
j := 3;
 
P(i, j)
 
P(i, j)
</source>
+
</code-pascal>
  
 
Какими будут значения переменных i, j после выполнения этого фрагмента, если переменные i, j передаются в P по ссылке?
 
Какими будут значения переменных i, j после выполнения этого фрагмента, если переменные i, j передаются в P по ссылке?
Строка 32: Строка 29:
 
{{cstest-source|2001-gre-vs-practice.pdf|15|7}}
 
{{cstest-source|2001-gre-vs-practice.pdf|15|7}}
  
Рассмотрим вызов процедуры P. На вход ей подаются числа k = 2 и m = 3. Рассмотрим тело процедуры:
+
Рассмотрим вызов процедуры P. На вход ей подаются числа k = 2 и m = 3. Рассмотрим тело процедуры:
1) k := k - m; -- k := 2 - 3 -> в k теперь лежит -1;
+
* k := k — m; — k := 2 — 3 в k теперь лежит −1;
2) m := k + m; -- m := -1 + 3 -> в m теперь лежит 2;
+
* m := k + m; — m := −1 + 3 в m теперь лежит 2;
3) k := m - k; -- k := 2 - (-1) -> в k теперь лежит 3;
+
* k := m — k; — k := 2 — (-1) в k теперь лежит 3;
4) на конец выполнения процедуры параметры k и m содержат значения 3 и 2 соответственно.
+
* на конец выполнения процедуры параметры k и m содержат значения 3 и 2 соответственно.
Поскольку i и j передавались в процедуру по ссылке, то в процессе исполнения процедуры изменяются не локальные копии i и j, а они сами. Следовательно, в конце данного фрагмента кода переменные i и j содержат значения 3 и 2 соответственно. Верный ответ - D.
+
 
 +
Поскольку i и j передавались в процедуру по ссылке, то в процессе исполнения процедуры изменяются не локальные копии i и j, а они сами.  
 +
 
 +
Следовательно, в конце данного фрагмента кода переменные i и j содержат значения 3 и 2 соответственно.  
  
{{question-ok|}}
+
Верный ответ — «i = 3, j = 2».
  
{{checkme|[[Участник:Tiniakov.ad|Tiniakov.ad]] 13:43, 20 декабря 2024 (UTC)}}
+
{{question-ok|[[Участник:StasFomin|StasFomin]] 06:34, 21 декабря 2024 (UTC)}}
  
[[Категория:Надо не забыть выбрать тему]]
+
[[Категория:Вызов функций]]

Текущая версия на 06:38, 21 декабря 2024

Вопрос: Q07-e5724f

Рассмотрим следующий фрагмент кода на языке Pascal

var i, j: integer;
procedure P(k, m: integer)
begin
  k := k - m;
  m := k + m;
  k := m - k;
end;
i := 2;
j := 3;
P(i, j)

Какими будут значения переменных i, j после выполнения этого фрагмента, если переменные i, j передаются в P по ссылке?

Ответы

  • i = 0, j = 2;
  • i = 1, j = 5;
  • i = 2, j = 3;
  • Правильный ответ: i = 3, j = 2;
  • среди ответов нет верного.

Объяснение

Исходники — вопрос 7 на 15 странице книги «2001-gre-vs-practice.pdf»

Рассмотрим вызов процедуры P. На вход ей подаются числа k = 2 и m = 3. Рассмотрим тело процедуры:

  • k := k — m; — k := 2 — 3 → в k теперь лежит −1;
  • m := k + m; — m := −1 + 3 → в m теперь лежит 2;
  • k := m — k; — k := 2 — (-1) → в k теперь лежит 3;
  • на конец выполнения процедуры параметры k и m содержат значения 3 и 2 соответственно.

Поскольку i и j передавались в процедуру по ссылке, то в процессе исполнения процедуры изменяются не локальные копии i и j, а они сами.

Следовательно, в конце данного фрагмента кода переменные i и j содержат значения 3 и 2 соответственно.

Верный ответ — «i = 3, j = 2».