Здравствуйте, antonio_banderas, Вы писали: _>Потому что так код удобней читать.
не только я один считаю, что твой код из-за кучи скобочек стал нечитаемым
_>Если что, я поначалу (курсе на 2-3) тоже писал в стиле "письмо домой родителям" — много инструкций в 1 строчку.
я не про это, я про ненужные скобочки
_>Все современные компиляторы при присваивании в условии выдают варнинги. _>Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь. _>Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век.
аркгументы, конечно, интересные. но вот мой gcc 4.9.3 — полтора года назад зарелизен варнинг не дает.
__>>особенно без тестов, которые, я так понимаю, не для вас _>Почему?
попробуй, напиши тесты к своему коду
Здравствуйте, RussianFellow, Вы писали:
RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
Мне в жизни не приходилось передвинуть бит! (с)
Вариации: посчитать биты в числе, возвести 2 в степень N без циклов
На последних интервью надо было:
— Проверить правильно расставлены скобки ({<>}) в строке
— Перевернуть односвязный список
Здравствуйте, __kot2, Вы писали:
_>>Все современные компиляторы при присваивании в условии выдают варнинги. _>>Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь. _>>Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век. __>аркгументы, конечно, интересные. но вот мой gcc 4.9.3 — полтора года назад зарелизен варнинг не дает.
Нужно флажок -Wall дать, по умолчанию варнинги отключены.
Для гарантированного отсутствия варнингов можно -Werror. ))
__>>>особенно без тестов, которые, я так понимаю, не для вас _>>Почему? __>попробуй, напиши тесты к своему коду
Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, playnext, Вы писали:
S>>Строку перевернуть за О(1) памяти. P>это очень легкая задача, такие редко задают.
Тогда тебя не затруднит превести работающий код.
Sic luceat lux!
Re[4]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, Kernan, Вы писали:
S>>>Строку перевернуть за О(1) памяти. P>>это очень легкая задача, такие редко задают. K>Тогда тебя не затруднит превести работающий код.
Если в языке строки immutable то никак, тут O(N) без вариантов.
Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
WBR, Igor Evgrafov
Re[5]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, GarryIV, Вы писали:
GIV>Здравствуйте, Kernan, Вы писали:
S>>>>Строку перевернуть за О(1) памяти. P>>>это очень легкая задача, такие редко задают. K>>Тогда тебя не затруднит превести работающий код.
GIV>Если в языке строки immutable то никак, тут O(N) без вариантов. GIV>Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
Если immutable то например:
const char* reverseString(char* s) {
if (!s || !*s) {
return s;
}
char* first = s;
char* last = s;
for (; *last; ++last) {}
--last;
for (; first < last; ++first, --last) {
char temp = *first;
*first = *last;
*last = temp;
}
return s;
}
Тут пямять Q(1)
Re[6]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, playnext, Вы писали:
P>Здравствуйте, GarryIV, Вы писали:
GIV>>Здравствуйте, Kernan, Вы писали:
S>>>>>Строку перевернуть за О(1) памяти. P>>>>это очень легкая задача, такие редко задают. K>>>Тогда тебя не затруднит превести работающий код.
GIV>>Если в языке строки immutable то никак, тут O(N) без вариантов. GIV>>Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
P>Если immutable то например: P>
Здравствуйте, antonio_banderas, Вы писали: _>Нужно флажок -Wall дать, по умолчанию варнинги отключены. _>Для гарантированного отсутствия варнингов можно -Werror. ))
нууу, знаешь, приходить в проект, а потом говорить — а давайте вы мне мои недефолтные опции компилятора подключим, это не дело
_>Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
no hire! следующий
Re: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, RussianFellow, Вы писали:
RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
Вот например, весьма примитивная задача. Решается за 5 максимум 10 минут.
Есть стек элементов произвольного типа (тип можно выбрать самому).
Необходимо отсортировать элементы в первом стеке используя еще один такой же стек (изначально он тоже может быть непустой).
Само собой нельзя использовать другие коллекции кроме этого дополнительного стека.
Re[10]: Типовые задачи на собеседованиях по программированию
Здравствуйте, antonio_banderas, Вы писали:
_>Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
А почему же не сделать сохранение результатов в коллекции — например в коллекции типа std::vector<string>
и в юнит-тесте уже данную коллекцию с выходными результатами крутить?
Здравствуйте, licedey, Вы писали:
L>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
L>Мне в жизни не приходилось передвинуть бит! (с) L>Вариации: посчитать биты в числе, возвести 2 в степень N без циклов
типа этого _mm_popcnt_u32?
ЗЫ: на плюсах не пишу
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, licedey, Вы писали:
L>>Мне в жизни не приходилось передвинуть бит! (с) L>>Вариации: посчитать биты в числе, возвести 2 в степень N без циклов
Ф>типа этого _mm_popcnt_u32? Ф>ЗЫ: на плюсах не пишу
Простите, вы о чем вообще? Погуглил и то не понял.
Re[4]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, licedey, Вы писали:
L>Здравствуйте, Философ, Вы писали:
Ф>>типа этого _mm_popcnt_u32? Ф>>ЗЫ: на плюсах не пишу
L>Простите, вы о чем вообще? Погуглил и то не понял.
А, понял. Только на собеседованиях это надо ручками на листочке сделать в цикле for.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, AlexGin, Вы писали:
AG>А почему же не сделать сохранение результатов в коллекции — например в коллекции типа std::vector<string> AG>и в юнит-тесте уже данную коллекцию с выходными результатами крутить?
Потому что код должен быть един — для основной задачи и для тестов.
А у тебя для основной задачи один код (printf), а для тестов другой код (vectOutStrings.push_back).
Чем это плохо? Тем, что по факту тесты не проверяют основной код. Они проверяют код для тестов.
AG>Как вариант — это сохранение в вектор подключать через опцию препроцессора.
Такие ветвления очень усложняют чтение и дальнейшую поддержку. И проблема с двумя разными кодами остается.
Два минуса и ни одного плюса.
Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.
std::string composeTask()
{
// здесь мы всё накидываем в строку.
}
void printTask()
{
std::cout << composeTask() << std::endl;
}
SOME_TEST_MACRO()
{
std::string result = composeTask();
// а здесь разбираем и оцениваем result.
}
Re[12]: Типовые задачи на собеседованиях по программированию
Здравствуйте, antonio_banderas, Вы писали: _>Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.
ладно, не буду больше таить интригу — тест не может тестировать результат цикла целиком
Re[13]: Типовые задачи на собеседованиях по программированию
Здравствуйте, __kot2, Вы писали:
_>>Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять. __>ладно, не буду больше таить интригу — тест не может тестировать результат цикла целиком