![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan Страницы: (18) Все « Первая ... 12 13 [14] 15 16 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
Alexeis |
|
||||||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Конкурс среди Delphi-программистов Мы объявляем о начале конкурса по программированию. Участие в конкурсе – отличный способ оценить уровень своих знаний. Каждый день мы пишем какой-то код, решая различные задачи. Но все эти задачи являются типовыми и со временем выполняются на «автомате». Повышение мастерства программиста, наоборот, происходит при решении оригинальных задач, при изучении нового материала, когда программист думает. Данный конкурс позволит всем желающим проверить уровень своих знаний и сообразительность. Данный конкурс является первым у нас, и мы надеемся, что проведение подобных конкурсов в будущем станет хорошей традицией. Правила участия в конкурсе по программированию 1.Регистрация участников К участию в конкурсе допускаются все желающие, при соблюдении данных правил. Для того, чтобы стать участником, нужно быть зарегистрированным участником форума Vingrad. До 15 октября 2008 года надо направить заявку на участие в конкурсе. Для этого необходимо написать сообщение в данной теме с содержанием «Буду участвовать» или отправить ПМ представителям комиссии. Отправляем сюда Участие в конкурсе бесплатное. 2.Сроки проведения конкурса Конкурсное задание высылается всем участникам по внутренней почте форума (PM) и публикуется на форуме 16 октября в 12-00 (МСК). С 16 по 19 октября 2008 года включительно будут приниматься решения внутреннюю почту (PM) участника Отправляем сюда C 20 по 23 октября будет проводиться рассмотрение предоставленных решений путем тайного голосования внутри комиссии по проведению конкурса. К 24 октября будет объявлен победитель с его решением. И выставлены все решения, для того чтобы все убедились в справедливости решения. 3.Выбор победителя Победа в конкурсе подразумевает 100% правильное решение задачи (при всевозможных входных условиях задачи программа давала заданный условием результат). При отсутствии решений в соответствии с вышесказанным условием конкурс может быть признан недействительным. Критерии оценки правильности решения будут указаны в тексте задачи. По результатам конкурса будет только один победитель. Если решений, которые претендуют на победу, больше – будет отобрано то, которые было прислано раньше. 4.Призы Победитель будет немедленно переведен в группу «Эксперт», а также получит 5 баллов репутации. Всем участникам предоставившим рабочее решение хотя бы одной задачи будет повышена репутация на один балл. Занявшим 2 и 3е место на 3 и 2 бала соответственно. 5.Заключительные положения Исходные тексты решения необходимо писать 100% на Delphi в любой версии, но используя синтаксис Delphi 7. Информация о победителе и его решение будет опубликовано на форуме. Выбор победителей проводится силами комиссии по проведению конкурса. Её состав : Rrader, Alexeis, Snowy, Girder, December. Победитель объявляется один раз, без возможности пересмотра. Данный конкурс является некоммерческим. Комиссия по проведению конкурса обязуется неукоснительно соблюдать данные правила. В случае возникновения разногласий, которые на урегулированы данными правилами, – комиссия по проведению конкурса оставляет за собой право вносить односторонние изменения в правила с последующим уведомлением всех участников. --------------------------------------------------- Зарегистрированные участники: morpheyushka, kemiisto, THandle, Staruha, Coder, jsa, Bose, MakPocc, tHE_EGOiSTE, mr.Anderson, Qu1nt, MetalFan, Christoph, aktuba, SneG0K, Poseidon,klimrmad, WaReZMEN, ILyAHA, ilBEastli, ne0n, VICTAR, igimon, BaD_SeCt0R, VanHelsing, Shaggy, MadCoder,586, Mribo, Avers, Sanechichek,DCeres, Frees,Telepyz,safon777,Rennigth,pseud,bems, ~FoX~, AndreyZ53,AntonN,Alix,Felan,RockClimber,Matematik, Solitaire,Pichuser,Yanis,actual, Sajtran,Mauzer91, MERLIN123. ------------------------------------------------------------------------------------------------------------------- Задания на конкурс 1) Задача на алогоритм Дана матрица случайных чисел m x n (m и n) константы (например 10 на 10). Требуется отсортировать ее элементы по спирали. Т.е. для матрицы 3 х 3 получить примерно такой результат. 123 894 765 Вывод по своему усмотрению. Можно и в консоль. Критерии оценки задания: лучшим будет считаться такое решение, которое будет быстрее всех. ------------------------------------------------------------------------------------ 2)Задача на потоки. Условие: Есть Хулиган с мусорными пакетиками и дворник. Задача хулигана разбросать все мусорные пакетики и при этом не попасться на глаза дворнику. Задача дворника убирать мусор и накостылять хулигану ![]() Поле состоит из 60 ячеек (одномерное). Хулиган появляется в произвольной позиции на поле и выбрасывает за раз только 1 пакетик (занимает ячейку) в течении 60мс, после чего он исчезает чтобы через 300 мс появиться в новой позиции начать там гадить. У хулигана запас 22 пакетика. Дворник бегает от края до края поля за раз сметая 3 бумажки (очищая 3 соседние ячейки) в течении 400мс. Условие поимки. Попытка одновременного доступа (2х потоков) к общей ячейке. Требование к решению. В программе должно быть 3 потока (Основной, дворник, хулиган) + простейшая отрисовка в виде ячеек. В атаче пример реализации (зеркало http://narod.ru/disk/3216906000/huligan_vs_Dvornik.zip.html) . 3 красных квадарата это дворник в процессе уборки. Ячейки рисуются по XOR во время уборки и заполняется белым после очистки, пакетик хулигана на время выброса становиться желтым, а после ухода становиться синим. Красным кружком помечается позиция где пойман хулиган. Примечание: графическая отрисовка может отличаться от предложенной, но тогда, дополнительно, потребуется ее описание. Критерии оценки задания: лучшим будет считаться такое решение, которое будет правильнее всех, т.е. грамотная синхронизация потоков, без лишних простоев и одновременных обращений к общей памяти. Также будет учитываться прозрачность кода и наглядность визуализации. -------------------------------------------------------------------------------------- 3) На знание внутренних механизмов Delphi. В Delphi конструктор любого класса может работать в двух режимах: 1) Режим создания нового экземпляра объекта:
2) Но можно сделать и так:
Во втором случае просто произойдет реинициализация экземпляра класса. Представьте, что перед Вами возникла задача создать экземпляр некоторого класса в "чужом" приложении. Что для этого нужно? Ну, во-первых, сам класс, который будет создан, во-вторых, режим работы (создание нового или реинициализация уже созданного экземпляра). Если конструктор класса может принимать параметры, то они также понадобятся. Зная адрес конструктора, его можно вызвать. Отмечу один из важнейших моментов при работе с "чужими" приложениями - для начала все действия нужно проверять на своем приложении. Задание посвящено методике создания классов в "чужих" приложениях. Итак, дан простой класс, имеющий конструктор с целочисленным параметром. Он просто выводит сообщение с переданным при создании числом.
Требуется: 1) Написать обыкновенную функцию (не метод) CreateClass, которая бы создавала объект класса TDummy (т.е. написать аналог родного конструктора). Параметры функции - на Ваше усмотрение. Иными словами: Dummy := TDummy.Create(); будет эквивалентен коду: Dummy := CreateClass(); 2) Написать простой пример использования функции, создав экземпляр класса (в локальной переменной), передав в конструктор произвольное значение. Входные данные: 1) Можно пользоваться классом TDummy как типом данных. Условия: 1) Не использовать ассемблер. 2) Не вызывать конструктор напрямую:
3) Все остальное делать можно ![]() Критерии оценки задания: лучшим будет считаться такое решение, которое будет идеально моделировать "родной" конструктор в любом режиме его работы. Полезность задачи - позволяет динамически создавать классы и компоненты в "чужих" приложениях без использования модулей VCL в своих. ---------------------------------------------------------------------------------------------------------------- Победители конкурса. Всего можно было набрать 60 баллов, 10 за 1ю, 30 за 2ю, 20 за 3ю bems - 53 MetalFan - 53 actual - 45 Sajtran - 41 aktuba - 30 AntonN - 27 Poseidon - 24 jsa - 23 THandle - 19 ne0n - 10 Shaggy - 9 Felan - 9 tHE_EGOiSTE - 4 Qu1nt - 3 mr.Anderson -2 Staruha - 2 Очень хорошие решения представили Sajtran, AntonN, aktuba, jsa Суперское решение первой задачи представили ne0n, bems и Shaggy Очень хорошо 3е задание решил bems. 2е задание лучше всех удалось MetalFan. Очень грамотно, аккуратно, эффективно и прозрачно. Как и обещалось все кто прислал решения хотя бы одной задачи или попытку решения, получат по одному + Все задачи были просмотрены на предмет упущений, отступлений от задания, т.е. весьма подробно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||||||
|
|||||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
кстати, можно поспорить о пользе использования конструктора для "реинициализации" объекта...
если в конструкторе создаются другие объекты, то будет утечка памяти. или я чегото недопонял) -------------------- There are always someone smarter than you... |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Rrader, вообще-то в условии задания было
лично я это расценил как запрет вообще ссылаться на Create класса TDummy. Т.к. условие можно трактовать так, что @TDummy.Create так же запрещено использовать. Конечно, в таком виде решение элементарное. А вот мне бы хотелось увидеть решение без ссылания на метод Create класса TDummy (как было по условию). Как-то не правильно получилось. По условию запрещаем, а потом в правильном решении используем... -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
CodeMonkey, у нас в заданиях D7. Ничего не затирается, смотрим ассемблерный код функции. EAX ни при чем.
MetalFan, да, за этим нужно следить. Ну так уж создатели Delphi придумали, такую возможность. Добавлено @ 17:52 Poseidon, в задании было сказано, что запрещено вызывать конструктор только напрямую. Приведен пример неправильного вызова. И специально сделан пункт, где сказано, что все остальное можно. Посмотрел код на других версиях Delphi - дело имеет место быть, оптимизатор лучше сделан. Это сообщение отредактировал(а) Rrader - 20.10.2008, 18:07 |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Полностью согласен... Двигался в том же напралении. Теперь вод рад, что чуть раньше сошел (по личным причинам), не решая 3-ю задачу. А то ведь всю голову сломал, пытаясь в ручную выделить память, заполнить ее и вызвать конструктор. Если уж запретили конструктор использовать (я именно так понял из задачи), то "верный ответ" какой-то не правильный... В целом, конкурс хороший. Предлагаю проводить ежемесячно ![]() Добавлено через 46 секунд
Предлагал же отказаться от какой-то определенной версии ![]() -------------------- ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
по моему в задании было четко написано "не вызывать конструктор напрямую, все остальное делать можно". получение адреса конструктора - это же не прямой вызов.
Это сообщение отредактировал(а) MetalFan - 20.10.2008, 20:57 -------------------- There are always someone smarter than you... |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
Так. Отъехали все от Rrader'а.
Задание вам, товарищи, не понравилось, видимо потому что вы его не сделали ![]() На самом же дела все четко было написано: Разве взятие адреса есть вызов??? Я лично двигался в направлению к верному решению, но... забыл блин о том что по порядку передается, в регистрах. Пытался извращаться. В итоге получился бред ![]() Кто задания будет сочинять? ![]() Лично на следующий конкурс выдвигаю в комиссию участника под ником THandle. И вообще мне вот что интересно. Победитель получит приз - перевод в группу "эксперт". Но разве человек, который все это придумал не достоит того же? Я лично считаю что и Rrader должен быть повышен до "Эксперта". Добавлено через 23 секунды MetalFan, ![]() |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Ну тогда можно было через NewInstance/InitInstance делать, насколько я понимаю... Да и вообще получится куча решений, которые будут вызывать конструктор не напрямую, но вызывать будут. И что-то мне подсказывает, что их бы не принли ![]() -------------------- ![]() |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
||||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
ага... только еще корректно вызвать код конструтра(ов) останется... -------------------- There are always someone smarter than you... |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Так это просто пример. Таких примеров кучу можно сделать ![]() -------------------- ![]() |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
тут главное не тучу примеров сделать, а правильно сформулировать задание с учетом "нужности" навыка.
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Гм... хорошо, когда есть кому почитать задание и глянуть со стороны. Нам не очень удалось собрать активных (не занятых участников), так что над заданиями фактически сидели всего 2е. Тебе кажется что все ясно и яснее быть не может, а другому не так. В любом случае идет проверка задний, выставление баллов, я проверяю вторые задания Rrader, 3ие, до первых мы еще не добрались. Так что терпение (мы все работаем, учимся). Кроме того в следующий раз, нужно договориться о формате решений задач, куда и в каком виде. Думаю нужно договориться с Вовой и завести общественное мыло для комиссии и соответственно менять пароль к каждому конкурсу. Так же принимаются идеи по темам задач. Это сообщение отредактировал(а) Alexeis - 20.10.2008, 21:54 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
Alexeis,
а можно написать страничку для закачки, где участники просто закачивают решение, комиссия потом просто забирает их из админки. Но врядли такое будет на мощностях этого сайта. Можно на собственном сайте реализовать, но там придется каждому зарегиться, а это так лень тащиться куда то и региться ![]() |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Тут все сложно. На мой взгляд, должны быть несколько категорий задач: алгоритмы, работа с классами (стандартными и написание своих), работа с WinAPI, сеть и т.д. Например, для следующего конкурса, можно сделать 4 задачи, по основным разделам форума: для новичков (например, работа со стандартными классами), общие (алгоритмы/потоки), графика и сеть. Что думаете? P.S.: задания, наподобии 3-е данного конкурса, необходимо полностью исключить! Причины, я вижу, две: 1. Зависимость от версии Delphi 2. Задача, скорее, для знакотов ASM, а не Delphi. Мало кому приходится копаться в регистрах и ассемблере (что я считаю большим плюсом). Лучше сделать задачи на наследование/инкапсюляцию классов, что очень полезно для delphi-программистов (часто встречаю, что люди понятия не имеют, что это такое. подобные задачи заставят выучить, зазубрить и понять это ;)) -------------------- ![]() |
|||
|
||||
Rrader |
|
||||||||||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
Задание придумывал так, чтобы оно не зависело от версии Delphi. Мое последнее "компактное" решение - уже мой недочет, в плане этого пункта, но оно гарантированно работает на D7 (и на более новых Delphi с отключенной оптимизацией).
Мы не такие звери, все решения будут приняты ![]()
Делов было на 5-минут. Теперь каждый участник знает, как можно создать класс из asm-вставки ![]()
Это сообщение отредактировал(а) Rrader - 21.10.2008, 06:08 |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |