![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
и?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Наверное у них задача есть похожая
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Наверно просто надо чтобы человек _сам_ парсер написал, а не использовал что-то вроде lex+bison -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Эта задача уже лет -цать как решается make.
Указан Буст, в Бусте есть Spirit, для данной задачи не хуже упомянутых тулз. Так что максимальное внимание последним шести строкам -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Alexey_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 30.12.2006 Репутация: 1 Всего: 1 |
Вся сложность в предобработке файла, все остальное сделать в принципе легко...
предлагаю такую предобработку: 1) Для каждого имени запоминаем в каких строках оно есть, и в качестве кого (родителя\ребенка) итого у нас формируется массив структур - по структуре на имя 2) Если одно имя - является сыном нескольких отцов - выводим ошибку Пункты 3) - 4) выполняем пока не конец файла 3) Если нет имен, не упоминающихся в качестве детей в еще не выделенных строчках (изначально они все не выделены) - выводим ошибку 4) Все такие (не упоминающиеся) имена добавляем в качестве детей к своим родителям (родители ищутся среди выделенных строк, если не находятся - это имя без родителей) и выделяем эти строки. 5) Выводим дерево на экран.... GAME OVER P.S: Классный тест... еще такие попадутся - пиши обязательно!!!! P.P.S: Народ, видимо вам предлагали решить задачу а не обсуждать фирму Этот тест очень хорошо проверяет наличие работающего мозга.... а библиотеки в общем то не помогут здесь ИМХО. Это сообщение отредактировал(а) Alexey_2007 - 18.1.2007, 00:13 --------------------
Святая простота |
|||
|
||||
| nickless |
|
||||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Интересно, надо будет почитать ЗЫ
Это имхо не ошибка, просто тогда выйдет не дерево зависимостей, а граф:
Это сообщение отредактировал(а) nickless - 18.1.2007, 00:28 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||||
|
|||||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
мне кажется она довольна сложна именно логикой (выстроить взаимоотношения родственников) а не тем чтобы пропарсить текст. |
|||
|
||||
| KpoHyc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.12.2006 Где: Санкт-Петербург Репутация: нет Всего: 5 |
codelord, а сроки? У меня висит аналогичное задание, только за клаву я сяду не раньше сдачи сессии) 19го - 21 го намереваюсь кончить...если еще надо будет - скину)
Это сообщение отредактировал(а) KpoHyc - 18.1.2007, 00:50 --------------------
AScript + Pascal + C -> C++ ->C#Adobe Photoshop 7.0/CS 2.0 + GIMP+ Visual Studio .NET(sp1)/2005 pro(sp1) |
|||
|
||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
да мне не надо, лучше здесь, любопытно будет посмотреть. Это сообщение отредактировал(а) codelord - 18.1.2007, 00:55 |
|||
|
||||
| Alexey_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 30.12.2006 Репутация: 1 Всего: 1 |
codelord, Я вроде написал логику на форуме.... если что не понятно - спрашивай...
nickless, просто я так понял, что возможно только дерево.. ну если возможен граф - убрать это условие и всё Это сообщение отредактировал(а) Alexey_2007 - 18.1.2007, 00:58 --------------------
Святая простота |
|||
|
||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
вы шутите штоль проблемы начнуться когда начнешь свою логику применять. задача трудная поэтому. За рабочий код ставлю три знака поощрения за усердие, ум и желание Это сообщение отредактировал(а) codelord - 18.1.2007, 01:06 |
|||
|
||||
| Alexey_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 30.12.2006 Репутация: 1 Всего: 1 |
Ок просто не понял тогда
--------------------
Святая простота |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Если судить по примеру вывода после разбора - то все-таки там дерево, а не граф. Этот вопрос принципиальный с точки зрения вывода: показанный пример выводит дерево. А как выводить граф?
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Связный граф без циклов и есть дерево.
Если есть циклы — надо сообщить об этом без вывода зависимостей, я так понял. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
В примере nickless'а выше[A->{B C}->D на языке dot] циклических зависимостей как раз и нет. Потому как D зависит от B и C, B зависит от A и C зависит от A. и других зависимостей нет. нет цикла. граф здесь ориентированный, и это надо учитывать. я безсовестно заменил в примере графа длинные названия ItemN... на A... Добавлено @ 17:43 Кстати, если под "выводом зависимостей на экран" подразуметь (подобно tsort(1))
и забить на красивые отступы, то эта самая топологическая сортировка как раз даст искомый результат, то у nickless'овского графа A->{B C}->D будет два валидных выхода:
и
Это сообщение отредактировал(а) Mayk - 18.1.2007, 17:46 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Честно говоря, мне не видится эта задача слишком сложной с точки зрения создания самой структуры зависимостей.
Но пост Maykа как раз о той проблеме, которую я вижу: как это правильно вывести, если один потомок зависит от двух предков сразу? Или данная ситуация считается ошибочной? Если немного расширить исходные данные: A B C D B E F C E F То как это должно быть выведено? A B E <--- Т.е. по два раза вывести? Или это ошибочные данные F <--- C E <--- F <--- D Или надо так вывести (полный бред по-моему) A B C E F Не совсем понятны условия. Если это обычное дерево - то не намного сложнее дерева подкаталогов получится |
|||
|
||||
| Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: 4 Всего: 4 |
Чтоб выполнить эти пункты логику программы, думаю, надо основвывать на паттерне "Composite" (Компоновшик) (см. книгу четырёх "Design Patterns. Elements of Reusable Object-Oriented Software.", есть на русском). Это не только прояснит логику, но и к тому же сразу скажет проверющему о хорошей квалификации программиста. Было бы время, я бы с удовольствием наваял решение. Хорошая задачка |
|||
|
||||
| SerpentVV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
Дело не в написании парсера... Файл читается вполне стандартными средствами - оператором >> в строковые переменные. Дело именно в логике... Но логика тож не сильно сложная... Так как скорость в качестве критерия не фигурирует (видимо не случайно), то нужно использовать стандартный список list из STL list<string> children - это список детей... struct element { string родитель; list<string> children; } list<element> tree; // фактически список-списков... После прочтения файла он просто выводится на экран в цикле... Для отслеживания циклических связей досточно проверять каждого дитятю на совпадение с родителем... Алгоритм скорости вроде O(n^2) |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
codelord,
Готовь тесты, чтобы убедиться в работоспособности =) Мож найдется время вечерком - напишу чего-нить. Добавлено @ 19:28 Так действительно интересно, сколько давалось на эту задачку времени? -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Блин, времени вообще выделить не могу на это дело. Сейчас на работе полный аврал, плюс диплом доделывать надо. Единственное сложное и интересное место в этой задаче - это сортировка частично упорядоченного множества (упорядоченность заключается в правилах "кто чей родитель").
Ее алгоритм мы в универе давно еще проходили. Могу быстренько накидать, если нужно. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
imho это замыкание множества атрибутов над множеством функциональных зависимостей, алгоритм из области реляционных баз данных.
к примеру имеем множество функциональных зависимостей: A->D AB->E BF->E CD->F E->C находим замыкание для множества атрибутов: AE Получаем: {AE, AEDC, AEDCF} Вроде так, если ничего не напутал. codelord, где-то валяются исходники, но к сожалению на Delphi. если нужно - стучи в ПМ. p.s.: imho странноватое тестовое задание. std::set + рутина, особые знания языка или ООП такое задание не покажет, зато напрягает большое кол-во требований по интерфейсу(в какой строке ошибка и т.п., требование к возможности реутилизации кода). imho надо быть осторожней с этим работодателем. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| SerpentVV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 27.11.2006 Где: Астрахань Репутация: 1 Всего: 1 |
Если используется стандартные контейнеры, то STL уже имеет нужные сортировки... Нужно просто использовать...
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |