Программирование в Delphi математических процессов

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,16 Mb
  • Опубликовано:
    2011-09-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программирование в Delphi математических процессов

Министерство образования и науки Республики Казахстан Казахский гуманитарно-юридический инновационный университет Факультет информационных технологий и экономики Кафедра информатики и математики









Дипломная работа

Тема: Программирование в Delphi математических процессов


Специальность:050602 «Информатика»

Выполнила: Байзакова Динара Еркымбековна






Семей 2010г.

Содержание

delphi программирование математический объектный декларативный

Введение

Глава 1. Использование объектно-ориентированной методологии при программировании математических процессов

.1 Особенности объектно-ориентированного программирования

.1.1 Концепция объектно-ориентированного программирования

.1.2 Класс

.1.3 Поля

.1.4 Свойства

.1.5 Методы

.1.6 Инкапсуляция

.1.7 Наследование

.1.8 Полиморфизм

.2 Современные подходы к программированию

.2.1 Декларативные языки программирования

.2.2 Императивные (процедурные) языки программирования

.2.3 Функциональные языки программирования

.2.4 Объектно-ориентированные языки программирования

.3 Delphi, как мощный объектно-ориентированный язык

.4 Объектно-ориентированная модель программных компонентов

Глава 2. Среда языка программирования Delphi для решения математических задач

.1 Пользовательский интерфейс среды Delphi

.2 Компоненты и палитра компонентов

.2.1 Стандартная и графическая кнопки

.2.2 Button (стандартная кнопка)

.2.3 BitBtn (графическая кнопка)

.2.4 Метка Label

.2.5 Поле ввода Edit

.2.6 Радио-кнопка RadioButton

.2.7 Функции преобразования

.2.8 Структура кода модуля

.3 Особенности решения математических задач на объектно-ориентированном языке программирования Delphi

Гава 3. Процесс разработки программы

.1 Постановка задачи

.2 Описание программы

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

.2.2 Программа «Решение квадратного уравнения»

.2.3 Программа «Интеграл»

.2.4 Метод прямоугольников

.2.5 Метод трапеции

.2.6 Метод Симпсона

.2.7 Программа График функций

.3 Требования к данной версии программы

.3.1 Подготовка к работе

.3.2 Запуск программы

Заключение

Список используемой литературы

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

Введение

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

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

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

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

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

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

Целью данной дипломной работы является изучение основных понятий, определений математических. Объектом исследования является получение практического навыка по созданию программы средствами среды визуального проектирования Borland Delphi 7.0. Предметом исследования является компоненты данной среды, используемые при разработке программы.

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

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

Глава 1. Использование объектно-ориентированной методологии при программировании математических процессов

.1 Особенности объектно-ориентированного программирования

.1.1 Концепция объектно-ориентированного программирования

Концепцию ООП характеризует следующее:

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

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

.        Каждый объект - переменная, являющаяся представителем (экземпляром) определённого класса.

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

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

.1.2 Класс

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

Каждый класс может иметь подклассы - классы, обладающие всеми или частью его свойств, а также собственными свойствами. Класс, не имеющий ни одного представителя (объекта) обычно называют абстрактным.

Переменные в зависимости от предназначения именуются полями или свойствами. Процедуры и функции класса - методами. Соответствующий классу тип называется объектным типом.

Пример объявления простого класса:

type

TPerson = class (TObject)

private: string[15]; faddress: string[35];Show;;- это имя класса, и faddress - имена полей,

show - имя метода.

Согласно принятому в Delphi соглашению, имена полей должны начинаться с буквы f (от слова field - поле).

Описание класса помещают в программе в раздел описания типов (type).

Тексты на Object Pascal представляются в виде модулей (pas - файлов). Классы могут быть объявлены в секции интерфейса (interface) или в секции реализации (implementation) модуля. Определение классов внутри подпрограмм и других блоков не допускается.

Объект или экземпляр объекта - это конкретный экземпляр, созданный в соответствии с его объявлением с помощью класса.

Объект может содержать другой объект. Например, объект формы может содержать объект кнопки.

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

Переменная типа класс - это переменная объектного типа и называется экземпляром класса или объектом.

Объекты как представители класса объявляются в программе в разделе var, например:

var: TPerson; professor: TPerson;

1.1.3 Поля

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

Для защиты полей целесообразно объявлять их в защищённом разделе (например, в Private).

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

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

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

.1.4 Свойства

Свойства - это высокоуровневые атрибуты компонентов класса.

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

Каждому свойству соответствует поле, содержащее значение свойства, и два метода, обеспечивающих доступ к значению поля.

.1.5 Методы

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

Концепция ООП базируется на трёх основных принципах:

инкапсуляция;

полиморфизм;

наследование.

.1.6 Инкапсуляция

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

.1.7 Наследование

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

В Object Pascal используется модель простого наследования, т.е. класс-потомок может иметь только одного родителя, класс-предок может иметь несколько потомков.

.1.8 Полиморфизм

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

.2 Современные подходы к программированию

Основные подходы к программированию:

структурный, модульный;

функциональный;

логический;

объектно-ориентированный (ООП);

смешанный (комбинированный, интегрированный);

компонентно-ориентированный (.NET);

чисто объектный.

.2.1 Декларативные языки программирования

Время появления: 1960-е г.

Краткая характеристика: программа - описание действий, которые необходимо осуществить.

Преимущества:

простота верификации и тестирования программ;

строгость математической формализации;

высокая степень абстракции.

Недостатки:

сложность эффективной реализации;

необходимость фундаментальных математических знаний.

Примеры:(Interlisp, Common Lisp, Scheme), SML, Haskell, Prolog

1.2.2 Императивные (процедурные) языки программирования

Время появления: 1950-е г.

Краткая характеристика:

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

Преимущества:

более высокий уровень абстракции;

меньшая машинная зависимость;

более широкая совместимость;

содержательная значимость текстов программ;

унификация программного кода;

повышение производительности труда программистов.

Недостатки:

большие трудозатраты на обучение;

меньшая эффективность программного кода.

Примеры:, ALGOL, PL/1, APL, BPL, COBOL, Pascal, C, Basic

1.2.3 Функциональные языки программирования

Время появления: 1960-е г.

Краткая характеристика:

Программа - функция, аргументы которой, возможно, также являются функциями.

Преимущества:

полностью автоматическое управление памятью компьютера («сборка мусора»);

простота повторного использования фрагментов кода;

расширенная поддержка функций с параметрическими аргументами (параметрический полиморфизм);

абстрагирование от машинного представления данных;

прозрачность реализации самоприменяемых (рекурсивных) функций;

удобство символьной обработки данных (списки, деревья).

Недостатки:

нелинейная структура программы;

относительно низкая эффективность.

Примеры:, SML, CaML, Haskell, Miranda, Hope

1.2.4 Объектно-ориентированные языки программирования

Время появления: 1970-е г.

Краткая характеристика:

Программа - описание объектов, их совокупностей, отношений между ними и способов их взаимодействия.

Преимущества:

интуитивная близость к произвольной предметной области;

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

событийная ориентированность;

высокий уровень абстракции;

повторное использование описаний;

параметризация методов обработки объектов.

Недостатки:

сложность тестирования и верификации программ.

Примеры:, C++, Visual Basic, C#, Eiffel, Oberon

1.3 Delphi, как мощный объектно-ориентированный язык

Совместимость с программами, созданными ранее средствами Borland Pascal, сохраняется, несмотря на то, что в язык внесены существенные изменения. Необходимость в некоторых усовершенствованиях давно ощущалась. Самое заметное из них - аппарат исключительных ситуаций, подобный тому, что имеется в C++, был первым реализован в компиляторах корпорации Borland. Не секрет, что при написании объектно-ориентированных программ, активно работающих с динамической памятью и другими ресурсами, немалую трудность представляет аккуратное освобождение этих ресурсов в случае возникновения нештатных ситуаций. Особенно это актуально для среды Windows, где число видов ресурсов довольно велико, а неряшливая работа с ними может быстро привести к зависанию всей системы. Предусмотренный в Delphi аппарат исключений максимально упрощает кодирование обработки нештатных ситуаций и освобождения ресурсов.

Объектно-ориентированный подход в новой версии языка получил значительное развитие. Перечислим основные новшества.

Введено понятие класса:

·   реализованы методы классов, аналогичные статическим методам C++.

Они оперируют не экземпляром класса, а самим классом.

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

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

Введена обработка исключительных ситуаций. В Delphi это устроено в стиле С++. Исключения представлены в виде объектов, содержащих специфическую информацию о соответствующей ошибке (тип и место - нахождение ошибки). Разработчик может оставить обработку ошибки, существовавшую по умолчанию, или написать свой собственный обработчик. Обработка исключений реализована в виде exception-handling blocks (также еще называется protected blocks), которые устанавливаются ключевыми словами try и end. Существуют два типа таких блоков: try...except и try...finally.

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

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

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

После того как Borland внесла перечисленные изменения, получился мощный объектно-ориентированный язык, сопоставимый по своим возможностям с C++. Платой за новые функции стало значительное повышение требований к профессиональной подготовке программиста.

Язык программирования Delphi базируется на Borland Object Pascal.

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

Delphi - это система объектно-ориентированного визуального программирования.

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

Delphi использует язык Object Pascal в среде визуальной разработки.

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

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

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

Объектно-ориентированное программирование (ООП, OOP - Object Oriented Programming) позволяет решать сложные задачи с помощью объектов, необходимых для программирования в Windows. При работе с Delphi можно и не использовать концепции ООП, но использование элементов визуальной разработки автоматически ведёт к применению ООП.

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

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

Не весь код программы, написанной для Delphi, находится в приложении Delphi. Небольшая его часть фактически является частью Windows. Например, коды для стандартных окон диалога и кнопок полностью получены от Windows. Delphi просто использует их, выполняя соответствующие вызовы из Windows DLL (Dynamic Linked Library).


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

Практически все объекты реагируют на определённые события от мыши и клавиатуры.

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

.4 Объектно-ориентированная модель программных компонентов

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

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

Благодаря такой возможности приложения, изготовленные при помощи Delphi, работают надежно и устойчиво. Delphi поддерживает использование уже существующих объектов, включая DLL, написанные на С и С++, OLE сервера, VBX, объекты, созданные при помощи Delphi. Из готовых компонент работающие приложения собираются очень быстро. Кроме того, поскольку Delphi имеет полностью объектную ориентацию, разработчики могут создавать свои повторно используемые объекты для того, чтобы уменьшить затараты на разработку.предлагает разработчикам - как в составе команды, так и индивидуальным - открытую архитектуру, позволяющую добавлять компоненты, где бы они ни были изготовлены, и оперировать этими вновь введенными компонентами в визуальном построителе. Разработчики могут добавлять CASE-инструменты, кодовые генераторы, а также авторские help’ы, доступные через меню Delphi.

Глава 2. Среда языка программирования Delphi для решения математических задач

.1 Пользовательский интерфейс среды Delphi

Для запуска среды Delphi выполните следующую команду:

Пуск → Все программы → Borland Delphi 7 → Delphi 7

После загрузки интерфейс Delphi 7 имеет вид, показанный на рис. 2, и имеет 5 основных окон:

.        главное окно (Delphi 7 - Project 1);

.        окно редактора свойств объектов (Object Inspector);

.        окно формы (Form 1);

.        окно редактора кода (Unit1.pas);

.        окно дерева объектов (Object TreeView).

Окно редактора кода почти полностью закрыто окном стартовой формы. Для переключения между окном формы и окном редактора кода нажмите клавишу F12.

Главное окно находится в верхней части экрана. В нём расположены:

строка заголовка;

строка меню;

панель инструментов;

панель палитры компонентов.

Вид главного окна представлен на рис. 2.2.


Object Inspector - окно редактора свойств объектов или инспектор объектов (рис. 2.3).

Любой размещаемый на форме компонент характеризуется некоторым набором параметров: положением, размером, цветом и т. д. Часть этих параметров, например, положение и размеры компонента, можно изменять, манипулируя с компонентом в окне формы. Для изменения других параметров предназначено окно редактора свойств объектов (или, что-то же самое, Инспектора объектов). Это окно содержит две вкладки - Properties (Свойства) и Events (События). Вкладка properties служит для установки нужных свойств компонента, вкладка Events позволяет определить реакцию компонента на то или иное событие. Совокупность cвойств отображает видимую сторону компонента: положение относительно левого верхнего угла рабочей области формы, его размеры и цвет, шрифт и текст надписи на нем и т. п.; совокупность событий - его поведенческую сторону: будет ли компонент реагировать на щелчок мыши или на нажатие клавиш, как он будет вести себя в момент появления на экране или в момент изменения размеров окна и т. п.


Object TreeView - окно дерева объектов (рис. 5) предназначено для наглядного отображения связей между отдельными компонентами, размещенными на активной форме или в активном модуле данных. Щелчок по любому компоненту в этом окне активизирует соответствующий компонент в окне формы и отображает свойства этого компонента в окне Инспектора объектов.


Окно кода программы представлено на рис. 2.5.

Окно редактора кода, можно увидеть, отодвинув в сторону окно формы либо, как уже говорилось выше, нажать клавишу F12. В него следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.


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

Свойства формы определяют ее внешний вид: размер, положение на экране, текст заголовка, вид рамки.

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

.2 Компоненты и палитра компонентов

Библиотека визуальных компонентов (Visual Component Library - VCL) Delphi содержит множество предопределенных типов компонентов, из которых пользователь может строить свою прикладную программу. Палитра компонентов расположена справа в полосе инструментальных панелей интегрированной среды разработки Delphi.

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

Окно формы - это окно Windows. Всё рабочее пространство окна - это рабочая область, размеченная сеткой для удобства расположения на ней компонентов из Палитры компонентов. Сама форма также является компонентом. Новая форма, которая создаётся при загрузке Delphi или при создании нового проекта, является главной формой приложения.

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

Для добавления какого-либо компонента в Окно формы надо выбрать его пиктограмму на панели компонентов, щёлкнуть на нём левой кнопкой мыши, а затем возможны два варианта действий:

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

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

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

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

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

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

Имена на ярлычках выглядят, например, так:

MainMenu, Button и т.д.

Однако в Delphi все имена классов в действительности начинаются с символа «Т», например:, TButton.

Палитра имеет ряд страниц, на которых скомпонованы пиктограммы всех компонентов, предопределенных в Delphi.

Некоторые страницы из палитры компонентов

Наименование страницы

Назначение компонентов страницы

Standard

Стандартная, содержащая наиболее часто используемые компоненты

Additional

Дополнительная, являющаяся дополнением стандартной

Win32

32-битные компоненты в стиле Windows 95/98 и NT

System

Системная, содержащая такие компоненты, как таймеры, плееры и ряд других

BDE

Компоненты доступа к данным баз данных

Data Access

Компоненты связи с данными

Data Controls

Компоненты отображения данных баз данных

Internet

Компоненты для приложений, работающих с Интернет

Rave Reports

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

Dialogs

Компоненты диалогов: открыть, сохранить файл и др.

Samples

Образцы компонентов: SpinButton, SpinEdit, Calendar и другие


Все компоненты системы Delphi можно разделить на:

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

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

.2.1 Стандартная и графическая кнопки

Кнопки являются элементами управления и используются, как правило, в окнах диалога. Наиболее часто используемые кнопки - Button (стандартная кнопка) и BitBtn (графическая кнопка).

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

Текст на поверхности кнопки определяется свойством Caption. Если в составе надписи есть символ амперсанта «&», то он не отображается, а следующий за ним символ будет подчёркнутым. Причём, нажатие комбинации клавиш Alt+<подчеркнутый символ> вызывает «нажатие» кнопки.

.2.2 Button (стандартная кнопка)

Компонент Button расположен на странице Standard.

Основные свойства компонента Button

Свойство

Назначение

Cancel

Возможность кнопки реагировать на нажатие клавиши Esc

Caption

Текст на поверхности кнопки

Constraints

Ограничения допустимых изменений размеров компонента

Enabled

Доступность компонента (Boolean)

Font

Шрифт для представления текста

Height

Высота компонента

Hint

Текст оперативной подсказки

Left

Координата X - левого верхнего угла на контейнере

Name

Имя компонента

PopupMenu

Имя всплывающего меню для компонента

ShowHint

Показывать ли оперативную подсказку (Boolean)

Top

Координата Y - левого верхнего угла компонента на контейнере

Visible

Видимость компонента (Boolean)

Width

Ширина компонента


Возможна реакция кнопки на события:

.        от мыши: OnClick, OnMouseDown, OnMouseMove, OnMouseUp;

2.      от клавиатуры: Enter, Esc, KeyDown, KeyPress, KeyUp двойной щелчок на кнопке не предусмотрен;

3.      от перетаскивания компонента: OnDragDrop, OnDragOver, OnEndDrag.

2.2.3 BitBtn (графическая кнопка)

Компонент BitBtn расположен на странице Additional.

Основные свойства компонента BitBtn такие же, как и у компонента Button. BitBtn отличается от Button тем, что на поверхности такой кнопки можно разместить вместе с текстом изображение.

Изображение на этой кнопке задается свойством Glyph. При нажатии кнопки с многоточием в строке свойства Glyph в Инспекторе Объектов вызывается диалоговое окно Picture Editor. Чтобы загрузить картинку, нужно нажать кнопку Load, тогда откроется диалоговое окно для открытия файла рисунка, и можно выбрать файл с расширением .bmp.

Файл изображения для кнопки может содержать до четырёх изображений пиктограмм размера 16 ´ 16. В большинстве случаев используют 2 пиктограммы.

Кнопка BitBtn реагирует на те же события, что и Button.

.2.4 Метка Label

Компонент Label расположен на странице Standard.

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

Основные свойства компонента Label

Свойство

Назначение

Caption

Текст надписи

Color

Цвет фона метки

Font

Характеристики шрифта выводимого текста

WordWrap

Отображение текста на метке в две или более строк (Boolean)

AutoSize

Определение размера метки размером шрифта (Boolean)


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

2.2.5 Поле ввода Edit

Компонент Edit расположен на странице Standard.

Такие свойства компонента Edit как Constraints, Enabled, Font, Height, Left, Name, PopupMenu, ShowHint, Visible, Width аналогичны одноимённым свойствам компонента Button.

Основные свойства, специфичные для компонента Edit

Свойство

Назначение

AutoSize

При true высота поля автоматически подстраивается под текст

BorderStyle

Стиль бордюра

Color

Цвет поля

PasswordChar

Символы для вывода в окно вместо текста пароля

ReadOnly

Текст редактора - только для чтения

Text

Отображаемый или вводимый текст


.2.6 Радиокнопка RadioButton

Компонент RadioButton расположен на странице Standard.

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

Свойство Checked определяет, выбрана ли данная кнопка пользователем, или нет. Изменение этого свойства с false на true производится при выборе радио-кнопки щелчком на не выбранной радио-кнопке; при этом генерируется событие OnClick.

Радио-кнопка может реагировать на все те же события, что и Button.

У радио-кнопки есть свойство Caption, содержащее связанный с нею текст.

.2.7 Функции преобразования

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

Таблица

Функция

Значение функции

Chr(n) IntToStr (k)

Символ, код которого равен n Строка, являющаяся изображением целого k

FloatToStr (n)

Строка, являющаяся изображением вещественного n

FloatToStrF(n, f , k,m)

Строка, являющаяся изображением вещественного п. При вызове функции указывают: f - формат (способ изображения); k - точность (нужное общее количество цифр); m - количество цифр после десятичной точки

StrToInt (s)

Целое, изображением которого является строка s

StrToFloat (s)

Вещественное, изображением которого является строка s

Round (n)

Целое, полученное путем округления n по известным правилам

Trunc (n)

Целое, полученное путем отбрасывания дробной части n

Frac(n)

Дробное, представляющее собой дробную часть вещественного n

Int (n)

Дробное, представляющее собой целую часть вещественного n


.2.8 Структура кода модуля

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

 Unit1;

interface // раздел интерфейса.

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

Список подключаемых модулей:

;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,;

type // раздел объявления типов;

TForm1 = class(TForm);// Закрытый раздел класса;

{Private declarations}.

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

// Открытый раздел класса;

{Public declarations}.

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

end;// раздел объявления переменных.

Здесь находятся объявления глобальных переменных модуля, которые могут использоваться процедурами и функциями модуля:

: TForm1;// раздел реализации.

Здесь находятся описания (текст) процедур и функций модуля. Сюда могут помещаться предложения uses, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур:

{$R *.dfm};.

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

Модуль начинается с ключевого слова unit, после которого пишется имя модуля. Оно совпадает с именем файла, в которым вы сохранили свой модуль. По умолчанию для первого модуля имя равно Unit1, для второго Unit2 - и т.д.

Текст модуля состоит из двух основных разделов:

interface - открытый интерфейс модуля,

и implementation - реализация модуля.

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

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

В классе предусмотрено также два раздела: private - закрытый раздел класса, и public - открытый раздел класса. То, что вы или Delphi объявите в разделе public, будет доступно для других классов и модулей. То, что объявлено в разделе private, доступно только в пределах данного модуля.

.3 Особенности решения математических задач на объектно-ориентированном языке программирования Delphi

Довольно часто при написании программ необходимо решать арифметические задачи разного уровня. Объектно-ориентированные языки программирования позволяют реализовать практически любую математическую задачу. Рассмотрим основные принципы решения данной проблемы. Для этого необходимо использовать не числа, как в математике, а переменные - символы, которые будут обозначать цифры в «общем» виде.

Существуют специальные знаки, позволяющие записывать арифметические действия:

.        := - присваивание (А:=В).

.        операции языка: + - сложение (А:=В+С) * - умножение? - вычитание / - деление.

.        символ для разделения инструкций языка (операторов).

Для решения арифметических задач необходимо описывать все используемые переменные:

Var a, b, c, dude: integer; //целые числа;

x, y, z, max: real; // вещественные числа.

Т.е. пример a+b=c мы будем решать следующим образом:

. Заведем 3 переменные a, b, c. (Var a,b,c: integer).

. Запись:

:=a+b

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

с=а+b

будет означать, что сумма чисел а и b равна с.

Теперь, если нам необходимо решить пример 2+4=6, при запуске программы мы в переменную a положим 2, в b - 4 и программа выдаст ответ 6.

Используя для ввода данных в языке программирования Delphi строковые поля (например, классов TEdit, TMemo), для решения математических задач необходимо использовать функции:(<переменная>) (перевод из строки в целый тип данных);(<переменная>) (перевод из строки в вещественный тип данных);

Для вывода результата нужно обратно переводить из числового в строчный тип с помощью функций:(<переменная>) (перевод числа из целого в строчный тип);(<переменная>) (перевод числа из вещественного в строчный тип).

Рассмотрим алгоритм решения арифметической задачи:

. ввод данных.

Например::=StrToInt(Memo1.text); занести в переменную, а содержимое многострочного редактора Memo1, переведенное из строкового в числовую форму для выполнения математических действий.:=StrToInt(Edit1.text); занести в переменную b содержимое однострочного редактора Edit1, переведенное из строкового в числовую форму для выполнения математических действий.

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

Например, нахождение суммы а и b - c:=a+b; {ответ с}.

. вывод результата или сообщения о проведенном анализе данных.

Вывод результата:.text:=IntToStr(c); вывод результата решения примера в многострочный редактор Memo1 путем перевода ответа из числовой в строковую форму.

Вывод сообщения:.text:=’Задача решена успешно!’; вывод сообщения о проведенном анализе данных в многострочный редактор Edit1. В данном случае перевод сообщения из числового типа в строковую форму НЕ ОСУЩЕСТВЛЯЕТСЯ!

Рассмотрим несколько примеров при решении простейших математических задач:

Пример 1. Сумма трех чисел.

Решим простейший пример: найти сумму трех чисел, введенных с клавиатуры.

.        Описываем после служебного слова VAR несколько переменных целого типа для удобства решения: Var a, b, c, s: integer;

.        На форму заводим 3 метки: Label1, Label2, Label3. У каждой из них в свойстве Caption написать соответственно а=, в=, с=.

.        Наносим однострочные элементы управления Edit1, Edit2, Edit3. В них будем вводить числа. Для этого в свойстве Text нужно удалить надписи.

.        Заводим кнопку, которую называем Cумма.

.        Наносим элемент управления Memo1 и удаляем все надписи в многострочном редакторе. Для этого в окне Свойства объекта выбираем свойство Lines и удаляем все надписи в нем.

Примерно ваша форма должна выглядеть так:


6. Активируем кнопку. Обрабатываем событие OnClick (по щелчку). Появляется процедура TForm1.Button1Click(Sender: TObject);

. В теле процедуры присваиваем заведенным переменным значения строк, следующим образом a:=StrToInt(Edit1.text); (аналогично для b и c);

. Вычисляем сумму s:=a+b+c;

. Выводим результат в Memo1. Для этого записываем Memo1.Text:=IntToStr(s).

Окно программного кода Unit1 в «общем» виде будет иметь следующий вид:

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

,

где ,  и  - введённые числа.

В приложении должно быть:

три метки (Label)

два поля редактирования (Edit) для ввода чисел  и , по умолчанию в полях должны быть нули

шесть кнопок («+», «-», «*», «/», «», «Выход»)

при нажатии оной из кнопок (кроме кнопки «Выход») должно отображаться диалоговое окно с результатом действия

при нажатии на кнопку «Выход» приложение должно завершать свою работу

Расположите компоненты как показано на рисунке и измените их свойства:


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

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

Текст файла Unit1.pas

Unit1;

а Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,а Dialogs, StdCtrls;= class(TForm): TEdit;: TEdit;: TLabel;: TLabel;: TLabel;: TButton;: TButton;: TButton;: TButton;: TButton;: TButton;Button1Click(Sender: TObject);Button2Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);Button5Click(Sender: TObject);

{Private declarations}

{Public declarations};: TForm1;, y, res1 : integer;: real;

{$R *.dfm}Summa(a,b : integer; var c : integer);:= a+b;;Sum(a,b : integer): integer;:= a+b;;factorial(x : integer): integer;x=1 then factorial := 1factorial := x*factorial(x-1);;TForm1.Button1Click(Sender: TObject);

аx := StrToInt(Edit1.Text);:= StrToInt(Edit2.Text);(x,y,res1);

//res1 := x + y;

//res1 := Sum(x,y);(IntToStr(res1),300,200);;TForm1.Button2Click(Sender: TObject);:= StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);:= x - y;(IntToStr(res1),300,200);

end;

procedure TForm1.Button3Click(Sender: TObject);:= StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);:= x * y;(IntToStr(res1),300,200);;TForm1.Button4Click(Sender: TObject);:= StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);:= x / y;(FloatToStr(res2),300,200);;TForm1.Button5Click(Sender: TObject);:= StrToInt(Edit1.Text); y:= StrToInt(Edit2.Text);:= Sum(x,y);(FloatToStr(factorial(res1)),300,200);

end;.

Таким образом, рассмотрены особенности решения простейших математических задач на объектно-ориентированном языке программирования Delphi.

Гава 3. Процесс разработки программы

.1 Постановка задачи

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

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

.2 Описание программы

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

Программа разработана на языке программирования Delphi 7.0 с использованием объектно-ориентированной методологии.

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

Ключевыми составляющими приложения являются, состоит из 5 форм, где первая форма выступает за главную (рис3.1.) через которую, нажимая на ссылки можно просмотреть последующие форм.


На этой форме распложены ссылки на программы позволяющую, решать важнейшую задачу математического анализа, такие как решение квадратного уравнения, вычисления определенного интеграла тремя методами и построение графиков функций. Использованы стандартные компоненты такие как: Label, BitBtn.

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

.2.2 Программа «Решение квадратного уравнения»

Для этого немного вспомним математический смысл решения квадратного уравнения, приведем основные понятия.

Определение. Квадратным уравнением называют уравнением вида:

ax2+bx+c=0 (1)

при а≠0.

При b2 -4ac≥0 уравнение (2)

Равносильно уравнению a(x-x1)(x-x2)=0, где x1 и x2 - выражения, полученные в п. 10. Так как произведение равно нулю тогда, когда один из сомножитлей равен нулю, то полученное уравнение имеет корни х= x1 x=x2. Эти корни совпадают при b2 -4ac=0.

При b2 -4ac<0 уравнение ax2+bx+c=0 не имеет действительных корней, так как в этом случае выражение ax2+bx+c не обращается в нуль.

Итак, при D<0 уравнение ax2+bx+c=0 не имеет действительных корней, при D=0 имеет один корень x=-b/2a, при D>0 имеет два действительных корня, которые принято записывать одной формулой:

 (3)

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

Мною созданная программа (рисунок 3.2.) находит корни квадратного уравнения.


Чтобы посчитать корни квадратного уравнения нужно ввести данные три коэффициента, после нажатия на кнопку «Посчитать корни» программа выводит результат. Для ввода коэффициентов использованы компоненты SpinEdit, кнопка «Посчитать корни» использован компонент Button и для вывода результатов компоненты Label.

.2.3 Программа «Интеграл»

Интегрирование функции (математическое значение).

Существуют различные методы нахождения определённого интеграла.

Рассмотрим некоторые из них:

метод средних прямоугольников;

метод трапеций;

метод Симпсона (парабол).

В своей созданной программе я как раз рассмотрела эти три метода при нахождении определенного интеграла. Ниже приведены математические понятия трех этих методов.

.2.4 Метод прямоугольников

Для вычисления приближённого значения определённого интеграла отрезок [a, b] делят на n равных частей точками a=x0<x1<x2<…<xn=b так, что xi+1-xi= (b-a) /n (I=0,1,2,…,n-1). Тогда длина каждого частичного отрезка определяется как h= (b-a) /n, а точки разбиения x0=a, x1=x0+h, x2=x1+h,…, xn=xn-1+h. Эти точки называются узлами, а h-шагом интегрирования. В узлах вычисляются ординаты y0, y1,…, yn, т.е. yi=f (xi). На частичных отрезках [xi; xi+1] строятся прямоугольники, высота которых равна значению f (x) в какой-либо точке каждого частичного отрезка. Произведение f (xi) *h определяет площадь частичного прямоугольника, а сумма таких произведений - площадь ступенчатой фигуры, представляющей собой приближённое значение интеграла.

Если f (xi) вычисляется в левых концах отрезков [xi; xi+1], то получается формула левых прямоугольников:

»Iл= (y0+y1+…+yn-1) = .

Если f (xi) вычисляется в правых концах отрезков [xi; xi+1], то получится формула правых прямоугольников:

»Iп= (y1+y2+…+yn) = .

Если функция f вычисляется в точках xi+h/2Î [xi;; xi+1], то получается формула средних прямоугольников:

 (1)

.2.5 Метод трапеции

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

Приближенное значение интеграла равно сумме всех площадей частичных трапеций:

»I= (2)

.2.6 Метод Симпсона

Если на частичном отрезке длиной 2h функции заменяется дугой параболы, то можно получить формулу парабол или обобщенную формулу Симпсона:

 = (h/3) * (y0+y2n+ (3)

где 1 при i - нечетном;

Ci = 1 при i - чётном.

С автоматическим выбором шага.

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

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

а) выбирается начальное n и вычисляется шаг h= (b-a) /n;

б) рассчитывается значение интеграла I1 для этого шага h;

в) шаг h уменьшается в два раза, т.е. h=h/2 и вычисляется значение интеграла I2;

г) оценивается погрешность между двумя значениями r=½I1-I2½; если погрешность r меньше или равна заданной точности, т.е. r<=e, то точность достигнута и значение интеграла I=I2; если r>e, то точность не достигнута и величине I1 присваивается более точное значение I2;

д) теперь повторяются этапы в) и г) до выполнения условия r<=e.

Программа «Интегралы» имеет следующий вид:

Данная программа вычисляет значение интеграла функции тремя методами. Интервал интегрирования, и параметр функции вводятся пользователем. Программа вычислит результат и выдаст его в числовом виде.

В строке Функция набираете какую-нибудь функцию, далее указываете Промежуток интегрирования от а до b, указываете число-n выбираете метод интегрирования и нажимаете на кнопку Вычислить, после того программа выдаст ответ в строке Результат.

.2.7 Программа График функций

Наверное, всем приходилось иметь дело с графиками функций. Как выглядит, скажем, парабола или синусоида представляет себе каждый. А вот как выглядит график функции f(x)=Sin(x)+Cos(x), представит уже не всякий, хотя это тоже будет синусоида. Тем более никто сразу не скажет: как выглядит график функции f(x)=4*Sin(x)+3*Cos(7*x). Но, если Вы хорошо знаете математику, точнее математический анализ, то Вам не составит труда найти экстремумы функции, наибольшее и наименьшее значения функции. Тем самым вы сможете построить график функции. Но, к примеру, та, же функция f(x)= 4*Sin(x)+3*Cos(7*x) только на промежутке от 0 до пи имеет 7 экстремумов, построения ее графика у Вас уйдет немало времени.

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

Программа изучения графиков вводимых функций. y(x). В формуле могут быть использованы арифметические операции +-*/ , скобки, константы, а также набор пользовательских функций (sin, cos, tg, min, max, power, pi, Ln, e). При минимальном изменении модуля functions список пользователских функций может быть расширен. Количество параметров у пользовательских функцияй от 0 до 99.

Сама формула отображается в математическом красивом виде. Для отображения формулы использованы два сторонних модуля (ExprDraw, ExprMake).


При нажатии на третью ссылку Графики функций появляется окно, в котором уже по умолчанию построен график функции f(x)=sin(x) на отрезке [0,100], как показано на рисунке 3.4:

Чтобы построить необходимый график функции или изменить отрезок, на котором построен график на строке Формула вы можете изменять параметры функции. Начало и конец отрезка могут быть введены любые из отрезка [-1.7976931348623158e+308, 1.7976931348623158e+308], но при этом начало должно быть меньше конца отрезка, иначе появится сообщение об ошибке.

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

Унарные операции:

os(x) - косинус(x) - синус(x) = tan(x) - тангенс(x) - котангенс(x) = acos(x) - арккосинус(x) = asin(x) - арксинус(x) = atan(x) - арктангенс(x) - арккотангенс(x) - обычное округление до целого(x) - квадрат(x) - арифметический корень(x) = fabs(x) - модуль(x) - отрицание(x) - факториал(x) - экспонента(x) - натуральный логарифм(x) = lg(x) - десятичный логарифм(x) - гиперболический косинус(x) - гиперболический синус(x) - гиперболический тангенс(x) - округление с недостатком(x) - округление с избытком(x) - знак числа(x) - логическая инверсия

- - отрицание

Бинарные операции:

(по приоритету с наименьшего)

x+y = add (x, y) - сложение x с yy = sub (x, y) - вычитание из x y*y = mul (x, y) - умножение x на y/y = div (x, y) - деление x на y&y = log (x, y) - логарифм от x по основанию y^y = pow (x, y) - возведение x в степень y=y = x==y = equal (x, y) - если x = y, то 1 иначе 0<y = less (x, y) - если x < y, то 1 иначе 0>y = greater (x, y) - если x > y, то 1 иначе 0(x, y) - логическое И(x, y) - логическое ИЛИ(x, y) - логическое сложение по модулю 2 (операция, исключающая ИЛИ) - сумма Жегалкина(x, y) - стрелка Пирса(x, y) - штих Шеффера(x, y) - логическая импликация(x, y) - логическая эквиваленция(x, y) - x<y?

greater (x, y) - x>y?_or_equal (x, y) - x<=y?_or_equal (x, y) - x>=y?

max (x, y) - большее из x и y(x, y) - меньшее из x и y(x, y) - эквиваленция(x, y) - процент y от x(x, y) - случайное число от x до y

Для всех логических операций число отличное от 0 это 1 (ПРАВДА), иначе 0 (ЛОЖЬ).

Числа пишутся в диапазоне [-1.7976931348623158e+308, 1.7976931348623158e+308]. Числа всегда записываются в десятичной форме, например 1 1f 1.0 1,0 1.0f 1,0f - одно и то же число в шести разных формах. Нельзя записывать числа в экспонентной форме, например 2.3e-5, вместо этого 2.3*(10^-5). Можно использовать константы: pi - число π, e - число e. Переменной является буква x. Между функциями можно ставить разделитель - пробел(space).

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

.3 Требования к данной версии программы

Гарантируется работа данной программы в операционной системе Windows не ниже 98. В предыдущих версиях работа программы не проверялась.

При работе с программой нужно пользоваться правилами, которые приведены в разделе Описание работы программного продукта. В этом случае гарантируется правильная работа программы. Причем нужно обязательно соблюдать правила ввода функции, интерпретатор в этом случае поймет функцию правильно. Если в поле ввода функции ввести что-то неоговоренное правилами, интерпретатор примет это значение в любом случае, и не будет выведено никакого сообщения. Интерпретатор поймет, то что сможет распознать, остальное он игнорирует. Например, если будет введено “zxczxc” или пустая строка, то функция воспримется, как f(x)=0. Если будет введено “dghld+sin(x)asdfasf+dfgdfg”, то функция воспримется, как f(x)=sin(x).

.3.1 Подготовка к работе

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

.3.2 Запуск программы

.        Распаковать архив, например на диск С:

.        Запустить файл Программирование математических процессов.exe, имеющий значок в соответствии с рисунком 3.5.


Заключение

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

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

) решение квадратного уравнения;

) вычисления определенного интеграла;

) построение графиков функций.

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

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

Третья позволяет строить графики любых функций.

Реализация данного проекта была проведена в Delphi 7.0 Использование мощных средств по созданию приложений работающих в операционной системе Windows. Программа написана при использовании самых современных на сегодняшний день технологий программирования и обеспечивает быструю и качественную работу.

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

Список используемой литературы

1.      Бобровский С. Delphi5: учебный курс.Спб: Питер,2001. 640с.;

.        Климова Л.М. Delphi 7. Основы программирования.М.:Кудиц-Образ,2004. 480с.;

.        Фаронов В. Программирование баз данных в Dephi 7: учебный курс.Спб: Питер,2003. 459с.

.        В.Гофман, А.Хомоненко. Delphi 6: СПб.:БХВ-Петербург, 2001.-1152с.:ил.

5.      Delphi 5.0, учебный курс, Фараонов В.В., ISBN 5-8952-020-4, 400

6.      Delphi 4.0, Дарахвелидзе П.Г., Марков Е. П. 1998, 816 с.

7.      Сайт <http://delhpi.mastak.ru/>

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

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, jpeg, ExtCtrls, Buttons, MPlayer;= class(TForm): TImage;: TLabel;: TLabel;: TLabel;: TLabel;: TBitBtn;: TMediaPlayer;Label1Click(Sender: TObject);Label2Click(Sender: TObject);Label3Click(Sender: TObject);Label4Click(Sender: TObject);FormActivate(Sender: TObject);

{Private declarations}

{Public declarations};: TForm1;Unit2;

{$R *.dfm}TForm1.Label1Click(Sender: TObject);.show;;TForm1.Label2Click(Sender: TObject);.show;;TForm1.Label3Click(Sender: TObject);.show;;TForm1.Label4Click(Sender: TObject);.show;;TForm1.FormActivate(Sender: TObject);.Play;;uMain;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, Spin, ExtCtrls;= class(TForm): TLabel;: TLabel;: TSpinEdit;: TLabel;: TSpinEdit;: TLabel;: TSpinEdit;: TButton;: TLabel;: TLabel;FormCreate(Sender: TObject);FormDestroy(Sender: TObject);btCalcClick(Sender: TObject);;: TfmMain;

{$R *.DFM}= Double;= packed record, dO2: TOperandType;;= 'Multitasking Copyright © 2007 Loonies Software';= '\\.\mailslot\';= Copyright + ' - Mul_OpsReady';= Copyright + ' - Mul_ResReady';= MailslotPrefix + 'Lab2_Mul_Operands';= MailslotPrefix + 'Lab2_Mul_Result';= Copyright + ' - Div_OpsReady';= Copyright + ' - Div_ResReady';= MailslotPrefix + 'Lab2_Div_Operands';= MailslotPrefix + 'Lab2_Div_Result';= Copyright + ' - Sub_OpsReady';= Copyright + ' - Sub_ResReady';= MailslotPrefix + 'Lab2_Sub_Operands';= MailslotPrefix + 'Lab2_Sub_Result';= Copyright + ' - Add_OpsReady';= Copyright + ' - Add_ResReady';= MailslotPrefix + 'Lab2_Add_Operands';= MailslotPrefix + 'Lab2_Add_Result';= Copyright + ' - Root_OpsReady';= Copyright + ' - Root_ResReady';= MailslotPrefix + 'Lab2_Root_Operands';= MailslotPrefix + 'Lab2_Root_Result';, hDivOpsReadyEvent, hSubOpsReadyEvent, hAddOpsReadyEvent, hRootOpsReadyEvent,, hDivResReadyEvent, hSubResReadyEvent, hAddResReadyEvent, hRootResReadyEvent: THandle;, DivThreadHandle, SubThreadHandle, AddThreadHandle, RootThreadHandle: THandle;, hDivResMailslot, hSubResMailslot, hAddResMailslot, hRootResMailslot: THandle;MulThreadProc(lpParameter: Pointer);, ResReadyEvent: THandle;, ResMailslot: THandle;: TOperands;: TOperandType;, WrittenBytes: DWORD;:=OpenEvent(EVENT_ALL_ACCESS, false, MulOpsReadyEventName);:=OpenEvent(EVENT_ALL_ACCESS, false, MulResReadyEventName);:=CreateMailslot(MulMailslotOpsName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateFile(MulMailslotResName, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);WaitForSingleObject(OpsReadyEvent, INFINITE) = WAIT_OBJECT_0 do(OpsReadyEvent);(OpsMailslot, Operands, SizeOf(TOperands), ReadBytes, nil);:=Operands.dO1 * Operands.dO2;(ResMailslot, Res, SizeOf(TOperandType), WrittenBytes, nil);(ResReadyEvent);;(OpsMailslot);(ResMailslot);(0);;DivThreadProc(lpParameter: Pointer);, ResReadyEvent: THandle;, ResMailslot: THandle;: TOperands;: TOperandType;, WrittenBytes: DWORD;:=OpenEvent(EVENT_ALL_ACCESS, false, DivOpsReadyEventName);:=OpenEvent(EVENT_ALL_ACCESS, false, DivResReadyEventName);:=CreateMailslot(DivMailslotOpsName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateFile(DivMailslotResName, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);WaitForSingleObject(OpsReadyEvent, INFINITE) = WAIT_OBJECT_0 do(OpsReadyEvent);(OpsMailslot, Operands, SizeOf(TOperands), ReadBytes, nil);:=Operands.dO1 / Operands.dO2;(ResMailslot, Res, SizeOf(TOperandType), WrittenBytes, nil);(ResReadyEvent);;(OpsMailslot);(ResMailslot);(0);;SubThreadProc(lpParameter: Pointer);, ResReadyEvent: THandle;, ResMailslot: THandle;: TOperands;: TOperandType;, WrittenBytes: DWORD;:=OpenEvent(EVENT_ALL_ACCESS, false, SubOpsReadyEventName);:=OpenEvent(EVENT_ALL_ACCESS, false, SubResReadyEventName);:=CreateMailslot(SubMailslotOpsName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateFile(SubMailslotResName, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);WaitForSingleObject(OpsReadyEvent, INFINITE) = WAIT_OBJECT_0 do(OpsReadyEvent);(OpsMailslot, Operands, SizeOf(TOperands), ReadBytes, nil);:=Operands.dO1 - Operands.dO2;(ResMailslot, Res, SizeOf(TOperandType), WrittenBytes, nil);(ResReadyEvent);;(OpsMailslot);(ResMailslot);(0);;AddThreadProc(lpParameter: Pointer);, ResReadyEvent: THandle;, ResMailslot: THandle;: TOperands;: TOperandType;, WrittenBytes: DWORD;:=OpenEvent(EVENT_ALL_ACCESS, false, AddOpsReadyEventName);:=OpenEvent(EVENT_ALL_ACCESS, false, AddResReadyEventName);:=CreateMailslot(AddMailslotOpsName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateFile(AddMailslotResName, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);WaitForSingleObject(OpsReadyEvent, INFINITE) = WAIT_OBJECT_0 do(OpsReadyEvent);(OpsMailslot, Operands, SizeOf(TOperands), ReadBytes, nil);:=Operands.dO1 + Operands.dO2;(ResMailslot, Res, SizeOf(TOperandType), WrittenBytes, nil);(ResReadyEvent);;(OpsMailslot);(ResMailslot);(0);;RootThreadProc(lpParameter: Pointer);, ResReadyEvent: THandle;, ResMailslot: THandle;: TOperands;: TOperandType;, WrittenBytes: DWORD;:=OpenEvent(EVENT_ALL_ACCESS, false, RootOpsReadyEventName);:=OpenEvent(EVENT_ALL_ACCESS, false, RootResReadyEventName);:=CreateMailslot(RootMailslotOpsName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateFile(RootMailslotResName, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);WaitForSingleObject(OpsReadyEvent, INFINITE) = WAIT_OBJECT_0 do(OpsReadyEvent);(OpsMailslot, Operands, SizeOf(TOperands), ReadBytes, nil);:=Sqrt(Operands.dO1);(ResMailslot, Res, SizeOf(TOperandType), WrittenBytes, nil);(ResReadyEvent);;(OpsMailslot);(ResMailslot);(0);;TfmMain.FormCreate(Sender: TObject);: DWORD;:=CreateEvent(nil, true, false, MulOpsReadyEventName);:=CreateEvent(nil, true, false, DivOpsReadyEventName);:=CreateEvent(nil, true, false, SubOpsReadyEventName);:=CreateEvent(nil, true, false, AddOpsReadyEventName);:=CreateEvent(nil, true, false, RootOpsReadyEventName);:=CreateEvent(nil, true, false, MulResReadyEventName);:=CreateEvent(nil, true, false, DivResReadyEventName);:=CreateEvent(nil, true, false, SubResReadyEventName);:=CreateEvent(nil, true, false, AddResReadyEventName);:=CreateEvent(nil, true, false, RootResReadyEventName);:=CreateMailslot(MulMailslotResName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateMailslot(DivMailslotResName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateMailslot(SubMailslotResName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateMailslot(AddMailslotResName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateMailslot(RootMailslotResName, 0, MAILSLOT_WAIT_FOREVER, nil);:=CreateThread(nil, 0, @MulThreadProc, nil, 0, ThreadId);:=CreateThread(nil, 0, @DivThreadProc, nil, 0, ThreadId);:=CreateThread(nil, 0, @SubThreadProc, nil, 0, ThreadId);:=CreateThread(nil, 0, @AddThreadProc, nil, 0, ThreadId);:=CreateThread(nil, 0, @RootThreadProc, nil, 0, ThreadId);;TfmMain.FormDestroy(Sender: TObject);(hMulOpsReadyEvent);(hDivOpsReadyEvent);(hSubOpsReadyEvent);(hAddOpsReadyEvent);(hRootOpsReadyEvent);(hMulResReadyEvent);(hDivResReadyEvent);(hSubResReadyEvent);(hAddResReadyEvent);(hRootResReadyEvent);(hMulResMailslot);(hDivResMailslot);(hSubResMailslot);(hAddResMailslot);(hRootResMailslot);(MulThreadHandle, 0);(MulThreadHandle);(DivThreadHandle, 0);(DivThreadHandle);(SubThreadHandle, 0);(SubThreadHandle);(AddThreadHandle, 0);(AddThreadHandle);(RootThreadHandle, 0);(RootThreadHandle);;WriteOperandsUsingFileMapping(OpsMailslotName: PChar; Operands: TOperands; hEvent: THandle);: THandle;: DWORD;:=CreateFile(OpsMailslotName, GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);(OpsMailslot, Operands, SizeOf(TOperands), WrittenBytes, nil);(OpsMailslot);(hEvent);;ReadResultUsingFileMapping(hResReadyEvent: THandle; MailslotHandle: THandle): TOperandType;: TOperandType;: DWORD;WaitForSingleObject(hResReadyEvent, INFINITE) = WAIT_OBJECT_0 then(MailslotHandle, Res, SizeOf(TOperandType), ReadBytes, nil);:=Res;;;TfmMain.btCalcClick(Sender: TObject);: TOperands;, dRes2, dRes3: Double;, B, C: Integer;:=sedAFactor.Value;:=sedBFactor.Value;:=sedCFactor.Value;.dO1:=B;.dO2:=B;(MulMailslotOpsName, Operands, hMulOpsReadyEvent);:=ReadResultUsingFileMapping(hMulResReadyEvent, hMulResMailslot);.dO1:=4;.dO2:=A;(MulMailslotOpsName, Operands, hMulOpsReadyEvent);:=ReadResultUsingFileMapping(hMulResReadyEvent, hMulResMailslot);.dO1:=dRes2;.dO2:=C;(MulMailslotOpsName, Operands, hMulOpsReadyEvent);:=ReadResultUsingFileMapping(hMulResReadyEvent, hMulResMailslot);.dO1:=dRes;.dO2:=dRes2;(SubMailslotOpsName, Operands, hSubOpsReadyEvent);:=ReadResultUsingFileMapping(hSubResReadyEvent, hSubResMailslot);dRes3 < 0 then.Caption:='Дискриминант меньше нуля!';.Caption:='';.dO1:=0;.dO2:=B;(SubMailslotOpsName, Operands, hSubOpsReadyEvent);:=ReadResultUsingFileMapping(hSubResReadyEvent, hSubResMailslot);.dO1:=dRes3;(RootMailslotOpsName, Operands, hRootOpsReadyEvent);:=ReadResultUsingFileMapping(hRootResReadyEvent, hRootResMailslot);.dO1:=dRes;.dO2:=dRes3;(AddMailslotOpsName, Operands, hAddOpsReadyEvent);:=ReadResultUsingFileMapping(hAddResReadyEvent, hAddResMailslot);.dO1:=dRes;.dO2:=dRes3;(SubMailslotOpsName, Operands, hSubOpsReadyEvent);:=ReadResultUsingFileMapping(hSubResReadyEvent, hSubResMailslot);.dO1:=2;.dO2:=A;(MulMailslotOpsName, Operands, hMulOpsReadyEvent);:=ReadResultUsingFileMapping(hMulResReadyEvent, hMulResMailslot);.dO1:=dRes;.dO2:=dRes3;(DivMailslotOpsName, Operands, hDivOpsReadyEvent);:=ReadResultUsingFileMapping(hDivResReadyEvent, hDivResMailslot);.dO1:=dRes2;.dO2:=dRes3;(DivMailslotOpsName, Operands, hDivOpsReadyEvent);:=ReadResultUsingFileMapping(hDivResReadyEvent, hDivResMailslot);.Caption:='x1 = ' + FloatToStrF(dRes, ffFixed, 15, 2);.Caption:='x2 = ' + FloatToStrF(dRes2, ffFixed, 15, 2);;;grfunc;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;= class(TForm)FormPaint(Sender: TObject);FormResize(Sender: TObject);

{Private declarations}

{Public declarations};: TForm1;

{$R *.DFM}f(x:real):real; // Функция, график которой надо построить:=2*Sin(x)*exp(x/5);;GrOfFunc; // строит график функции

var,x2:real; // границы изменения аргумента функции,y2:real; // границы изменения значения функции:real; // аргумент функции:real; // значение функции в точке x:real; // приращение аргумента,b:integer; // левый нижний угол области вывода графика,h:integer; // ширина и высота области вывода графика,my:real; // масштаб по осям X и Y,y0:integer; // точка - начало координат

// область вывода графика:=10; // X - координата левого верхнего угла:=Form1.ClientHeight-20; // Y - координата левого верхнего угла

h:=Form1.ClientHeight-40; // высота:=Form1.Width-40; // ширина

x1:=0; // нижняя граница диапазона аргумента:=25; // верхняя граница диапазона аргумента:=0.01; // шаг аргумента:=f(x1); // минимум:=f(x1); // максимум

x:=x1;

repeat:= f(x);y < y1 then y1:=y;y > y2 then y2:=y;:=x+dx;(x>=x2);:=h/abs(y2-y1); //:=w/abs(x2-x1); //

// оси:=l;:=b-Abs(Round(y1*my));form1.Canvas do(l,b);LineTo(l,b-h);(x0,y0);LineTo(x0+w,y0);(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));(l+5,b,FloatToStrF(y1,ffGeneral,6,3));

// построение графика:=x1;:=f(x);

Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;:=x+dx;(x>=x2);;;TForm1.FormPaint(Sender: TObject);

begin;;

// изменился размер окна программы

procedure TForm1.FormResize(Sender: TObject);.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));

// построить график;;;.

Похожие работы на - Программирование в Delphi математических процессов

 

Не нашел материал для своей работы?
Поможем написать качественную работу
Без плагиата!