Профессиональный C++

1,017 views
Skip to first unread message

Alexey Sidnev

unread,
Sep 19, 2017, 1:29:08 AM9/19/17
to Основы программирования
В этой ветке можно задавать любые вопросы по курсу "Профессиональный C++".

Alexey Sidnev

unread,
Sep 20, 2017, 9:01:18 AM9/20/17
to Основы программирования

Ниже ответы на ряд возникших вопросов по задаче 1:

  1. По пункту 2. Так как в моем задании указан тип чисел float, то при поиске число в контейнере нужно использовать условие типа fabs(a - b) < 0.001 ? Или просто проверить на эквивалентность?

  - Нужно проверять на точное совпадение.

  

  2. По пункту 3. Правильно ли я понял, что числа нужно добавлять в список таким образом, чтобы они в любой момент времени были отсортированы? Или же нужно просто отсортировать список после заполнения?

  - В любой момент времени элементы должны быть отсортированы. Сортировку использовать нельзя.

 

  3. "Запустите программу для N=[1,10,100,100­0,10000,100000]" - то есть программу нужно запускать из терминала, передавая значение N в качестве параметра?

  - Если N будет передаваться через аргументы командной строки, то это будет олично. Будет допустимо пересобирать программу для каждого N.

  

  4. В гугл-форме в пункте "Сколько раз сгенерированное число было найдено в контейнере при N=10" нужно написать количество нахождений последнего (т.е. в данном случае десятого) сгенерировано числа? И если да, нужно ли выводить все остальные результаты?

  - Нет. В этом пункте (и аналогичных) нужно указать сколько раз сгенерированное число из пункта 1 было найдено в контейнере при выполнении шага 2. Например, если при N=10 будут всегда генерироваться одинаковые числа на шаге 1, то ответ будет 9. 

Alexey Sidnev

unread,
Sep 20, 2017, 3:05:26 PM9/20/17
to Основы программирования
  5. Мне нужно использовать контейнер unordered_set, который является хэш-таблицей. Не совсем понятно, как нужно ее упорядочить.
  - Требование упорядоченности для хеш-таблиц необходимо игнорировать.

vikasann...@gmail.com

unread,
Sep 24, 2017, 11:42:33 AM9/24/17
to Основы программирования
Добрый день, Алексей Александрович. Возникло несколько вопросов по поводу задания №1. У меня дано сгенерировать числа типа double в диапазоне (0, 1) и добавить в контейнер set. Вопросы в следующем:
1)Требуется подсчитать сколько раз сгенерированное число было найдено в контейнере set (шаг алгоритма 2). set - это контейнер уникальных элементов, упорядоченных по возрастанию. Каждое его значение также является и ключом. То есть в нем не может быть двух одинаковых элементов. Значит для любого числа ответ на этот вопрос будет 0 или 1. То ли Вы требуете в данном задании?
2)Требуется ли выводить ответ на 1 вопрос для каждого сгенерированного числа? Но даже простой вывод всех элементов множества затягивается очень на долго для N=100000.
Прошу привести пример, что именно должна выводить программа(можно даже простой пример с числами int и N=10, генерируемые числа должны и повторяться, и быть различными: 1 5 4 4 6 5 5 8 3 7).
С уважением, Санникова Виктория.

Alexey Sidnev

unread,
Sep 24, 2017, 1:35:03 PM9/24/17
to unn_pro...@googlegroups.com
1)Требуется подсчитать сколько раз сгенерированное число было найдено в контейнере set (шаг алгоритма 2). set - это контейнер уникальных элементов, упорядоченных по возрастанию. Каждое его значение также является и ключом. То есть в нем не может быть двух одинаковых элементов. Значит для любого числа ответ на этот вопрос будет 0 или 1. То ли Вы требуете в данном задании?
Често говоря не понял вопрос. Переформулируйте или задайте завтра на лекции.

2)Требуется ли выводить ответ на 1 вопрос для каждого сгенерированного числа? Но даже простой вывод всех элементов множества затягивается очень на долго для N=100000. 
Прошу привести пример, что именно должна выводить программа(можно даже простой пример с числами int и N=10, генерируемые числа должны и повторяться, и быть различными: 1 5 4 4 6 5 5 8 3 7).
Если вы сгенерируете последовательность "1 5 4 4 6 5 5 8 3 7", то ответ будет 3.

Alexey Sidnev

unread,
Sep 24, 2017, 1:36:49 PM9/24/17
to Основы программирования
6. Случайно сгенерировать число типа short int в диапазоне [0,2^15]. short int у меня включает числа в диапозоне до 2^15 - 1, использовать другой тип или уменьшить диапазон на 1?

Сократить диапазон до [0,(2^15) - 1].

thana...@gmail.com

unread,
Sep 25, 2017, 6:00:37 AM9/25/17
to Основы программирования
Здравствуйте, Алексей Александрович.
Скажите, пожалуйста, что конкретно нужно учитывать при подсчёте повторений числа: сам факт повторения(т.е если нашли его единожды в forward_list, то пометили), или необходимо отмечать каждый случай повторения числа?

Alexey Sidnev

unread,
Sep 25, 2017, 8:06:24 AM9/25/17
to Основы программирования
Необходимо учитывать сам факт повторения, т.е. если на очередной итерации в вашем контейнере оказались числа [1, 2, 2, 3, 4] и было сгенерировано число 2, то счётчик повторений надо увеличить на 1, а новую 2 добавить в контейнер [1, 2, 2, 2, 3, 4].

Alexey Sidnev

unread,
Sep 27, 2017, 4:24:23 AM9/27/17
to Основы программирования
7. Можно ли вместо модуля random использовать функцию rand()?
  - Нет. Необходимо использовать модуль <random>, как указано в ТЗ.

olga-o...@mail.ru

unread,
Sep 27, 2017, 4:49:24 AM9/27/17
to Основы программирования
Добрый день!

Несколько вопросов:
- В хеш ф-ии учитывать все элементы кортежа (структуры)?
- Элемент string состоит из одного слова или нескольких? есть ли ограничение?
- Как правильно работать с генератором строк? Сгенерировать текст, добавить его в файл, и доставать случайные слова?
Или взять классический текст Lorem Ipsum? можно ли хранить его как переменную string?

Alexey Sidnev

unread,
Sep 27, 2017, 5:01:38 AM9/27/17
to Основы программирования
В хеш ф-ии учитывать все элементы кортежа (структуры)?
Да. Хеш-функция должна быть "хорошей".

Элемент string состоит из одного слова или нескольких? есть ли ограничение?
Строка может состоять из произвольного количества слов, если противное явно не указано в ТЗ.

Как правильно работать с генератором строк? Сгенерировать текст, добавить его в файл, и доставать случайные слова? Или взять классический текст Lorem Ipsum? можно ли хранить его как переменную string?
Вы можете использовать сторонную реализацию генератора и подключить её к своему коду. Можете сгенерировать достаточно длинный набор строк и хранить его в файле или непосредственно в переменной C++ (если вы создаете 10^6 записей в таблице, то различных строк тоже должно быть порядка 10^6). Любой вариант подойдет. 

Alexey Sidnev

unread,
Sep 27, 2017, 5:50:59 AM9/27/17
to Основы программирования
На страничке Материалы\Advanced C++ можно скачать все актуальные лекции на текущий момент.

vikasann...@gmail.com

unread,
Sep 27, 2017, 10:54:50 AM9/27/17
to Основы программирования
Добрый день!

Можно ли написать свой собственный генератор случайных слов/строк используя латинский алфавит? Или обязательно использовать текст "Lorem ipsum"?

Alexey Sidnev

unread,
Sep 27, 2017, 3:26:35 PM9/27/17
to unn_pro...@googlegroups.com
Да, вы можете написать собственный генератор, но он должен быть немного "интеллектуальным", чтобы генерировать строки похожие на реальные слова (например, слово, содержащее подряд 4 согласные буквы, выглядит странно).

taraka...@gmail.com

unread,
Sep 29, 2017, 11:42:43 AM9/29/17
to Основы программирования
Алексей Александрович, добрый вечер.
Вопрос по-поводу 2 задания. Реализовать для контейнера unordered_map собственную функцию хеширования. Вывести максимальное количество
элементов с одинаковым значением хеш-функции.

Как я понял, unordered_map хранит пары ключ-значение с уникальными ключами. Соответственно в таком контейнере не может быть данных с одинаковыми ключами. Если хеш-функция выдает занятый ключ для очередных данных, то нужно ли их размещать, пересчитав каким-то образом ключ для них? Или можно просто учесть, что было совпадение по ключу?

Анатолий

unread,
Sep 29, 2017, 12:02:22 PM9/29/17
to Основы программирования
Здравствуйте, подскажите пожалуйста, в задании написано реализовать функцию хеширования
для типа pair<string, pair<float, float> > и заполнить unordered_map. Как я понял pair<string, pair<float, float> > это тип ключа, какой тип значений, которые лежат в контейнере?

Alexey Sidnev

unread,
Sep 30, 2017, 3:58:32 AM9/30/17
to Основы программирования
В контейнере unordered_map могут храниться только уникальные ключи (это правда), но это не мешает хеш-функции выдавать одинаковые значения для разных ключей. В результате могут возникать коллизии, которые имеют штатный алгоритм из разрешения.
Рекомендую повторить хеш-таблицы.

Стоит уточнить, что в unordered_map предполается хранение данных в виде поля int, т.е. unordered_map<<тип ключа>, int>, где int - количество элементов с заданным ключом. В unordered_map необходимо размещать все элементы, которые генерируются. Если элементы с очередным ключом уже присутствует в хеш-таблице, то увеличить счётчик данных на 1.

Alexey Sidnev

unread,
Sep 30, 2017, 3:59:34 AM9/30/17
to Основы программирования
Тип значения - int - количество элементов с одинаковым ключом.

oleg...@gmail.com

unread,
Sep 30, 2017, 5:02:48 PM9/30/17
to Основы программирования
Здравствуйте, Алексей Александрович!
У нас возник вопрос. Дан контейнер unordered_set. Требуется реализовать функцию хэширования для tuple<string, tuple<float, float, float> >
Я написал хэш-функцию и генератор для объекта структуры.
Вопрос в том, что нам необходимо хранить в множестве? Значения хэшей или объекты структуры tuple<string, tuple<float, float, float> >
Если все же второе, то где должны храниться значения хэшей? Нам как то нужно переопределить стандартную хэш-функцию? Пока не очень понятно, как это сделать.
Заранее спасибо за ответ

Alexey Sidnev

unread,
Oct 2, 2017, 5:41:49 AM10/2/17
to unn_pro...@googlegroups.com
В хеш-таблице unordered_set должны храниться объекты типа tuple<string, tuple<float, float, float>>, а стандартную реализацию хеш-функции вам необходимо заменить на собственную. Более подробно расскажу на лекции сегодня.

vikasann...@gmail.com

unread,
Oct 2, 2017, 3:22:53 PM10/2/17
to Основы программирования
Добрый вечер!
Подскажите, пожалуйста, ожидаемые результаты максимально количества элементов в bucket'е для 1.000.000?

Alexey Sidnev

unread,
Oct 3, 2017, 3:06:25 AM10/3/17
to Основы программирования
Я думаю, что 10 - достаточно хорошая оценка.

Alexey Sidnev

unread,
Oct 8, 2017, 2:54:09 PM10/8/17
to Основы программирования
Как известно, контейнер map (unordered_map) содержит в себе ключ и значение. В данном случае в качестве ключа выступает структура Film, в то время как значением выступает высчитанный хеш. В дальнейшем поиск по хеш-таблице(максимальное количество элементов с одинаковым значением хеш-функции) будет сравниваться именно по значению, то есть - по хешу.

Последнее утверждение неверно, т.к. хеш-значение в контейнере хранить нет никакого смысла. Что и как нужно считать, на мой взгляд, достаточно подробно разбирался на лекции. Если коротко, то необходимо посчитать максимальное колличество коллизий возникших в финальной версии хеш-таблицы, а это и есть максимальное количество совпавших значений хеш-функции. Если более конкретно к реализации хеш-таблиц в C++, то необходимо найти максимальное количество элементов среди всех корзин хеш-таблицы.

Alexey Sidnev

unread,
Oct 11, 2017, 6:58:12 AM10/11/17
to Основы программирования
1. Выложил все актуальные лекции.
2. Текущие результаты доступны по ссылке: https://sites.google.com/site/alexeysidnev/studentam/advancedc-2017 

oleg...@gmail.com

unread,
Oct 21, 2017, 4:08:38 PM10/21/17
to Основы программирования
Здравствуйте. Проект не собирается из-за auto в параметрах функции
Поддержка стандарта с++17 включена
http://prntscr.com/h0agxp

Alexey Sidnev

unread,
Oct 23, 2017, 12:59:48 AM10/23/17
to Основы программирования
По всей видимости VS не полностью поддерживает стандарт.
Замените проблемный код на аналогичный:
template<class T>
void printStat(T ptr) {
  std
::cout << ptr.get() << " -> " << ptr.use_count() << std::endl;
}

Alexey Sidnev

unread,
Oct 23, 2017, 2:12:28 AM10/23/17
to Основы программирования
Результаты проверки работы №3 от 22.10.2017. 
По всей видимости не подключены требуемые заголовочные файлы.
build.log

Alexey Sidnev

unread,
Oct 24, 2017, 1:21:34 AM10/24/17
to Основы программирования
Тестовый файл обновлен (добавлена функция my_make_unique). Результаты проверки работы №3 от 23.10.2017 в приложении. 
build_23.10.log

drinke...@gmail.com

unread,
Oct 24, 2017, 7:25:15 AM10/24/17
to Основы программирования
Нужно ли реализовывать методы, конструкторы которые не нужны для работы main'a и работы вызываемых оттуда ф-й?

Можно просто подружить все классы? или нужно реализовывать схему наследования?

Alexey Sidnev

unread,
Oct 25, 2017, 2:56:51 AM10/25/17
to Основы программирования
Необходимо реализовать достаточный набор методов, чтобы корректно работала программа. Все реализовывать не надо. Утечек памяти и прочих ошибок не должно быть.

Alexey Sidnev

unread,
Oct 25, 2017, 2:58:33 AM10/25/17
to Основы программирования
За прошедший день новых работ на проверку не поступало, поэтому обновлений нет. Вы можете присылать произвольное количество работ до крайнего срока.

Alexey Sidnev

unread,
Oct 26, 2017, 12:03:04 AM10/26/17
to Основы программирования
Результаты проверки работы №3 от 25.10.2017 в приложении. 
build.log
out.csv

Alexey Sidnev

unread,
Oct 26, 2017, 12:04:17 AM10/26/17
to Основы программирования
Файл, который я использую для тестирования, в приложении.
task3_main.cpp

Alexey Sidnev

unread,
Oct 26, 2017, 4:06:00 AM10/26/17
to Основы программирования
Прошу прощения, ошибся с файлом. Вечером выложу правильный.

Alexey Sidnev

unread,
Oct 26, 2017, 2:28:39 PM10/26/17
to unn_pro...@googlegroups.com
Правильный файл, который я использую для тестирования, в приложении.
main.cpp

Alexey Sidnev

unread,
Oct 26, 2017, 2:38:41 PM10/26/17
to Основы программирования
Результаты проверки работы №3 от 26.10.2017 в приложении.  
build.log
out.csv

sveta0...@gmail.com

unread,
Oct 26, 2017, 3:53:18 PM10/26/17
to Основы программирования
Прошу прощения, но все файлы выложенные вами после 25.10 в этой ветке форума невозможно открыть или скачать. И данная проблема не только у меня.
Выдаёт вот такие ошибки:
Not Found

The requested document, out.csv (0x284c7394aad1d part 0.2), could not be found: DOCID_NOT_FOUND

Alexey Sidnev

unread,
Oct 29, 2017, 2:23:36 AM10/29/17
to Основы программирования
По всей видимости сервисы google отвалились на некоторое время. Сейчас у меня вложения открылись со всех устройств.

Alexey Sidnev

unread,
Oct 29, 2017, 2:29:24 AM10/29/17
to Основы программирования
Результаты проверки работы №3 от 28.10.2017 в приложении.  
out_28.10.2017.csv
build_28.10.2017.log

Alexey Sidnev

unread,
Oct 30, 2017, 1:16:09 AM10/30/17
to Основы программирования
Результаты проверки всех присланных работ по задаче №3 от 29.10.2017 см. в приложении. 
build_29.10.2017.log
out_29.10.2017.csv

Alexey Sidnev

unread,
Nov 5, 2017, 9:58:27 AM11/5/17
to Основы программирования
Итоговые результаты проверки работы №3.
build.log
out.csv

Alexey Sidnev

unread,
Nov 21, 2017, 7:28:20 AM11/21/17
to Основы программирования
Все лекции доступны в соответствующем разделе.

Alexey Sidnev

unread,
Nov 22, 2017, 1:52:57 PM11/22/17
to Основы программирования
Результаты сборки и исполнения работы 4 на исходном примере от 2017.11.22.
build_2017.11.22.log
out_2017.11.22.csv

Alexey Sidnev

unread,
Nov 24, 2017, 1:33:18 AM11/24/17
to Основы программирования
При проверке работ я использую GCC 7.1.0 с дополнительным ключом "-std=c++17".

Alexey Sidnev

unread,
Nov 25, 2017, 4:57:28 AM11/25/17
to Основы программирования
Результаты сборки и исполнения работы 4 на исходном примере от 2017.11.25 (только новые работы).
build_25.11.log
out_25.11.csv

sveta0...@gmail.com

unread,
Nov 25, 2017, 8:01:11 AM11/25/17
to Основы программирования
Здравствуйте! Не получается написать вариативный шаблон из-за того, что лямбда-функция передаётся последним параметром.
createNode(Args ...args, T f) Не подстраивается под функцию в мейн g.createNode(generator, processor1, processor2, лямбда-функция)
НО если просто изменить порядок передачи в мейн g.createNode(лямбда-функция, generator, processor1, processor2) а реализацию createNode(T f, Args ...args). Тогда тип T подстраивается под лямбда-функцию.
Возможно ли реализация, когда пакет параметров передаётся первым аргументом?

Alexey Sidnev

unread,
Nov 25, 2017, 12:40:54 PM11/25/17
to Основы программирования
Да, думаю можно поменять порядок параметров в функции createNode. Я напишу соответствующий тест.

pop20exp...@gmail.com

unread,
Nov 26, 2017, 4:40:55 AM11/26/17
to Основы программирования
функция run() должна последовательно выполнять операции графа, пока не вызовется fc.stop().
И после этого расчёты должны закончится. Но функция createNode вернёт return 0; Что тоже является int значением и для него выполнятся расчёты на остальных узлах графа. Обязательно ли избавляться от печати 0 0 в конце?

Alexey Sidnev

unread,
Nov 26, 2017, 5:29:33 AM11/26/17
to unn_pro...@googlegroups.com
В реальной жизни после fc.stop() вычисления останавливаются, технических сложностей я не вижу, поэтому ноль печататься не должен.

olga-o...@mail.ru

unread,
Dec 7, 2017, 2:38:40 PM12/7/17
to Основы программирования
Здравствуйте, в задаче производители- потребители нужно ли создавать реальный буфер и чем-то его заполнять или можно формально реализовывать проверку на заполненность исходя из задаваемого размера и т.д. и просто выводить сообщение "произвожу"/ "извлекаю"

Alexey Sidnev

unread,
Dec 7, 2017, 11:43:09 PM12/7/17
to Основы программирования
В буфер необходимо записывать последовательные числа от 1 до n (производитель записывает очередное число). Это позволит проверить, что алгоритм работает корректно и не содержит гонок данных.

sveta0...@gmail.com

unread,
Dec 8, 2017, 6:50:47 AM12/8/17
to Основы программирования
Здравствуйте! При компиляции программы на gcc получаю ошибку "undefined reference to `pthread_create'". В интернете нашла, что "необходимо было добавить -lpthread в настройки линкера" или "возможно проблема в том, что при компиляции с помощью gcc вы не использовали "параметр" -pthread".
Подключена ли данная директива в вашем компиляторе? Или её подключение можно как-то прописать в коде программы? Повлияет ли её подключение на порядок передаваемых параметров из консоли?

Alexey Sidnev

unread,
Dec 8, 2017, 10:22:08 AM12/8/17
to Основы программирования
Для компиляции я использую следующую строку: g++ -pthread -std=c++17 src.cpp

admiral...@gmail.com

unread,
Dec 12, 2017, 10:57:05 AM12/12/17
to Основы программирования
Считается ли верной реализация задачи "Обедающие философы", где философ после того как поест обязательно размышляет?

Alexey Sidnev

unread,
Dec 12, 2017, 11:11:26 AM12/12/17
to Основы программирования
Да, подобное решение вполне подойдёт. При этом не это не должно приводить к детерминированному поведение всех философов. Например, "размышление" может быть реализовано в виде "сна" потока на случайное количество мс.

huaweiho...@gmail.com

unread,
Dec 13, 2017, 2:05:24 AM12/13/17
to Основы программирования
Добрый день. У меня задача "Спящий парикмахер". Подскажите, пожалуйста, зал ожидания клиентов для всех потоков должен быть общий или у каждого потока свой? Если зады ожидания разные, то когда парикмахер берет посетителя из очереди, он должен знать в каком зале ожидания освободился стул.

Alexey Sidnev

unread,
Dec 13, 2017, 6:50:52 AM12/13/17
to Основы программирования
Добрый день. Предполагается, что зал ожидания один.

thana...@gmail.com

unread,
Dec 13, 2017, 5:26:05 PM12/13/17
to Основы программирования
Здравствуйте. Моя задача о курильщиках. Хотелось бы уточнить, правильно ли я понимаю, что в реализации нельзя использовать условные операторы и нельзя использовать больше одного семафора?

Alexey Sidnev

unread,
Dec 22, 2017, 5:35:02 AM12/22/17
to Основы программирования
Зачёт состоится 25 декабря в 13:00 в аудитории 110.
Reply all
Reply to author
Forward
0 new messages