230.74K
Category: programmingprogramming

Отчёт по индивидуальной работе по дисциплине «Языки программирования» (вариант 6)

1.

Отчёт по индивидуальной работе по
дисциплине «Языки программирования»
Вариант 6
Пожарова Дарья ФИТ-2

2.

Постановка задачи
Для заданного подмножества набора костей домино определить, можно ли их
выложить в ряд, не нарушая правил. Если можно, то представить один любой
вариант такого разложения. Например, для входных данных 31, 00, 13, получаем
ответ: некорректные входные данные; для входных данных 02, 04, 42 ответ:
можно, 04, 42, 20. Использовать двухсвязный список.

3.

Алгоритм решения
Проверка корректности ввода
Проверка на допустимое количество домино
Проверка корректности введённых значений
домино
Реализация класса домино и нужных нам функций
Класс Domino
Функция Sort
Функция
Next_permutation
Функция
row_Dominoes
Основная функция
Функция
Print_Dominoes

4.

Проверка корректности ввода
Осуществляется через состояния потока
Пользователю даётся 3 попытки ввода
Проверка на допустимое количество домино
Проверка корректности введённых значений домино
Проверка условия: если введены
некорректные данные или количество
введенных домино ≤ 1
Проверка условия: если введены некорректные
данные cin.fail() или левое или правое значение
меньше 0, или больше 6
Выводим сообщение о том, что введено
недостаточное количество домино и
предлагаем пользователю ввести более 1
домино. Также сообщаем оставшееся
количество попыток для ввода
Выводим сообщение о том, что введены неверные
входные данные и предлагаем пользователю ввести
число от 0 до 6. Также сообщаем оставшееся
количество попыток для ввода
Если попытки закончились, выводится сообщение о превышении
количества попыток и программа завершает свое выполнение

5.

Реализация класса и функций
• Класс Domino содержит переменные left и right для представления значений левой и правой стороны
домино. Он также включает конструктор для инициализации значений кости при создании нового
объекта, оператор сравнения для сравнения костей домино и функцию flip для переворота кости,
меняющую местами значения левой и правой сторон.
• Функция Sort реализует сортировку "методом пузырька" для списка домино. Она использует цикл,
который будет повторяться до тех пор, пока происходят обмены элементов. Внутри цикла происходит
сравнение правой стороны текущего домино с правой стороной предыдущего, и если она меньше, то
происходит их обмен. Этот процесс продолжается до тех пор, пока список не будет отсортирован.
• Функция Next_permutation выполняет поиск следующей перестановки в списке, начиная с текущей.
Алгоритм основан на поиске пары элементов, которые можно поменять местами, чтобы получить
следующую упорядоченную перестановку. Если такая пара найдена, они меняются местами, а хвост
списка после этой пары реверсируется. Если такая пара не найдена, реверсируется весь список . Функция
возвращает true, если перестановка выполнена успешно, и false, если все возможные перестановки
исчерпаны.

6.

Реализация класса и функций
• Функция row_Dominoes проверяет, можно ли выложить домино в ряд. Сначала она сортирует список
домино, затем выполняет циклический процесс проверки всех возможных перестановок домино в
списке. Внутри цикла программа проверяет, можно ли правую сторону одной домино соединить с левой
стороной следующей. Если это возможно, программа продолжает проверку со следующей парой домино.
Если все домино можно составить в ряд, то функция возвращает true. В противном – false.
• Функция Print_Dominoes выводит на экран значения левой и правой сторон каждой домино через
пробел

7.

Основная функция
• Объявляется список для хранения домино
• Осуществляется проверка на корректность ввода
• Если доминошки можно выложить в ряд (вызывается функция row_Dominoes), то
вызывается функция Print_Dominoes для вывода всех домино.
• В противном случае выводится сообщение «Невозможно выложить домино в ряд».

8.

Пример работы программы

9.

Пример работы программы
English     Русский Rules