Первые полтора десятка заданий он решает без запинки. Логика, кодирование, таблицы, системы счисления даются, рука не дрожит. А потом на экране появляется семнадцатое задание, и он застывает. Длинная запутанная формулировка про пары чисел, делимость и какую-то минимальную сумму. Внутри поднимается знакомая тоскливая мысль: тут же надо писать программу. И он делает то, что делает на каждом пробнике. Пролистывает. За семнадцатым тем же махом уходят двадцать четвертое, двадцать пятое, весь трудный хвост работы в конце. В итоге на бланке аккуратная работа без единой строчки кода и низкий потолок баллов, пробить который без программирования невозможно.
Это очень частая история, и по опыту преподавателей она тянется у сильных на первый взгляд ребят. Базовую часть человек знает на зубок, а десяток баллов, которые дает код, отдает даром просто потому, что боится начать. Хорошая новость в том, что задачи с кодом на этом экзамене устроены гораздо однообразнее, чем кажется из-за пугающих формулировок. За разными обертками прячется несколько повторяющихся скелетов, и как только их разглядишь, страх идет на убыль. Разберем, где именно без программы не обойтись, с какого языка и каких конструкций стартовать, как разбирать типовую задачу по шагам и как набивать руку, чтобы паника сменилась привычкой.
Где на экзамене без кода не обойтись

Написать программу просят в нескольких заданиях, и вместе они весят немало. Без кода почти не берутся семнадцатое, двадцать четвертое и двадцать пятое, а еще двадцать шестое и двадцать седьмое, самые дорогие в работе, по два первичных балла каждое. Отчасти на программу опираются и четырнадцатое, шестнадцатое, двадцать третье, хотя там иногда выручает и аккуратный ручной подсчет или таблица. В сумме программирование закрывает около десятка первичных баллов из двадцати девяти возможных.
Арифметика получается простая и безжалостная. Максимум за всю работу двадцать девять первичных, и почти треть из них висит на задачах с кодом. Тот, кто выкидывает их из работы целиком, сам опускает себе верхнюю планку и на высокий результат рассчитывать уже не может, как бы блестяще он ни закрыл остальное. Обиднее всего, что многие из этих задач вовсе не самые трудные на экзамене. Они просто требуют написать полтора десятка строк и запустить программу, а выпускник отдает их без боя, лишь бы не связываться с кодом.
Типы задач с кодом

Если снять пугающую обертку формулировок, типов тут наперечет, и это отдельное облегчение. Семнадцатое сводится к обработке числовой последовательности из файла: считать числа, найти среди них те, что подходят под условие, посчитать их количество и заодно вычислить сумму или максимум. Двадцать четвертое имеет дело со строкой символов, в длинной цепочке букв и цифр надо отыскать самый длинный участок, устроенный по заданному правилу. Двадцать пятое крутится вокруг свойств чисел, делителей, разрядов, признаков делимости. Двадцать шестое и двадцать седьмое опираются на большой файл данных, который надо загрузить, отсортировать, перебрать и обработать, а в двадцать седьмом вдобавок приходится следить, чтобы программа уложилась в разумное время и не считала до бесконечности. Разных формулировок сотни, а вот базовых сюжетов за ними всего несколько.
Задачи по типам
Где на экзамене нужен код и что именно должна сделать программа.
| Задание | Что делает программа | Балл |
|---|---|---|
| 17 | Обрабатывает числовую последовательность из файла: ищет элементы по условию, считает их количество и заодно сумму или максимум | 1 |
| 24 | Разбирает длинную строку символов и ищет в ней самый длинный участок, устроенный по заданному правилу | 1 |
| 25 | Работает со свойствами чисел: делители, разряды, признаки делимости | 1 |
| 26 | Загружает большой файл данных, сортирует и перебирает его, отвечает на вопрос по набору | 2 |
| 27 | Анализирует большой набор данных, тут важен экономный по времени алгоритм, иначе программа не успеет | 2 |
Один язык и никаких метаний

Дальше развилка, на которой многие буксуют месяцами. Какой язык учить. На рабочем месте их установлено несколько, но для подготовки достаточно выбрать один и врасти в него до автоматизма. Прыгать с одного синтаксиса на другой в поисках идеального значит топтаться на месте и так и не набрать беглости ни в одном.
Для первого языка чаще всего берут Питон. Синтаксис у него короткий и близкий к обычному языку, программа в полтора десятка строк действительно занимает полтора десятка строк и не разрастается вдвое. А на чтение файла с числами уходит буквально одна команда. Наш выпускник, промучившись пару недель с более многословным вариантом, где каждая мелочь требует лишних строк, переходит на Питон и с удивлением замечает, что те же задачи стали короче и понятнее. Важно тут одно: определиться пораньше, лучше в самом начале подготовки, и дальше не метаться. Беглость приходит только от долгой работы с одним инструментом, а перебежчик каждый раз начинает почти сначала.
Кирпичи, из которых складывается решение

Пугает не программирование само по себе, а ощущение, что учить придется бесконечно много. На деле почти все задачи с кодом на этом экзамене собираются из горстки одних и тех же приемов. Стоит довести эту горстку до полного автоматизма, и добрая половина страха испаряется, потому что новая задача перестает быть неизвестностью и становится сборкой из знакомых деталей.
Первый прием, чтение данных из файла. В большинстве задач числа или символы лежат в текстовом файле, и первым делом их надо загрузить в список, чтобы дальше свободно с ними работать. Второй прием, цикл, который проходит по всем элементам последовательности от начала до конца, по одному или сразу парами и тройками. Третий, ветвление, то есть проверка условия: подходит текущий элемент под требование задачи или нет. Дальше идут переменные-накопители. Счетчик, который прибавляет единицу на каждом подходящем элементе, и отдельная переменная, которая бережет найденный максимум или минимум. Особняком стоят два ходовых навыка: разбор числа на цифры через остаток от деления и целочисленное деление, а также перебор символов строки. Вот, по сути, и весь стартовый набор, шесть или семь приемов. Освоив их, выпускник обнаруживает, что девять из десяти задач с кодом складываются из этих кирпичей в разных сочетаниях, и учить бесконечно длинный список ему уже не нужно.
Как разобрать типовую задачу по шагам

Лучше всего страх лечится прямо на семнадцатом задании. Оно повышенного уровня, на него закладывают около четырнадцати минут, а справляется с ним меньше трети выпускников, хотя устроено оно на удивление механически. Вся его сложность спрятана в витиеватой формулировке, сам алгоритм прост. Наш выпускник впервые садится разобрать его целиком, ничего не пролистывая.
Сначала он честно вычитывает условие и выписывает на черновик, что именно от него хотят. Какие элементы рассматривают, отдельные числа, пары или тройки идущих подряд. Какому условию они должны отвечать, например делимости или наличия определенной цифры. И что положить в ответ, обычно количество подходящих групп и минимальную или максимальную сумму. Дальше он считывает числа из файла в список. Заводит счетчик, ставит его на ноль, и переменную для максимума, аккуратно задавая ей стартовое значение, чтобы первое же настоящее число ее перебило. Запускает цикл по последовательности, на каждом шаге проверяет условие, и если оно выполнено, увеличивает счетчик и при нужде обновляет максимум. В самом конце выводит два числа.
И вот тут прячется коварная деталь, на которой горят даже сильные. Два числа в ответе нельзя менять местами. Перепутал порядок, и за полностью верно решенную задачу выпадает ноль. Поэтому последний шаг разбора у нашего выпускника всегда один и тот же: свериться с условием, что за чем идет в ответе.
Когда он проходит этот путь один раз от начала до конца, происходит важное. Запутанная формулировка перестает пугать, потому что за ней проступает один и тот же скелет: прочитать файл, пройти циклом, проверить условие, накопить нужное, вывести результат. Меняются только детали условия, а каркас держится от задачи к задаче. Дальше он берет второй такой пример, третий, и рука постепенно начинает двигаться сама, без мучительного вспоминания, с чего начать.
Тот же самый скелет он вскоре узнает и в других номерах. В двадцать пятом задании вместо пар чисел перебирают делители, но действия те же: прочитать, пройти, проверить, накопить, вывести. В двадцать четвертом вместо чисел перебирают символы строки, однако рамка решения снова знакомая. Именно эта повторяемость и превращает разрозненный страх перед десятком заданий в один освоенный навык. Выучив как следует одну типовую задачу, выпускник наполовину закрывает и соседние.
Частые ошибки

Спотыкаются на семнадцатом и похожих задачах чаще всего не на алгоритме, а на мелочах. Самая обидная уже названа, перепутанный порядок двух чисел в ответе, и весь труд насмарку. Рядом стоит невнимательное чтение условия, когда выпускник упускает одно словечко, вроде строгого или нестрогого неравенства, и программа честно считает не то, что просили. Легко ошибиться и на границах, обрабатывая пары или тройки: цикл заходит за край списка и роняет программу ошибкой. Забытый модуль для отрицательных чисел или неудачно выбранное стартовое значение максимума тоже тихо крадут баллы. Лечится все это простой привычкой перечитывать условие дважды и прогонять программу на коротком примере, где ответ известен заранее и легко проверяется вручную. Гениальность тут ни при чем.
Разбор типовой задачи по шагам
Семнадцатое задание, обработка последовательности из файла. Один и тот же порядок действий для любой формулировки.
Как набивать руку на банке заданий

Программирование ставится собственными руками, чтением чужих разборов беглость не приходит. Теорию реально понять за один вечер, а вот скорость и уверенность нарабатываются только на количестве самостоятельно прорешанных задач. Тут незаменим открытый банк заданий на сайте ФИПИ, где собраны реальные формулировки прошлых лет, ровно в том виде, в каком они встретятся на экзамене.
Работать с банком разумнее по типам, а вперемешку толку меньше. Стоит взять семнадцатое задание и прорешать подряд десяток разных вариантов, пока скелет решения не станет отскакивать от зубов. Потом так же плотно зайти на двадцать четвертое, затем на двадцать пятое. Двигаться логично от простого к сложному и обязательно доводить каждое решение до верного ответа, сверяясь с эталоном, без привычки бросать задачу на середине с мыслью, что суть ясна. Ближе к экзамену полезно включать таймер, потому что на реальном КЕГЭ программу надо написать в отведенные минуты, и скорость тут решает наравне с правильностью.
Отдельно стоит разбирать не только чужие задачи, но и собственные промахи. Когда программа выдала неверный ответ, полезно докопаться, где именно она свернула не туда, вместо того чтобы просто подсмотреть готовое решение и идти дальше. Своя разобранная ошибка запоминается крепче десятка правильно решенных задач и почти никогда не повторяется на экзамене. Так постепенно набирается не только скорость, но и та внимательность к условию, на которой держится половина баллов.
Понять, какой именно тип задач с кодом проседает у вашего ребенка и с чего ему разумнее стартовать, проще всего на очном разборе с преподавателем. Мы смотрим, что уже получается, а где рука застревает, и с этого выстраиваем маршрут по программированию под его цель по баллам.