ФИПИ · ЕГЭ · Информатика · Вне номеров КИМ

Другие задания банка (часть 3)

74 заданий открытого банка ФИПИ: впишите ответ, при затруднении — подсказка; после ответа — разбор по шагам.

0
Решено
0
Правильно
0%
Точность

Задания открытого банка ФИПИ «Другие задания банка (часть 3)» (информатика). Ответ вписывается так же, как в бланк ЕГЭ: число, слово или цифры подряд, без пробелов; если в ответе два числа — через пробел, как в таблице ответа (по строкам).

Неофициальная копия. Условия заданий — из открытого банка заданий ФИПИ (fipi.ru); номер у каждого задания открывает его в банке ФИПИ. Ответы, подсказки, разборы и рисунки подготовлены reknow.ru. Нашли ошибку — нажмите «Сообщить об ошибке» у задания.

Серия: 0

О теме

Вне номеров КИМ ЕГЭ по информатике. На странице — 74 задания открытого банка ФИПИ: ответ проверяется сразу, есть подсказка и подробный разбор.

Примеры заданий

Это несколько заданий из тренажёра, остальные — в тренажёре в начале страницы.

ФИПИ № 3DA124 ↗

Требовалось написать программу, которая решает неравенство «ax+b>0» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.

 

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var a,b,x: real;
begin readln(a,b,x);
if a = 0 then if b >0 then write('любое число') else write ('нет решений') else write('x>',-b/a);
end.

INPUT a, b, x IF a = 0 THEN IF b > 0 THEN PRINT "любое число" ELSE PRINT "нет решений" ENDIF ELSE PRINT "x>", -b/a ENDIF END

void main(void)
{ float a,b,x;
scanf("%f%f%f",
 &a,&b,&x);
if (a==0) if (b > 0) printf("любое число");
else printf("нет решений");
else printf("x>%f",-b/a);
}

 

Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

Показать ответ
Ответ: 1) например a = −1, b = 1, x = 0: программа выведет «x>1», а верно «x меньше 1»; 2) лишнее — ввод (и описание) переменной x; 3) при a ≠ 0 разобрать знак a: если a > 0 — вывод «x > −b/a», иначе «x меньше −b/a»
Решение.
  1. 1. При a < 0 неравенство ax + b > 0 равносильно x < −b/a, а программа всегда печатает «x>». Пример: a = −1, b = 1, x = 0 — программа выводит x>1, верный ответ x<1.
  2. 2. Лишняя часть — переменная x: её ввод (readln(a,b,x) → достаточно readln(a,b)) и описание; x — неизвестное, его не вводят.
  3. 3. Доработка (Паскаль): ветку else write('x>',-b/a); заменить на
    else if a > 0 then
      write('x>', -b/a)
    else
      write('x<', -b/a);
    Случай a = 0 программа решает верно: при b > 0 — любое число, при b ≤ 0 — нет решений.
  4. Что проверяет эксперт: 3 балла — верно выполнены все три пункта (вывод программы, пример, обе ошибки с исправлениями); исправления затрагивают только ошибочные строки и не вносят новых ошибок. Если исправлена только одна ошибка или неверен один из первых пунктов — оценка снижается. Достаточно одного языка.
ФИПИ № 41B044 ↗

Цепочки символов (строки) создаются по следующему правилу.

Первая строка состоит из одного символа – цифры «1». Каждая из последующих цепочек создается следующим действием: в очередную строку дважды записывается предыдущая цепочка цифр (одна за другой, подряд), а в конец приписывается еще одно число – номер строки по порядку (на i-м шаге дописывается число «i»).

Вот первые 4 строки, созданные по этому правилу:

(1)     1

(2)     112

(3)     1121123

(4)     112112311211234

…

Сколько раз в общей сложности встречаются в девятой строке четные цифры (2, 4, 6, 8)?

Показать ответ
Ответ: 170
Решение.
  1. Пусть E(i) — число чётных цифр в i-й строке. Строка i — это дважды строка i−1 и число i, поэтому E(i) = 2·E(i−1) + (1, если i чётно, иначе 0) (все номера до 9 однозначные).
  2. E(1) = 0, E(2) = 1, E(3) = 2, E(4) = 5, E(5) = 10, E(6) = 21, E(7) = 42, E(8) = 85, E(9) = 170.
  3. Проверка программой:
    s = "1"
    for i in range(2, 10):
        s = s + s + str(i)
    print(sum(s.count(d) for d in "2468"))
  4. Ответ: 170.