Задачи для разработки ПО
-
Написать программу, моделирующую работу туристической фирмы.
Сведения о каждом туре: название страны, название города, список достопримечательностей, количество дней, вид проезда (автобус, поезд, самолет, теплоход), стоимость, максимальное количество туристов в группе.
Сведения о каждом туристе: фамилия, имя, отчество, пожелания (страна, обязательная достопримечательность, вид проезда, диапазон количества дней, диапазон приемлемой стоимости). Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить тур или туриста.
- Разделить всех туристов на туристические группы с общими пожеланиями по стране и виду проезда.
- Для заданного туриста вывести на экран все подходящие туры.
- Отправить группу в тур: для заданного тура вывести на экран список всех подходящих туристов; предложить пользователю выбрать туристов, контролируя общее количество туристов в группе; выбранных туристов вывести списком в отдельный файл (название запросить у пользователя) и удалить из базы.
- Составить статистику: для каждой страны вывести на экран
- количество туров,
- количество городов для посещения,
- количество достопримечательностей,
- среднее количество дней,
- самый распространённый вид транспорта,
- средняя стоимость,
- количество желающих туристов,
- самый распространённый вид транспорта среди желающих поехать в эту страну туристов.
- Найти потенциально неприбыльный тур: вывести на экран тур, для которого на данный момент потенциальная прибыль (стоимость * количество подходящих туристов) наименьшая.
-
Написать программу, моделирующую работу отделения телекоммуникационной компании, обслуживающей домашние телефоны.
Сведения об абоненте: фамилия, имя, шестизначный номер телефона, тарифный план, общее количество минут телефонных разговоров за последний месяц.
- Безлимитный тариф
- Объём минут: не ограничен
- Ежемесячная плата, руб.: 420,00
- Стоимость минуты сверх объёма, руб.: 0,00
- Комбинированный
- Объём минут: 350
- Ежемесячная плата, руб.: 300,00
- Стоимость минуты сверх объёма, руб.: 0,34
- Повременный
- Объём минут: 0
- Ежемесячная плата, руб.: 180,00
- Стоимость минуты сверх объёма, руб.: 0,38
Начальное формирование данных осуществляется из файла (или файлов). С помощью меню необходимо обеспечить следующие функции:
- Добавить абонента с предоставлением ему уникального, ещё не занятого индивидуального номера.
- Удалить абонента.
- Найти абонента по номеру телефона или фамилии.
- Вывести список всех абонентов, сгруппированный по тарифному плану и отсортированный по фамилии.
- Для заданного тарифного плана вывести на экран список всех его абонентов с расчётом оплаты за последний месяц.
- Составить статистику за месяц:
- общее количество абонентов,
- количество абонентов каждого тарифного плана,
- средняя общая стоимость телефонной связи за месяц,
- среднее количество минут телефонных разговоров на безлимитном тарифе,
- среднее количество минут телефонных разговоров сверх лимита на комбинированном тарифе,
- среднее количество минут телефонных разговоров на повременном тарифе.
- Найти абонентов, которые используют невыгодный тариф. Для каждого такого абонента вывести на экран:
- фамилию, номер телефона,
- количество минут телефонных разговоров,
- текущий тариф и размер оплаты за месяц,
- тариф, на котором размер оплаты был бы ниже, и размер оплаты при этом тарифе.
- Безлимитный тариф
-
Написать программу, моделирующую работу автобусного парка.
Сведения о каждом маршруте: номер, количество остановок, длина маршрута (в километрах), количество автобусов, необходимых для обеспечения движения по маршруту.
Сведения о каждом автобусе: номер автобуса, расход бензина (в литрах на километр), фамилия и имя водителя, номер маршрута, состояние (работает, простаивает, на ремонте).
Данные об автобусах и маршрутах загружаются из файла (или из двух файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить новый маршрут/автобус.
- Удалить автобус по номеру.
- Удалить маршрут по номеру: принадлежащие ему автобусы должны сменить состояние на «простаивает» и номер маршрута на «свободен»
- Распределить свободные автобусы на маршруты.
- Сменить состояние автобуса.
- Переместить автобус между маршрутами.
- Отобразить список простаивающих/работающих/ремонтирующихся автобусов для маршрута.
- Проверить достаточность/избыточность работающих автобусов на маршруте.
- По фамилии водителя найти, на каком маршруте он сейчас работает.
- Составить статистику расхода бензина для маршрутов, учитывать только работающие автобусы.
-
Написать программу, моделирующую работу биржи труда.
Сведения о каждой вакансии: компания, название должности, отдел, оклад, требования к должности (интервал возраста, образование), количество рабочих мест.
Сведения о каждом человеке: фамилия, имя, отчество, дата рождения, образование, специальность, желаемая зарплата, список названий нежелательных компаний. Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить вакансию/соискателя.
- Вывести на экран список уникальных названий должностей.
- Для заданной должности составить статистику: количество предложений, средний оклад, количество уникальных компаний, перечень требующегося образования.
- Для заданного возраста составить статистику: средний возможный оклад, средняя желательная зарплата.
- Найти работу: для заданного соискателя вывести список всех подходящих вакансий. Выбранную пользователем вакансию вывести в файл, пользователя удалить, количество рабочих мест в вакансии уменьшить.
- Найти почти работу мечты: для заданного соискателя вывести список всех почти подходящих вакансий, у которых оклад максимум на 10% ниже желательной зарплаты или у которых требующийся возраст не больше чем на год отличается от возраста соискателя.
-
Написать программу, моделирующую обработку заявок на авиабилеты.
Сведения о каждом рейсе: номер, пункт отправления, пункт назначения, дату и время вылета, дата и время прибытия, тип самолета, стоимость билета.
Сведения о каждой заявке: идентификатор, пункт отправления, пункт назначения, дату и время вылета, фамилию и имя пассажира.
Данные о рейсах и заявках загружаются из файла (или из двух файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить рейс.
- Добавить/удалить заявку.
- Удалить все заявки по заданному пункту отправления/назначения.
- Вывести все рейсы по заданным пунктам отправления и назначения и дню вылета.
- Вывести все заявки по заданным дате и времени вылета.
- Для заявки вывести все рейсы с соответствующими пунктами отправления и назначения и отличающиеся по дате вылета не больше, чем на двое суток.
- Для заявки вывести все пары рейсов, позволяющие добраться из пункта отправления в пункт назначения ровно с одной пересадкой в промежуточном пункте длительностью не более суток.
-
Написать программу, моделирующую информационную систему на железнодорожном вокзале.
Сведения о каждом поезде: номер, пункт отправления, пункт назначения, время отправления, дата и время прибытия, стоимость билета. Программа должна создавать список поездов. Начальное формирование данных осуществляется из файла.
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить поезд.
- Вывести все поезда по пункту отправления и дате отправления, принадлежащей введённому пользователем интервалу дат.
- Вывести все поезда по заданным пунктам отправления и назначения, дню отправления и ограничению по стоимости.
- Вывести список всех городов, в которые можно приехать поездом, но невозможно уехать.
- Вывести список всех городов с железнодорожным сообщением.
- По названию города и дате выяснить, какое максимальное число одновременно работающих путей необходимо в этот день, если перед отправлением и после прибытия поезда стоят ровно полчаса.
-
Написать программу, моделирующую учет книг в библиотеке.
Сведения о каждой книге: фамилия и инициалы автора, название, инвентаризационный номер, жанр, возрастной рейтинг, количество книг в библиотеке, количество книг на руках.
Сведения о каждом читателе: фамилия, имя, отчество, дата рождения, список всех взятых книг с указанием даты возврата.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить книгу/читателя.
- Удалить читателя. Считать взятые им книги утерянными, для каждой уменьшить «количество книг на руках».
- Удалить книгу из базы, проконтролировав её удаление из списков соответствующих читателей.
- Подобрать книги для заданного читателя по выбранному из списка жанру или автору (с учетом возраста читателя).
- Выдать книгу читателю на руки с учётом оставшихся в библиотеке экземпляров.
- Вернуть книгу и по заданной фактической дате возврата рассчитать штраф (1 рубль за каждый день просрочки).
- Вывести список книг заданного жанра, отсортированный по фамилии автора и названию.
- Вывести все книги без повторения, которые на заданную дату имеют просроченные не сданные экземпляры.
-
Написать программу, моделирующую процесс купли-продажи квартир.
Сведения о каждой доступной квартире: метраж, количество комнат, адрес (район, улица, дом), этаж, вид дома (панельный, кирпичный), количество этажей, стоимость.
Сведения о каждой заявке на покупку квартиры: количество комнат, район, вид дома.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить квартиру/заявку.
- Вывести на экран все заявки заданного района, отсортированные по количеству комнат.
- Вывести на экран все квартиры, сгруппированные по району и отсортированные по метражу.
- Вывести на экран все квартиры по заданному диапазону стоимости.
- Для заданной заявки вывести на экран список подходящих и «почти подходящих» квартир: с количеством комнат, отличающимся не более, чем на 1.
- Выполнить заявку: для заявки из списка «почти подходящих» квартир выбрать одну. В результате и заявка, и выбранная квартира удаляются.
- Вывести статистику по каждому району: количество предложений продажи, средний метраж, средняя стоимость, количество заявок на покупку, потенциальный процент покрытия заявок (сколько заявок на покупку относительно общего числа заявок в этом районе имеют хотя бы одну полностью подходящую квартиру).
-
Написать программу, моделирующую процесс обмена квартир.
Сведения о каждой квартире: метраж, количество комнат, адрес (район, улицу, дом), этаж, вид дома (панельный, кирпичный) и количество этажей, стоимость, параметры обмена: интервал метража, интервал количества комнат, список районов, список подходящих этажей, интервал стоимости.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить квартиру.
- Вывести на экран все квартиры, отсортированные по районам/стоимости/метражу.
- Вывести все варианты обмена для заданной квартиры (при которых предложения удовлетворяют все требования друг друга) с расчётом доплаты. Выбранный пользователем вариант записать в файл и удалить из базы.
- Для заданной квартиры найти всех соседей: предложения для обмена на той же улице.
- Для каждого района составить статистику: количество предложений для обмена, средняя стоимость за метр, количество предложений, желающих обменяться на квартиру в этом районе.
- Проверить корректность базы: дома по одинаковому адресу должны иметь равное количество этажей и вид дома. Вывести на экран все несовпадения.
-
Написать программу, играющую роль записной книжки.
Сведения о каждой записи: имя, фамилия, отчество человека, его сотовый и домашний телефоны, адрес, дата рождения, пол, статус (друг, коллега по работе, парикмахер и т.п.). Отчество, домашний телефон и адрес могут отсутствовать, все остальные поля обязательные.
Начальное формирование данных осуществляется из файла (или файлов). С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить знакомого.
- Изменить адрес, телефон, статус.
- Вывести список всех дней рождения, сгруппированный по месяцам.
- Отобразить список всех имеющихся статусов. По выбранному из списка статусу и событию сформировать список приглашенных лиц (вывести в отдельный файл с заданным пользователем названием), для каждого создать отдельный файл с соответствующим названием (например, IvanovBirthday.txt, PetrovBirthday.txt), содержащий внутри: обращение и текст приглашения.
- Составить статистику знакомых:
- общее количество контактов,
- количество контактов мужского и женского пола,
- количество контактов младше 20 лет на данный момент,
- количество контактов от 20 до 30 лет на данный момент,
- количество контактов от 30 до 40 лет на данный момент,
- количество контактов старше 40 лет на данный момент,
- количество контактов каждого статуса,
- количество контактов с указанным домашним номером,
- количество контактов с указанным адресом.
-
Написать программу, моделирующую работу с вкладами в банке.
Сведения о каждом виде вклада: название, годовой процент, возможность пополнения счета.
Сведения о каждом вкладчике: фамилия, имя, отчество, номер счета, вид вклада, сумма, дата открытия, ключевое слово, последняя дата начисления процентов.
Начальное формирование данных осуществляется из файла (или файлов).
При начислении процента к текущей сумме вклада добавляется (вклад * годовой процент * количество пройденных дней от последней даты зачисления до текущей даты / дней в году)
С помощью меню необходимо обеспечить следующие функции:
- Добавить вклад/вкладчика.
- Удалить выбранный вид вклада, если у него нет вкладчиков.
- Закрыть счёт с заданной датой с выплатой процентов: вывести в файл (запросить название и путь у пользователя) всю информацию о вкладчике и общую сумму, удалить запись из базы.
- Пополнить счёт, если это возможно, по номеру счета. Для подтверждения запрашивать ключевое слово.
- Вывести на экран список уникальных вкладчиков, отсортированных по фамилии.
- Вывести на экран название наиболее популярного вида вклада, его среднюю сумму и последнюю дату открытия.
- Для заданной даты начислить проценты по всем счетам, у которых с последней даты начисления процентов прошло не менее месяца, и обновить дату начисления процентов.
-
Написать программу, моделирующую работу с коммунальными платежами.
Сведения о каждом счёте: фамилия, имя, отчество, адрес, месяц платежа, общая сумма для оплаты, внесенная сумма оплаты, вид счёта (квартплата, плата за электроэнергию, плата за телефон). Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить счёт. При добавлении нового счёта внесённая сумма оплаты обязательно равна нулю.
- Оплатить счёт: для выбранного пользователем счёта вывести на экран подробный запрос на оплату, считать «внесённую» пользователем сумму и добавить её к внесённой сумме оплаты.
- Вывести на экран все счета заданного человека.
- Для выбранного пользователя вывести на экран сгруппированный по виду счёта список имеющихся денег на счету или недостающей суммы.
- Вывести на экран отсортированный по фамилии список должников (людей, у которых общая внесённая сумма оплаты по виду счёта превосходит внесённую сумму оплаты), с указанием вида счёта.
- Совместить все счета в один: для заданного человека и вида счёта создать один общий счёт с единой суммой для оплаты и единой внесённой суммой оплаты, все остальные счета удалить. В качестве месяца указать последний.
- Запросить статистику: вывести на экран количество уникальных людей, среднюю сумму для оплаты, среднюю внесённую сумму, самый распространённый вид счёта, среднюю сумму платежа по самому распространённому виду счёта.
- Сформировать список людей, которым для указанного месяца не были выставлены счета по определённому виду счёта.
-
Написать программу, моделирующую работу с расписанием занятий студентов.
Сведения о каждом элементе расписания: день недели (понедельник - суббота), номер пары (максимум 6), название предмета, имя преподавателя, номер аудитории, название группы студентов. Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить элемент расписания, с проверкой корректности:
- в любой момент времени группа должна быть максимум на одном занятии;
- в любой момент времени преподаватель должен вести максимум один предмет, максимум в одном месте, у любого количества групп студентов. Общее число предметов у преподавателя не должно превышать 8 штук;
- в любой момент времени в аудитории может преподаваться максимум один предмет, максимум одним преподавателем, любому числу групп студентов.
- Удалить элемент расписания.
- Переместить элемент расписания: изменить день, номер пары и номер аудитории выбранного пользователем занятия с проверкой корректности.
- Для заданной группы, преподавателя или аудитории отобразить расписание на неделю.
- Вывести на экран всё расписание, сгруппированное по дням и номеру пары, отсортированное по номеру аудитории.
- Выбрать день для пересдачи: для заданного преподавателя и заданного списка групп студентов найти любые две подряд идущие пары, во время которых преподаватель и студенты свободны, и знакомую для преподавателя (в которой преподаватель ведёт хотя бы одно занятие), свободную в это время аудиторию. Если это невозможно, вывести соответствующее сообщение.
- Проверить нагрузку: для заданного преподавателя вывести на экран общее количество занятий в неделю, список уникальных предметов, количество различных групп студентов.
- Добавить элемент расписания, с проверкой корректности:
-
Написать программу, моделирующую работу книжного магазина.
Сведения о каждой книге: фамилия автора, название, жанр, цена, количество книг в магазине.
Кроме книг в магазине продаются канцелярские товары. Информация о каждом канцелярском товаре следующая: название, цена, количество единиц товара в магазине.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить книгу или канцелярскую принадлежность.
- По заданному названию или жанру вывести на экран список подходящих книг.
- Сформировать списки покупок:
- Создать/удалить список покупок.
- Добавить/удалить книгу или канцелярскую принадлежность в заданный список покупок.
- Вывести заданный список покупок на экран с подсчётом общей стоимости.
- Отобразить все имеющиеся списки покупок.
- Оплатить список покупок: товары записать в файл с заданным пользователем названием, список очистить, количество соответствующих товаров в магазине уменьшить, все остальные списки пересчитать в соответствии с текущим количеством товаров в магазине.
- Вывести на экран сгруппированную по жанрам статистику: количество книг, средняя стоимость, суммарное количество экземпляров, процент количества экземпляров относительно общего числа товаров в магазине.
-
Написать программу, моделирующую работу оператора системы оповещений клиентов банка.
Сведения о каждом клиенте: ФИО, номер телефона, сумма долга, история звонков.
Сведения о каждом телефонном звонке: клиент, номер телефона, время звонка, длительность, удалось ли дозвониться, комментарий.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить клиента.
- Обновить информацию о клиенте.
- Поиск клиента по номеру телефона или ФИО.
- Добавить/удалить информацию о звонке.
- Вывести на экран список клиентов:
- в лексикографическом порядке
- в порядке убывания/возрастания долга
- по дате последнего звонка
- Вывести на экран статистику звонков:
- количество звонков для каждого статуса дозвона
- средняя длительность звонка
- общая длительность всех звонков
-
Написать программу, моделирующую работу анонимного форума. Анонимный форум представляет из себя набор тематических обсуждений и сообщений.
Каждое сообщение в обсуждении содержит временную отметку, имя пользователя (возможно пустое), текст.
Каждое обсуждение содержит название, список тэгов, дату создания и список оставленных в нём сообщений.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Создать тематическое обсуждение.
- Отобразить список обсуждений, отсортированный на выбор пользователя:
- по дате создания
- по дате последнего сообщения
- по количеству уникальных имён пользователей
- Просмотреть список сообщений в обсуждении, упорядоченный по дате и времени добавления сообщения.
- Добавить новое сообщение в обсуждение.
- Поиск обсуждений по тэгу, выбранному пользователем из списках всех имеющихся тэгов
- Цензура: заменить во всех названиях обсуждения, именах пользователя и текстах сообщений введённый пользователем текст на звёздочку. Вывести пользователю количество совершённых замен.
-
Написать программу, моделирующую работу агрегатора вакансий.
Сведения о каждой вакансии: название должности, описание, требования к образованию, оклад, город, возможность работать удалённо, работодатель, время открытия вакансии.
Сведения о каждой компании: название, описание, контакты.
Начальное формирование данных осуществляется из файла (или файлов). С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить работодателя. При удалении работодателя все его вакансии должны также удаляться
- Обновить информацию о работодателе.
- Добавить/удалить вакансию у конкретного работодателя.
- Обновить информацию о вакансии.
- Поиск работы по одному или нескольким критериям:
- по ключевым словам,
- по нижней границе оклада,
- по городу,
- по возможности работать удалённо.
- Статистика:
- общее количество компаний и общее количество вакансий,
- количество компаний, у которых есть вакансии с возможностью работать удалённо,
- количество уникальных должностей,
- средний оклад по каждому городу.
-
Написать программу, моделирующую работу кинотеки.
Сведения о каждом фильме: название, год, жанр, длительность, средняя оценка, краткое описание. Средняя оценка вычисляется на основании оценок к данному фильму, отзывы без оценок в вычислении средней оценки не учитываются.
Сведения о каждом отзыве: имя пользователя, дата, оценка (необязательно), текст отзыва.
Начальное формирование данных осуществляется из файла (или файлов).
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить фильм.
- Обновить информацию о фильме.
- Вывести список фильмов, упорядоченный:
- по названию;
- по средней оценке;
- по количеству отзывов
- по дате последнего отзыва.
- Вывести все отзывы на данный фильм, сгруппировав их по оценке и упорядочив по убыванию даты добавления.
- Добавить/редактировать/удалить отзыв на фильм и пересчитать среднюю оценку.
- Вывести список из трёх самых продуктивных пользователей (можно считать имя пользователя его уникальным идентификатором) и количество их отзывов. Учитываться должны только отзывы, содержащие не менее 50 символов.
- Составить статистику кинотеки по месяцам. Для каждого месяца, по которому есть информация, указать:
- количество отзывов;
- количество отрецензированных в этом месяце фильмов;
- количество уникальных пользователей, которые в этом месяце оценивали или рецензировали фильмы.
-
Написать программу, моделирующую информационную футбольную базу.
Сведения о каждом футболисте: имя, фамилия, дата рождения, текущий клуб (возможно, «без клуба»), история контрактов с клубами (возможно, пустая), статистика забитых голов.
Сведения о каждом клубе: название, дата основания, статус клуба (действующий или не действующий), очки в чемпионате.
Начальное формирование данных осуществляется из файла (или файлов). Запрещается считать название клуба его уникальным идентификатором и хранить историю контрактов футболистов исключительно названием. Разрешается считать начальный файл корректным и при инициализации не проводить дополнительной проверки на существование клубов из истории контрактов в списке клубов.
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить футболиста.
- Обновить информацию о футболисте (имя, фамилия, дата рождения, статистика голов).
- Обновить текущий клуб (предыдущий текущий клуб должен добавиться последним пунктом в историю контрактов).
- Добавить новый клуб.
- Обновить основную информацию клуба (название, дата основания, очки в чемпионате).
- Закрыть клуб: изменить статус клуба на «не действующий» и для всех футболистов с соответствующим текущим клубом сменить текущий клуб на «без клуба», перенеся запись о закрывшемся клубе в историю контрактов.
- Вывести список футболистов, упорядоченный по фамилии.
- Вывести историю контрактов футболиста с указанием статуса каждого клуба.
- Вывести список действующих клубов, упорядоченный по дате основания.
- Для заданного клуба вывести список всех футболистов, которые сейчас свободны, но раньше играли в данном клубе.
-
Написать программу, моделирующую календарь событий с темами.
Сведения о каждом событии: название, описание, дата и время начала, дата и время окончания.
Сведения о каждой теме: название, описание темы, приоритет, дата последнего обновления, список событий.
Начальное формирование данных осуществляется из файла (или файлов). Дата последнего обновления темы должна обязательно обновляться при создании темы, её редактировании и удалении дубликата. Обновление даты при действиях с принадлежащими теме событиями - желательно. Должна существовать тема «без темы» с минимальным приоритетом, которую пользователю запрещено редактировать и удалять.
С помощью меню необходимо обеспечить следующие функции:
- Добавить/удалить тему. При удалении все принадлежащие теме события должны перейти в тему «без темы».
- Обновить информацию о теме.
- Добавить/удалить событие в тему.
- Обновить информацию о событии.
- Вывести список всех тем, упорядоченный по убыванию приоритета.
- Для выбранной пользователем темы вывести список всех событий в теме, упорядоченный по убыванию времени окончания и возрастанию времени начала.
- Вывести на экран список событий, которые завершаются в заданную пользователем дату.
- Объединить две темы. Для выбранных пользователем основной темы и темы-дубликата приложение должно перенести все события из дубликата в основную тему. Если у основной темы отсутствовало описание, приложение должно запросить у пользователя, сохранить ли описание темы-дубликата. Приоритет основной темы должен принять максимальное значение из двух вариантов.