Re: Накидайте плиз задачек на знание языка Си++
От: m2user  
Дата: 09.06.25 03:23
Оценка:
C0x>Основные требования: стандарт 2003 год — это кодовая база с которой кандидату придется работать.

А с чем связано такое ограничение для кодовой базы? Компилятор не поддерживает более свежие стандарты?
Re: Накидайте плиз задачек на знание языка Си++
От: LaptevVV Россия  
Дата: 09.06.25 04:07
Оценка:
C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.
Есть книжка
Хорошо ли вы знаете С++: https://book-pc.ru/programmirovanie/3154-horosho-li-vy-znaete-c.html
Наверное, где-то pdf можно найти...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Накидайте плиз задачек на знание языка Си++
От: SaZ  
Дата: 09.06.25 15:29
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Коллеги накидайте плиз задачек для собеза по Си++. Нужно провести скрининг кандидатов примерно на 30 минут. Я никогда не проводил, да и на плюсах давненько не писал.

C0x>Основные требования: стандарт 2003 год — это кодовая база с которой кандидату придется работать.
C0x>...

Казолось бы на дворе 2025 год, уже 14 лет как есть цпп11 в современных и не очень компиляторах. Если вам нужен человек на поддержку mfc и вы такого найдёте, то это явно будет не зелёный студент а кто-то из старшего поколения. Думаю там тестовые просто не нужны, достаточно будет пообщаться.
Re: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 09.06.25 18:49
Оценка:
Здравствуйте, C0x, Вы писали:

Есть строка, в которой записаны русские слова, разделённые пробелом (кодировка utf8). Разбить все слова на слоги.
Например: "накидайте плиз задачек" -> "на-ки-дай-те плиз за-да-чек"
Re: Накидайте плиз задачек на знание языка Си++
От: _NN_  
Дата: 10.06.25 06:49
Оценка: 1 (1)
Здравствуйте, C0x, Вы писали:

Пожалуйста:

void duplicate(std::vector<int>& v)
{
  size_t i = 0;
  size_t count = v.size();
  for (auto const& e : v)
  {
    if (i == count)
      break;
    v.push_back(e);
    i++;
  }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 10.06.2025 6:51 _NN_ . Предыдущая версия .
Re[2]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 10.06.25 10:34
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Пожалуйста:


_NN>
_NN>void duplicate(std::vector<int>& v)
_NN>{
_NN>  size_t i = 0;
_NN>  size_t count = v.size();
_NN>  for (auto const& e : v)
_NN>  {
_NN>    if (i == count)
_NN>      break;
_NN>    v.push_back(e);
_NN>    i++;
_NN>  }
_NN>}
_NN>


Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Накидайте плиз задачек на знание языка Си++
От: _NN_  
Дата: 10.06.25 11:19
Оценка:
Здравствуйте, rg45, Вы писали:

R>Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.


А ещё справшиваем, почему же не реализован контейней с итератором так, чтобы этот код мог бы всегда работать, ведь это несложная задача.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Накидайте плиз задачек на знание языка Си++
От: Went  
Дата: 10.06.25 18:46
Оценка:
Здравствуйте, kov_serg, Вы писали:
_>Есть строка, в которой записаны русские слова, разделённые пробелом (кодировка utf8). Разбить все слова на слоги.
_>Например: "накидайте плиз задачек" -> "на-ки-дай-те плиз за-да-чек"
Интересная задачка. Разве есть какой-то формальный признак к какой гласной лепить согласную? Например, слово "паркет", это "пар-кет", "па-ркет", или "парк-ет"?
Re[3]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 10.06.25 19:47
Оценка:
Здравствуйте, Went, Вы писали:

W>Интересная задачка. Разве есть какой-то формальный признак к какой гласной лепить согласную? Например, слово "паркет", это "пар-кет", "па-ркет", или "парк-ет"?


1. Слог образует гласный звук:
    сте-на, ба-ран (с-тена, бара-н — неправильно).

2. Слог начинается с согласного, который стоит перед гласной:
    мо-ло-ко, ко-ра (мол-око, кор-а — неправильно).

3. Буквы ь, ъ (которые не означают звуков), й нельзя отрывать от предыдущего слога:
    лай-ка, конь-ки, подъ-езд (ла-йка, кон-ьки, под-ъезд — неправильно).

4. Глухие согласные отходят к следующему слогу:
    то-чка, мо-шка (в традиционной школе верно также: точ-ка, мош-ка).

5. Звонкие согласные [й], [р], [р’], [л], [л’], [м], [м’], [н], [н’] с последующим шумным согласным отходят к предыдущему слогу:
    кор-ка, бул-ка (в традиционной школе верно также: ко-рка, бу-лка).

6. Согласные буквы, образующие один звук, нельзя разносить в разные слоги. Один звук образуют сочетания зж [ж:], тся, ться [ц:].
    у-е-зжать, но-си-тся, де-ла-ться (в традиционной школе верно также: у-ез-жать, но-сит-ся, де-лать-ся).

7. Сдвоенные согласные в середине слова относят к следующему слогу:
    кла-ссный, хо-ккей, те-ннис (в традиционной школе верно также: клас-сный, хок-кей, тен-нис).

Слоги делятся по восходящей звучности. Каждый звук имеет звучность от 1 до 4: 4 — гласные, 3 — сонорные, 2 — шумные звонкие, 1 — шумные глухие. 

8. Конец слога должен быть с максимальной звучностью (цифра 4):
    ко-ле-со (14-34-14), ко-мпью-тер (14-31 4-143).

9. Сонорные между гласными относят к следующему слогу: ка-рман (14-3343). Допускается вариант: кар-ман (ошибки не будет).
    Если есть сочетание сонорного и шумного, то раздел ставится между ними: пар-та (143-14).

10. Й всегда остается с предыдущим слогом: тай-на (143-34).
Отредактировано 10.06.2025 19:49 kov_serg . Предыдущая версия .
Re[4]: Накидайте плиз задачек на знание языка Си++
От: Went  
Дата: 11.06.25 08:43
Оценка:
Здравствуйте, kov_serg, Вы писали:
_>
_>...
_>

Интересно, конечно, не знал про такие правила, хотя и там полно исключений. Но, все же, это скорее филологическая задача, нежели на знание С++.
Re[5]: Накидайте плиз задачек на знание языка Си++
От: kov_serg Россия  
Дата: 11.06.25 10:03
Оценка:
Здравствуйте, Went, Вы писали:


W>Интересно, конечно, не знал про такие правила, хотя и там полно исключений. Но, все же, это скорее филологическая задача, нежели на знание С++.

Тут важен подход к задаче, а не само решение
Re[6]: Накидайте плиз задачек на знание языка Си++
От: rg45 СССР  
Дата: 11.06.25 11:33
Оценка:
Здравствуйте, kov_serg, Вы писали:

W>>Интересно, конечно, не знал про такие правила, хотя и там полно исключений. Но, все же, это скорее филологическая задача, нежели на знание С++.

_>Тут важен подход к задаче, а не само решение

Дайте мне поручение, а уж особым я его и сам сделаю. (С) Специалист по особым поручениям.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: Накидайте плиз задачек на знание языка Си++
От: sergii.p  
Дата: 12.06.25 10:54
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, rg45, Вы писали:


R>>Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.


_NN>почему же не реализован контейней с итератором так, чтобы этот код мог бы всегда работать


так std::list вроде не инвалидирует ссылки. Или вопрос только касательно std::vector?
Re[5]: Накидайте плиз задачек на знание языка Си++
От: _NN_  
Дата: 19.06.25 08:55
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>Здравствуйте, _NN_, Вы писали:


_NN>>Здравствуйте, rg45, Вы писали:


R>>>Хорошая задачка. Тут есть, о чём поговорить. Помимо исправления проблемы, можно предложить отрефакторить и обобщить на несколько типов контейнеров и произвольный тип элемента.


_NN>>почему же не реализован контейней с итератором так, чтобы этот код мог бы всегда работать


SP>так std::list вроде не инвалидирует ссылки. Или вопрос только касательно std::vector?


Всё правильно. Заодно затрагивается почему и где уместней vector.
Вообще можно и для вектора сделать такие итераторы без инвалидации, но такой вектор кхе-кхе никто особо бы не использовал.
Ну и конечно вопрос на эту тему почему
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 20.08.25 16:56
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Если у вас есть какие-нибудь подобного рода перлы, то буду очень благодарен.


Просто задача на понимание.
Что будет выведено на экран:
#include <iostream>

int main()
{
    signed char ch = -0xA;
    std::cout << "ch = " << 0 + ch << '\n';
}
И каждый день — без права на ошибку...
Re: Накидайте плиз задачек на знание языка Си++
От: Hоmunculus  
Дата: 20.08.25 17:10
Оценка:
Здравствуйте, C0x, Вы писали:

Что будет на экране:

for (int i = 0; i < 10; i++)
    std::cout << 1000000000*i << endl;


Чтоб нули вам не считать — подсказка — там миллиард
Re[2]: Накидайте плиз задачек на знание языка Си++
От: pilgrim_ Россия  
Дата: 20.08.25 18:32
Оценка: +2 -1
Здравствуйте, Hоmunculus, Вы писали:

H>Что будет на экране:


H>
H>for (int i = 0; i < 10; i++)
H>    std::cout << 1000000000*i << endl;
H>


Этот вопрос имхо скорее сюда
Автор: alpha21264
Дата: 31.07 13:14
подходит, т.к. ответ зависит от компилятора и опций оптимизации (из-за UB при переполнении знаковых целых).
GCC этим пользуется, у clang/msvc пока вывод "ожидаемый".
Re[2]: Накидайте плиз задачек на знание языка Си++
От: T4r4sB Россия  
Дата: 20.08.25 19:23
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, C0x, Вы писали:


_NN>Пожалуйста:


_NN>
_NN>void duplicate(std::vector<int>& v)
_NN>{
_NN>  size_t i = 0;
_NN>  size_t count = v.size();
_NN>  for (auto const& e : v)
_NN>  {
_NN>    if (i == count)
_NN>      break;
_NN>    v.push_back(e);
_NN>    i++;
_NN>  }
_NN>}
_NN>


На эту же тему:
v.push_back(v[0])

Тут всё хитрее, чем кажется на второй взгляд

  Скрытый текст
почему этот код всегда работает О_О
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 20.08.2025 19:58 T4r4sB . Предыдущая версия .
Re[2]: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 21.08.25 16:56
Оценка: +1
Здравствуйте, Hоmunculus, Вы писали:

H>Чтоб нули вам не считать — подсказка — там миллиард

Чтоб нули не считать, следует использовать современную запись:

for (int i = 0; i < 10; i++)
    std::cout << 1'000'000'000*i << endl;
И каждый день — без права на ошибку...
Re[9]: Накидайте плиз задачек на знание языка Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.08.25 18:40
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>А сайд эффекты, это когда:


R>
R>#define MIN(V,Y) ((V)<(Y) ? (V) : (Y))
R>// . . .
R>MIN(++a, ++b)
R>


Вот по-хорошему, увидев такой код, человек должен стремиться не понять его, а удалить...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.