Вы - -й посетитель этой странички 

Пятая олимпиада по программированию в ЦАО г. Москвы

А.С. Пономаренко,
Москва

Юбилейная, 5-я олимпиада по программированию в Центральном округе г. Москвы состоялась 10 февраля 2001 года в УВК № 1840. Эти соревнования, как всегда, были командными. Каждая школа округа имела право выставить одну команду их троих учащихся. В этой олимпиаде участие приняла 31 школа округа.
    Необходимо отметить исключительно четкую организацию этого мероприятия, заслуга которой принадлежит методисту по информатике ОНМЦ Л.С.Великовичу и директору УВК № 1840 Б.М.Гольденбергу. Это действительно был праздник — праздник ума и интеллекта.
    Подготовка к олимпиаде началась еще осенью 2000 года. Были продуманы организация олимпиады, оповещение школ округа о предстоящем мероприятии, подготовлены призы для победителей, утвержден состав комиссии по отбору задач и т.д. Этой комиссией было отобрано 10 задач. Задачи № 3, 4 и 9 составила учитель информатики УВК № 1840 В.А.Жукова, а остальные задачи разработал автор этих строк, председатель жюри олимпиады и учитель школы № 465 А.С.Пономаренко.

Задача № 1 (10 баллов)

    В подъезде 14-этажного дома два работающих лифта. На каждом этаже всего одна кнопка для их вызова. Смоделировать на экране монитора процесс перемещения этих лифтов, в том числе отразить процесс открывания и закрывания дверей, в следующей ситуации:
    · оба лифта свободны;
    · человек, которому нужен лифт, и сами лифты находятся, вообще говоря, на разных и произвольных этажах;
    · по вызову подъезжает лифт, ближайший к данному этажу (если оба лифта удалены от человека на одинаковое число этажей, то тогда прибывает любой из них);
    · вызванный лифт отправляется на указанный этаж.

Задача № 2 (10 баллов)

    Смоделируйте опыт по изучению работы реостата (см. рисунок). Если бегунок находится в левом положении, то вольтметр показывает максимальное напряжение в 4 вольта. При перемещении бегунка вправо стрелка вольтметра отклоняется влево, так как напряжение в цепи падает (вплоть до 0 вольт при крайнем правом положении бегунка).

Задача № 3 (5—8 баллов, в зависимости от качества картинки)

    Изобразить падающий снег, видимый из окна.

Задача № 4 (7 баллов)

    Найти все те годы (до 100-летнего юбилея), когда вы будете праздновать день своего рождения в тот же день недели, когда родились.

Задача № 5 (6 баллов)

   Случайным образом сгенерированы два 36-значных числа, разбитых на разряды (представленных поразрядно). Выполнить сложение этих чисел поразрядно (в столбик).

Задача № 6 (5 баллов)

    Составьте программу поиска целочисленных сторон всех треугольников, площади которых целочисленно равны их периметрам, если известно, что длина любой стороны такого треугольника не превышает 30. На экране монитора должны быть только неповторяющиеся результаты поиска.

Задача № 7 (5 баллов)

    По всему экрану рассыпаны цветные символы, составляющие текст: “ПРИВЕТ ОЛИМПИЙЦАМ!” Восстановить этот текст в середине экрана так, чтобы был виден путь, который пробегает по экрану каждый символ, выстраиваясь в нужную строку.

Задача № 8 (4 балла)

    Составить программу согласования числительного N со словом “кочерга”. Число N вводится с клавиатуры. Ваше предложение должно быть подчинено правилам орфографии и иметь примерно такой вид: “1 кочерга”, “3 кочерги”, “5 кочерег” — и т.д., но не “7 кочергов” или “7 кочергей”.

Задача № 9 (4 балла)

    Заполнить прямоугольную область экрана любым бегущим символом по спирали от произвольного угла к центру.

Задача № 10 (3 балла)

    В центре экрана нарисовать монаду (см. рисунок) — символ дуальности мира. Затем просканировать ее и, введя новые координаты центра монады с клавиатуры, воспроизвести этот рисунок в заданном месте экрана. Программа, рисующая монаду, не должна содержать переменных! На координаты нового центра дать ограничения таким образом, чтобы монада всегда помещалась на экране полностью.

    Членами жюри олимпиады были учителя информатики: Д.И.Верещака, УВК № 1840; Н.Б.Воропаев, школа № 464, и Н.Б.Логунова, школа № 292.
    Каждая команда имела право решать задачи на любом из трех языков программирования: C++, QBasic и Паскаль. Интересно, что на C++ решали задачи только 4 школы, на QBasic — 19 школ, а на языке Паскаль — 15 школ. Ясно, что некоторые команды пользовались двумя языками программирования.
    Безусловным призером олимпиады стала команда школы № 57 (учитель — И.И. Григорьев) в составе: Боровых Григорий, Горин Вадим и Мальцев Михаил.
    Впервые в истории олимпиад Центрального округа Москвы эта команда решила все задачи за отведенные на это 3,5 часа. Естественно, что этим ребятам было доверено защищать честь округа на городской олимпиаде по программированию.
    Вторых мест было два. Их заняли команда школы № 1501 (42 балла, учитель — А.В.Глубоков) и команда УВК № 1840 (32 балла, учитель — Л.С.Великович).
    Интересен также и анализ протокола этой олимпиады. Самыми “решабельными” задачами явились задачи № 8 (эту задачу правильно решили 13 команд, хотя пытались ее решить 20 команд) и № 3 (правильное решение дали 11 команд). Самыми “непопулярными” (в смысле решения) оказались задачи № 4 и № 7 (каждую из них решили лишь по две команды). Как ни странно, одну из трудных, по мнению жюри, задачу № 2 правильно решили 9 команд. К сожалению, следует отметить, что четыре команды не смогли решить ни одной задачи, хотя первой целью комиссии по отбору задач на олимпиаду являлась именно их “решабельность”. Вторая цель, которой руководствовалась комиссия по отбору задач, была быстрая визуальная проверка решения задачи. Эта цель, как нам кажется, была достигнута полностью, так как только две задачи из десяти имели “ответы-контрольки”. Это задача № 6 (про треугольники, у которых были целочисленные совпадения площади и периметра) и задача № 4 (про дату рождения). Ответ к задаче № 6: всего таких треугольников пять. Длины их сторон, периметры и площади даны в следующей таблице:

№ п/п a b c P S
1 5 12 13 30 30
2 6 8 10 24 24
3 6 25 29 60 60
4 7 15 20 42 42
5 9 10 17 36 36

   Замечание. Самый трудный момент в этой задаче — исключение повторяющихся результатов.

    И, наконец, приведем два различных решения одной из “непопулярных” задач на олимпиаде, а именно задачи № 4, на двух самых популярных языках программирования.

    QBasic

CLS : COLOR 14, 0
INPUT "Введите день, месяц и год Вашего рождения (дд,мм,гггг)"; d, m1, g1
IF m1 > 2 THEN
        g = g1: m = m1
END IF
IF m1 = 1 THEN
     m = 13: g = g1 — 1
END IF
IF m1 = 2 THEN
     m = 14: g = g1 — 1
END IF
a$(0)="воскресенье"
a$(1)="понедельник"
a$(2)="вторник"
a$(3)="среда"
a$(4)="четверг"
a$(5)="пятница"
a$(6)="суббота "
q=d+2*m+INT(.6*(m+1))+g+INT(g/4)
a = q MOD 7: b$ = a$(a)
PRINT: COLOR 15, 0
PRINT d; "."; m1; "."; g1; "- "; b$
PRINT: COLOR 9, 0
PRINT "Этот день недели совпадает с Вашим днем рождения в следующие годы:"
PRINT: COLOR 10, 0
FOR g=g1 TO g1+100
q=d+2*m+INT(.6*(m+1))+g+INT(g/4)
a=q MOD 7: a$=a$(a)
IF m=13 OR m=14 THEN god=g+1 ELSE god=g
IF a$=b$ AND g>2000 THEN PRINT god;
NEXT

    Паскаль

uses crt;
var data:record y:word;m:1..12;d:1..31;end;
      v:1..100;dx:0..1;
      const z:word=0;
    function vis (y:word):boolean;
    begin vis:=false;
    if (y mod 4=0) and (y mod 100<>0) or (y mod 400=0)
        then vis:=true
    end; {function}
    begin
        clrscr;
        with data do begin
            write ('день ');
            readln (d);
            write ('месяц ');
            readln (m);
            write ('год ');
            readln (y) end;
        if data.m<=2 then dx:=1 else dx:=0;
        for v:=1 to 100 do begin
            inc (data.y);
        if vis (data.y-dx) then inc(z,2)
        else inc(z,1);
        if (z mod 7=0) and (data.y>2000)
        then writeln ('в ', data.y, 'году ','Вам исполнится', v:4, 'лет')
        end;
    readkey
end.

    Ниже приведены тесты для проверки решения этой задачи:
    1. Вводимая дата: 23.04.1951.
        Годы: 2001, 2007, 2012, 2018, 2029, 2035, 2040, 2046.
    2. Вводимая дата: 17.02.1986.
        Годы: 003, 2014, 2020, 2025, 2031, 2042, 2048, 2053, 2059, 2070, 2076, 2081, 2087.

Послесловие от редакции

    Успешное решение любой контрольной работы, теста, а тем более олимпиады во многом зависит от психологического настроя, состояния учащегося. Еще в начале XX века ученые-психологи, занимающиеся проблемами тестирования и, в частности, проблемами процедуры тестирования, установили следующий факт. Контрольной группе давали достаточно большой тест (более 60 задач) с вопросами из арифметики и начал алгебры. Тест состоял из двух частей, равных по количеству задач. В первой части были собраны легкие вопросы, во второй — более сложные. Через некоторое время этой же группе испытуемых предлагался тест, состоящий только из второй части первоначального теста. Результаты повторного тестирования были существенно хуже первоначальных результатов (по второй части). Этот феномен ученые-психологи назвали “Успех рождает успех”. Действительно, успешно решив 30 задач и оценив свой результат как верный (в силу простоты предлагаемых задач), испытуемый с большей уверенностью, а следовательно, и с лучшим результатом решает оставшиеся задачи.
    Нам кажется, что при упорядочении задач, предлагаемых на олимпиаде, как, впрочем, и на любой контрольной работе, необходимо помнить, что “успех рождает успех”. Ведь цель любой олимпиады, в том числе и по программированию, — привлечь, заинтересовать данной предметной областью как можно больше школьников. В связи с этим отметим, что, например, задача № 10 задачной комиссии была расценена как одна из легких, так называемых “поощрительных”. Но тот факт, что в списке предлагаемых задач она стоит последней, скорее всего настораживал школьников: “Раз она последняя, в ней есть скрытый подвох”.
    Наши рассуждения-замечания ни в коем случае не умаляют ценности предложенных задач и значимости проведенной олимпиады. Всех нас, да и вас, дорогие читатели, волнует вопрос, как лучше организовать олимпиаду, конкурс и т.д., наше послесловие — еще один маленький шаг на длинном и трудном учительском пути