<< Вернуться на главную

Охотник за мегабайтами

Приближается новый год, и вместе с ним приближается новогодний конкурс программистов.

В этом году спонсором конкурса выступает ОАО ИСС и тематика конкурса соответствующая.

Традиционно, задание выдаем за месяц до конкурса, чтобы борьба была честной и справедливой.

Итак:

Все мы любим интернет, и чем он быстрее, тем, как известно, интереснее :-). Ну так вот, имеем N спутников связи (в тестовой задаче их 10, но как всегда на очном этапе количество спутников может измениться). И 4-ре приемные антенны (тоже переменная величина). Главная задача, накачать с этих спутников как можно больше вожделенных мегабайт.

Как и всякая модель, наша имеет некоторые непринципиальные отличия от реального процесса. Так например область видимости спутников имеет размер 640 на 480. Антенны наводятся только в одной плоскости. Но в остальном все очень похоже :-). Но есть в этом деле и некоторые сложности. Так например:
Спутники находятся на разных орбитах (и соответственно имеют разную орбитальную скорость). Чем орбита ниже, тем скорость выше
Каждый спутник обладает определенной информативностью
информация скачивается только если антенна смотрит на спутник и при управлении антенне был задан именно его номер. Задача - навести антенну на выбранный спутник как можно точнее. Мало того, что прием идет только в пределах 2-х градусов отклонения, так еще и внутри зоны приема качество зависит от косинуса угла разсогласования.

Выглядит все примерно так:



Игрушку с ручным управлением можно скачать здесь
В игрушке все просто, все антенны направляются в ту точку, куда мышкой ткнули. И при этом первая антенна Принимает только с первого спутника, 2-я со второго и.т.д.

Итак, приступаем собственно к заданию.

Для разных облочек программирования (C++BUIlDER, DELPHI2007, LAZARUS) мы подготовили проекты, в которых все уже реализовано :-) правда работает не очень оптимально. Ваша задача - улучшить наведение антенн и скачать как можно больше мегабайт. Кто больше накачает, тот и победитель.

Проект для Delphi7(CodeGear)
Проект для C++BUILDER(CodeGear)
Проект для Lazarus

УПРАВЛЕНИЕ

Во всех проектах управление антеннами производится через функцию UPR, в которую передается Номер управляемой антенны, номер спутника, с которого будет вестись прием и угол наведения. (кстати углы наведения могут быть от 0 до 180). 0 - антенна смотрит влево, 180 - антенна смотри вправо, ну а 90 - вертикально вверх.

Например если вы вызываете подпрограмму управления "UPR(1,2,90);" то это значит, что на первую антенну подается команда занять позицию 90 градусов. Правда это не значит, что антенна сразу займет указанное положение, дело в том, что у каждой антенны имеется определенная скорость (у первой - 1 градус на 1 ход , у второй 2-а и.т.д.). Так что может даже случиться, что антенна не успеет за низколетящим спутником. Тут нужно соображать :-) по низколетам применять быстрые антенны, а по высотным аппаратам можно и более медленные.

Для отрисовки можно вызвать подпрограмму "OTRIS"
DELPHI,LAZARUS - procedure OTRIS;
BUILDER - void OTRIS(void);

КОНТРОЛЬ

Для получения данных используются подпрограммы и функции:

function GET_INFORM_SAT(SAT: INTEGER): INTEGER; // Функция запроса информативности спутника
SAT - номер спутника
Если спутника с указанным номером в этот момент нет на небе (что вполне вероятно) то данная функция вернет "0".

procedure GET_INFORM_ANT(ANT: INTEGER; var X, Y, S: SINGLE); // получить информацию об антенне
ANT - номер антенны
X,Y - координаты антенны
S - Текущий угол антенны

function GET_UGOL(ANT, SAT: INTEGER): SINGLE; // функция, дающая угол на спутник SAT относительно антенны ANT
(очень удобно для наведения) Если спутника нет, то угол=0.



Как всегда, конкурс состоится в 2-а этапа. На первом этапе (аж до нового года) все вникаем в проблему, ищем решения, пробуем, задаем любые вопросы. Попутно вылавливаем разные баги (чтобы потом сюрпризов на очном этапе было поменьше). И пишем свои версии программ

Ну а 9-го Января в 12:00 В кабинете 2-27 СЮТа состоится очный этап. Если народу будет слишком много, то участвовать будут только лучшие. Для чего необходимо принести готовые программы с заочного этапа. Сражаться будем в 2-х номинациях
8-е 9-е классы и 10-е 11-е.

На очном этапе необходимо будет адаптировать свою программу под слегка измененные условия. Обещаем, что на очном этапе ожидаются сюрпризы! Но я думаю, что для тех, кто напишет программу на заочном этапе и разберется во всем сам, ничего страшного не будет :-). Будет предложено 3-и варианта задачи и победитель определится просто по сумме всех набранных очков.

Может меняться количество спутников и антенн, скорость и информативность спутников, а так же местоположение антенн. И, вероятно, на очном этапе усложнится само наведение (потребуется большая точность).

Не будут менятся интерфейсы подпрограмм и функций, Не будет меняться распределение скоростей антенн (первая - 1-н градус за ход, вторая - 2-а градуса и.т.д.

Желающим принять участие в конкурсе очень желательно зарегистрироваться. Чтобы заранее "застолбить место на очном этапе.
РЕГИСТРАЦИЯ

На сегодня зарегистрировались:

Фамилия имя Среда программирования Особые отметки
Павленко Кирилл Delphi 11кл
Климов Алексей Delphi 10кл
Ахмадеев Александр Delphi 11кл
Мордовин Дмитрий Lazarus 11кл
Кожанов Валерий Lazarus 9кл
Печеницын Иван Lazarus 9кл
Вычужанин Павел Lazarus 9кл
Перепелица Семен Lazarus 11кл

Кстати, дизайн игры и конкурса можно менять. Общий фон хранится в файле "FON.BMP", размером 640 на 480. А спрайты (кроме антенн) хранятся в файле "SPRITE.BMP".
Кстати за лучшее оформление игры можно получить дополнительную грамоту (определять лучший дизайн будут финалисты конкурса программистов). И тут полной объективности не сможем гарантировать :-). Сами понимаете, на вкус и цвет как известно....
На сегодня уже были предложены несколько вариантов. Кто следил за этой страничкой, мог заметить изменения :-).

Следите за изменениями на страничке. Может баги какие будут найдены и исправлены. Так что будьте в курсе.

ЖЕЛАЕМ УСПЕХОВ!

По всем вопросам обращайтесь к администрации "звездного мира" через систему

Вопрос-ответ.

или по почте