Программный продукт, осуществляющий решение задач по дисциплине "Численные методы"

Принципы создания программ в среде программирования Delphi 7.0. Реализация программного продукта, выполняющего решение задач по дисциплине "Численные методы". Разработка интерфейса программного продукта. Методы тестирования по стратегии "черного ящика".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.06.2012
Размер файла 4,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсовая работа

по дисциплине

Теория разработки программного обеспечения

Тема

Численные методы

Выполнил: студент группы ПМ-41

Вятчин Д.В.

Димитровград, 2012

Реферат

Ключевые слова: Решение, Численные, методы, определитель, матрицы, уравнения

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

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

Содержание

  • Введение
    • 1. Теоретическая часть
    • 1.1 Уточнение корня уравнения методом половинного деления
    • 1.2 Уточнение корня уравнения методом касательных (метод Ньютона)
    • 1.3 Метод Гаусса
    • 1.4 Метод Зейделя
    • 1.5 Метод Итераций
    • 1.6 Обращение матрицы с помощью схемы Гаусса
    • 1.7 Вычисление определителей с помощью схемы Гаусса
    • 1.8 Формула Гаусса
    • 1.9 Метод Эйлера
    • 2. Практическая часть
    • 2.1 Формуляр
    • 2.2 Описание главной формы программного продукта
    • 2.3 Обоснование выбора способа внешнего управления продуктом
    • 2.4 Определение функций обслуживающих и управляющих модулей
    • 2.5 Разработка входного языка прграммного продукта
    • 2.6 Разработка интерфейсов программного продукта
    • Заключение
    • Список используемых источников
    • Приложение А. Текст программы

Введение

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

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

При решении задачи на ЭВМ основная роль все-таки принадлежит человеку. Машина лишь выполняет его задания по разработанной программе. Роль человека и машины легко уяснить, если процесс решения задачи разбить на этапы:

1. Постановка задачи. Этот этап заключается в содержательной (физической) постановке задачи и определении конечных целей решения;

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

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

4. Разработка алгоритма и построение блок-схемы;

5. Программирование. Алгоритм решения задачи записывается на понятном машине языке в виде точно определенной последовательности операций - программы для ЭВМ;

6. Отладка программы. Включает контроль программы, диагностику ошибок и их исправление;

7. Проведение расчетов. Готовятся исходные данные для расчетов и проводится счет по отлаженной программе;

8. Анализ результатов. Результаты расчетов тщательно анализируются, оформляется научно техническая документация.

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

1. Теоретическая часть

1.1 Уточнение корня уравнения методом половинного деления

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

При этом можно либо постепенно уменьшать шаг табулирования, приближая его к значению , либо сделать это сразу, полагая h = . В любом случае получим b - а <. Тогда в качестве искомого значения корня можно выбрать середину этого отрезка, т.е. положить = (а + b)/2, а граница погрешности не превзойдет значения /2.

Гораздо более эффективным, чем табулирование с постоянным шагом, является так называемый метод половинного деления. Пусть уравнение имеет на отрезке [а; b] единственный корень, причем функция F(x) на этом отрезке непрерывна. Разделим отрезок [а; b] пополам точкой с = (а + b)/2. Если (что практически наиболее вероятно), то возможны два случая: F(x) меняет знак либо на отрезке [а; с] (рис. 1. а), либо на отрезке [с; b] (рис. 1. б). Выбирая в каждом случае тот из отрезков, на котором функция меняет знак, и, продолжая процесс половинного деления дальше, можно дойти до сколь угодно малого отрезка, содержащего корень уравнения.

Рисунок 1 - К решению уравнения F(x) методом половинного деления:

a - функция F(x) меняет знак на отрезке [a; c]; б - функция F(x) меняет знак на отрезке [c; b]

Метод половинного деления вполне можно использовать как метод решения уравнения с заданной точностью. Действительно, если на каком-то этапе процесса получен отрезок [а; b], содержащий корень, то, приняв приближенно , то получим ошибку, не превышающую значения

(1)

1.2 Уточнение корня уравнения методом касательных (метод Ньютона)

Пусть в . Таким образом, итерационная последовательность строится с помощью рекуррентного соотношения

(n = 0, 1, 2, …).

(2)

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

1. является дважды дифференцируемой на отрезке [а; b];

2. обе производные - первая и вторая - не меняют знак на этом отрезке, т.е. функция монотонна и не меняет характера выпуклости; ситуация иллюстрируется одним из вариантов на рис. 2.

В такой ситуации за берется тот конец отрезка [а; b], на котором функция и ее вторая производная имеют одинаковые знаки, т.е. выполняется условие . Очевидно, что это левый конец [а; b] на рис.3, а и г и правый конец [а; b] на рис. 2, б и в.

Допустим в дополнение к сделанным ранее предположениям, что также непрерывна на [а; b]. Докажем, что отображение , соответствующее формуле (2), является сжимающим в некоторой окрестности корня уравнения . Для этого, как показано выше, достаточно, чтобы существовало такое число q (0 < q < 1), чтобы в указанной окрестности имело место неравенство . Вычислим производную

Рисунок 2 - Четыре возможности поведения функции F{x) в окрестности корня:

а -- функция F(x) убывает и выпукла; б -- функция F{x) убывает и вогнута; в -- функция F(x) возрастает и вогнута; г -- функция F(x) возрастает и выпукла

Непосредственно в корне имеем

,

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

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

.

Отсюда получаем

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

(3)

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

Можно показать, что если имеет на [а; b] непрерывную вторую производную , то погрешности на и -м шагах связаны неравенством

(4)

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

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

в точке с абсциссой , с осью

абсцисс.

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

1.3 Метод Гаусса

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

(6)

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

Процесс решения разбивается на 2 этапа:

1) Прямой ход (состоит в последовательном исключении неизвестных);

2) Обратный ход (нахождение неизвестных).

1.4 Метод Зейделя

Метод Зейделя представляет собой модификацию метода последовательных приближений. В методе Зейделя при вычислении (k+1)-го приближения неизвестного учитываются уже найденные ранее (k+1)-е приближения неизвестных .

Пусть дана линейная система, приведенная к нормальному виду:

(7)

Выбираем произвольно начальные приближения неизвестных и подставляем в первое уравнение системы (7):

;

полученное первое приближение подставляем во второе уравнение системы (7):

;

полученные первые приближения и подставляем в третье уравнение системы (7):

и т.д. Наконец,

.

Аналогично строим вторые, третьи и т.д. итерации.

Таким образом, предполагая, что k-е приближения известны, методом Зейделя строим (k+1)-е приближения по следующим формулам:

,

,

…………………………………...

,

где k = 0, 1, 2,…, n.

1.5 Метод Итераций

Пусть дана система n линейных уравнений с n неизвестными:

(8)

Запишем систему (8) в матричном виде:

,

(9)

Где

, , .

Предполагая, что диагональные элементы (i = 1, 2, …, n), выразим через первое уравнение системы, - через второе уравнение и т.д. В результате получим систему, эквивалентную системе (8):

(10)

Обозначим , где i = 1, 2, …, n; j = 1, 2, …, n. Тогда система (10) запишется таким образом:

(11)

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

, .

Запишем систему (11) в матричной форме:

,

или

.

(12)

Решим систему (12) методом последовательных приближений. За нулевое приближение примем столбец свободных членов:

- нулевое приближение.

Далее построим матрицы-столбцы:

- первое приближение;

- второе приближение

и т.д.

Вообще, любое (k+1)-е приближение вычисляют по формуле:

(k = 0, 1, …, n).

(13)

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

1.6 Обращение матрицы с помощью схемы Гаусса

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

Так, для матрицы четвертого порядка, умножив

,

получим 4 системы уравнений относительно 16 неизвестных .

В общем случае имеют место соотношения

,

где

называется символом Кронекера.

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

Решения , найденные по схеме единственного деления, и будут элементами обратной матрицы .

1.7 Вычисление определителей с помощью схемы Гаусса

Метод Гаусса может быть использован при вычислении определителей:

,

где - ведущие элементы схемы единственного деления.

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

1.8 Формула Гаусса

Традиционно при получении квадратурных формул Гаусса в исходном интеграле выполняется замена переменной, переводящая интеграл по отрезку [a; b] в интеграл по отрезку [-1; 1]:

или

Тогда

(35)

и можно далее, не теряя общности развивать метод Гаусса применительно к интегралу вида

Для разъяснения метода Гаусса обратимся к (рис. 4) Будем использовать линейную интерполяцию подынтегральной функции.

Рисунок 4 - Иллюстрация подходов к построению квадратурных формул:

a - фиксированные узлы линейной интерполяции подынтегральной функции (метод трапеций); погрешность интерполирования характеризуется величиной площади S; b - подвижные узлы в интерполировании (метод Гаусса); величина погрешности зависит от степени несовпадения площадей S1 + S3 и S2Если в качестве узлов интерполяции взять концы отрезка [-1; 1] (так делалось для получения формулы трапеций), то различие в площадях криволинейной трапеции, ограниченной сверху кривой , и «обычной» трапеции, ограниченной сверху прямой, проведенной через концы указанной кривой, фиксировано видом функции (рис. 6, a). Однако если сделать узлы интерполяции «подвижными» (рис. 4, b), то можно выбрать их таким образом, чтобы разность между площадями криволинейной и «обычной» трапеции была значительно меньше, чем в случае а. Более того, можно сделать эти площади равными (S1 + S3 = S2), т.е. аппроксимировать интеграл точно, но в уравнения для определения t1и t2 войдет точное значение интеграла, т.е. практической пользы такой прием не принесет.

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

Легко установить, что уравнение прямой проходящей через точки имеет вид:

где , . Таким образом, возникает следующая техническая задача: выбрать t1и t2 так, чтобы равенство

(36)

имело место при любых значениях a0, a1, a2, a3.

Для ее решения вычислим интегралы в (36):

Подставим в это равенство и :

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

Для того чтобы последнее равенство выполнилось при любых значениях a0, a1, a2, a3, необходимо и достаточно, чтобы

Отсюда следует одно из двух решений

1) и 2)

отличающихся лишь нумерацией значений t2, t2.

Итак, если взять узлами линейной интерполяции числа

,

(37)

то интеграл, вычисленный по формуле

точно совпадает с интегралом от любого многочлена 3 - й степени. Вычислив интеграл по указанной формуле с учетом (37) получим:

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

Воспользовавшись формулой (35), можно для удобства использования записать формулу Гаусса применительно к исходному виду интеграла:

(38)

Оценку погрешности вычисления интеграла приведем без вывода:

Разумеется, для повышения точности вычисления интеграла по методу Гаусса отрезок [a; b] можно так же, как это делалось в предыдущих методах, разделить на несколько (n) частей и применять формулу (38) к каждому из них. Получим практически используемые формулы для вычисления интеграла и оценки погрешности

.

1.9 Метод Эйлера

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

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

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

.

(39)

Располагая приближенным решением в точке , можно повторить описанную выше процедуру: построить прямую, проходящую через эту точку под углом, определяемым условием , и по ней найти приближенное значение решения в точке x2 = xl + h. Заметим, что, в отличие от ситуации, изображенной на рис. 5, эта прямая не есть касательная к реальной интегральной кривой, поскольку точка нам недоступна. Однако представляется интуитивно ясным, что если h достаточно мало, то получаемые приближения будут близки к точным значениям решения.

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

; .

(40)

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

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

2.1 Формуляр

1 Общие сведения.

Наименование изготовителя.

2 Основные характеристики.

Требования к программному обеспечению:

· функционирование программного продукта возможно на всех операционных системах (ОС) Windows.

Требования к аппаратному обеспечению:

· минимальное разрешение 800 x 600;

· 15 Mб свободного места на жестком диске

3 Комплектность.

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

4 Область применения.

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

Функциональные возможности программного продукта

Разработанный программный продукт может выполнять следующие функции:

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

2. нахождение определителей матриц;

3. нахождение обратных матриц;

4. вычисление определенных интегралов;

5. решение дифференциальных уравнений;

6. уточнение корней уравнений на определенных интервалах;

2.2 Описание главной формы программного продукта

Главная форма программного продукта (Рис. 6) запускается после заставки. На главной форме находится главное меню, в котором пользователь может выбрать команду вызова одного из методов решения той или иной задачи, а также команды вызова окна настройки пароля, окна регистрации (если программный продукт не зарегистрирован), окна справки, окна «О программе» и выхода из программы. Так же главная форма отображает текущую дату и время.

2.3 Обоснование выбора способа внешнего управления продуктом

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

2.4 Определение функций обслуживающих и управляющих модулей

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

Функциями основного управляющего модуля являются:

· формирование начального состояния;

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

Функциями второстепенного управляющего модуля являются:

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

· вызов обрабатывающих и обслуживающих модулей;

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

2.5 Разработка входного языка программного продукта

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

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

Рисунок 7 - Первая группа команд программного продукта

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

Рисунок 8- Вторая группа команд программного продукта

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

Рисунок 9 - Третья группа команд программного продукта

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

2.6 Разработка интерфейсов программного продукта

В программном продукте обеспечиваются следующие функции обслуживания:

· справочный интерфейс;

· информационный интерфейс;

· интерфейс управления;

· интерфейс ввода-вывода.

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

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

Рисунок 10 - Сообщение о некорректно введенных данных

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

Интерфейс ввода-вывода реализует в программном продукте следующие функции:

· предоставление пользователю возможности ввода данных (диалоговые окна);

· отображение введенных данных;

· вывод результатов расчетов;

· общее оформление диалоговых окон для обеспечения воспринимаемости информации.

Заключение

программа численный метод

В результате выполнения курсовой работы были изучены принципы создания программ в среде программирования Delphi 7.0 реализован программный продукт, выполняющий решение следующих задач по дисциплине «Численные методы»:

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

2. нахождение определителей матриц;

3. нахождение обратных матриц;

4. вычисление определенных интегралов;

5. решение дифференциальных уравнений;

6. уточнение корней уравнений на определенных интервалах;

Созданный программный продукт был протестирован с использованием методов тестирования по стратегии «черного ящика». Результаты тестирования показали правильную и устойчивую работу программы при допустимых (правильных) и неправильных входных данных.

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

Список используемых источников

1 Архангельский А.Я. Язык программирования Pascal и основы программирования в Delphi: Учебное пособие - М: ООО «Бином - Пресс», 2004. - 496с.

2 Баев И.А., Варламова З.Н., Васильева О.Е. и др. Экономика предприятия. Учебник для вузов. 4-е изд. / Под ред. акад. В.М. Семенова. -- СПб.: Питер, 2006. - 362 с.

3 Бахвалов Н.С., Жидков Н.П., Кобельков Г.М., Численные методы. - М.: Лаборатория базовых знаний, 2001. - 632 с.

4 Вержбицкий В.М. Основы численных методов. - М.: Высш. Шк., 2001. - 840 с.

5 Голицына О.А., Попов И.И. Основы алгоритмизации и программирования. Учебное пособие. М.: ФОРУМ: ИНФРА-М, 2002. - 432 с.

6 ГОСТ 12.2.032 -78. ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования. М.: Издательство стандартов, 1979.

7 ГОСТ 19.404-79.ЕСПД. Пояснительная записка. Требования к содержанию и оформлению.

8 ГОСТ 19.701-90.ЕСПД. Схема алгоритмов, программ, данных и систем. Условные обозначения и правила обозначения.

9 Грибов И.Р. Экономика предприятия. - М.: ЮНИТИ, 2004- 214с.

10 Демидович Б.П., Матон И.А., Шувалова Э.З. Численные методы анализа. - М.: Наука, 1967. - 368 с.

11 Елизаров О.П. Экономика предприятия (фирмы).- М.: ЮНИТИ, 2006г- 384с.

12 Камаева В.Д. «Экономическая теория», Москва, «Юрайт», 2006г.

13 Каханер Д., Моулер К., Нэш С. Численные методы и программное обеспечение. - М.: Мир, 1998. - 575 с.

14 Культин Н.Б. Основы программирования в Delphi 7. - СПб.: БХВ-Петербург, 2004. - 608 с.

15 М.П. Лапчик, М.И. Рагулина, Е.К. Хеннер. Численные методы 2-е издание. - М.: Академа, 2005. - 384 с.

16 Рудаков А.В. Технология разработки программных продуктов: Учеб. пособие для студ. сред. проф. образования - М.: Издательский центр «Академия», 2005.- 208 с.

17 Самарский А.А., Гулин А.В. Численные методы. - М.: Наука, 1989. - 432 с.

18 СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к видеодисплейным терминалам ПЭВМ.

19 Табурчак П.Б. Экономика предприятия. - Ростов н/Д: «Феникс», 2002.

20 Турчак Л.И. Основы численных методов: учебное пособие. - М.: Наука, 1987. - 320 с.

21 Фигурнов В.Э. IBM PC для пользователя. Краткий курс. -- М.: ИНФРА-М, 1998.--480 с.

22 Фленов М.Е. Программирование в Delphi глазами хакера. - СПб.: БХВ-Петербург, 2003. - 368 с.

23 Чечевицына Л.И. Экономика предприятия - М.: Издательство - торговая корпорация «Дашков и Ко», 2003 - 352с.

Приложение

Текст программы

unit Unit1; // Главный модуль

interface

uses

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

Dialogs, unit2, ExtCtrls, Menus, jpeg, StdCtrls, Registry;

type

TForm1 = class(TForm)

Image1: TImage;

MainMenu1: TMainMenu;

N11: TMenuItem;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

N19: TMenuItem;

N20: TMenuItem;

N21: TMenuItem;

N22: TMenuItem;

N23: TMenuItem;

N24: TMenuItem;

N25: TMenuItem;

Label1: TLabel;

Button1: TButton;

Timer1: TTimer;

N26: TMenuItem;

N27: TMenuItem;

N28: TMenuItem;

N29: TMenuItem;

N30: TMenuItem;

N31: TMenuItem;

N32: TMenuItem;

N33: TMenuItem;

Label2: TLabel;

Label3: TLabel;

Timer2: TTimer;

procedure FormShow(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N15Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N17Click(Sender: TObject);

procedure N18Click(Sender: TObject);

procedure N19Click(Sender: TObject);

procedure N20Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N22Click(Sender: TObject);

procedure N23Click(Sender: TObject);

procedure N24Click(Sender: TObject);

procedure N25Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure N27Click(Sender: TObject);

procedure N31Click(Sender: TObject);

procedure N32Click(Sender: TObject);

procedure N33Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure WMGetSysCommand(var Message : TMessage); message WM_SYSCOMMAND;

procedure Timer2Timer(Sender: TObject);

procedure N30Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit1_1, Unit2_1, Unit3_1, Unit4_1, Unit5_1, Unit6_1, Unit11, Unit14,

Unit15, Unit13, Unit9, Unit17, Unit19, Unit12, Unit18, Unit16, Unit10,

Unit7_1, Unit8_1, Unit1_2, Unit1_3, Unit2_2, Unit2_3, Unit3_2, Unit3_3,

Unit4_2, Unit4_3, Unit5_2, Unit5_3, Unit6_2, Unit6_3, Unit7_2, Unit8_2,

Unit20_1, Unit20_2, Unit20_3, Main, Password;

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);

begin

splashscreen.free;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

form2.Edit1.Clear;

form2.Edit2.Clear;

form2.showmodal;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

form5.Edit1.Clear;

form5.Edit2.Clear;

form5.Edit3.Clear;

form5.showmodal;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

form8.Edit1.Clear;

form8.Edit2.Clear;

form8.Edit3.Clear;

form8.showmodal;

end;

procedure TForm1.N9Click(Sender: TObject);

begin

form11.Edit1.Clear;

form11.Edit2.Clear;

form11.showmodal;

end;

procedure TForm1.N10Click(Sender: TObject);

begin

form14.Edit1.Clear;

form14.Edit2.Clear;

form14.showmodal;

end;

procedure TForm1.N12Click(Sender: TObject);

begin

form18.Edit1.Clear;

form18.Edit2.Clear;

form18.showmodal;

end;

procedure TForm1.N13Click(Sender: TObject);

begin

form27.Edit1.Clear;

form27.Edit2.Clear;

form27.Edit3.Clear;

form27.Edit4.Clear;

form27.Edit5.Clear;

form27.showmodal;

end;

procedure TForm1.N14Click(Sender: TObject);

begin

form30.Edit1.Clear;

form30.Edit2.Clear;

form30.Edit3.Clear;

form30.Edit4.Clear;

form30.Edit5.Clear;

form30.showmodal;

end;

procedure TForm1.N15Click(Sender: TObject);

begin

form31.Edit1.Clear;

form31.Edit2.Clear;

form31.Edit3.Clear;

form31.Edit4.Clear;

form31.Edit5.Clear;

form31.showmodal;

end;

procedure TForm1.N16Click(Sender: TObject);

begin

form29.Edit1.Clear;

form29.Edit2.Clear;

form29.Edit3.Clear;

form29.Edit4.Clear;

form29.Edit5.Clear;

form29.showmodal;

end;

procedure TForm1.N17Click(Sender: TObject);

begin

form25.Edit1.Clear;

form25.Edit2.Clear;

form25.Edit3.Clear;

form25.Edit4.Clear;

form25.Edit5.Clear;

form25.showmodal;

end;

procedure TForm1.N18Click(Sender: TObject);

begin

form33.Edit1.Clear;

form33.Edit2.Clear;

form33.Edit3.Clear;

form33.Edit4.Clear;

form33.Edit5.Clear;

form33.Edit6.Clear;

form33.showmodal;

end;

procedure TForm1.N19Click(Sender: TObject);

begin

form35.Edit1.Clear;

form35.Edit2.Clear;

form35.Edit3.Clear;

form35.Edit4.Clear;

form35.Edit5.Clear;

form35.Edit6.Clear;

form35.showmodal;

end;

procedure TForm1.N20Click(Sender: TObject);

begin

form28.Edit1.Clear;

form28.Edit2.Clear;

form28.Edit3.Clear;

form28.Edit4.Clear;

form28.Edit5.Clear;

form28.Edit6.Clear;

form28.showmodal;

end;

procedure TForm1.N21Click(Sender: TObject);

begin

form34.Edit1.Clear;

form34.Edit2.Clear;

form34.Edit3.Clear;

form34.Edit4.Clear;

form34.Edit5.Clear;

form34.showmodal;

end;

procedure TForm1.N22Click(Sender: TObject);

begin

form32.Edit1.Clear;

form32.Edit2.Clear;

form32.Edit3.Clear;

form32.Edit4.Clear;

form32.Edit5.Clear;

form32.showmodal;

end;

procedure TForm1.N23Click(Sender: TObject);

begin

form26.Edit1.Clear;

form26.Edit2.Clear;

form26.Edit3.Clear;

form26.Edit4.Clear;

form26.Edit5.Clear;

form26.Edit6.Clear;

form26.showmodal;

end;

procedure TForm1.N24Click(Sender: TObject);

begin

form21.Edit1.Clear;

form21.showmodal;

end;

procedure TForm1.N25Click(Sender: TObject);

begin

form23.Edit1.Clear;

form23.showmodal;

end;

procedure time;

begin

case b of

0:

begin

form1.Label1.Font.Color:=clyellow;

b:=1;

end;

1:

begin

form1.Label1.Font.Color:=claqua;

b:=2;

end;

2:

begin

form1.Label1.Font.Color:=clwhite;

b:=0;

end;

end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

time;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

form1.Close;

form2.Close;

form3.Close;

form4.Close;

form5.Close;

form6.Close;

form7.Close;

form8.Close;

form9.Close;

form10.Close;

form11.Close;

form12.Close;

form13.Close;

form14.Close;

form15.Close;

form16.Close;

form18.Close;

form19.Close;

form20.Close;

form21.Close;

form22.Close;

form23.Close;

form24.Close;

form25.Close;

form26.Close;

form27.Close;

form28.Close;

form29.Close;

form30.Close;

form31.Close;

form32.Close;

form33.Close;

form34.Close;

form35.Close;

form36.Close;

Form37.Close;

Form38.Close;

Form39.Close;

Form40.Close;

end;

procedure TForm1.N27Click(Sender: TObject);

begin

form1.Close;

form2.Close;

form3.Close;

form4.Close;

form5.Close;

form6.Close;

form7.Close;

form8.Close;

form9.Close;

form10.Close;

form11.Close;

form12.Close;

form13.Close;

form14.Close;

form15.Close;

form16.Close;

form18.Close;

form19.Close;

form20.Close;

form21.Close;

form22.Close;

form23.Close;

form24.Close;

form25.Close;

form26.Close;

form27.Close;

form28.Close;

form29.Close;

form30.Close;

form31.Close;

form32.Close;

form33.Close;

form34.Close;

form35.Close;

form36.Close;

Form37.Close;

Form38.Close;

Form39.Close;

Form40.Close;

end;

procedure TForm1.N32Click(Sender: TObject);

var

Registry: TRegistry;

begin

Registry := TRegistry.Create;

Registry.OpenKey('software',true);

Registry.OpenKey('stalk',true);

Registry.OpenKey('pas',true);

if Registry.ValueExists('login') then

begin

form37.MaskEdit1.Clear;

form37.ShowModal;

end

else

begin

form38.MaskEdit1.Clear;

form38.MaskEdit2.Clear;

form38.ShowModal;

end;

end;

procedure TForm1.N31Click(Sender: TObject);

begin

form39.ShowModal;

end;

procedure TForm1.N33Click(Sender: TObject);

var

Registry: TRegistry;

polic:string;

begin

if InputQuery('Регистрация','Введите регистрационный номер:',polic) then

begin

// Проверяем его:

if polic='254622210741989' then

begin // Все в порядке

Registry:= TRegistry.Create;

Registry.OpenKey('software',true);

Registry.OpenKey('stalk',true);

Registry.WriteInteger('polic',1);

Registry.WriteInteger('MaxR',10);

messagedlg('Программный продукт зарегистрирован!!!'+#13+

'Перезапустите его!!!',mtInformation,[mbok],0);

end

else

begin

messagedlg('Регистрационный номер неверен!!!',mtWarning,[mbok],0);

end;

end;

end;

procedure TForm1.FormActivate(Sender: TObject);

var

Registry: TRegistry;

begin

Registry := TRegistry.Create;

Registry.OpenKey('software',true);

Registry.OpenKey('stalk',true);

if Registry.ValueExists('polic') then // программа зарегистрирована

begin

n33.Enabled:=false;

end;

end;

procedure TForm1.WMGetSysCommand(var Message : TMessage);

begin

if (Message.wParam = SC_Close) then

begin

Form1.Close;

Form40.Close;

end

else

begin

Inherited;

end;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

label2.Caption:=Datetostr(now)+'г';

label3.Caption:=Timetostr(now);

end;

procedure TForm1.N30Click(Sender: TObject);

begin

winhelp(Form1.Handle,'HELP.hlp',HELP_CONTEXT,1);

end;

end.

unit Unit1_1; // Метод Гаусса (модуль 1)

interface

uses

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

Dialogs, Menus, StdCtrls;

type

TForm2 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

begin

Registry := TRegistry.Create;

Registry.OpenKey('software',true);

Registry.OpenKey('stalk',true);

if Registry.ValueExists('polic') then // программа зарегистрирована

begin

n33.Enabled:=false;

end;

end;

procedure TForm1.WMGetSysCommand(var Message : TMessage);

begin

if (Message.wParam = SC_Close) then

begin

Form1.Close;

Form40.Close;

end

else

begin

Inherited;

end;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

label2.Caption:=Datetostr(now)+'г';

label3.Caption:=Timetostr(now);

end;

procedure TForm1.N30Click(Sender: TObject);

begin

winhelp(Form1.Handle,'HELP.hlp',HELP_CONTEXT,1);

end;

end.

unit Unit1_1; // Метод Гаусса (модуль 1)

interface

uses

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

Dialogs, Menus, StdCtrls;

type

TForm2 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

a,b:integer;

implementation

uses Unit1_2;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);

var

i:integer;

begin

try

a:=strtoint(edit1.Text);

b:=strtoint(edit2.Text);

if (a>15)or(a<1) then

begin

messagedlg('Количество уравнений не должно превышать 15.',mtinformation,[mbok],0);

end

else

begin

if (b>15)or(b<1) then

begin

messagedlg('Количество коэффициентов в уравнении не должно превышать 15.',mtinformation,[mbok],0);

end

else

begin

if a<>b then

begin

messagedlg('Количество коэффициентов в уравнении должно совпадать с количеством уравнений.',mtinformation,[mbok],0);

end

else

begin

form3.stringgrid1.colcount:=b+1;

form3.stringgrid1.rowcount:=a+1;

form3.StringGrid1.Height:=(a+1)*30;

form3.StringGrid1.Width:=(b+1)*83;

form3.Width:=form3.StringGrid1.Width+100;

form3.Height:=form3.StringGrid1.Height+150;

form3.Button1.Top:=form3.Height-90;

form3.Button1.Left:=9;

form3.Button2.Top:=form3.Height-90;

form3.Button2.Left:=165;

for i:=0 to b-1 do

begin

form3.StringGrid1.Cells[i,0]:='X'+inttostr(i+1);

end;

form3.StringGrid1.Cells[b,0]:='Своб. чл.';

for i:=1 to a do

begin

form3.StringGrid1.Rows[i].Clear;

end;

form3.Showmodal;

end;

end;

end;

except

messagedlg('Введите данные!',mtinformation,[mbok],0);

end;

end;

procedure TForm2.Button1Click(Sender: TObject);

begin

form2.Close;

end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

case key of

#8,'0'..'9':;

#13:edit2.SetFocus;

else

key:=chr(0);

end;

end;

procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

case key of

#8,'0'..'9':;

#13:button2.SetFocus;

else

key:=chr(0);

end;

end;

end.

unit Unit1_2; //Метод Гаусса (Модуль 2)

interface

uses

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

Dialogs, StdCtrls, Grids;

type

TForm3 = class(TForm)

Label1: TLabel;

StringGrid1: TStringGrid;

Button1: TButton;

Button2: TButton;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

otvet:array [0..25] of real;

f:integer;

implementation

uses Unit1_1, Unit1_3;

{$R *.dfm}

procedure TForm3.Button2Click(Sender: TObject);

begin

form2.close;

form3.Close;

end;

procedure TForm3.Button1Click(Sender: TObject);

var

i,j,c,e,d,ind,st,p:integer;

maskof:array [0..25,0..25] of real;

masst:array [0..25,0..25] of real;

begin

try

form4.Label1.Caption:='';

for i:=1 to a do

begin

for j:=1 to b+1 do

begin

maskof[i,j]:=strtofloat(form3.stringgrid1.Cells[j-1,i]);

end;

end;

st:=1;

ind:=1;

repeat

for i:=st to b+1 do

begin

masst[st,i]:=maskof[st,i]/maskof[st,ind];

end;

for i:=st+1 to a do

begin

for j:=st+1 to b+1 do

begin

maskof[i,j]:=maskof[i,j]-maskof[i,st]*masst[st,j];

end;

end;

st:=st+1;

ind:=ind+1;

until ind>a;

st:=st-1;

p:=1;

for i:=st downto 1 do

begin

otvet[p]:=masst[i,ind];

p:=p+1;

end;

c:=2;

e:=b;

for i:=a-1 downto 1 do

begin

d:=c-1;

for j:=e to b do

begin

otvet[c]:=otvet[c]-masst[i,j]*otvet[d];

d:=d-1;

end;

e:=e-1;

c:=c+1;

end;

f:=1;

for i:=st downto 1 do

begin

form4.Label1.Caption:=form4.Label1.Caption+'X'+inttostr(f)+'='+floattostrf(otvet[i],fffixed,7,5)+';'+#13;

f:=f+1;

end;

form4.Height:=form4.Label1.Height+85;

form4.Button1.Top:=form4.Label1.Height+5;

form4.Button2.Top:=form4.Label1.Height+5;

form4.ShowModal;

except

on EInvalidop do

begin

messagedlg('Нет решения!',mtinformation,[mbok],0);

exit;

end;

on EZeroDivide do

begin

messagedlg('Нет решения!',mtinformation,[mbok],0);

exit;

end;

on Eoverflow do

begin

messagedlg('Ошибка вычисления!',mtinformation,[mbok],0);

exit;

end;

on EConvertError do

begin

messagedlg('Данные введены некорректно!',mtinformation,[mbok],0);

exit;

end;

end;

end;

procedure TForm3.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9':;

#8:

if (stringgrid1.Col>0)and(length(stringgrid1.Cells[stringgrid1.Col,stringgrid1.Row])=0) then

begin

stringgrid1.Col:=stringgrid1.Col-1;

end

else

begin

if (stringgrid1.Row>1)and(length(stringgrid1.Cells[stringgrid1.Col,stringgrid1.Row])=0) then

begin

stringgrid1.Row:=stringgrid1.Row-1;

stringgrid1.Col:=stringgrid1.Colcount-1;

end;

end;

#13:

if stringgrid1.Col<stringgrid1.ColCount-1 then

begin

stringgrid1.Col:=stringgrid1.Col+1;

end

else

begin

if stringgrid1.Row<stringgrid1.RowCount-1 then

begin

stringgrid1.Row:=stringgrid1.Row+1;

stringgrid1.Col:=0;

end

else

begin

button1.SetFocus;

end;

end;

'.',',':

if (length(stringgrid1.Cells[stringgrid1.Col,stringgrid1.Row])=0)or

(pos(',',stringgrid1.Cells[stringgrid1.Col,stringgrid1.Row])>0)then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

'-':

if length(stringgrid1.Cells[stringgrid1.Col,stringgrid1.Row])<>0 then

begin

key:=chr(0);

end;

else

key:=chr(0);

end;

end;

end.

unit Unit1_3; // Метод Гаусса (Модуль 3)

interface

uses

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

Dialogs, StdCtrls;

type

TForm4 = class(TForm)

Label1: TLabel;

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

implementation

uses Unit1_1, Unit1_2;

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);

begin

form2.Close;

form3.Close;

form4.Close;

end;

procedure TForm4.Button2Click(Sender: TObject);

begin

form4.Close;

end;

end.

unit Unit17; //Метод Эйлера

interface

uses

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

Dialogs, StdCtrls, PARSING;

type

TForm33 = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

Edit3: TEdit;

Label4: TLabel;

Edit4: TEdit;

Label5: TLabel;

Edit5: TEdit;

Button1: TButton;

Button2: TButton;

Label6: TLabel;

Edit6: TEdit;

Button3: TButton;

procedure Button1Click(Sender: TObject); // выполнить расчет

procedure Button2Click(Sender: TObject); // выход

procedure Edit1KeyPress(Sender: TObject; var Key: Char); // контроль ввода

procedure Edit2KeyPress(Sender: TObject; var Key: Char); // данных

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit6KeyPress(Sender: TObject; var Key: Char);

procedure Button3Click(Sender: TObject);

procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form33: TForm33;

implementation

uses Unit20_1;

{$R *.dfm}

procedure TForm33.Button1Click(Sender: TObject);

var

a,b,h,y,yy:extended;

i:integer;

f,fx:string;

begin

try

b:=strtofloat(edit1.Text); // диапазон

a:=strtofloat(edit2.Text);

h:=strtofloat(edit4.Text); // шаг

f:=edit3.Text; // выражение

f:='('+f+')';

y:=strtofloat(edit6.Text); // y0

if ((a>9999)or(b>9999))or((a<-9999)or(b<-9999)) then

begin // проверка диапазона

messagedlg('Интервал превышает допустимый диапазон!',mtinformation,[mbok],0);

end

else

begin

if (h=0) then // проверка шага

begin

messagedlg('Введите допустимый шаг!',mtinformation,[mbok],0);

end

else

begin

yy:=0;

while a<=b+h/2 do // решение

begin

y:=y+yy;

fx:=''; // очистка переменной под формулу

for i:=1 to length(f) do

begin

if (f[i]='x')or(f[i]='X') then

begin

fx:=fx+floattostr(a); // формирование формулы

end

else

begin

if (f[i]='y')or(f[i]='Y') then

begin

fx:=fx+floattostr(y); // формирование формулы

end

else

begin

fx:=fx+f[i];

end;

end;

end;

yy:=getformulavalue(fx); // вычисление полученной формулы

yy:=yy*h;

a:=a+h; // следующий шаг

end;

edit5.Text:=floattostr(y); // выводим ответ

end;

end;

except // обработка исключений

on EZeroDivide do // деление на ноль

begin

messagedlg('Нет решения!',mtinformation,[mbok],0);

exit;

end;

on Eoverflow do

begin

messagedlg('Ошибка вычисления!',mtinformation,[mbok],0);

exit;

end;

on EConvertError do

begin

messagedlg('Данные введены некорректно!',mtinformation,[mbok],0);

exit;

end;

end;

end;

procedure TForm33.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9',#8:;

#13:edit3.SetFocus;

'.',',':

if (length(edit1.text)=0)or

(pos(',',edit1.Text)>0)or((length(edit1.Text)=1)and(edit1.Text[1]='-'))then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

'-':

if length(edit1.Text)<>0 then

begin

key:=chr(0);

end;

else

key:=chr(0);

end;

end;

procedure TForm33.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9',#8:;

#13:edit1.SetFocus;

'.',',':

if (length(edit2.text)=0)or

(pos(',',edit2.Text)>0)or((length(edit2.Text)=1)and(edit2.Text[1]='-'))then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

'-':

if length(edit2.Text)<>0 then

begin

key:=chr(0);

end;

else

key:=chr(0);

end;

end;

procedure TForm33.Edit5KeyPress(Sender: TObject; var Key: Char);

begin

key:=chr(0);

end;

procedure TForm33.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

case key of

#13:edit4.SetFocus;

end;

end;

procedure TForm33.Edit4KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9',#8:;

#13:edit6.SetFocus;

'.',',':

if (length(edit4.text)=0)or

(pos(',',edit4.Text)>0)or((length(edit4.Text)=1)and(edit4.Text[1]='-'))then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

else

key:=chr(0);

end;

end;

procedure TForm33.Button2Click(Sender: TObject);

begin

form33.Close;

end;

procedure TForm33.Edit6KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9',#8:;

#13:button1.SetFocus;

'.',',':

if (length(edit6.text)=0)or

(pos(',',edit6.Text)>0)or((length(edit6.Text)=1)and(edit6.Text[1]='-'))then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

'-':

if length(edit6.Text)<>0 then

begin

key:=chr(0);

end;

else

key:=chr(0);

end;

end;

procedure TForm33.Button3Click(Sender: TObject);

begin

form36.showmodal;

end;

procedure TForm33.Button3MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

Application.HintColor:=clwhite;

Application.HintPause:=700;

button3.Hint:='Редактор формул';

end;

end.

unit Unit18; // Метод половинного деления

interface

uses

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

Dialogs, StdCtrls, Parsing;

type

TForm34 = class(TForm)

Label1: TLabel;

GroupBox1: TGroupBox;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Label4: TLabel;

Edit3: TEdit;

Label5: TLabel;

Edit4: TEdit;

Label6: TLabel;

Edit5: TEdit;

Button1: TButton;

Button2: TButton;

Edit2: TEdit;

Button3: TButton;

procedure Button2Click(Sender: TObject);// выход

procedure Button1Click(Sender: TObject);// выполнить расчет

procedure Edit1KeyPress(Sender: TObject; var Key: Char); // контроль ввода

procedure Edit2KeyPress(Sender: TObject; var Key: Char); // данных

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Button3Click(Sender: TObject);

procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form34: TForm34;

implementation

uses Unit20_1;

{$R *.dfm}

procedure TForm34.Button2Click(Sender: TObject);

begin

form34.Close;

end;

procedure TForm34.Button1Click(Sender: TObject);

var

a,b,c,aa,bb,xn,fa,fb,fx:extended;

f,ffa,ffb,fxn:string;

i:integer;

begin

try

a:=strtofloat(edit2.Text); // диапазон

b:=strtofloat(edit1.Text);

c:=strtofloat(edit4.Text); // точность

f:=edit3.Text; // уравнение

f:='('+f+')';

if ((a>999)or(b>999))or((a<-999)or(b<-999)) then

begin // проверка диапазона

messagedlg('Интервал превышает допустимый диапазон!',mtinformation,[mbok],0);

end

else

begin

if c=0 then // проверка точности

begin

messagedlg('Точность должна быть вида:'+#13+'0,1; 0,01; 0,001 и т.д.',mtinformation,[mbok],0);

end

else

begin

// уточняем знак введенных корней a и b

ffa:='';

ffb:='';

for i:=1 to length(f) do

begin

if (f[i]='x') or (f[i]='X') then

begin

ffa:=ffa+floattostr(a);

ffb:=ffb+floattostr(b);

end

else

begin

ffa:=ffa+f[i];

ffb:=ffb+f[i];

end;

end;

fa:=getformulavalue(ffa);

fb:=getformulavalue(ffb);

if ((fa>0)and(fb>0))or((fa<0)and(fb<0)) then

begin

messagedlg('Действительные корни имеют одинаковые знаки',mtinformation,[mbok],0);

end

else

begin

if fa>0 then

begin

aa:=a;

bb:=b;

end

else

begin

aa:=b;

bb:=a;

end;

end;

// уточняем корень

while abs(aa-bb)>c do

begin

xn:=(aa+bb)/2;

for i:=1 to length(f) do

begin

if (f[i]='x') or (f[i]='X') then

begin

fxn:=fxn+floattostr(xn);

end

else

begin

fxn:=fxn+f[i];

end;

end;

fx:=getformulavalue(fxn);

fxn:='';

if fx>0 then begin

aa:=xn;

end

else

begin

bb:=xn;

end;

end;

// выводим ответ

edit5.Text:=floattostr(xn);

end;

end;

except // обработка исключений

on EZeroDivide do // деление на ноль

begin

messagedlg('Нет решения!',mtinformation,[mbok],0);

exit;

end;

on Eoverflow do

begin

messagedlg('Ошибка вычисления!',mtinformation,[mbok],0);

exit;

end;

on EConvertError do

begin

messagedlg('Данные введены некорректно!',mtinformation,[mbok],0);

exit;

end;

end;

end;

procedure TForm34.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9',#8:;

#13:edit3.SetFocus;

'.',',':

if (length(edit1.text)=0)or

(pos(',',edit1.Text)>0)or((length(edit1.Text)=1)and(edit1.Text[1]='-'))then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

'-':

if length(edit1.Text)<>0 then

begin

key:=chr(0);

end;

else

key:=chr(0);

end;

end;

procedure TForm34.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9',#8:;

#13:edit1.SetFocus;

'.',',':

if (length(edit2.text)=0)or

(pos(',',edit2.Text)>0)or((length(edit2.Text)=1)and(edit2.Text[1]='-'))then

begin

key:=chr(0);

end

else

begin

key:=chr(44);

end;

'-':

if length(edit2.Text)<>0 then

begin

key:=chr(0);

end;

else

key:=chr(0);

end;

end;

procedure TForm34.Edit4KeyPress(Sender: TObject; var Key: Char);


Подобные документы

  • Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.

    дипломная работа [1,5 M], добавлен 12.06.2009

  • Неразрешимость проблемы тестирования программного обеспечения. Виды и уровни тестирования. Стратегии восходящего и нисходящего тестирования. Методы "белого" и "черного" ящика. Автоматизированное и ручное тестирование. Разработка через тестирование.

    курсовая работа [112,2 K], добавлен 22.03.2015

  • Методы разработки автоматизированных систем. Характеристика языка программирования Delphi и операционной системы Windows. Разработка автоматизированной системы контроля знаний на примере дисциплины "История мира". Этапы разработки программного продукта.

    курсовая работа [3,8 M], добавлен 18.05.2014

  • Электронный учебник как средство самообразования. Основные этапы проектирования электронного учебника. Методика использования электронных учебников. Язык гипертекстовой разметки HTML. Структура электронного учебника по дисциплине "Численные методы".

    дипломная работа [4,9 M], добавлен 02.05.2012

  • Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.

    отчет по практике [961,6 K], добавлен 21.04.2012

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

    курсовая работа [784,4 K], добавлен 28.05.2013

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

    методичка [185,7 K], добавлен 18.12.2014

  • Применение языка Delphi в качестве языка программирования для реализации игры "Разноцветные кубики". Методы заполнения квадратной матрицы. Разработка алгоритма решения задачи, структурная организация данных. Характеристика программного средства.

    курсовая работа [281,8 K], добавлен 14.05.2013

  • Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.

    отчет по практике [296,1 K], добавлен 19.04.2015

  • Численные методы решения задач. Решение алгебраических и трансцендентных уравнений. Уточнение корня по методу половинного деления. Решение систем линейных уравнений методом итераций. Методы решения дифференциальных уравнений. Решение транспортной задачи.

    курсовая работа [149,7 K], добавлен 16.11.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.