Реалрпг почти альтистория (СИ) - Ким Виктор Валентинович. Страница 47
Ё-моё, и это простейшая штука. Витя только сейчас осознал масштаб проблемы и обратил внимание на соседа Колю, который уже целую минуту смотрел на находящегося в прострации одногруппника.
— Привет.
— Привет, я зашёл, а ты сидишь, смотришь и меня не замечаешь, подумал, что научился полезному делу, спать сидя и с открытыми глазами.
— Нет, просто крепко задумался.
— Хорошо, что я тебя застал, тут мужик со станции приходил, у них наплыв вагонов, приглашал подработать сегодня вечером, как ты смотришь на это дело? — Коля был уверен, что задаёт вопрос для проформы, его сосед по комнате никогда от работы не отказывался.
— Хорошо, пойдём, деньги мне не помешают.
— Пойду ребят предупрежу, что от нашей комнаты двое будет, — Коля не стал спрашивать, зачем ему столько денег, так как был в курсе предстоящей покупки мотоцикла.
Разгрузка прошла штатно, денег на планируемую покупку хватало и Витя решил со следующей недели начать посещать магазины спорттоваров. С местом стоянки для будущей техники в Москве он заранее договорился с Ефремовым.
Со следующего дня занялся выполнением требований для нового рецепта, теория алгоритмов никаких проблем не вызвала, совсем другое дело второе требование — по сути нужно разработать собственный специализированный язык программирования. Для начала решил изучить какой-нибудь из существующих и потренироваться в написании и отладке программ, тем более, что в этом был и самостоятельный смысл.
Выбор оказался не очень велик, программисты использовали в основном два языка высокого уровня — Фортран и Алгол и программирование в машинных кодах. Выбрал Алгол, как более структурированный, для практики требовалось машинное время в вычислительном центре.
Пришлось обращаться за помощью к Анатолию Ивановичу и осваивать работу с перфоратором. И то и другое увенчалось успехом, машинное время выделялось в достаточном количестве, правда по ночам, а на перфораторе меньше чем за неделю он научился набивать программы в максимальном темпе, который тот допускал. Отладив несколько не очень больших программ, Витя приступил к решению собственной задачи.
Служебные слова для обозначения границ блока begin…end, названия операторов ветвления, цикла, описания типов и прочего решил по аналогии с Алголом оставить английские, ввёл именованные константы для обозначения химических элементов и некоторых неизменяемых величин и начал составлять библиотеку процедур и функций, например, одна из стандартных функций должна была создавать углеродный шестиугольник.
Хорошо, что не нужно разрабатывать транслятор, который преобразовывает операторы языка в машинный код, ибо в этом случае решение стоящей задачи откладывалось бы на неопределённое будущее. Дал создаваемому языку название из двух букв ОЗ (Описание Заданий) и столкнулся с проблемой отладки. Со своим “внутренним миром” Витя общается устно, тот в свою очередь с Витей общается текстом или графикой.
Допустим можно прочесть вслух полное описание созданного языка, что, кстати, само по себе потребует немало времени, а как потом отлаживать “программы”? Например, хочу создать цепочку углеродных шестиугольников длиной 1 см, как действовать? Взять в руки кусок графита, прочитать написанную для выполнения этой задачи программу, запустить рецепт, а потом смотреть структурой вещества, что получилось? Непонятно, но в любом случае нужно ехать домой и неплохо бы на мотоцикле, который ещё нужно купить и, между прочим, сдать на права. Всё, делаю перерыв, и занимаюсь мотоциклом, к тому же и на улице потеплело.
Повезло дважды, в одном из магазинов стояли на продажу “Ижи” и нашлась автошкола, в которой через четыре дня будет сдача экзаменов. В целом всё прошло успешно, лишь на сдаче вождения чуть не произошёл казус: сдавал на чужом “Восходе” и не учёл, что у него, в отличие от “Ижа”, ограничен поворот руля и лишь чудом удержал равновесие и не коснулся ногами земли.
Предупредил старосту, что в ближайшую субботу пропустит занятия и в пятницу уехал домой на мотоцикле, решив плотно заняться освоением нового рецепта. Поскольку техника находилась в периоде обкатки, Витя не развивал скорость выше 50 км/час на верхней передаче, по пути делал остановки. Приехал с триумфом на новом “Иж-планета-2” синего цвета. Раздал подарки, выслушал Вову, который сообщил, что он умеет считать до 100, пообещал Толе летом дать прокатиться на мотоцикле и решил завтра с утра заняться языком заданий.
После завтрака Витя попросил его не отвлекать, так как будет занят очень важным делом. Приготовил себе большую чашку с чаем и дал команду: Показать характеристики:
Имя — Витя Белов
Раса — Человек
Уровень — 17
Класс — Ученик
Характеристики
Сила — 20
Ловкость — 20
Скорость — 20
Телосложение — 20
Выносливость — 21
Интеллект — 26
Восприятие — 22
Единиц жизни — 400
Навыки и умения
Стрелок 4 уровня
Ориентирование 3 уровня
Артефактор 3 уровня
Целитель 4 уровня
И начал зачитывать ранее аккуратно переписанный начисто текст языка описания заданий. Поскольку никакой реакции на начало чтения не было, продолжал читать до победного конца. Хлебнул сладкий чай и увидел, как сменился текст перед глазами:
Запустить отладчик?
— Да, запустить. Заодно и узнаю, что это такое.
Выбери форму тестового объекта: Шар, Параллелепипед, Цилиндр, Конус, Пирамида, Тор, Другое
— Параллелепипед.
Укажи размеры в миллиметрах: Длину Ширину Высоту
— 50 30 10
Вводи описание структуры и команду Старт
Витя зачитал текст заранее заготовленного описания по имени Цепь6, строящего цепочку из миллиона углеродных шестиугольников, расположенных вертикально начиная от нижней грани и дал команду Старт!
Перед глазами появился прозрачный прямоугольный параллелепипед с маленькой чёрточкой, направленной из центра нижней грани вертикально вверх. Одной из целей Цепь6 было определение размера ребра углеродного шестиугольника, для этого нужно, чтобы цепочка протянулась точно на всю десятимиллиметровую высоту, миллион занял лишь малую часть этой высоты.
Увеличив в процедуре Цепь6 число элементов до десяти миллионов, снова зачитал её и запустил. Чёрточка в параллелепипеде стала занимать примерно четверть высоты, получается, что 10 мм это примерно 40 000 000 (сорок миллионов) шестиугольников. Действуя аналогично, в конце концов, получил точное их число, помещающееся в 10 мм: 41 535 990, отсюда вычислил длину ребра около 0,139 нанометра.
Несмотря на сильнейшее воодушевление — у него получилось, отметил и недостаток отладчика, приходилось после каждого изменения зачитывать заново текст процедуры. Несмотря на это, отладчик был гораздо удобнее системы отладки программ в вычислительном центре института, где приходилось после каждой ошибки снова работать с перфоратором и заменять одну или несколько перфокарт либо перфоленту. К тому же здесь сразу был виден результат.
Кстати, не хранится ли у меня в памяти Цепь6? Дал команду: Показать Цепь6! Не произошло ровным счётом ничего. Так, попробую иначе. Витя снова зачитал последнюю версию Цепь6 и дал команду: Сохранить Цепь6! Затем ещё одну: Показать Цепь6! Перед глазами появилась требуемая процедура. Просто отлично, это не отладчик плохой, это я не умею им пользоваться, либо он подстраивается под мои требования. Попробовал заменить в висящем перед глазами тексте один из параметров и убедился, что команда замены тоже работает. Закрыл отладчик и отправился на кухню, оказывается, есть он хочет уже давно.
После обеда с энтузиазмом продолжил работу. Отладил несколько процедур, когда обнаружились ошибки в самом языке описания заданий, исправил и их, к счастью, не пришлось заново читать весь его текст — он хранился в памяти. Увлёкся так, что остановило только появившееся сообщение:
Недостаточно выносливости для работы отладчика
Зафиксировав время, понял, что успеет только поужинать и нужно ехать в Москву.
Глава 23
В Москве в понедельник пришлось выслушать внушение от старосты, что он не принял участие в субботнике 22 апреля, зато в тот же день смог найти в институте Анатолия Ивановича и спросить его насчёт иридия. Выяснив, что благородный металл нужен не на совсем, а просто для ознакомления (как считал Витя по аналогии с платиной), обещал достать в ближайшее время.