ПРЕВЕД! АГА, ВОТ ЭТИ РЕБЯТА… ))))))))
В этой теме мне хотелось бы узнать кто как быстро пишет код.
Ведь один программер за рабочий день маленькую игру напишет, а другой за это же время "Hello World!" ;]]] Простите за утрирование, которое вместе с максимализмом иногда прояляется в наших суждениях.
В качестве примера возьмем одну конкретную простенькую задачу из учебника Т.А.Павловской C/C++ Программирование на языке высокого уровня. Часть 1. Вариант 1
————————–
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1. сумму отрицательных элементов массива
2. произведение элементов массива, расположенных между максимальным
и минимальным элементами
Упорядочить элементы массива по возрастанию.
————————–
P.S. СКОЛЬКО ВРЕМЕНИ ЛИЧНО ВЫ ПОТРАТИТЕ НА ЭТО ЗАДАНИЕ? (Код выкладывать не нужно
27 августа 2008 в 22:05
На самом деле, раз уж речь идет о C++, то не считая инициализации массивов все остальное решается в 3 строчки с помощью алгоритмов, адаптерови функторов STL. Больше времени действительно может уйти на изучение содержимого хэдера functional если кто не помнит на память. )
23 августа 2008 в 23:00
я не говорю, кстати что фрагмент кода идеален. я например напротив НЕ пользуюсь вектором, и выделил бы память статически. но все же вопрос именно в таком виде
23 августа 2008 в 15:00
Аналогично. Всё время уйдёт на стучание по клавишам.
23 августа 2008 в 13:01
Вместо
wchar_t* data = <…>;
я пользуюсь вектором. Потом не надо думать об освобождении памяти…
23 августа 2008 в 10:05
Константин Смотритель предложил более пристойную задачу, хотя она действительно сложна, и давать ее стоит только людям претендующим на высокие позиции. А вот такая задачка-отсев на 5 минут (не больше).
Что следует написать заместо <…>?
SHFILEOPSTRUCT fo;
ZeroMemory(&fo, sizeof(fo));
fo.wFunc = FO_DELЕTЕ;
fo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
wchar_t* data = <…>; // выделяем память
wcscpy(data, EnteredPath.c_str()); // копируем строку
fo.pFrom = data;
SHFileOperation(&fo);
delete []data;
ЗЫ. Разрешается (рекомендуется) пользоваться гуглем.
ЗЗЫ. Правильные ответы лучше в личку =)
23 августа 2008 в 10:02
И эта задача может сполфига показать квалификацию, хотя бы codestyle. А вообще ни одна задача не решается меньше чем за час – правило "рабочего" программирования. Я вот сижу сейчас правлю несколькомегабайтный проект который писали быстро, очень быстро. в котором повсюду vector.begin() – 1 или даже MessageBox(… _TEXT("__FUCTION__") …) всречается =)))
ЗЫ. В универе действительно более сложные задачи заставляли решать за меньшее время. Бред, не интеллект тренируют, а к небрежности приучают.
23 августа 2008 в 2:04
Смотря какой язык… На С++ от 3 до 10 минут, на Haskell быстрее раза в два… Ну и промежуточные варианты =)Включая запуск с проверкй алгоритма.
P.S. А вообще, имхо, задача не показательная и вопос некорректен. В задаче погрешность слишком большая, потому что, не решая, кажтся, что она больше 10 секунд не стоит.
Плюс, как выше было замечено, не столь важно за какое время, сколько важнее как будет решена задача. В этом плане столь простая здача также не показтель и абсолютно ничего о квалификации прогарммиста не говорит, поскольку это школьного курса задача.
Полагаю, надо найти задачу, которую неквалифицированный программист попытается решить влоб, а квалифицированный сначала подумает об архитектуре. При этом задача должнасостоять из двух частей – первоначальной и второй, скрытой, которая показывается программисту после написания кода по певоначальному заданию: сначала задача создать расширяемую библиотеку, а потом (это скрытая часть) – изменить её поведение определённым образом.
Оценивается количество изменений, которые внёс программист в процессе решения обеих частей задчи – это и будет показатель скорости (а заодно и квалификации программиста).
Можно предложить задачу библиотеки асинхронной очереди (если говорить об императивном событийном ООП). Предлагается реализовать сначала очередь обычную, а потом (скрытая часть) – сделать её асинхронной (добавить поток).
Квалфицированный программист в первой части учтёт возможность созданияо цепочек чередей и очередей очередей, продумает интерфейс. Во второй части лишь добавит поток и расставит критические секции. Неквалифицированный, во-первых, не продумает интерфейс, во-вторых, после получения скрытой части наверняка перепишет сё с нуля.
Соглаен, предложеная задача "сырая", но цель – лишь показать напавление мыслей. Кроме того, очевидно, что всё-таки её придётся прорешать, да ещё и с контролем изменений, прежде, чем делать вводы – но, опять же, это лишь направление мыслей =)
23 августа 2008 в 2:04
Да, ну и забыл добавить, что на предложеную задачу по-хорошему молжет и час уйти, если есть требование максимальной оптимизации =) Скажем, совместить сортировку с поиском – первый шаг, туда же можно добавить и суммирование отрицательных чисел… Потом – топать в Интеренет, изучать существующие алгоритмы сортировки помимо пузырьковой и быстрой, делать выводы.
23 августа 2008 в 1:03
Где-то около пяти минут, плюс минус минуты две.
Поскольку не сказано, откуда брать массив, каждый делает так, как ему удобнее. Я, например, возьму массив из файла. Т.к. не сказано, что элементы могут повторяться, то повторяться они не будут. Т.к. про вывод результатов ничего не сказано, то выводить тоже буду в файл. Итого: сортировка, сложение, умножение, пуш & поп, пять процедур, то есть. Пять процедур – пять минут. Я так думаю.
22 августа 2008 в 21:02
В универе вдоволь нарешался подобных заданий(и намного сложнее были) – 5-10 минут, не более.
22 августа 2008 в 21:01
Голосовал за 5-10 мин. Ну это конечно при лучшем раскладе. если скомпилится с первого раза Так-как пузырьковую сортировку помню на память :Д
Конечно, это все тепличные условия, согласен с последним оратором
22 августа 2008 в 19:04
Больше времени уйдет на то, чтобы порыться в документации на STL. Проверять не хочу.
Кстати, во второй задаче не сказано, что делать в случае, если максимальный и минимальный элемент присутствуют не по одному разу… и если в массиве присутствует только один элемент, но много раз.
22 августа 2008 в 19:02
(Продолжаем оффтоп) Она на эту книгу, может, всю свою молодость сгубила:) Скока ж можно придумывать задания, пора и личной жизнью заняться:)
22 августа 2008 в 19:02
Maybe, maybe =)))
22 августа 2008 в 19:01
На правах оффтопа.
Павловская прокачивает мозги, только если у нее не учиться. Ибо все экзаменационные задания – по книге, нужно только нужную страницу вспомнить =)))
22 августа 2008 в 18:02
Зря ты так, Павловская мозги прокачивает очень конкретно:)
Ну поскольку про ввод исходных данных ничего не сказано, массив можно задать константой. И не из двух элементов и не из ста двадцати восьми тысяч, а где-то элементов десять, чтобы ты мог ручками проверить правильность алгоритма.
Цель этого задания – прокачка навыков циклического обхода массива, вычисления минимума/максимума и сортировки (которую требуется написать самостоятельно, не пользуясь бибилотечными функциями).
Итак. Придумываем и хардкодим массив. Три минуты.
Фигачим один цикл, который считает сумму отрицательных чисел, а заодно находит минимум и максимум и запоминает их позиции. Минут пять.
Фигачим второй цикл, который считает произведение элементов между минимальным и максимальным. Ломаем голову, нужно ли включать сами эти элементы в обход. Решаем не включать. Восемь минут. Понимаем, что если минимальный элемент расположен правее максимального, надо поменять местами границы обхода. Две минуты.
Пишем вывод. Делаем цикл, чтобы посмотреть на сам массив. Выводим дурацкие фразы "Сумма отрицательных элементов = "… "Произведение бла-бла-бла = "… Не включается русская раскладка, материмся, пишем заново. Пять минут.
Вспоминаем алгоритм пузырьковой сортировки. Пять минут. Кодим пузырьковую сортировку. Две минуты. Копипастим вывод массива, потом передумываем и оформляем его функцией. Пять минут.
Компилим всю эту хрень, втыкаем в синтаксические ошибки. От двух до двадцати минут, как повезёт.
Запускаем хрень, убеждаемся, что она делает вообще не то, что нам надо, любуемся на элементы в отсортированном массиве, которых не было в исходном, внимательно читаем задание, смотрим, где мы облажались с 0-based индексами, где вылезли за границы массива, ищем лажу в сортировке. От двух минут до часа.
Прогоняем ещё три раза с разными данными, убеждаемся, что всё работает как надо (или не работает)? От 10 минут до часа.
Ну в итоге получается от 30 минут до 3 часов, в зависимости от опыта решения дурацких студенческих задачек (я голосовал за 30-60 мин).
22 августа 2008 в 17:05
Не так важна скорость написания кода, как его качество.
Если подходить именно к конкретному заданию – то есть сразу же некоторые проблемы. Ничего не сказано про то откуда берется массив. Ничего не сказано про то сколько элементов может быть в массиве. Насколько точно считать произведение (быть может без потери значащих цифр вообще). Что делать с результатом. За какое время должно проводиться упорядочивание.
Если подойти к этим вопросам произвольно, то есть два крайних случая.
{
float mas[1] = {0.0};
float sum_negative = 0.0;
float production = 0.0;
float sorted[1] = {0.0};
}
ушло где-то 50 секунд (надеюсь правильно написал )
другой крайний случай – массив больший размера оперативной памяти с случайными элементами равномерно распределенными на отрезке -inf..+inf, должен быть отсортирован за линейное время.
22 августа 2008 в 17:05
ЗЫ. Учебник Павловской не советую, бредок.