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

Материал из DISCOPAL
Перейти к: навигация, поиск
(Новая страница: « == Вопрос: Q14-e5724f == <blockquote> Тут вставьте перевод вопроса. Используйте [https://wiki.4intra.net/Help:%D0%A4%D…»)
 
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
 
 
== Вопрос: Q14-e5724f ==
 
== Вопрос: Q14-e5724f ==
  
<blockquote>
+
Рассмотрим следующую программу на языке 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 возможности разметки],
+
включая формулы и т.п, если будут графы — посмотрите как задать их текстом https://wiki.4intra.net/Graphviz (реально оценю, полезный навык).
+
Если код — теги «code-pascal», «code-c» или «code-python» (не «source lang»).
+
  
В IT вообще не принято писать романы, всегда старайтесь писать структурированные (списками-абзацами тексты). Списки в MediaWiki — это просто «*». Не забывайте о них.
+
<code-c>
Преформатированный моноширинный текст — просто отступ.
+
#include <stdio.h>
  
Старайтесь нетривиальные понятия, особенно незнакомые вам, найти ссылку на википедию и вставить (нейросети лажают!).  
+
void main()
Это важно, чтобы найти корректный перевод (то, что в википедии, или на худой конец — точно массово гуглится).
+
{
 +
  float sum = 0.0, j = 1.0, i = 2.0;
 +
  while (i / j > 0.001)
 +
  {
 +
    j = j + j;
 +
    sum = sum + i / j;
 +
    printf("%f\n", sum);
 +
  }
 +
}
 +
</code-c>
  
Потом конечно сотрите эти инструкции, которые тут курсивом или в блоке цитирования.
+
Какое целое число лучше всего приближает последнее напечатанное программой число?
</blockquote>
+
  
 
=== Ответы ===
 
=== Ответы ===
<i>Если ответы простые, однострочные, используйте простой способ задания ответов списком, типа так
 
(префикс «Правильный ответ:» — это дословно, для правильного ответа, неважно, какой он будет в списке)</i>
 
 
* Правильный ответ: тут реально правильный ответ
 
* неправильный ответ
 
* еще какой-то неправильный ответ
 
* еще какой-то неправильный ответ
 
* еще какой-то неправильный ответ
 
 
<i>Если ответы длинные, многострочные, или там графы, используйте
 
[https://wiki.4intra.net/MediawikiQuizzer/ru#.D0.9E.D1.82.D0.B2.D0.B5.D1.82.D1.8B способ задания ответов разделами],
 
Но такое очень редко встречается, например [[2011-gre-cs-practice-book.pdf/Q05]]. </i>
 
  
 +
* 0;
 +
* 1;
 +
* Правильный ответ: 2;
 +
* 3;
 +
* 4.
  
 
=== Объяснение ===
 
=== Объяснение ===
<i>Сначала заполните номер страницы с этим вопросом
+
{{cstest-source|2001-gre-vs-practice.pdf|19|14}}
{{cstest-source|2001-gre-vs-practice.pdf|тут-номер-страницы-с-вопросом-14|14}}
+
 
+
Если все сделаете правильно, по ссылке выше будет открываться правильная страница в правильном PDFе.
+
  
Ну и наконец, вики-разметкой напишите ваше понимание, почему правильный ответ — правильный, а [[2004-gre-cs-practice-book.pdf/Q16|неправильные варианты — неправильны]].
+
Данная программа в цикле while проверяет условие i / j > 0.001. Если условие выполнено, она увеличивает j вдвое, увеличивает сумму на i/j и выводит на новой строке новую сумму.
Тут тоже могут быть полезны [[2004-gre-cs-practice-book.pdf/Q03|ссылки на википедию]],  
+
Изначально sum == 0.0, j == 1.0, i == 2.0. Значит в цикле имеем следующую цепочку:
решение вами [[2004-gre-cs-practice-book.pdf/Q12|рекуррентных уравнений в sympy]].
+
* 2/1 > 0.001? true -> j *= 2, sum += i/j
 +
* 2/2 > 0.001? true -> j *= 2, sum += i/j
 +
* 2/4 > 0.001? true -> j *= 2, sum += i/j
 +
* 2/8 > 0.001? true -> j *= 2, sum += i/j
 +
...
 +
* 2/2^11 > 0.001? false.
  
</i>
+
Итого получаем сумму геометрической прогрессии:
 +
2/2 + 2/4 + 2/8 + ... + 2/2^11 == 1 + 1/2 + 1/4 + ... + 1/2^10. Известный факт, что сумма обратных степеней двойки в пределе равна 1 (<m>\lim_{n \to \infty}\sum_{k=1}^N 1/2^k = 1</m>). Следовательно, последнее число точно не больше 2. Рассмотрим сумму еще раз: она начинается со слагаемых 1 + 1/2 + 1/4 + ... Это уже больше, чем 1.5, следовательно последняя сумма точно больше 1.5, а значит лучшим приближением для последней суммы будет 2.
  
{{question-ok|}}
+
{{question-ok|[[Участник:StasFomin|StasFomin]] 08:48, 21 декабря 2024 (UTC)}}
  
[[Category:Надо не забыть выбрать тему]]
+
[[Категория:Циклы]]

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

Вопрос: Q14-e5724f

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

#include <stdio.h>
 
void main()
{
  float sum = 0.0, j = 1.0, i = 2.0;
  while (i / j > 0.001)
  {
    j = j + j;
    sum = sum + i / j;
    printf("%f\n", sum);
  }
}

Какое целое число лучше всего приближает последнее напечатанное программой число?

Ответы

  • 0;
  • 1;
  • Правильный ответ: 2;
  • 3;
  • 4.

Объяснение

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

Данная программа в цикле while проверяет условие i / j > 0.001. Если условие выполнено, она увеличивает j вдвое, увеличивает сумму на i/j и выводит на новой строке новую сумму. Изначально sum == 0.0, j == 1.0, i == 2.0. Значит в цикле имеем следующую цепочку:

  • 2/1 > 0.001? true -> j *= 2, sum += i/j
  • 2/2 > 0.001? true -> j *= 2, sum += i/j
  • 2/4 > 0.001? true -> j *= 2, sum += i/j
  • 2/8 > 0.001? true -> j *= 2, sum += i/j

...

  • 2/2^11 > 0.001? false.

Итого получаем сумму геометрической прогрессии: 2/2 + 2/4 + 2/8 + ... + 2/2^11 == 1 + 1/2 + 1/4 + ... + 1/2^10. Известный факт, что сумма обратных степеней двойки в пределе равна 1 (). Следовательно, последнее число точно не больше 2. Рассмотрим сумму еще раз: она начинается со слагаемых 1 + 1/2 + 1/4 + ... Это уже больше, чем 1.5, следовательно последняя сумма точно больше 1.5, а значит лучшим приближением для последней суммы будет 2.