2001-gre-vs-practice.pdf/Q07 — различия между версиями
Материал из DISCOPAL
(→Вопрос: Q07-e5724f) |
StasFomin (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | |||
− | |||
== Вопрос: Q07-e5724f == | == Вопрос: Q07-e5724f == | ||
− | |||
Рассмотрим следующий фрагмент кода на языке Pascal | Рассмотрим следующий фрагмент кода на языке 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) | ||
− | </ | + | </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. Рассмотрим тело процедуры: |
− | * k := | + | * k := k — m; — k := 2 — 3 → в k теперь лежит −1; |
− | * m := k + m; | + | * m := k + m; — m := −1 + 3 → в m теперь лежит 2; |
− | * k := | + | * k := m — k; — k := 2 — (-1) → в k теперь лежит 3; |
− | * на конец выполнения процедуры параметры k и m содержат значения 3 и 2 соответственно. | + | * на конец выполнения процедуры параметры k и m содержат значения 3 и 2 соответственно. |
+ | |||
+ | Поскольку i и j передавались в процедуру по ссылке, то в процессе исполнения процедуры изменяются не локальные копии i и j, а они сами. | ||
− | + | Следовательно, в конце данного фрагмента кода переменные i и j содержат значения 3 и 2 соответственно. | |
− | + | Верный ответ — «i = 3, j = 2». | |
− | {{ | + | {{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».