У Юли все предыдущие работы были сданы, поэтому мне она сдавала первую работу на следующей неделе. Программа у неё работала отлично, я попросила её объяснить несколько свойств объектов, одну процедуру и поставила ей заслуженную пятёрку. По моей просьбе, Юля скинула программу на сетевой диск, а оттуда я взяла её на свой компьютер. Так я поступала со всеми работами, которые люди сдавали первыми, во избежание их дальнейшего размножения. После того, как мне сдали все, кто хотел, я дала новое задание:
– Следующая программа, которую вы должны будете написать, называется «Броуновское движение». Вообще говоря, броуновское движение – это хаотичное движение частиц взвеси в жидкой или газообразной среде под ударами молекул или атомов вещества среды. Таким образом, траектория частицы является ломаной кривой, но причины изменения направления её движения не ясны, так как не видны атомы и молекулы. Но наша программа должна смоделировать хаотическое тепловое движение частиц, образующих вещество, под которым часто неправильно понимают броуновское движение. То есть я должна увидеть кружочки, направление которых задаётся случайным образом, которые отталкиваются друг от друга и от стенок. Удар должен быть абсолютно упругим, т.е. при ударе скорость и направление одной частицы должны переходить к другой и наоборот. Скорости сделайте одинаковыми, это проще, например, задайте шаг молекулы как один пиксель за интервал таймера.
– Ирина Владимировна, а как сделать так, чтобы молекулы отталкивались?
– Наиболее распространённый способ – это следить, чтобы расстояние между двумя молекулами было больше, чем два радиуса. Как только оно становится равно диаметру, происходит столкновение. Как находить расстояние между двумя точками помните?
– Ну так…
– Берёте координаты левых верхних углов, или центров, не суть важно, и извлекаете квадратный корень из суммы квадратов разностей координат. Да, и не забывайте, что везде при задании и изменении направлений вы должны обязательно учитывать, что у точек есть две координаты: х и у.
– А как случайно задать направление?
– Может, мне вам ещё и программу сразу написать? Действительно, зачем я вам тут всё рассказываю, давайте сразу всем пятёрки поставлю. Хоть над чем-нибудь подумайте.
В конце второй пары мне сдавала работу Ксюша. Программа у неё тоже работала прекрасно, но вот когда я посмотрела код программы…
– Эту работу я уже видела. Ксения, как вы можете это прокомментировать?
– Не знаю… Говорят, у гениев мысли сходятся.
– Ага, а ещё говорят, что у дураков, – я также скинула прогу на сетевой диск, а затем прошла за свой компьютер, – возьми с собой Юлю, и подойдите, пожалуйста, сюда. Скинув себе на комп Ксюшину программу, открыв её и скопировав код Юлиной проги в Блокнот, я подождала, когда девушки встанут за моей спиной, расположила окна рядом друг с другом и сказала:
– А теперь игра: найти десять отличий. Не… ну интерфейс вы, конечно, здорово изменили: и размер формы, и цвет графиков, даже кнопки в других местах поставили и их размер изменили, но вот код программы… – я усмехнулась – девчонки, ну вы бы хоть названия переменных поменяли, а то это уж как-то вообще… И что делать будем, а Юль?
Я обернулась к ним. Юля стояла с отсутствующим взглядом, всем своим видом показывая, как же её всё это достало. Я снова повернулась к монитору.
– Ладно, четыре балла. Но чтобы это было в первый и последний раз.
Через неделю сдавали броуновское движение. Юля сдала опять на отлично, быстро ответила на несколько моих вопросов и приступила к следующему заданию. А вот Ксюша… Увидев её программу, я была несколько удивлена – в ней был реализован алгоритм определения момента удара, отличный от того, который я рассказала неделю назад. Смысл заключался в том, что изменение направления движения молекул происходило в момент, когда противоположенные одноимённые координаты квадратов, в которых рисуются эллипсы (например, верхняя сторона одного квадрата и нижняя другого), совпадали, и одновременно расстояние между другими координатами не превышало диаметра. Этот алгоритм был, естественно, сложнее, но необычнее, и потому интереснее.
– Ксения, расскажите вкратце, по какому принципу у вас находится момент столкновения.
– Ну это… – Ксюша попыталась на пальцах, а точнее, на кулаках, видимо, представляющих молекулы, объяснить – должны совпадать одни координаты, например, иксовые, но при этом нужно следить, чтобы разница других, игриковых, координат была не больше двух радиусов.
– Хорошо. Покажите в теле программы этот момент.
Ксения показала.
– Отлично. А вот я вижу, что удар реализуется не только в момент, когда координаты совпадают, но и в момент, когда разность между ними равна одному. Почему?
Ксюша молчала.
– Это на всякий случай, – наконец сказала она.
– На какой случай?
– Ну вдруг при точном совпадении не сработает.
– А почему может не сработать?
– Мало ли, всякое случается…
– Понятно. Где у вас меняется направление движения молекул?
– Так вот здесь, после then.
– После then я вижу два счётчика, каждый из которых является элементом массива. Кстати, что это за счётчики?
Ксюша молчала.
– Да бог с ними, со счётчиками, хоть где направление меняется, покажите?
Нет ответа.
А вот в этом месте, – я выделила кусок кода, – у вас что?
– Ах, да!… Вот здесь как раз и происходит изменение направления.
– Хорошо. Массив k за что отвечает?
– За направление.
– А вот здесь он обнуляется. Почему? Что, выходит, молекулы перестанут двигаться?
– А… нет, тогда k всё-таки не за направление отвечает… наверное…
– А за что тогда?
Молчание.
– Ну зачем вы всё-таки вот этот цикл, здесь даже два цикла, написали? Это ведь вы написали? – я обернулась и посмотрела на Ксюшу.
Та ничего не ответила.
– Будьте добры, позовите свою коллегу Яковлеву.
Когда подошла Юля, я сказала:
– Юлия, вы знаете, вашей подруге удалось придумать новый алгоритм нахождения момента столкновения молекул. Что вы об этом думаете?
– Ксюша – талантливая девушка.
– Да, это бесспорно. Только вот она почему-то не может объяснить, как работает её программа.
Юля пожала плечами.
– Работа программиста такой же творческий процесс, как и работа поэта, музыканта, художника. Например, поэт, написав целую главу нового романа, на следующий день не сможет вспомнить ни строчки из неё. Этот эффект называется реминисценцией. Наблюдается, особенно если материал является логически связанным, большим по объему и имеющим на человека эмоциональное воздействие – как раз такой, как реализация нового алгоритма.
– Да, эффект реминисценции может иметь место, если дело касается информации, которая находится исключительно в памяти (как хорошо, что у меня на третьем курсе была психология!) но смотреть на код программы, которую ты лично написал, и не суметь сказать, что она делает… Я вижу программу в первый раз в жизни, и то что-то здесь понимаю. Значит, так: за программу 5, за сдачу 2, среднее – три целых пять десятых. Но за разработку нового алгоритма полбалла, так и быть, добавлю. Все свободны.