2011-gre-cs-practice-book.pdf/Q47 — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
== Вопрос: Q47-08c765 ==
 
== Вопрос: Q47-08c765 ==
  
<i>Тут вставьте перевод вопроса.
+
<code-c>
Используйте [https://wiki.4intra.net/Help:%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 возможности разметки],
+
i = 0;
включая формулы и т.п, если будут графы — посмотрите как задать их текстом https://wiki.4intra.net/Graphviz .
+
j = 0;
Если код — теги «code-pascal», «code-c» или «code-python».
+
k = 0;
  
Старайтесь нетривиальные понятия, особенно незнакомые вам, найти ссылку на википедию и вставить (нейросети лажают!).
+
while (i < 10 and j < 10)
Это важно, чтобы найти корректный перевод (то, что в википедии, или на худой конец — точно массово гуглится).
+
{
 +
    if (A[i] > B[j])
 +
    {
 +
        C[k] = A[i];
 +
        k = k + 1;
 +
        i = i + 1;
 +
    }
 +
    else
 +
    {
 +
        C[k] = B[j];
 +
        k = k + 1;
 +
        j = j + 1;
 +
    }
 +
}
 +
</code-c>
  
Потом конечно сотрите инструкции, которые тут курсивом.</i>
 
  
=== Ответы ===
 
<i>Если ответы простые, однострочные, используйте простой способ задания ответов списком, типа так
 
(префикс «Правильный ответ:» — это дословно, для правильного ответа, неважно, какой он будет в списке)</i>
 
  
* Правильный ответ: тут реально правильный ответ
+
Какие из следующих утверждений могут служить инвариантом цикла для указанного выше цикла while?
* неправильный ответ
+
* еще какой-то неправильный ответ
+
* еще какой-то неправильный ответ
+
* еще какой-то неправильный ответ
+
  
<i>Если ответы длинные, многострочные, или там графы, используйте
+
* I. i < 10 или j < 10
[https://wiki.4intra.net/MediawikiQuizzer/ru#.D0.9E.D1.82.D0.B2.D0.B5.D1.82.D1.8B способ задания ответов разделами],
+
* II. i < 11 и j < 11
Но такое очень редко встречается. </i>
+
* III. k = i + j
  
 +
=== Ответы ===
 +
* (A) Только I 
 +
* (B) I и II 
 +
* (C) I и III 
 +
* (D) II и III 
 +
* Правильный ответ: (E) I, II и III
  
 
=== Объяснение ===
 
=== Объяснение ===
<i>Сначала заполните номер страницы с этим вопросом
 
{{cstest-source|2011-gre-cs-practice-book.pdf|тут-номер-страницы-с-вопросом-47|47}}
 
  
Если все сделаете правильно, по ссылке выше будет открываться правильная страница в правильном PDFе.
+
{{cstest-source|2011-gre-cs-practice-book.pdf|37|46}}
 +
 
 +
Разберём каждое из утверждений
 +
 
 +
* I: i < 10 или j < 10
 +
 
 +
Из того, что i<10 и j<10, автоматически следует более слабое утверждение i<10 или j<10.
 +
Пока цикл ещё не прерван, утверждение «i<10 или j<10» будет верно всегда. Следовательно, I действительно является инвариантом.
 +
 
 +
* II: i < 11 и j < 11
 +
 
 +
Внутри цикла мы имеем i <= 9 и j <= 9. Отсюда немедленно следует, что i < 11 и j < 11. Следовательно, II также является инвариантом.
  
Ну и наконец, вики-разметкой напишите ваше понимание, почему правильный ответ — правильный, а [[2004-gre-cs-practice-book.pdf/Q16|неправильные варианты — неправильны]].
+
* III: k = i + j
Тут тоже могут быть полезны [[2004-gre-cs-practice-book.pdf/Q03|ссылки на википедию]],
+
решение вами [[2004-gre-cs-practice-book.pdf/Q12|рекуррентных уравнений в sympy]].
+
  
</i>
+
Перед входом в цикл имеем k = i + j = 0. В то же время либо инкрементируется i, либо j. Таким образом, соотношение сохраняется при переходе между итерациями и утверждение III является инвариантом.
  
 
{{question-ok|}}
 
{{question-ok|}}
 
{{reserve-task|[[Участник:Nikitashapovalov|Nikitashapovalov]] 20:53, 8 января 2025 (UTC)}}
 
{{reserve-task|[[Участник:Nikitashapovalov|Nikitashapovalov]] 20:53, 8 января 2025 (UTC)}}

Версия 23:50, 8 января 2025

Вопрос: Q47-08c765

i = 0;
j = 0;
k = 0;
 
while (i < 10 and j < 10)
{
    if (A[i] > B[j])
    {
        C[k] = A[i];
        k = k + 1;
        i = i + 1;
    }
    else
    {
        C[k] = B[j];
        k = k + 1;
        j = j + 1;
    }
}


Какие из следующих утверждений могут служить инвариантом цикла для указанного выше цикла while?

  • I. i < 10 или j < 10
  • II. i < 11 и j < 11
  • III. k = i + j

Ответы

  • (A) Только I
  • (B) I и II
  • (C) I и III
  • (D) II и III
  • Правильный ответ: (E) I, II и III

Объяснение

Исходники — вопрос 46 на 37 странице книги «2011-gre-cs-practice-book.pdf»

Разберём каждое из утверждений

  • I: i < 10 или j < 10

Из того, что i<10 и j<10, автоматически следует более слабое утверждение i<10 или j<10. Пока цикл ещё не прерван, утверждение «i<10 или j<10» будет верно всегда. Следовательно, I действительно является инвариантом.

  • II: i < 11 и j < 11

Внутри цикла мы имеем i <= 9 и j <= 9. Отсюда немедленно следует, что i < 11 и j < 11. Следовательно, II также является инвариантом.

  • III: k = i + j

Перед входом в цикл имеем k = i + j = 0. В то же время либо инкрементируется i, либо j. Таким образом, соотношение сохраняется при переходе между итерациями и утверждение III является инвариантом.

Задача зарезервирована: Nikitashapovalov 20:53, 8 января 2025 (UTC)