/tp-lab-9

Primary LanguageCMake

cpp-lab-9

Лабораторная работа №9 (Функциональное и многопоточное программирование)

GitHub pull requests GitHub closed pull requests

Relative date

Задание 1.

Написать функцию сортировки строк методом пузырька. Сравнение двух соседних элементов в функции должно осуществляться с помощью лямбда-выражения, которое передается в функцию в виде параметра. Составить пример использования сортировки, используя не менее 5 разных функций-компараторов.

Задание 2.

Написать программу, в которой для сортировки массива строк из 1 задачи применяется отдельный поток (std::thread). Сортировка происходит во вспомогательном потоке, а основной поток выводит содержание массива после каждого шага алгоритма. Потоки должны использовать мьютексы для синхронизации работы.

Задание 3.

Написать программу, которая моделирует обслуживание покупателей в супермаркете. Идея задачи состоит в том, что покупатели подходят к кассам в случайные моменты времени и с тележками, содержащими случайное количество продуктов (std::vector). Для обслуживания нескольких покупателей (до 5 человек) создается очередь (std::queue). Покупатели ставятся в конец очереди. Как только очередь заполняется для одной кассы, создается новый поток-касса со своей очередью. Поток-касса может завершить выполнение, если покупатели заканчиваются. Процесс обслуживания покупателя заключается в переборе всех продуктов, представляемых целыми числами в векторе с небольшой задержкой.

Тесты

Написать несколько тестов и поместить их в файл test/tests.cpp

Состав проекта

  • include/task1.h - заголовочный файл для первой задачи
  • include/task2.h - заголовочный файл для второй задачи
  • include/task3.h - заголовочный файл для третьей задачи
  • src/task1.cpp - исходный файл для первой задачи
  • src/task2.cpp - исходный файл для второй задачи
  • src/task3.cpp - исходный файл для третьей задачи
  • src/main1.cpp - главный файл для первой задачи
  • src/main2.cpp - главный файл для второй задачи
  • src/main3.cpp - главный файл для третьей задачи

Список участников/веток

  1. Малинин Дмитрий Дмитриевич 19 ПМИ-2 b60
  2. Бакланов Алексей Александрович 19 ПМИ-2 b61
  3. Баринов Даниил Сергеевич 19 ПМИ-1 b62
  4. Богомазов Михаил Васильевич 19 ПМИ-1 b63
  5. Бугров Лев Валерьевич 19 ПМИ-1 b64
  6. Бузанов Егор Андреевич 19 ПМИ-1 b65
  7. Варлачёв Валерий Максимович 19 ПМИ-1 b66
  8. Голованов Денис Максимович 19 ПМИ-1 b67
  9. Дробот Елизавета Денисовна 19 ПМИ-1 b68
  10. Жаравина Полина Дмитриевна 19 ПМИ-1 b69
  11. Зайцев Тимур Олегович 19 ПМИ-1 b70
  12. Кабанов Денис Сергеевич 19 ПМИ-1 b71
  13. Канев Владислав Олегович 19 ПМИ-1 b72
  14. Карцева Мария Дмитриевна 19 ПМИ-1 b73
  15. Касьянов Никита Юрьевич 19 ПМИ-1 b74
  16. Козлова Дарья Андреевна 19 ПМИ-1 b75
  17. Кузнецов Михаил Дмитриевич 19 ПМИ-1 b76
  18. Лавров Артём Романович 19 ПМИ-1 b77
  19. Матвеев Андрей Сергеевич 19 ПМИ-1 b78
  20. Машанова Карина Алексеевна 19 ПМИ-1 b79
  21. Наумов Никита Александрович 19 ПМИ-1 b80
  22. Нещеткин Глеб Максимович 19 ПМИ-1 b81
  23. Пасманик Ирина Дмитриевна 19 ПМИ-1 b82
  24. Рогозян Анастасия Тимофеевна 19 ПМИ-1 b83
  25. Соболев Данил Александрович 19 ПМИ-1 b84
  26. Софронов Валерий Александрович 19 ПМИ-1 b85
  27. Трутнев Алексей Игоревич 19 ПМИ-1 b86
  28. Тумаков Вадим Сергеевич 19 ПМИ-1 b87
  29. Фролова Ольга Михайловна 19 ПМИ-1 b88
  30. Шарибжанова Диана Рашидовна 19 ПМИ-1 b89
  31. Щеникова Анна Юрьевна 19 ПМИ-1 b90
  32. Андросов Вадим Дмитриевич 19 ПМИ-2 b91
  33. Бирина Елизавета Сергеевна 19 ПМИ-2 b92
  34. Булатов Дмитрий Александрович 19 ПМИ-2 b93
  35. Демашов Никита Александрович 19 ПМИ-2 b94
  36. Добряев Иван Александрович 19 ПМИ-2 b95
  37. Дрожжачих Евгений Валерьевич 19 ПМИ-2 b96
  38. Егорова Кристина Олеговна 19 ПМИ-2 b97
  39. Загоскин Владислав Андреевич 19 ПМИ-2 b98
  40. Зарубина Ирина Михайловна 19 ПМИ-2 b99
  41. Иванов Даниил Андреевич 19 ПМИ-2 b100
  42. Клыков Антон Романович 19 ПМИ-2 b101
  43. Королев Денис Витальевич 19 ПМИ-2 b102
  44. Краюшкина Екатерина Алексеевна 19 ПМИ-2 b103
  45. Назаров Вячеслав Андреевич 19 ПМИ-2 b104
  46. Оленев Дмитрий Сергеевич 19 ПМИ-2 b105
  47. Панина Полина Сергеевна 19 ПМИ-2 b106
  48. Прыгаев Денис Алексеевич 19 ПМИ-2 b107
  49. Рогов Андрей Дмитриевич 19 ПМИ-2 b108
  50. Симонова Арина Валерьевна 19 ПМИ-2 b109
  51. Созинов Кирилл Игоревич 19 ПМИ-2 b110
  52. Титова Нина Ивановна 19 ПМИ-2 b111
  53. Уртюков Илья Алексеевич 19 ПМИ-2 b112
  54. Хорев Егор Алексеевич 19 ПМИ-2 b113
  55. Шабаршин Леонид Георгиевич 19 ПМИ-2 b114

Алгоритм выполнения работы

Для выполнения работы необходимо:

  1. Выполнить fork репозитария в свой аккаунт.
  2. Выполнить клонирование репозитария из своего аккаунта к себе на локальную машину (git clone).
  3. Создать ветку git с индивидуальным номером (git branch имя_ветки).
  4. Сделать ветку активной (git checkout имя).
  5. Необходимо разместить как исходные файлы с решениями задач, поместив cpp файлы в src, а заголовочные - в include.
  6. Добавить файлы в хранилище (git add).
  7. Выполнить фиксацию изменений (git commit -m "комментарий").
  8. Отправить содержимое ветки в свой удаленный репозитарий (git push origin имя_ветки).
  9. Создать пул-запрос в репозитарий группы и ждать результата от GitHub Actions.