Технология разработки программных средств

 

Содержание


Введение

1. Теоретическая часть. Характеристика этапов разработки программных средств

Спецификация

Разработка алгоритма

Кодирование

Отладка и тестирование

Создание справочной системы

Создание установочного диска

2. Математическая часть

3. Практическая часть

Назначение программы

Язык программирования

Технические требования

Модульная схема

Структура программы

Руководство пользователя

Контрольный пример

Заключение

Список использованных источников

Приложение. Листинг программы

Введение


Программы небольшого и среднего размера (несколько тысяч строк) создаются, как правила в несколько этапов. Сначала необходимо точно определить требования, предъявляемые заказчиком к программному продукту. В дальнейшем проводится анализ предметной области и составляется с помощью экспертов в этой области ее формальная модель. На основе результатов моделирования составляется и утверждается техническое задание, календарный план работ, где указываются все сроки, конкретные исполнители и выполняемые работы. На следующем этапе выбирается методология разработки ПО, технология программирования, система программирования и выполняются работы по созданию программного продукта. Первая версия разработанной программы обязательно должна быть подвергнута тестированию, как со стороны программистов, так и со стороны заказчика на предмет выявления ошибок. После устранения всех обнаруженных ошибок начинается этап внедрения, но на этот этап может потребоваться даже больше времени, чем на разработку программы. Этот этап обычно заканчивается подписанием акта приемки работ по созданию программы. Немаловажным этапом является этап обучения сотрудников организации заказчика приемам работы с внедренной программой. Последним этапом является этап сопровождения программы. На этом этапе создатели программы гарантируют на определенный период бесплатное разрешение вопросов, возникающих при эксплуатации программы, а также информируют заказчика о новых усовершенствованных версиях программы.

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

В последней, практической части работы, будет разработана программа, реализующая несколько операций над нечеткими множествами, приведено ее описание: структура программы, технические условия, инструкция пользователя и результаты контрольных испытаний.

1. Теоретическая часть. Характеристика этапов разработки программных средств


Программа, работающая на компьютере, нередко отождествляется с самим компьютером, т.к. человек, использующий программу, "вводит в компьютер" исходные данные, как правило, при помощи клавиатуры, а компьютер "выдает результат" на экран, на принтер или в файл. На самом деле, преобразование исходных данных в результат выполняет процессор компьютера. Процессор преобразует исходные данные в результат по определенному алгоритму, который, будучи записан на специальном языке, называется программой. Таким образом, чтобы компьютер выполнил некоторую работу, необходимо разработать последовательность команд, обеспечивающую выполнение этой работы, или, как говорят, написать программу.

Этапы разработки программы

Выражение "написать программу" отражает только один из этапов создания компьютерной программы, когда разработчик программы (программист) действительно пишет команды (инструкции) на бумаге или при помощи текстового редактора.

Программирование - это процесс создания (разработки) программы, который может быть представлен последовательностью следующих шагов:

. Спецификация (определение, формулирование требований к программе).

. Разработка алгоритма.

. Кодирование (запись алгоритма на языке программирования).

. Отладка.

. Тестирование.

. Создание справочной системы.

7. Создание установочного диска (CD-ROM). [2]

Спецификация


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

Процесс разработки начинается с создания концептуального описания будущего продукта, задающего "по-крупному" его образ, видение (этот документ так и называется "vision statement") в контексте требований рынка. Главным действующим лицом на этом этапе является "менеджер по продукту" (product manager) - специалист-маркетолог, знающий ситуацию на рынке и запросы потенциальных пользователей. Его задача - донести до менеджеров по разработке ПО потребительские свойства будущего продукта, т.е. указать, какие цели и требования пользователей необходимо удовлетворить, какие для этого заложить функциональные возможности (product features) и в каком порядке в соответствии с существующими приоритетами следует их ранжировать.

На основании vision statement менеджеры по разработке составляют функциональную спецификацию. Здесь функциональные особенности будущего продукта прописываются все еще с точки зрения будущего пользователя, правда, с большей степенью подробности, глубины и формализованное. Затрагиваются вопросы архитектуры проекта, определяются основные компоненты и взаимосвязи между ними. Принципиально то, что эта начальная спецификация вовсе не должна фиксировать всю функциональность будущего продукта, как и детали каждой из уже определенных функций. В течение последующих этапов работы эта спецификация подвергнется ревизии по мере того, как разработчики будут больше узнавать о самом продукте, обретающем материальное воплощение и в связи с этим способность "сообщать" о целесообразности наличия (формы) той или иной функции.

На изменение функциональности будут влиять и внешние факторы, в том числе те реальные и потенциальные рыночные продукты, которые так или иначе конкурируют с разрабатываемым ПО. Наконец, функциональность зависит и от таких прозаических факторов, как недостаток ресурсов, отставание от графика или просто изъяны в реализации, которые невозможно или некогда исправить. В этом смысле корпоративная культура компании Microsoft не предполагает каких-либо комплексов: здесь без колебаний "режут по живому", отдавая приоритет своевременности выброса продукта на рынок. Статистические данные по основным продуктам Microsoft показывают, что в среднем около 25% содержащихся в исходной спецификации (разрекламированных, а потому ожидаемых потребителем) функциональных особенностей исчезают ко времени выпуска продукта; если же считать и то, что привнесено, то конечная функциональность будет отличаться от исходной на 30% и более.

На основе функциональной спецификации менеджеры по разработке, постоянно консультируясь с проектировщиками, начинают на модульной основе создавать горизонтальную архитектуру продукта. Главное, что на этой стадии все основные функции ПО разбиваются на несколько групп (обычно три-четыре группы). Соответственно, формируется столько же подпроектов, работа над которыми будет вестись последовательно. Разбиение производится на основе уже имеющейся классификации функций по степени важности. Наиболее важные (1/3 от общего количества, если групп всего 3) попадают в первый подпроект; другие, менее приоритетные, реализуются в рамках второго подпроекта, и наконец, прочие, наименее значимые функции выполняются в последнем подпроекте. Каждый подпроект заканчивается выпуском промежуточной "контрольной" версии продукта (milestone release).

программа язык алгоритм спецификация

Определенная таким образом архитектура проекта отображается на организационную структуру: для реализации отдельных Функций в рамках одного подпроекта назначаются небольшие команды (small feature teams), которые и работают параллельно и максимально автономно. Для них определяется график работы и выделяются необходимые ресурсы, за рамки которых выходить не рекомендуется. Причем большое значение на рассматриваемом этапе придается сознательному принятию этих рамок самими разработчиками, которые имеют возможность детально проанализировать назначенную им задачу. В результате график, планируемый с точностью до дня, часто оказывается чересчур оптимистичным.

Следует обратить внимание на весьма упрощенный подход к разработке архитектуры программного продукта: по сути, само понятие архитектуры низводится до вспомогательного инструментария, подчиненного интересам организационного планирования и управления. Между тем, с точки зрения современных представлений хорошо структурированная архитектура продукта есть необходимое условие его успешной разработки и - что особенно важно! - дальнейшего развития. Именно поэтому виднейшие авторитеты в области Software Engineering, например Гради Буч, рассматривают архитектуру, определяющую логическую и физическую структуры программной системы, как основу надлежащих стратегических и тактических проектных решений в целях построения качественного продукта.

Известно, что многие продукты компании Microsoft, созданные на шаткой основе заведомо неполной и постоянно изменяемой спецификации, во многом ущербны. Именно в этом разгадка удивительных на первый взгляд отличий последовательных версий одного и того же продукта, не говоря уже о продуктах разных, но в то же время преемственных идеологически. Яркий тому пример - реализация механизмов DLE - OLE - ActiveX. Консервативная "несущая конструкция", каковой является архитектура ПО, гнется и ломается под грузом малоуправляемых мутаций и деформаций. В результате - масса проблем при реализации такого желательного принципа разработки, как повторное использование кода: достаточно сказать, что 50 % кода изменяется каждые 18 месяцев! [6]


Разработка алгоритма


На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для получения результата. Если задача может быть решена несколькими способами и, следовательно, возможны различные варианты алгоритма решения, то программист, используя некоторый критерий, например, скорость решения алгоритма, выбирает наиболее подходящее решение. Результатом этапа разработки алгоритма является подробное словесное описание алгоритма или его блок-схема.

После постановки задачи и построения математической модели приступают к разработке алгоритма. На этом этапе устанавливается необходимая логическая последовательность выполнения с учетом выбранного численного метода решений и других действий, с помощью которых получаются результаты.

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

Разрабатываемые алгоритмы должны обладать рядом свойств, основными из которых являются:

·массовость, позволяющая быть алгоритму работоспособным для множества исходных данных;

·результативность, определяющая получение результата после конечного числа шагов или сообщение о невозможности решения;

·эффективность, определяющая окончание работы алгоритма за конечное время или конечное количество шагов. [3]

Условно все алгоритмы подразделяются по характеру выполняемых операций, используемой структуре управления ходом вычислительного процесса и др. По характеру выполняемых операций алгоритмы могут быть численными, логическими, численно-логическими (смешанными). По используемым структурам управления ходом вычислительного процесса алгоритмы подразделяются на алгоритмы линейной структуры, разветвляющейся структуры, циклической структуры, вложенной циклической и смешанной структуры.

Оценивая алгоритм по числу выполняемых действий, необходимых для получения результата, можно получить сведения о будущем процессе вычисления. Такая оценка алгоритма характеризует его временную сложность. Емкостная сложность алгоритма определяет объем памяти, требуемый для его реализации.

Одновременно с разработкой алгоритма должна быть определена структура исходной, промежуточной и выходной информации для данной задачи, что позволяет в дальнейшем выбрать язык программирования.

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

При словесном способе записи алгоритм представляет собой обычную математическую запись выражений, зависимостей, необходимых пояснений к ним и указаний последовательности выполняемых действий. Словесный способ алгоритмов не требует дополнительной подготовки, однако он имеет ряд недостатков. Пояснения на естественном языке бывают неоднозначны и противоречивы. Запись алгоритма для сложных задач громоздка и ненаглядна, она плохо формализована и не может непосредственно вводиться в ЭВМ.

При граф-схемном способе записи алгоритм представляется в виде символов-блоков и связей между ними. Запись алгоритма должна выполняться в соответствии с государственными стандартами.

Граф-схемный способ компактен, формализован, имеет хорошую наглядность используемых структур и допускает различные степени детализации алгоритма.

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

Отсутствие строгих синтаксических правил для записи команд облегчает запись алгоритма на стадии проектирования. В псевдокоде имеются некоторые конструкции, присущие формальным языкам, что облегчает переход к этим языкам.

Способ записи на языке программирования позволяет записать алгоритм, который может непосредственно обрабатываться ЭВМ. Каждый язык программирования имеет свой набор символов, правила написания языковых конструкций (синтаксис) и смысловые толкования этих конструкций (семантику). Алгоритм, написанный на языках программирования, является программой, состоящей из операторов. Оператор может описывать действия, задавать значения или их тип. [3]

Кодирование


После того как определены требования к программе и составлен алгоритм решения, алгоритм записывается на выбранном языке программирования. В результате получается исходная программа.

Программа представляет собой последовательность операторов языка программирования, записанных в соответствии со схемой алгоритма.

Разработка программы начинается с выбора языка программирования, который определяет типы и структуры обрабатываемых данных, набор функциональных операторов и структуру программы. Трудность перехода от алгоритма к программе заключается в том, что алгоритм может представляться с разными степенями детализации. Отдельный шаг алгоритма может потребовать записи нескольких операторов или подпрограммы. Приступая к разработке программы, необходимо определить имена и типы переменных, размеры массивов, количество и виды подпрограмм.

Запись программы осуществляется в соответствии с синтаксисом языка. Для наглядности следует записывать по одному оператору на строке, вложенные операторы (особенно в условном операторе или операторе цикла) сдвигать на 2-3 позиции вправо. На 5-10 строк текста программы желательно записывать комментарий, что делает программу самодокументируемой; при этом можно обойтись без дополнительного описания.

Качество разрабатываемых программ определяется рядом характеристик, описывающих требуемые свойства. В зависимости от назначения программы требования, предъявляемые к характеристикам ее, могут меняться. К наиболее важным характеристикам, определяющим свойства программ, относятся надежность программ, простота пользования, мобильность, удобство эксплуатации, эффективность, совместимость, испытуемость, стоимость, полная документируемость.

Под надежностью программы понимается свойство выдавать правильные результаты при всех возможных входных данных, если эти данные являются допустимыми. Важно, чтобы возможные ошибки не вели к фатальным последствиям и могли быть быстро исправлены. Надежность оценивается вероятностью безошибочного функционирования программы в определенный период времени.

Широкое проникновение ПЭВМ в практику повседневной жизни выдвигает простоту пользования программ в число важнейших характеристик. Эта характеристика определяет наличие четко определенных условий и области применения данной программы с ясно оговоренными ограничениями и пояснениями, облегчающими и ускоряющими использование программы, но исключающими неправильное ее применение. В пояснениях должны быть четко оговорены входные и выходные данные, форматы ввода данных. Программы, обладающие этой характеристикой, облегчают взаимодействие пользователя с ЭВМ, расширяют сферу применения и предотвращают неправильное ее применение.

Тесно связаны такие характеристики, как мобильность программы и удобство ее эксплуатации. Под мобильностью понимается свойство программы, позволяющее переносить ее из одной среды функционирования в другую с минимальными затратами. Мобильность программы достигается за счет использования языков программирования высокого уровня и мобильных операционных систем, а также ориентации на распространенные технические средства. Выполнение требований мобильности приводит к снижению экономичности программы, которая характеризуется затратами машинного времени и памяти.

Удобство эксплуатации означает, прежде всего, возможность дальнейшего улучшения программы без больших переделок, с тем, чтобы эксплуатация программы осуществлялась с минимальными затратами.

Эффективность программы зависит от ее назначения, конфигурации технических средств и системы программного обеспечения ЭВМ. С достаточной степенью приближения за эффективность можно принять характеристику программы, значение которой прямо пропорционально быстродействию и обратно пропорционально объему используемых ресурсов технических средств, включающих в себя оперативную память, внешние запоминающие устройства, количество и типы внешних устройств и т.п.

Важной характеристикой является совместимость, под которой понимается пригодность программ к объединению для решения более сложных задач и создания пакетов прикладных программ (ППП). При этом должно быть соблюдено соответствие принятым стандартам по кодам символов, форматам и структурам данных, четкое описание входных и выходных данных с указанием их функционального назначения и т.д.

Характеристика, связанная с испытуемостью, предполагает наличие возможности достаточно просто оценивать правильность функционирования программы в условиях конкретной среды (технические и программные средства, реальные исходные данные).

Улучшение перечисленных характеристик сказывается на стоимости программы. В связи с этим должен достигаться компромисс между степенью улучшения интересующей нас характеристики и увеличением стоимости программы.

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

Разработка программ регламентируется Единой системой программной документации (ЕСПД). Введение стандартов в процесс создания программ упрощает процесс разработки, облегчает чтение и понимание их пользователями, упрощает пользование и эксплуатацию, улучшает испытуемость, мобильность, документируемость.

ЕСПД представляет собой комплекс взаимосвязанных государственных стандартов, определяющих общие положения, виды программ и программных документов, правила разработки, оформление программ, распространение документации, сопровождение программ независимо от назначения и области использования.

Рассмотрим какой-нибудь простой пример, например всем знакомый мотоцикл. С помощью каких инструментов он сделан? Он сделан на заводе с помощью станков и приспособлений - они и являются инструментами для создания мотоцикла.

А как сделаны станки и приспособления? Они сделаны на другом заводе - с помощью других станков и приспособлений. А как сделаны эти станки и приспособления? У каждого станка есть свой предок - другой станок, сделанный до него и, как правило, более примитивный. Если проследить историю появления на свет любого станка, мы дойдем до простейших инструментов - молота и наковальни в какой-нибудь средневековой кузнице. А теперь заметьте, что и нам иногда приходится обращаться к таким "примитивным" инструментам, как молоток и напильник, чтобы обслужить мотоцикл в случае поломки.

Вернемся к программам. Инструментами программиста являются тоже программы. Именно с помощью программ создают новые программы. А как создавали эти инструментальные программы? Ответ очевиден - с помощью других инструментальных программ, хотя и более примитивных. И так далее. Прослеживая историю создания одних программ с помощью других, мы непременно дойдем до "молота и наковальни" - до того момента, когда никаких программ в распоряжении программистов не было, а имели они дело непосредственно с процессором, понимающим только определенный числовой код. Этот код называется машинным кодом. Каждый процессор понимает только свой собственный машинный код. Совокупность кодов, которые понимает и исполняет процессор, называется его системой команд. В системе команд процессоров семейства х86 (на базе которых собраны компьютеры IBM PC) порядка тысячи всевозможных команд. Из этих команд и состоят компьютерные программы.

А инструменты программирования - это на самом деле специальные программы, которые читают то, что написал программист в удобном ему виде, и переводят его записи в тот самый машинный код, необходимый процессору. Но иногда программисту все-таки приходится обращаться к "молотку и напильнику" и какую-то часть программы записывать в том самом машинном коде, понятном процессору. [1]


Отладка и тестирование


Отладка - это процесс поиска и устранения ошибок. Ошибки в программе разделяют на две группы: синтаксические (ошибки в тексте) и алгоритмические. Синтаксические ошибки - наиболее легко устраняемые. Алгоритмические ошибки обнаружить труднее. Этап отладки можно считать законченным, если программа правильно работает на одном-двух наборах входных данных.

Этап тестирования особенно важен, если вы предполагаете, что вашей программой будут пользоваться другие. На этом этапе следует проверить, как ведет себя программа на как можно большем количестве входных наборов данных, в том числе и на заведомо неверных.

В целом разработчики различают дефекты программного обеспечения и сбои. В случае сбоя программа ведет себя не так, как ожидает пользователь. Дефект - это ошибка/неточность, которая может быть (а может и не быть) следствием сбоя.

Общепринятая практика состоит в том, что после завершения продукта и до передачи его заказчику независимой группой тестировщиков проводится тестирование ПО. Эта практика часто выражается в виде отдельной фазы тестирования (в общем цикле разработки ПО), которая часто используется для компенсирования задержек, возникающих на предыдущих стадиях разработки. Другая практика состоит в том, что тестирование начинается вместе с началом проекта и продолжается параллельно созданию продукта до завершения проекта. Второй путь обычно требует больших трудозатрат, но качество тестирования при этом будет выше.

Уровни тестирования:

·модульное тестирование. Тестируется минимально возможный для тестирования компонент, например отдельный класс или функция;

·интеграционное тестирование. Проверяется, есть ли какие-либо проблемы в интерфейсах и взаимодействии между интегрируемыми компонентами, например, не передается информация, передается некорректная информация;

·системное тестирование.

Тестируется интегрированная система на ее соответствие исходным требованиям:

·альфа-тестирование - имитация реальной работы с системой штатными разработчиками либо реальная работа с системой потенциальными пользователями/заказчиком на стороне разработчика. Часто альфа-тестирование применяется для законченного продукта в качестве внутреннего приемочного тестирования.

Иногда альфа тестирование выполняется под отладчиком или с использованием окружения, которое помогает быстро выявлять найденные ошибки. Обнаруженные ошибки могут быть переданы тестировщикам для дополнительного исследования в окружении, подобном тому, в котором будет использоваться ПО;

·бета-тестирование - в некоторых случаях выполняется распространение версии с ограничениями (по функциональности или времени работы) для некоторой группы лиц с тем, чтобы убедиться, что продукт содержит достаточно мало ошибок. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей. [2]

Выполнение программы с целью обнаружения ошибок называется тестированием. Виды ошибок и способы их обнаружения приведены в табл. 1.


Виды программных ошибок и способы их обнаружения


Эффективность контроля 1-го вида зависит и от языка, и от компилятора. Контроль 2-го вида осуществляется с помощью исключений - Exceptions и весьма полезен для проверки правдоподобности промежуточных результатов. Тест - это набор контрольных входных данных совместно с ожидаемыми результатами. В число входных данных время зависимых программ входят события и временные параметры. Ключевой вопрос - полнота тестирования: какое количество каких тестов гарантирует, возможно, более полную проверку программы? Исчерпывающая проверка на всем множестве входных данных недостижима. Пример: программа, вычисляющая функцию двух переменных: Y=f (X, Z). Если X, Y, Z - real, то полное число тестов (232) 2 = 264×1031 Если на каждый тест тратить 1 мс, то 264 мс = 800 млн. лет. Следовательно:

·в любой нетривиальной программе на любой стадии ее готовности содержатся необнаруженные ошибки;

·тестирование - технико-экономическая проблема, основанная на компромиссе время - полнота. Поэтому нужно стремиться к возможно меньшему количеству хороших тестов с желательными свойствами.

Детективностъ: тест должен с большой вероятностью обнаруживать возможные ошибки

Покрывающая способность: один тест должен выявлять как можно больше ошибок.

Воспроизводимость: ошибка должна выявляться независимо от изменяющихся условий (например, от временных соотношений) - это труднодостижимо для времязависимых программ, результаты которых часто невоспроизводимы.

Только на основании выбранного критерия можно определить тот момент времени, когда конечное множество тестов окажется достаточным для проверки программы с некоторой полнотой (степень полноты, впрочем, определяется экспериментально). Используется два вида критериев (табл.2):

·функциональные тесты составляются исходя из спецификации программы;

·структурные тесты составляются исходя из текста программы.


Виды критериев и их функциональность


На рис.1, а видно отличие тестирования команд (достаточен один тест) от С1 (необходимы два теста как минимум). Рисунок 1, б иллюстрирует различие С1 (достаточно двух тестов, покрывающих пути 1, 4 или 2,3) от С2 (необходимо четыре теста для всех четырех путей). С2 недостижим в реальных программах из-за их цикличности, поэтому ограничиваются тремя путями для каждого цикла: 0, 1 и N повторений цикла.

Остаются проблемы назначения классов входных/выходных данных для функционального тестирования и проектирования тестов для структурного тестирования. Классы, как правило, назначаются исходя из семантики решаемой задачи. [2]


Траектории вычислений при структурном тестировании


Создание справочной системы


Если разработчик предполагает, что программой будут пользоваться другие, то он обязательно должен создать справочную систему и обеспечить пользователю удобный доступ к справочной информации во время работы с программой. В современных программах справочная информация представляется в форме СНМ - или HLP-файлов. Помимо справочной информации, доступ к которой осуществляется из программы во время ее работы, в состав справочной системы включают инструкцию по установке (инсталляции) программы, которую оформляют в виде Readme-файла в одном из форматов: TXT, DOC или НТМ.


Создание установочного диска


Установочный диск или CD-ROM создаются для того, чтобы пользователь мог самостоятельно, без помощи разработчика, установить программу на свой компьютер. Обычно помимо самой программы на установочном диске находятся файлы справочной информации и инструкция по установке программы (Readme-файл). Следует понимать, что современные программы, в том числе разработанные в Borland C++, в большинстве случаев (за исключением самых простых программ) не могут быть установлены на компьютер пользователя путем простого копирования, так как для своей работы требуют специальных библиотек и компонентов, которых может и не быть у конкретного пользователя. Поэтому установку программы на компьютер пользователя должна выполнять специальная программа, которая помещается на установочный диск. Как правило, установочная программа создает отдельную папку для устанавливаемой программы, копирует в нее необходимые файлы и, если надо, выполняет настройку операционной системы путем внесения дополнений и изменений в реестр. [2]


2. Математическая часть


Традиционную теорию (обычных) множеств можно рассматривать как частный случай теории нечетких подмножеств (почему нужно говорить "нечеткое подмножество" а не "нечеткое множество", понятно хотя бы из того, что область определения нечеткого подмножества - всегда обычное, а не нечеткое множество). Важно, что здесь мы имеем новое и очень полезное для нас расширение традиционного понятия. И тем не менее, все то, что можно описать или объяснить с помощью теории нечетких подмножеств, рассматривают и без этой теории, используя другие понятия. Всегда можно зеленить одно математическое понятие другим. Но будет ли это новое понятие настолько же понятным, как и старое, и будет ли оно порождать свойства, которые с его помощью было бы легче обнаружить, доказать и использовать

Пусть Е есть множество, А - подмножество Е: А Ì Е.

Тот факт, что элемент х множества Е есть элемент подмножества А, или, как еще говорят, принадлежит А, обычно обозначают с помощью символа ÎÎ А

Для выражения этой принадлежности можно использовать и другое понятие - характеристическую функцию mА (х), значения которой указывают, является ли (да или нет) х элементом А:



Напомним хорошо известные свойства булевой бинарной алгебры. Пусть А - дополнение А относительно Е, т.е. такое подмножество Е, для которого АÇА=Æ, АÈА=Е. Если хÎА, то хÏА, и можно записать mА (х) = 1, mА (х) = 0.


Для двух данных подмножеств А и В можно рассмотреть пересечение А Ç В.

Имеем



Это позволяет нам записать


mАÇВ (х) = mА (х) * mВ (х)


где операция * определена таблицей на рис.2 и называется булевым произведением.

Таким же образом для двух подмножеств А и В определяют объединение или соединение



обладающее свойством


mАÈВ (х) = mА (х) mВ (х)


где операция (булева сумма) определена таблицей на рис.3.



Дадим строгое определение понятия, нечеткого подмножества, введенного Заде.

Пусть Е есть множество, счетное или нет, их - элемент Е. Тогда нечетким подмножеством А множества Е называется множество упорядоченных пар


{ (x|mA (x)) }, " x Î E


где mA (x) - степень принадлежности x в А. Таким образом, если mA (x) принимает свои значения во множестве М значений функции принадлежности или, короче, во множестве принадлежностей, то можно сказать, что х принимает значение в М посредством функции mA (x). Таким образом,


х М.


Эта функция также называется функцией принадлежности.

Поскольку в дальнейшем мы будем рассматривать булевы бинарные функции как частный случай таких функций принадлежности, в данной работе мы заменим приведенное выше определение на следующее. Пусть Е - множество, счетное или нет, и х - элемент Е. Тогда нечеткое подмножество А множества Е определяется как множество упорядоченных пар


{ (x, mA (x)) }, " x Î E


где mA (x) - характеристическая функция принадлежности, принимающая свои значения во вполне упорядоченном множестве М, которая указывает степень или уровень принадлежности элемента х подмножеству А. Множество М будет называться множеством принадлежностей.

Если М = {0, 1}, то "нечеткое подмножество" А будет рассматриваться как "ненечеткое" или просто "обычное" подмножество.

Таким образом, понятие нечеткого подмножества связано с понятием множества и позволяет изучать нестрого определенные понятия используя математические структуры.

Рассмотрим несколько примеров:

) нечеткое подмножество чисел х, приблизительно равных данному действительному числу n, где n Î R (R - множество действительных чисел);

) нечеткое подмножество целых чисел, очень близких к 0;

) пусть а - действительное число и х - небольшое положительное приращение а; тогда числа а + х образуют нечеткое подмножество во множестве действительных чисел;

) пусть Н - элемент решетки; элементы, ближайшие к Н, по отношению порядка образуют нечеткое подмножество в множестве всех элементов решетки.

Определим следующие операции.

Пусть Е - множество, М - множество принадлежностей, А и В - два нечетких подмножества Е.

. Включение.

Будем говорить, что множество А включено в В или А содержится в В, если "хÎЕ и mА (х) £mВ (х). Это обозначается следующим образом: АÌВ. Строгое включение соответствует случаю, когда все неравенства строгие, и обозначается АÌÌВ.

. Равенство.

Нечеткие подмножества А и В равны (обозначение: А=В), если "хÎЕ и mА (х) =mВ (х). Если найдется, по крайней мере, один элемент хÎЕ, что это равенство не выполняется, нечеткие подмножества А и В не равны.

. Дополнение.

Нечеткое подмножество называется дополнением нечеткого подмножества A, если "хÎЕ и (х) =1-mА (х).

. Пересечением нечетких подмножеств A и B называется нечеткое подмножество АÇВ, функция принадлежности которого определяется следующим образом: "хÎЕ, mАÇВ (х) =min (mА (х),mВ (х)).

. Объединением двух нечетких подмножеств A и B называется нечеткое подмножество АÈВ, функция принадлежности которого определяется следующим образом:


"хÎЕ, mАÈВ (х) =mах (mА (х),mВ (х)).


. Дизъюнктивной суммой нечетких подмножеств А и В называется нечеткое подмножество АÅВ, определяемое следующим образом:


АÅВ=.


. Разностью нечетких подмножеств А и В называется нечеткое подмножество А-В, определяемое следующим образом: А-В=.

. Алгебраическим произведением нечетких подмножеств A и B называется нечеткое подмножество А·В, функция принадлежности которого определяется следующим образом:


"хÎЕ, mА·В (х) =m А (х) ×m В (х).


. Алгебраической суммой двух нечетких подмножеств А и В называется нечеткое подмножество , функция принадлежности которого определяется следующим образом:


"хÎЕ, =m А (х) +m В (х) - m А (х) ×m В (х).


. Симметричная разность. По определению симметричная разность двух множеств А и В - это множество


С = АDВ = (А\В) È (В\А).


Пример. Проиллюстрируем основные операции над нечеткими подмножествами на примере подмножеств А={ (х1 | 0.2), (х2 | 0.7), (х3 | 1), (х4 | 0), (х5 | 0.5) } и В={ (х1 | 0.5), (х2 | 0.3), (х3 | 1), (х4 | 0.1), (х5 | 0.5) }, определенных на множестве Е={х1, х2, х3, х4, х5}.


АÇВ={ (х1 | 0.2), (х2 | 0.3), (х3 | 1), (х4 | 0), (х5 | 0.5) }

АÈВ={ (х1 | 0.5), (х2 | 0.7), (х3 | 1), (х4 | 0.1), (х5 | 0.5) }

={ (х1 | 0.8), (х2 | 0.3), (х3 | 0), (х4 | 1), (х5 | 0.5) }

={ (х1 | 0.5), (х2 | 0.7), (х3 | 1), (х4 | 0.9), (х5 | 0.5) }

А-В=АÇ={ (х1 | 0.2), (х2 | 0.7), (х3 | 0), (х4 | 0), (х5 | 0.5) }

В-А=ВÇ={ (х1 | 0.5), (х2 | 0.3), (х3 | 0), (х4 | 0.1), (х5 | 0.5) }

АÅВ= (АÇ) È (ВÇ) ={ (х1 | 0.5), (х2 | 0.7), (х3 | 0), (х4 | 0.1), (х5 | 0.5) }

А·В={ (х1 | 0.1), (х2 | 0.21), (х3 | 1), (х4 | 0), (х5 | 0.25) }

={ (х1 | 0.6), (х2 | 0.79), (х3 | 1), (х4 | 0.1), (х5 | 0.75) }


Основные свойства операций.

. Операции пересечения и объединения коммутативны (перестановочны): АÇВ = ВÇА; АÈВ = ВÈА.

. Операции пересечения и объединения ассоциативны.


(АÇВ) ÇС = АÇ (ВÇС) = АÇВÇС

(АÈB) ÈС = АÈ (ВÈС) = АÈВÈС.


. Операции объединения и пересечения взаимно дистрибутивны.

Для вещественных чисел закон дистрибутивности читается так: а (в+с) = ав + ас. Для множеств закон дистрибутивности имеет вид:


а) (АÈВ) ÇС = (АÇС) È (ВÇС)

б) (АÇB) ÈС = (АÈС) Ç (ВÈС).


Докажем равенство:

а). Предположим, что xÎ (АÈВ) ÇС, тогда xÎС и xÎА или xÎВ. Рассмотрим первый случай xÎС и xÎА. Тогда хÎАÇС, а значит, по определению объединения, хÎ (АÇС) È (ВÇС).

Во втором случае, т.е. при xÎС и xÎВ получаем, что xÎ (ВÇС) È (АÇС). Таким образом, мы доказали включение


[ (АÈВ) ÇС] Í [ (АÇС) È (ВÇС)].


Докажем обратное включение. Пусть хÎ (АÇС) È (ВÇС), тогда хÎАÇС или хÎВÇС. В первом случае хÎА и хÎС. Во втором случае хÎВ и xÎС. В обоих случаях получаем, что хÎС и хÎА или хÎВ. Следовательно, хÎ (АÈВ) ÇС. Тем самым доказано включение (АÇС) È (ВÇС) Í (АÈВ) ÇС.

Таким образом, (АÈВ) ÇС= (АÇС) È (ВÇС), что и требовалось доказать.

Пусть А1, А2,. - некоторые множества и пусть все они включены в S (А1, А2,. Í S). Тогда выполняются следующие соотношения.

. - дополнение объединения множеств равно пересечению их дополнений.

. - дополнение пересечения множеств равно объединению их дополнений.

Докажем свойство 4. Пусть хÎ, тогда хÏзначит, x не принадлежит ни одному из множеств Ak ("k, хÏАk), следовательно, по определению дополнения хÎS\Аk для любого k. Отсюда вытекает, что хÎ. Обратно, пусть хÎ тогда этот элемент принадлежит каждому из множеств S \ Ak ("k, хÎS\ Ak). Следовательно, хÏAk для любого k, а, значит, хÏ и поэтому хÎ, что и требовалось доказать. [8]


Рис. 3 Структурная схема алгоритма операции пересечения


Рис. 4 Структурная схема алгоритма операции объединения


Рис. 5 Структурная схема алгоритма операции разности


Рис. 6 Структурная схема алгоритма операции произведения


Рис. 7 Структурная схема алгоритма операции симметричной разности

3. Практическая часть


Назначение программы


Программа предназначена для проведения основных операций над нечеткими множествами: пересечение, объединение, разность, симметричная разность и произведение.


Язык программирования


Для проектирования программы мной был выбран язык программирования Delphi. В современных условиях поиск оптимального решения проблемы организации интерфейса взаимодействия пользователя и программы приобретает характер комплексной задачи, решение которой существенно осложняется необходимостью оптимизации функционального взаимодействия операторов между собой и с техническими средствами проектируемых систем в условиях изменяющегося характера их профессиональной деятельности.

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

Говоря о проблемах взаимодействия человека с техническими средствами и практической реализации интерфейса взаимодействия, нельзя опустить такой важный вопрос, как унификация и стандартизация. Использование типовых решений, модульного принципа проектирования систем отображения и обработки информации приобретает все более широкие масштабы, что, впрочем, вполне естественно.

Особый упор при внедрении данных задач следует конечно придавать современным CASE-средствам разработки программ, так как они наиболее оптимально позволяют проектировать решения в основе которых лежат, в первую очередь, требования к согласованному пользовательскому интерфейсу, каковым и является интерфейс Windows. Никакие продукты других фирм, доступные сегодня, не обеспечивают одновременную простоту использования, производительность и гибкость в такой степени, как Delphi. Этот язык заполнил брешь между языками 3-го и 4-го поколений, соединив их сильные стороны и создав мощную и производительную среду разработки.


Технические требования


Для использования программы необходимо:

Компьютер.- совместимый компьютер с процессором Pentium или выше.

свободная оперативная память не менее 32 Мбайт.

размер свободного дискового пространства не менее 700 Кбайт (для выполняемого модуля программы и файлов результатов).

Периферийные устройства: мышь.

Модульная схема


Модульная схема


Модули разработанной программы взаимодействуют между собой по последовательно иерархической схеме.


Структура программы


В данном разделе рассмотрим назначение основных переменных, констант, процедур и функций программы.

Программа состоит из следующих модулей:. dpr - главный модуль проекта;. pas - интерфейсный модуль;. pas - модуль ввода;_mno. pas - вычислительный модуль.

Модуль op_mno.

Типы._mas - одномерный массив действительных чисел._mas - одномерный массив с элементами 0 или 1.

Процедуры.

peres (a1, n1, a2, n2, a3, n3)

Назначение: пересечение двух множеств.

входные параметры:

а1 - массив элементов первого множества;

n1 - размерность массива;

а2 - массив элементов второго множества;

n2 - размерность массива;

выходные параметры:

а3 - массив - результат;

n3 - размерность массива результата.

objed (a1, n1, a2, n2, a3, n3)

Назначение: объединение двух множеств.

входные параметры:

а1 - массив элементов первого множества;

n1 - размерность массива;

а2 - массив элементов второго множества;

n2 - размерность массива;

выходные параметры:

а3 - массив - результат;

n3 - размерность массива результата.

razn (a1, n1, a2, n2, a3, n3)

Назначение: разность двух множеств.

входные параметры:

а1 - массив элементов первого множества;

n1 - размерность массива;

а2 - массив элементов второго множества;

n2 - размерность массива;

выходные параметры:

а3 - массив - результат;

n3 - размерность массива результата.

simrazn (a1, n1, a2, n2, a3, n3)

Назначение: симметричная разность двух множеств.

входные параметры:

а1 - массив элементов первого множества;

n1 - размерность массива;

а2 - массив элементов второго множества;

n2 - размерность массива;

выходные параметры:

а3 - массив - результат;

n3 - размерность массива результата.

mu (a, n, b)

характеристическая функция

входные параметры:

а - массив элементов множества;

n - размерность массива;

выходные параметры:

b - значение характеристической функции.

proizved (a1, n1, a2, n2, a3, n3)

Назначение: произведение двух множеств.

входные параметры:

а1 - массив элементов первого множества;

n1 - размерность массива;

а2 - массив элементов второго множества;

n2 - размерность массива;

выходные параметры:

а3 - массив - результат;

n3 - размерность массива результата.

Модуль main

Переменные (глобальные).- размерность результирующего множества.- размерность первого множества.- размерность второго множества.- первое множество.- второе множество.

a3 - результирующее множество.

Процедуры.

PrgEnd

Назначение: выход из программы.

FormCreate (Sender: TObject);

Назначение: создание формы и инициализация множеств.

InputMNO

Назначение: ввод нечетких множеств.

OperationNM

Назначение: операции над множествами.

Функции.

vyvod (a, n)

Назначение: вывод множества в текстовую строку.

входные параметры:

а - массив элементов множества;

n - размерность массива.

Модуль vvod

Процедура SpinEdit1Change

Назначение: изменение размерности множества.

Руководство пользователя


Данная программа очень проста в управлении, и не требует специальных знаний от пользователя.

После включения ПЭВМ и начальной загрузки операционной системы следует запустить на выполнение файл OP_MNO. EXE .

На экране появится окно с областью вывода и инструментальной панелью с 8 кнопками (рис.9).



Главное окно

Рассмотрим назначение кнопок.

- ввод множества А;

- ввод множества В;

- объединение множеств;

- пересечение множеств;

- разность множеств;

- симметричная разность множеств;

- произведение множеств;

- выход из программы.

Для работы пользователю необходимо нажать клавишу с требуемым действием. Выбор производится при помощи левой кнопки мыши.

Работу следует начинать с ввода данных - кнопки и . При нажатии одной из этих кнопок на экран выводится окно ввода множества (рис.10).



Окно ввода

Вначале вводится размерность множества в строку ввода, расположенную в левой нижней части окна. Элементы множества вводятся в соответствующие ячейки таблицы.

После ввода данных пользователь выбирает действие и программа выводит результат на экран (рис.11). Если множества не введены, то при расчете будет использоваться случайный набор данных.



Результат

Для завершения работы с программой необходимо нажать кнопку Выход.


Контрольный пример


Для двух заданных нечетких множеств


А={ (х1 | 0.2), (х2 | 0.7), (х3 | 1), (х4 | 0), (х5 | 0.5) }

В={ (х1 | 0.5), (х2 | 0.3), (х3 | 1), (х4 | 0.1), (х5 | 0.5) }


Было получено решение, приведенное на рис.12.

Операция: Объединение двух нечетких подмножеств A и B

Множество А

, 20; 0,70; 1,00; 0,00; 0,50;

Множество В

,50; 0,30; 1,00; 0,10; 0,50;

Результат

,50; 0,70; 1,00; 0,10; 0,50;

Операция: Пересечение нечетких подмножеств A и B

Множество А

, 20; 0,70; 1,00; 0,00; 0,50;

Множество В

,50; 0,30; 1,00; 0,10; 0,50;

Результат

, 20; 0,30; 1,00; 0,00; 0,50;

Операция: Разность нечетких подмножеств А и В

Множество А

, 20; 0,70; 1,00; 0,00; 0,50;

Множество В

,50; 0,30; 1,00; 0,10; 0,50;

Результат

, 20; 0,70; 0,00; 0,00; 0,50;

Операция: Симметричная разность двух множеств А и В

Множество А

, 20; 0,70; 1,00; 0,00; 0,50;

Множество В

,50; 0,30; 1,00; 0,10; 0,50;

Результат

,00; 0,00; 1,00; 0,00; 0,50;

Операция: алгебраическое произведением нечетких подмножеств A и B

Множество А

, 20; 0,70; 1,00; 0,00; 0,50;

Множество В

,50; 0,30; 1,00; 0,10; 0,50;

Результат

,10; 0,21; 1,00; 0,00; 0,25;

Результат работы программы

Заключение


В результате выполнения курсовой работы по дисциплине "Технология программирования" мной была разработана программа реализующая пять действий над нечеткими множествами: пересечение, разность, объединение, симметричная разность и произведение.

Программа позволяет выполнять следующие действия:

§вводить различные исходные данные;

§выводить на экран результаты;

§возможность производить обработку различных наборов данных в течение одного сеанса работы.

Наличие развитого пользовательского интерфейса позволяет работать с созданной программой практически любому пользователю, имеющем начальные знания и навыки работы на компьютере: необходимой действие выбирается щелчком мыши на соответствующей кнопке.

Работа над курсовой работой позволила освоить технологию модульного программирования и приобрести навыки работы со средой визуального программирования Delphi и ее библиотечной системой.

Кроме того в работе был изучен теоретический вопрос по этапам разработки программных средств.

Список использованных источников


1.Брауде Э.Д. Технология разработки программного обеспечения. - М.: Бином, 2004. - 455 с.

2.Брукс Ф.П. Как проектируются и создаются программные комплексы. - М.: Наука, 1979. - 376 с.

.Вирт Н. Алгоритмы и структуры данных. - М.: Мир, 1989. - 360 с.

.Глушаков С.В. Программирование на Delphi. - Харьков: Фолио, 2002.518 с.

.Дал У., Дейкстра Э., Хоор К. Структурное программирование. - М.: Мир, 1975. - 472 с.

.Жоголев Е.А. Введение в технологию программирования (конспект лекций). - М.: "ДИАЛОГ-МГУ", 1994. - 286 с.

.Кнут Д.Е. Искусство программирования. т.3. - М.: Мир, 1984. - 724 с.

.Кофман А. Введение в теорию нечетких множеств. - М.: Радио и связь, 1982. - 432 с.

.Липаев В.В. Качество программного обеспечения. - М.: Финансы и статистика, 1983. - 366 с.

Приложение. Листинг программы


Модуль main

unit main;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ImgList, ComCtrls, StdCtrls, ToolWin;= class (TForm): TToolBar;: TMemo;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TImageList;: TToolButton;: TToolButton;PrgEnd (Sender: TObject);FormCreate (Sender: TObject);InputMNO (Sender: TObject);OperationNM (Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;op_mno, vvod;

{$R *. dfm}, a2, a3: mno_mas;,n1,n2: integer;vyvod (a: mno_mas; n: integer): string;

// вывод множества: integer;: string;: = '';i: =1 to n do: = s + FloatToStrF (a [i], ffFixed, 4,2) + '; ';: = s;;TForm1. PrgEnd (Sender: TObject);

// выход из программы;;TForm1. FormCreate (Sender: TObject);

// создание формы и инициализация множеств: integer;;: = Random (10) + 5;: = Random (10) + 5;i: = 1 to n1 do[i]: = Random (11) / 10;i: = 1 to n2 do[i]: = Random (11) / 10;;TForm1. InputMNO (Sender: TObject);

// ввод нечетких множеств: integer;Sender = ToolButton1 then. SpinEdit1. Value: = n1;. StringGrid1. ColCount: = n1;. Caption: = 'Ввод множества А';i: = 1 to n1 do. StringGrid1. Cells [i - 1, 0]: = FloatToStrF (a1 [i], ffFixed, 3, 1);. ShowModal;: = Form2. SpinEdit1. Value;i: = 1 to n1 do[i]: = StrToFloat (Form2. StringGrid1. Cells [i - 1, 0]);;Sender = ToolButton2 then. SpinEdit1. Value: = n2;. StringGrid1. ColCount: = n2;. Caption: = 'Ввод множества B';i: = 1 to n2 do. StringGrid1. Cells [i - 1, 0]: = FloatToStrF (a2 [i], ffFixed, 3, 1);. ShowModal;: = Form2. SpinEdit1. Value;i: = 1 to n2 do[i]: = StrToFloat (Form2. StringGrid1. Cells [i - 1, 0]);;;TForm1. OperationNM (Sender: TObject);

// операции над множествами. Clear;Sender = addmno then. Lines. Add ('Операция: ' + addmno. Hint);(a1,n1,a2,n2,a3,n3);;Sender = peresmno then. Lines. Add ('Операция: ' + peresmno. Hint);(a1,n1,a2,n2,a3,n3);;Sender = submno then. Lines. Add ('Операция: ' + submno. Hint);(a1,n1,a2,n2,a3,n3);;Sender = ssubmno then. Lines. Add ('Операция: ' + ssubmno. Hint);(a1,n1,a2,n2,a3,n3);;Sender = mulmno then. Lines. Add ('Операция: ' + mulmno. Hint);(a1,n1,a2,n2,a3,n3);;. Lines. Add ('Множество А');. Lines. Add (vyvod (a1,n1));. Lines. Add ('Множество В');. Lines. Add (vyvod (a2,n2));. Lines. Add ('Результат');. Lines. Add (vyvod (a3,n3));;.

Модуль op_mno

unit op_mno;_mas = array [1.20] of real;_mas = array [1.20] of 0.1;peres (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);objed (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);razn (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);simrazn (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);proizved (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);math;mu (a: mno_mas; n: integer; var b: bin_mas);

{характеристическая функция}: integer;i: =1 to n doa [i] <0.5 then[i]: = 0[i]: = 1;;peres (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);

{пересечение множеств}: integer;: =n1;n2<n3 then: =n2;i: =1 to n3 do[i]: =min (a1 [i], a2 [i]);;objed (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);

{объединение множеств}: integer;: =n1;n2<n3 then: =n2;i: =1 to n3 do[i]: =max (a1 [i], a2 [i]);;razn (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);

{разность множеств}: integer;: =n1;n2<n3 then: =n2;i: =1 to n3 do[i]: =1-a2 [i];(a1,n1,a2,n2,a3,n3);;simrazn (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);

{симметричная разность множеств}: integer;, aa2: bin_mas;(a1, n1, aa1);(a2, n2, aa2);: =n1;i: =1 to n3 do[i]: =0;i: =1 to n3 do(aa1 [i] =1) and (aa2 [i] =1) then[i]: =a1 [i];;proizved (a1: mno_mas; n1: integer; a2: mno_mas; n2: integer;a3: mno_mas; var n3: integer);

{произведение множеств}: integer;: =n1;n2<n3 then: =n2;i: =1 to n3 do[i]: =a1 [i] *a2 [i];;.

Модуль vvod

unit vvod;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Spin, Buttons, Grids;= class (TForm): TStringGrid;: TBitBtn;: TLabel;: TSpinEdit;SpinEdit1Change (Sender: TObject);;: TForm2;

{$R *. dfm}TForm2. SpinEdit1Change (Sender: TObject);

// изменение размерности множества. ColCount: = SpinEdit1. Value;;.


Содержание Введение 1. Теоретическая часть. Характеристика этапов разработки программных средств Спецификация Разработка алгоритма Кодировани

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ