Классификация характеров клиентов



Характер Категория характера
Пакостный -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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!