                                                        Даже цветы вянут
                                            если их ни во что не ставить

        II НЕЗАВИСИМАЯ ОЛИМПИАДА ПО СИСТЕМНОМУ ПРОГРАММИРОВАНИЮ
                         Киев, 19 октября 1991 г.

               Октябрьские приветствия Председателя жюри
  участникам II независимой олимпиады по системному программированию

   Да здравствуют бесстрашные участники олимпиады - молодые строители си-
стемных программ! Да здравствуют бесплатные компиляторы с языка С++, ас-
семблеры и дизассемблеры, Нортон Коммандер и утилиты, до слез родная  МС
ДОС !
   Теснее сплотим наши ряды вокруг персональных компьютеров - их все рав-
но на всех не хватит !
   Программисты ! Настойчиво  овладевайте теорией. Пусть  алгоритмы, на-
чертанные в гениальном трехтомнике Дональда Кнута ведут Вас от программы
к программе !
   Пока существуют "монстроватые"  языки программирования, запутанные  и
слабосильные операционные системы, процессоры 8086, 80286, всегда  будут
нужны программисты, способные придти и решить задачу с помощью небольшой
программы на ассемблере, оставив документацию на потом !
   Позор ревизионистким  уклонам в  сторону от  структурного и объектно-
ориентированного программирования, даже если мы не понимаем, что это та-
кое !
   Студенты ! Посмотрите  на ваших преподавателей  и поймите: не  единым
программированием жив  человек. Помните,  что сливки  всплывают, пока не
скисают.
   Школьники ! Настойчиво занимайтесь самообразованием. Помните!  Курица
не птица, Бейсик - не язык системного программирования. Если  преподава-
тель cогласен с Вашим алгоритмом или программой это верный признак того,
что вы не правы.
   Братский привет программистам развивающихся стран, как и мы самоотве-
рженно программирующих без денег, еды, компьютеров и дискет !
   Дорогие  зарубежные  программисты  - проявите  братскую солидарность и
срочно обеспечте нас всем, всем, всем !

                     Порядок проведения олимпиады.

  Участник олимпиады должен ответить на один вопрос и решить две задачи:
одну на языке ассемблера, другую на любом языке высокого уровня (С, Пас-
каль, PL/1, Модула-2 и т.д.). На решение этих задач дается четыре часа.
   Решение оценивается в соответствии с общим числом баллов, указанных в
условии задачи. При оценке алгоритма оценивается его правильность и ори-
гинальность, рациональность используемых структур данных и степень  вла-
дения модульным и  структурным программированием. Неправильный  алгоритм
оценивается нулем баллов. Программа  должна быть разбита на  модули так,
чтобы их можно было рассматривать по отдельности, почти независимо  друг
от  друга  (уровень  модульности  коррелирует  с  уровнем квалификации).
ВНИМАНИЕ ! Поскольку  члены жюри работают  в условиях дефицита  времени,
учитывается качество оформления (кто ясно мыслит - ясно излагает).

                  Рекомендации по оформлению решений

  1. Решение каждой задачи должно состоять из четырех частей (идея, схе-
ма, текст программы и проверка): сначала необходимо изложить идею  реше-
ния (не менее 10 строк) и необходимо пояснения к схеме алгоритма и текс-
ту программы, затем рекомендуется привести схему алгоритма. Рекомендует-
ся рисовать схему алгоритма выделяя подпрограммы для блоков имеющих  оп-
ределенное функциональное назначение. Только после этих двух частей дол-
жен располагаться по возможности аккуратно написанный (уважайте труд жю-
ри - не мучте понапрасну ваших коллег!  ) Желательно привести после тек-
ста программы пример(ы) проверки на нескольких тестовых наборах.
   2. Все переменные, используемые  в программе, должны иметь  коммента-
рии, обьясняющие их назначение и, желательно, область допустимых  значе-
ний.
   3. Все метки,  имеющиеся в тексте  программы, должны быть  отражены в
схеме алгоритма (надписаны рядом с соответствующими блоками).
   4. Схему алгоритма и текст программы рекомендуется писать карандашом.

   Председатель оргкомитета олимпиады
   доцент, канд. физ.-мат. наук                             Безруков Н.Н.


                            Вопрос
                                                               "Разминка"
                                                                5 баллов

   Перечислить названия глав первого тома монографии Д.Кнута  "Искусство
программирования для ЭВМ" и указать возраст ее автора в момент выхода  в
свет английского издания.

                               Задача 1
                                                                 "Школа"
                                                      ассемблер 20 очков

  Написать  подпрограмму,  подсчитывающую  количество  единичных битов в
строке, адрес которой передается  ей в качестве параметра.  Длина строки
не более 64K. Строка заканчивается символом 00h. Привести образец  глав-
ной программы, вызывающей данную.


                               Задача 2
                                                 "Произвольная программа"
                                          язык высокого уровня 70 баллов

  Для упрощения выдачи динамически изменяющихся сложных шапок документов
в статье "Генерация программы печати шапки документа по описанию  струк-
туры шапки" (Программирование, 1979,  No.6 c.92-95) было предложено  так
называемое структурное описание шапки документа (СТРОШ), аналогичное за-
данию структур в ПЛ/1 или Коболе. Например, Строш-описание вида:

   1 'Пример СТРОШ описания',
     2 'Сведения'  'о'  'произведении'
        3 'Наименование' Ш 18
        3 'Год' 'издания' Э
     2 'Сведения' 'об' 'авторе'
        3 'Фамилия'  'имя'  'отчество' Ш 23
        3 'Год'  'рождения' Э
     2 Цена Ш 8

   генерирует следующую шапку документа

                          Пример Строш описания

┌──────────────────────────┬────────────────────────────────┬────────┐
│        Сведения          │           Сведения об          │        │
│           о              │              авторе            │        │
│      произведении        ├───────────────────────┬────────┤  Цена  │
├──────────────────┬───────┤       Фамилия         │        │        │
│                  │  Год  │         имя           │  Год   │        │
│   Наименование   │издания│       отчество        │рождения│        │
├──────────────────┼───────┼───────────────────────┼────────┼────────┘


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



                  Официальным спонсором олимпиады является фирма Доверие
