Классификация характеров клиентов
Характер | Категория характера |
Пакостный | -1 Плохой |
Отвратительный | -1 Плохой |
Твердый | 0 Умеренный |
Нежный | 0 Умеренный |
Зловредный | 0 Умеренный |
Хороший | +1 Подходящий |
Ласковый | +1 Подходящий |
Таблица 3
Классификация клиентов по величине их месячного дохода
Доход | Категория клиента по величине дохода |
менее 200 | -2 Нищий |
200-500 | -1 Бедный |
501-1000 | 0 Средний |
1001-2000 | +1 Богатый |
более 2000 | +2 Жадный |
Таблица 4
Классификация клиентов по цвету кожи
Цвет кожи | Категория цвета кожи |
Белый | 0 Белый |
Черный | 1 Черный |
Желтый | 2 Цветной |
Коричневый | 2 Цветной |
Задание
1. Внимательно изучите листинги файлов проекта MAgency, которые приведены ниже. Каркас приложения – консольное приложение с поддержкой MFC.
2. Наберите текст приведенной программы или разработайте свой вариант. Файл с исходными данными вы можете создать элементарно путем копирования содержимого табл.1 в блокнот или в другой текстовый редактор, в том числе и в редактор MVS. Приветствуется увеличение объема табл.1 в любых направлениях: как увеличение числа строк, так и увеличение числа столбцов. Категорически возбраняется уменьшать размеры таблицы. Таблицы 2-4, как вы понимаете, предназначены для другой цели, а именно для формулировки запросов к программе и реализации алгоритмов удовлетворения запросов придирчивых клиентов.
|
|
3. Разработайте свое приложение в соответствии с вариантом, ниспосланным вам судьбой. Приложение должно выводить результат в понятной даже клиенту-дебилу форме, т.е. со всеми необходимыми сопроводительными и поясняющими текстами.
4. Выполните отладку приложения и сдайте его преподавателю, предварительно тестировав его на ввод корректных и не очень данных.
Таблица 5
Варианты заданий
№ комп. | Задание |
1 | Найти все имеющиеся пары клиентов противоположного пола, имена которых начинаются с одинаковых символов и чей совокупный доход не меньше заданного пользователем значения |
2 | Найти пару клиентов противоположного пола, совокупный доход которых максимален и у них одинаковая категория характера |
3 | Найти все имеющиеся пары клиентов противоположного пола, которые имеют характер одной и той же категории |
4 | Найти пару клиентов одного пола, совокупный доход которых максимален и которые относятся к одной и той же категории цвета кожи. Поиск выполнять отдельно для клиентов обоих полов; сие значит, что вы обязаны найти двух особей мужеского рода и двух особей – женского. |
5 | Найти все имеющиеся пары клиентов одного пола, которые имеют характер одной и той же категории. Поиск выполнять отдельно для клиентов обоих полов. |
6 | Найти пару разнополых клиентов с диаметрально противоположными категориями характера, но с одинаковой категорией цвета кожи. |
7 | Сформировать пару из разнополых клиентов с заданными для каждого из них доходами (в числовой форме) при условии, что клиенты имеют одинаковую (заданную) категорию характера |
8 | Заданному (по имени) клиенту подобрать всех подходящих клиентов противоположного пола, вес которых и рост находится в заданных в процентном отношении пределах относительно его собственных. Разжевываю: ежели, например, рост клиента равен 150см и задан процент 20, то рост подходящих клиентов должен находиться в диапазоне 120..180см. |
9 | Найти две пары клиентов противоположного пола, которые имеют диаметрально противоположный рост, т.е. «самый высокий мужчина + самая невысокая женщина» и «самый короткий мужчина + самая высокая женщина» |
10 | Сформировать все возможные пары противоположного пола с одинаковой категорией цвета кожи и одинаковым числом разводов |
11 | Найти пару противоположного пола, у которых минимальное число разводов и одинаковая категория характера |
12 | Сформировать все возможные пары из разнополых клиентов с заданными для каждого из них доходами (в числовой форме в виде интервала) при условии, что клиенты имеют одинаковое число разводов |
Листинг файла MAgency.cpp (с главной функцией)
|
|
|
|
Это приложение запрашивает у пользователя имя файла с данными по клиентам, читает записанные в нем данные в массив структур, выводит считанные данные на экран и далее отыскивает в таблице самого бедного жениха, т.е. особь мужского рода, и самую богатую невесту – женщину. Вам остается только самая малость: добавить в текст программы решение своей задачи.
| |||
| |||
|
Листинг файла Lib.h
|
Листинг файла Lib.cpp
| |||
| |||
| |||
| |||
| |||
|
Задача «куча камней»
Любая найденная в программе ошибка – не последняя
Закон Мерфи
Цель работы – попробовать реализовать свой алгоритм решения известной «задачи о камнях» как пример оптимизационной задачи (4 час.).
Постановка задачи.
Из Википедии: Полный перебор (или метод «грубой силы», англ. brute force) относится к классу методов поиска решения исчерпыванием всевозможных вариантов. Сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий. (Другими словами, если вы хотите получать зарплату еще при жизни, то, возможно, вам следует поискать более «быстрое» решение?)
|
|
Возьмем в качестве иллюстрации известную «олимпиадную» задачу о куче камней, которая заключается в следующем. Имеется произвольное число камней N>1, вес каждого из которых известен и равен Wi, i=1..N, причем 0<Wi <100000, N и W – целые числа. Требуется распределить камни на две кучи таким образом, чтобы разность весов этих двух куч была минимальной. Например, пусть есть N=5 камней с весами: 5, 8, 13, 27, 14. Очевидно, что в одну кучу надо поместить камни 5 и 27 (вес 32), а в другую – 8, 13 и 14 (вес 35). Тогда разность весов будет минимальна и равна 3 (по абсолютной величине).
Надо написать (точнее, разработать) алгоритм и программу, которая бы решала поставленную задачу. Учтите, что программа должна запросить у пользователя N и Wi , или, еще лучше, сгенерировать их как псевдослучайные числа из заданного диапазона.
Задание. Разработайте алгоритм и программу в соответствии с приведенными ниже (очень ценными) методическими указаниями, выполните отладку и тестирование разработанной программы. Используйте функции, чтобы структурировать программу и повысить ее наглядность и надежность. Разработайте тесты для контроля корректности программы и докажите преподавателю ее работоспособность.
Оживите интерфейс своего приложения с помощью класса CConsole (файлы Console.h, Console.cpp в каталоге Labprakt\OP\), информацию о котором можно найти в сценарии л.р. «Рамка» (файл Labprakt\OP\OP_Lab_16_17.doc).
Методические указания.
Шаг 1. Генерация каркаса приложения.
С помощью мастера ИС MVS создайте консольное приложение и включите в него поддержку библиотеки MFC (как и в предыдущих работах). В приведенных ниже листингах предполагается, что проекту присвоено имя StonesHeap, но вы вправе присвоить ему другое имя, например, Lab4, и тогда в вашем проекте у вас будет имя Lab4 там, где в приведенных листингах присутствует идентификатор StonesHeap.
Шаг 2. Добавление заголовочных файлов.
В начало файла StonesHeap.cpp (а у вас будет, возможно, имя файла Lab4.cpp), содержащего функцию _tmain(), добавьте директивы include для подключения необходимых заголовочных файлов (добавления выделены курсивом):
Заголовочный файл Limits.h содержит, в частности, предельные значения для интегральных типов данных и их рекомендуется использовать вместо непосредственно заданных «своих» констант.
Шаг 3. Примитивнейшая версия программы.
Автор этой работы не смог придумать более совершенную программу, чем в приведенном ниже листинге. Помимо отсутствия достоинств, главными ее недостатками являются:
ü возможность нахождения решения задачи только для такого случая, когда исходную кучу достаточно разбить на две такие, одна из которых содержит всего один камень, а в другой, соответственно, находятся все остальные;
ü в программе не предусмотрен ввод числа камней в куче и их весов, так как автору было лень в процессе отладки программы всякий раз их вводить;
ü в программе использовано так называемое «магическое» число 5, что в процессе дальнейшего развития программы сулит неприятности. Очевидно, что максимально возможное число камней в куче (20) лучше бы сделать константой. Если вы по натуре человек бесстрашный, то можете вместо 20 использовать 200, 2000, 20000 и т.д;
ü программу надо повторно запускать для того, чтобы решать задачу с другими исходными данными, что, конечно, неудобно, т.е. «по-дебильному».
Вы, естественно, не можете принять такую примитивную программулину и с легкостью разработаете совершенную, лишенную перечисленных недостатков.
Русифицировать (консольное) приложение можно и путем вызова функции setlocale(LC_ALL,"rus");, которая, упрощенно говоря, устанавливает русский язык в качестве языка ввода/вывода. Эту функцию достаточно вызвать один раз при запуске программы на выполнение – проще всего в начале функции main().
Шаг 4. Вперед на мины! Для проверки корректности алгоритма и собственно программы рекомендуется заранее придумать несколько тестов с известными решениями. В частности, некоторые тестовые задания приведены в этой табл..
Таблица
Дата добавления: 2018-02-18; просмотров: 522; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!