Решения дифференциального уравнения для производной функции методом Хемминга и методом Адамса
Проектирование программного модуля. Описание схемы программы и структуры разрабатываемого пакета. Написание кода ввода исходных данных и основных расчетов. Тестирование программного модуля. Тестирование решения задачи. Методы численного интегрирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.03.2014 |
Размер файла | 549,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Постановка задачи
1.1 Общая характеристика задачи
1.2 Анализ литературных источников
2. Проектирование программного модуля
2.1 Расчетные формулы методов
2.2 Описание данных, используемых для решения задачи
2.3 Описание схемы программы
3. Реализация программного модуля
3.1 Описание структуры разрабатываемого пакета
3.2 Описание используемых типов данных
3.3 Создание основной формы программы
3.4 Написание кода ввода исходных данных
3.5 Написание кода основных расчетов
3.6 Вывод результата
3.7 Проектирование интерфейса программы
4. Тестирование программного модуля
4.1 Тестирование решения задачи
4.2 Тестирование программы
5. Энерго-и ресурсосбережение
Заключение
Список литературы
Приложение А Текст программы
Введение
Современное развитие и быстрое прогрессирование науки, техники и внедрение информационных технологий, автоматизированных систем управления и средств компьютерной техники в различные области жизнедеятельности человека, вызвало необходимость в разработке пакетов программ и приложений, облегчающие работу многим специалистам разных областей и обычным пользователям персонального компьютера, использующих прикладные программы.
В настоящее время ЭВМ применяются во многих областях науки, техники и народного хозяйства. В основном они используются для решения сложных математических и инженерных задач, в качестве управляющих машин в промышленности и военной технике, в сфере обработки информации разного рода. Решение с помощью ЭВМ многих задач математики, физики, электроники и других наук благотворно влияет на дальнейшее развитие вычислительной техники.
Шагом, кардинально изменившим жизнь программистов, было появление визуального программирования, которое позволило свести проектирование пользовательского интерфейса к простым и наглядным процедурам. Delphi ? одна из самых мощных систем, позволяющих на самом современном уровне создавать отдельные прикладные программы Windows. Работа ведется в Интегрированной Среде Разработки (ИСР или Integrated developrated environment - IDE) Delphi. Среда представляет формы (оконные или невидимые), на которых размещаются компоненты. На форму с помощью мыши переносятся и размещаются пиктограммы компонентов, имеющихся в библиотеке Delphi. Во время проектирования формы и размещения на ней компонентов Delphi автоматически формирует коды программы, включая в нее соответствующие фрагменты, описывающие данный компонент. В соответствующих диалоговых окнах пользователь может изменить заданные по умолчанию значения каких-то свойств этих компонентов и, при необходимости, написать обработчики каких-то событий.
Обоснование и решение практической задачи на языке Delphi состоит в построении математической модели исследуемого явления, что позволяет свести решение практической задачи к решению математической задачи, представляющей собой, как правило, сложную задачу, которая не может быть решена непосредственными человеческими усилиями, с множеством данных, для решения которой необходимо выполнить большой объём вычислений. На современном этапе человеком уже разработано множество методов решения разного рода задач. Методы решения более сложных и громоздких задач находятся на этапе исследования.
1. Постановка задачи
1.1 Общая характеристика задачи
Проектируемая программа предназначена для построения графика функции , расчета производной этой функции и вычисления методов по этой функции. К проектируемому приложению применены следующие требования: наличие главного и контекстного меню, всплывающих подсказок, защиты от некорректного ввода. Пункты меню должны содержать следующие команды:
Сохранить График;
Сохранить таблицу;
Выход;
Цвет (графика, таблиц, текста);
Режим построения (Мгновенный, Анимация);
Построение;
Расчет;
Очистка (очищение области ввода и вывода информации);
Справка (О программе, Справка).
Значения а задает пользователь, методы для вычисления производной функции -- метод Адамса 3-го порядка точности, метод Хемминга 4-го порядка точности по схеме 1/3.
Атрибуты создаваемой программы позволяют выбор следующих возможностей: режим построения (анимация или мгновенный), изменение цвета графика, осей, сохранение полученного изображения.
Для реализации задачи используются возможности Borland Delphi7.
1.2 Анализ литературных источников
Различают три группы численных методов решения дифференциальных уравнений:
а) явные методы численного интегрирования;
б) неявные методы численного интегрирования;
в) методы прогноза и коррекции.
Различают следующие явные методы интегрирования:
а) одношаговые методы;
б) многошаговые методы.
Метод Хемминга 4-го порядка точности по схеме 1/3 относится к многошаговым методам. Для того чтобы в этом методе получить значения нужно знать четыре предыдущих значения. Явные методы интегрирования основаны на использовании разложения формулы в ряд Тейлора в окрестностях точки с координатами (хn,yn) для расчётов последующего значения функции на основании данных о её предыдущих значениях.
Метод Адамса 3-го порядка также относится к многошаговым методам. В этом методе чтобы рассчитать значения, нужно знать три предыдущих значения функции, рассчитанных по одношаговым методам.
2. Проектирование программного модуля
2.1 Расчетные формулы метода
Данная функция рассчитывается методом Адамса 3-го порядка. Формула будет выглядеть так:
( 8 )
где yn -сама функция;
h-шаг;
(x,y)-производная.
Также данная функция рассчитывается методом Хемминга 4-го порядка по схеме 1/3. Формула будет выглядеть так:
,(9)
где h-шаг;
(x,y)-производная
программный тестирование численный интегрирование
2.2 Описание данных используемых для решения задачи
Для исследования графика функции и вычисления значений функции и её производной требуются входные, промежуточные и выходные данные.
Входные данные:
значение параметра а, границы графика вводятся пользователем после запуска программы, если эти данные не введены, то программа не будет работать.
число разбиений n вводится пользователем после ввода параметра а и границ графика
Исходные данные мы вводим с клавиатуры. Для ввода данных используется компонент Edit.
Промежуточные данные:
данные полученные для вычисления масштабов, которые используются для построения координатных осей Ox и Oy;
промежуточные значения функции и её производной, которые после используются для построения графика приближенного значения функции;
данные полученные и используемые для нанесения разметки и подписи координатных осей.
Промежуточные данные используются только в ходе выполнения программных расчетов, и они не выводятся.
Выходными данными являются:
полученные значения функции У и её производной У`, в ходе выполнения программы;
график функции, её производной и приближённого значения функции;
файл графического формата.
Для вывода выходных данных используется компонент Image и StringGrid, информация может выводится как в графическом виде на экран, так и в файл графического формата, что позволяет сохранять график в разных форматах, также это очень удобно.
2.3 Описание схемы программы
После запуска программы пользователю предоставляется возможность выбора дальнейших действий. До ввода данных для построений и расчетов возможен только просмотр Справки и О программе. Если все данные и параметры введены верно, то у пользователя появляются возможности выполнить расчеты, построение, сохранения полученного изображения.
Обобщенная блок-схема программы изображена на рисунке 1.
Рисунок 1 - Обобщенная блок-схема программы
3. Реализация программного модуля
3.1 Описание структуры разрабатываемого пакета
Рисунок 2 - Структурная диаграмма программного модуля
В процессе выполнения курсового проекта использовались возможности Delphi7. Созданная программа хранится на диске в одной папке вместе со всеми необходимыми для ее корректной работы файлами (Unit, Project и др.).
В приложении можно видеть 3 формы, обеспечивающих его работу:
Form1 -- главная форма, используемая для всех основных операций (построение, расчеты, вывод результатов), на ней расположены все основные компоненты;
Form2 -- форма, которая служит для построения графика функции;
Form3 -- форма, которая служит для построения графика производной.
Form4 -- форма, выводящая на экран окно Справка.
Программный код разработанного приложения, написанный на языке Delphi 7, представлен в приложении А.
3.2 Описание используемых типов данных
В данном курсовом проекте используются следующие типы данных:
string;
integer;
real;
tcolor.
Тип данных string используется для описания переменных строкового типа. В данной программе используется для хранения промежуточных результатов вводимых в поля ввода данных, таких как значения параметров функции, координаты вертикальных прямых и крайние точки графика, и вывода информации в различные поля вывода (в качестве примера можно привести значения которые мы переводили из численного типа в строковый , чтобы занести в StringGrid) .
Тип данных integer. Данный тип используется для хранения целых чисел в диапазоне от -32768 до 32767. В данной программе неоднократно используется в качестве счетчика, для проведения различных расчетов. В качестве примера можно привести цикл For.Примером являются переменные:f, N, i, dx, dy, k, m и др.
Тип данных real предназначен для хранения вещественных чисел в диапазоне от -2,91039 до 1,71038. В программе используется для хранения дробных значений, таких как масштаб, значения точек для построения графиков, рассчитанные значения функции, её производной и по методам. Примером являются переменные:x1, xn, h, Fmax, Fmin, g и др.
Тип данных tcolor используется для оформления программы, для настройки цвета осей при построении графика и непосредственно для настройки цвета графика.
3.3 Создание основной формы программы
Главная форма приложения, используемая для основных операций, содержит следующие компоненты: Главное меню, Контекстное меню, поля ввода/вывода данных, поле построения.
Главное меню содержит следующие пункты и команды:
Файл -- Закрыть (закрывает программу), Очистить (Очистить значения, Очистить таблицу 1, Очистить Таблицу 2);
Правка - Заполнить (Заполнить 1-ую таблицу, Заполнить 2-ую таблицу, Метод Адамса 3-го порядка, Метод Хемминга 4-го порядка);
Справка--Об авторе(отображает информацию об авторе);
Вид главной формы при запуске приложения показан на рисунке 3.
Рисунок 3 - Главная форма программы
3.4 Написание кода для ввода исходных данных
Для ввода исходных данных, описанных в таблице 1, используются компоненты Delphi 7 Edit, которые расположены на главной форме. При вводе данных в поля данных компонентов, программа получает информацию строкового типа. Для расчетов и построений необходим числовой тип, для этого введенную пользователем информацию переводим посредством команды StrToInt (переводит в целые числа) или StrToFloat (переводит в дробные числа). Для обратного преобразования используют команды FloatToStr и IntToStr.
В приложении имеется защита от некорректного ввода, срабатывающая при выполнении расчетов и построения. Если введены некорректные данные, пользователь получит об этом сообщение.
3.5 Написание кода основных расчетов
Курсовой проект выполнен в Delphi 7, программный код показан в Приложении А.
Для начала ведется ввод данных независимых переменных «а» , устанавливается размер таблицы n, и область определения от «X1» до «Xn». Рассчитывается шаг (h=(xn-x1)/n), строится таблица. Затем ведется расчет по методам.
Адамса 3 порядка:
procedure TForm1.Button4Click(Sender: TObject);
var i,n:integer; x1,xn,h,a,b:real;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
a:=strtofloat(edit5.Text);
x1:=strtofloat(edit1.Text);
xn:=strtofloat(edit2.Text);
n:=strtoint(edit3.Text);
h:=(xn-x1)/n;
for i:=1 to (n+1) do
begin
stringgrid1.Cells[i,3]:=floattostr(Cos(a*strtofloat(stringgrid1.Cells[i+2,1])*strtofloat(stringgrid1.Cells[i+2,1]))+h*(23*(-sin(a*strtofloat(stringgrid1.Cells[i+2,1])*strtofloat(stringgrid1.Cells[i+2,1])))*(2*a*strtofloat(stringgrid1.Cells[i+2,1]))-16*(-sin(a*strtofloat(stringgrid1.Cells[i+1,1])*strtofloat(stringgrid1.Cells[i+1,1]))*(2*a*strtofloat(stringgrid1.Cells[i+1,1])))+5*(-sin(a*strtofloat(stringgrid1.Cells[i,1])*strtofloat(stringgrid1.Cells[i,1]))*(2*a*strtofloat(stringgrid1.Cells[i,1]))))/12)
end;
end;
Хемминга 4 порядка по схеме 1/3:
procedure TForm1.Button8Click(Sender: TObject);
var i,n:integer; x1,xn,a,b,h:real;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверте правильность введённых значений');
end
else
a:=strtofloat(edit5.Text);
n:=strtoint(edit3.Text)-1;
x1:=strtofloat(edit1.Text);
xn:=strtofloat(edit2.Text);
h:=(xn-x1)/n;
for i:=1 to (n+1) do
begin
stringgrid2.Cells[i,3]:=floattostr((cos(a*strtofloat(stringgrid2.Cells[i+3,1])*strtofloat(stringgrid2.Cells[i+3,1]))+cos(a*strtofloat(stringgrid2.Cells[i+2,1])*strtofloat(stringgrid2.Cells[i+2,1]))+cos(a*strtofloat(stringgrid2.Cells[i+1,1])*strtofloat(stringgrid2.Cells[i+1,1])))/3+h*(91*(-sin(a*strtofloat(stringgrid2.Cells[i+3,1])*strtofloat(stringgrid2.Cells[i+3,1]))*(2*a*strtofloat(stringgrid2.Cells[i+3,1])))-63*(-sin(a*strtofloat(stringgrid2.Cells[i+2,1])*strtofloat(stringgrid2.Cells[i+2,1]))*(2*a*strtofloat(stringgrid2.Cells[i+2,1])))+57*(-sin(a*strtofloat(stringgrid2.Cells[i+1,1])*strtofloat(stringgrid2.Cells[i+1,1]))*(2*a*strtofloat(stringgrid2.Cells[i+1,1])))-13*(-sin(a*strtofloat(stringgrid2.Cells[i,1])*strtofloat(stringgrid2.Cells[i,1]))*(2*a*strtofloat(stringgrid2.Cells[i,1]))))/36).
3.6 Вывод результата
Для вывода результатов на экран использованы компоненты stringgrid (для текстовой информации) и Image(для графической информации). Для этого числовую информацию переводят в строковую.
Приведенный ниже фрагмент программного кода показывает, как выводятся результаты вычислений функции:
Form1.stringgrid1.Cells[i+1,3]:=currtostr(y);
3.7 Проектирование интерфейса программы
Представленный пользователю интерфейс программы обеспечивают следующие компоненты Delphi 7:
MainMenu--главное меню (отображает пункты главного меню);
PaupMenu--контекстное меню (дублирует пункты главного меню при щелчке правой кнопкой мыши в любом месте формы);
Edit--текстовое окно (используется для ввода различной информации с последующей возможностью ее редактирования);
Label--метка (используется для вывода информации без возможности ее редактирования);
Stringgrid--компонент для создания таблиц, а если точнее сама таблица;
Image--используется для вставки изображений на форму;
ColorDialog--используется для выбора цвета различных элементов;
SavePictureDialog--используется для сохранения графической информации в файл;
Timer--таймер (используется для реализации построения в режиме анимации).
Вид основной формы представлен на рисунке 4.
Рисунок 4 - Главная форма программы с расчетами
Построенный график функции показан на рисунке 5
Рисунок 5--Выполнение построения графика функции
Построенный график производной показан на рисунке 6
Рисунок 6--Выполнение построения графика производной
4. Тестирование программного модуля
Для проверки корректности работы программы, она успешно прошла тестирование. Все команды выполняются правильно, задержек в работе программы не наблюдалось. Каждый пункт меню соответствует назначению и выполняется четко.
При неполном заполнении ячеек ввода, выводится сообщение об ошибке (рисунок 9).
Рисунок 7--Сообщение об ошибке (1)
5. Энерго- и ресурсосбережение
Стандарт управления энергопотреблением компьютеров, описывает три различных режима работы компьютера. Эти режимы отличаются потребляемой мощностью электроэнергии.
Ждущий режим - позволяет экономить энергию, за счет отключения всех периферийных устройств, кроме ЦПУ, ОЗУ и материнской платы.
Спящий режим - позволяет экономить электроэнергию на 100%, так как отключаются все периферийные устройства.
Основной режим - при этом режиме экономии нет. Потребляемая мощность около 400Ватт.
Для нахождения количества рабочих дней, в течение которых разрабатывался программный продукт, используем формулу:
n = Тпк /(8-tрп), (5)
где Тпк - время работы компьютера, ч;
Тпк =105 ч.
tрп - суммарное время регламентированных перерывов, в течение
рабочего дня, ч;
tрп =50 мин=5/6 часа.
n=105/(8-0,83)=15дн.
Для нахождения суммарной продолжительности регламентированных перерывов в течение всего времени разработки программного модуля:
Трп = n tрп, (6)
где Трп - суммарная продолжительность регламентированных перерывов в течение всего времени разработки программного модуля;
Tрп=15Ч0,83=12,45ч.
Экономия электроэнергии рассчитывается по формуле:
Сэн=Трп(Wпк-Wсп) 376,7, (7)
где Wпк - потребляемая мощность ПК, кВт-ч;
Wпк = 0,4 кВт;
Wсп - потребляемая мощность компьютера в ждущем режиме;
Wсп = 0,16 кВт;
Сэн=12,45*(0,4-0,16)*376,7=1130руб.
Заключение
В результате выполнения курсового проекта была разработана и реализована программа для построения графика функции расчета данной функции по методу Адамса 3-го порядка и Хемминга 4-го порядка по схеме 1/3.
Так же была разработана защита программы от некорректного ввода. Закреплены знания по тестированию и разработке приложений. Получен опыт при оформлении основных расчетов и построений в виде процедур и функций.
Список литературы
Котов В.М., Павловский А.И. Информатика. Методы алгоритмизации: Учеб. пособие для 10-11-х кл. общеобразоват. шк. с углубл. изучением информатики. - Мн.: Нар. Асвета, 2000 - 221 с.; ил.
Архангельский А.Я. Программирование в Delphi 7. - М.: ООО «Бином-Пресс», 2003 - 1152 с.; ил.
Баженова И.Ю. Delphi7. Самоучитель программиста. - М.: КУДИЦ-ОБРАЗ, 2003 - 448 с.; ил.
Васильков Ю.В., Василькова Н.Н. Компьютерные технологии вычислений в математическом моделировании; Учеб. Пособие. - М.: Финансы и статистика, 2004 - 256 с.; ил
Методические указания по выполнению курсового проекта по дисциплине Основы алгоритмизации и программирования.
СТП 7-2005. Дипломные (курсовые) проекты). Общие требования оформления текстовых документов.
Приложение А
(обязательное)
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Menus, XPMan, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label5: TLabel;
Label6: TLabel;
Button2: TButton;
Label7: TLabel;
Label8: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
PopupMenu1: TPopupMenu;
N4: TMenuItem;
N5: TMenuItem;
Button3: TButton;
Label9: TLabel;
Edit5: TEdit;
XPManifest1: TXPManifest;
N6: TMenuItem;
Button4: TButton;
N7: TMenuItem;
N11: TMenuItem;
N4111: TMenuItem;
N21: TMenuItem;
N41: TMenuItem;
StringGrid2: TStringGrid;
Button5: TButton;
Label10: TLabel;
Label11: TLabel;
Button6: TButton;
Button7: TButton;
Button8: TButton;
N12: TMenuItem;
N22: TMenuItem;
N8: TMenuItem;
Jxbcnbnm1: TMenuItem;
N10: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
Button9: TButton;
Button10: TButton;
ColorDialog1: TColorDialog;
PopupMenu2: TPopupMenu;
N20: TMenuItem;
N23: TMenuItem;
ColorDialog2: TColorDialog;
ColorDialog3: TColorDialog;
N24: TMenuItem;
N25: TMenuItem;
N26: TMenuItem;
PopupMenu3: TPopupMenu;
F1: TMenuItem;
F2: TMenuItem;
N9: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1KeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure N41Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure N23Click(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure N24Click(Sender: TObject);
procedure N25Click(Sender: TObject);
procedure N26Click(Sender: TObject);
procedure F1Click(Sender: TObject);
procedure F2Click(Sender: TObject);
procedure N9Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.close;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
N:integer;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
N:=strtoint(edit3.Text);
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit5.Text:='';
end;
procedure TForm1.Button3Click(Sender: TObject);
var x1,xn,t,h,a,b:real; N,i:integer;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
begin
Form1.Button4.Enabled:=true;
x1:=strtofloat(edit1.Text);
xn:=strtofloat(edit2.text);
a:=strtofloat(edit5.Text);
N:=strtoint(edit3.Text);
h:=(xn-x1)/N;
stringgrid1.cells[1,1]:=floattostr(x1);
for i:=1 to (N+2) do
begin
stringgrid1.ColCount:=(N+2);
stringgrid1.cells[i+1,1]:=floattostr(strtofloat(stringgrid1.cells[i,1])+h);
t:=strtofloat(stringgrid1.cells[i,1]);
stringgrid1.Cells[i,2]:=floattostr(-sin(a*t*t)*(2*a*t));
end;
for i:=1 to (N+2) do
stringgrid1.Cells[i,0]:='x'+inttostr(i);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.Cells[0,1]:='X';
stringgrid1.Cells[0,2]:='y-пр.';
stringgrid1.Cells[0,3]:='y-по методу';
stringgrid1.Cells[0,4]:='y';
stringgrid2.Cells[0,1]:='X';
stringgrid2.Cells[0,2]:='y-пр.';
stringgrid2.Cells[0,3]:='y-по методу';
stringgrid2.Cells[0,4]:='y';
end;
procedure TForm1.Button4Click(Sender: TObject);
var i,n:integer; x1,xn,h,a,b:real;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
a:=strtofloat(edit5.Text);
x1:=strtofloat(edit1.Text);
xn:=strtofloat(edit2.Text);
n:=strtoint(edit3.Text);
h:=(xn-x1)/n;
for i:=1 to (n+1) do
begin
stringgrid1.Cells[i,3]:=floattostr(Cos(a*strtofloat(stringgrid1.Cells[i+2,1])*strtofloat(stringgrid1.Cells[i+2,1]))+h*(23*(-sin(a*strtofloat(stringgrid1.Cells[i+2,1])*strtofloat(stringgrid1.Cells[i+2,1])))*(2*a*strtofloat(stringgrid1.Cells[i+2,1]))-16*(-sin(a*strtofloat(stringgrid1.Cells[i+1,1])*strtofloat(stringgrid1.Cells[i+1,1]))*(2*a*strtofloat(stringgrid1.Cells[i+1,1])))+5*(-sin(a*strtofloat(stringgrid1.Cells[i,1])*strtofloat(stringgrid1.Cells[i,1]))*(2*a*strtofloat(stringgrid1.Cells[i,1]))))/12)
end;
end;
procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
var i:integer;
begin
for i:=250 to 0 do
begin
form1.AlphaBlendValue:=i;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
begin {
for i:=250 downto 0 do
begin
form1.AlphaBlendValue:=i;
end; }
end;
procedure TForm1.Button5Click(Sender: TObject);
var x1,xn,t,h,a,b:real; f,N,i:integer;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
begin
Form1.Button8.Enabled:=true;
x1:=strtofloat(edit1.Text);
xn:=strtofloat(edit2.text);
a:=strtofloat(edit5.Text);
N:=strtoint(edit3.Text);
h:=(xn-x1)/N;
stringgrid2.cells[1,1]:=floattostr(x1);
for i:=1 to (N+2) do
begin
stringgrid2.ColCount:=(N+2);
stringgrid2.cells[i+1,1]:=floattostr(strtofloat(stringgrid2.cells[i,1])+h);
t:=strtofloat(stringgrid2.cells[i,1]);
stringgrid2.Cells[i,2]:=floattostr(-Sin(a*t*t)*(2*a*t));
end;
for i:=1 to (N+2) do
stringgrid2.Cells[i,0]:='x'+inttostr(i);
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
var r:integer; N:integer;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
N:=strtoint(edit3.Text);
for r:=1 to (N+2) do
begin
stringgrid1.Cells[r,1]:='';
stringgrid1.Cells[r,2]:='';
stringgrid1.Cells[r,3]:='';
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var r:integer; N:integer;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверьте правильность введённых значений');
end
else
N:=strtoint(edit3.Text);
for r:=1 to (N+2) do
begin
stringgrid2.Cells[r,1]:='';
stringgrid2.Cells[r,2]:='';
stringgrid2.Cells[r,3]:='';
end;
end;
procedure TForm1.Button8Click(Sender: TObject);
var i,n:integer; x1,xn,a,b,h:real;
begin
IF (edit1.text='') or (edit2.text='') or (edit3.text='') or (edit5.text='') then
begin
showmessage('Проверте правильность введённых значений');
end
else
a:=strtofloat(edit5.Text);
n:=strtoint(edit3.Text)-1;
x1:=strtofloat(edit1.Text);
xn:=strtofloat(edit2.Text);
h:=(xn-x1)/n;
for i:=1 to (n+1) do
begin
stringgrid2.Cells[i,3]:=floattostr((cos(a*strtofloat(stringgrid2.Cells[i+3,1])*strtofloat(stringgrid2.Cells[i+3,1]))+cos(a*strtofloat(stringgrid2.Cells[i+2,1])*strtofloat(stringgrid2.Cells[i+2,1]))+cos(a*strtofloat(stringgrid2.Cells[i+1,1])*strtofloat(stringgrid2.Cells[i+1,1])))/3+h*(91*(-sin(a*strtofloat(stringgrid2.Cells[i+3,1])*strtofloat(stringgrid2.Cells[i+3,1]))*(2*a*strtofloat(stringgrid2.Cells[i+3,1])))-63*(-sin(a*strtofloat(stringgrid2.Cells[i+2,1])*strtofloat(stringgrid2.Cells[i+2,1]))*(2*a*strtofloat(stringgrid2.Cells[i+2,1])))+57*(-sin(a*strtofloat(stringgrid2.Cells[i+1,1])*strtofloat(stringgrid2.Cells[i+1,1]))*(2*a*strtofloat(stringgrid2.Cells[i+1,1])))-13*(-sin(a*strtofloat(stringgrid2.Cells[i,1])*strtofloat(stringgrid2.Cells[i,1]))*(2*a*strtofloat(stringgrid2.Cells[i,1]))))/36);
end;
end;
procedure TForm1.N41Click(Sender: TObject);
begin
Form1.Button8.Click;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key in['0'..'9',#8,'-']) then
else key:=#0;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if (key in['0'..'9',#8,'-']) then
else key:=#0;
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if (key in['0'..'9',#8,'-']) then
else key:=#0;
end;
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
if (key in['0'..'9',#8,'-']) then
else key:=#0;
end;
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if (key in['0'..'9',#8,'-']) then
else key:=#0;
end;
procedure TForm1.N23Click(Sender: TObject);
begin
If Form1.ColorDialog2.Execute then
Form2.Image1.Canvas.Pen.Color:=Form1.ColorDialog2.Color;
end;
procedure TForm1.N20Click(Sender: TObject);
begin
If Form1.ColorDialog1.Execute then
Form2.Image1.Canvas.Brush.Color:=Form1.ColorDialog1.Color;
end;
procedure TForm1.N24Click(Sender: TObject);
begin
if Form1.ColorDialog3.Execute then
end;
procedure TForm1.N25Click(Sender: TObject);
begin
N25.Checked:=true;
f1.Checked:=false;
Form2.ComboBox1.Visible:=false;
Form2.Timer1.Enabled:=true;
Form2.ShowModal;
end;
procedure TForm1.N26Click(Sender: TObject);
begin
n26.Checked:=true;
f2.Checked:=false;
Form3.ComboBox1.Visible:=false;
Form3.Timer1.Enabled:=true;
Form3.ShowModal;
end;
procedure TForm1.F1Click(Sender: TObject);
begin
F1.Checked:=true;
n25.Checked:=false;
Form2.ComboBox1.Visible:=true;
Form2.Image1.Picture.LoadFromFile('1.bmp');
Form2.ShowModal;
end;
procedure TForm1.F2Click(Sender: TObject);
begin
F2.Checked:=true;
n26.Checked:=false;
Form3.Timer1.Enabled:=true;
Form3.ComboBox1.Visible:=true;
Form3.Image1.Picture.LoadFromFile('122.bmp');
Form3.ShowModal;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
form4.show;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, Menus, StdCtrls;
type
TForm2 = class(TForm)
SaveDialog1: TSaveDialog;
Image1: TImage;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
Timer1: TTimer;
N2: TMenuItem;
Timer2: TTimer;
ComboBox1: TComboBox;
procedure FormPaint(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
var
xl,x2:real; // границы изменения аргумента функции
yl,y2:real; // границы изменения значения функции
x:real; // аргумент функции
y:real; // значение функции в точке х
dx:real; // приращение аргумента
l,b:integer; // левый нижний угол области вывода графика
w,h:integer; // ширина и высота области вывода графика
mx,my:real; // масштаб по осям X и Y
x0,y0:integer; // точка -- начало координатbegin
// область вывода графика "
{$R *.dfm}
Function f(x:real):real;
var a,b:real ;
i,n:integer;
begin
a:=strtofloat(Form1.edit5.Text);
f:=cos(a*x*x);
end; // строит трафик функции
procedure TForm2.FormPaint(Sender: TObject);
begin
end;// изменился размер окна программы
procedure TForm2.N1Click(Sender: TObject);
begin
if Form2.SaveDialog1.Execute then
begin
Form2.Image1.Picture.SaveToFile(form2.SaveDialog1.FileName);
end;
end;
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
case MessageDlg('Сохранить изображение?',mtwarning,mbYesNoCancel,0) of
mrYes:if Form2.SaveDialog1.Execute then
begin
Form2.Image1.Picture.SaveToFile(form2.SaveDialog1.FileName+'.bmp');
form2.Close;
end;
mrNo:form2.Close;
end;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
l:=10; // X -- координата левого верхнего
// угла
b:=Form2.ClientHeight-20; // Y -- координата левого верхнего
// угла
h:=Form2.ClientHeight-40; // высота
w:=Form2.Width-40; // ширина xl:=0; // нижняя граница диапазона аргумента
x2:=25; // верхняя граница диапазона аргумента
dx:=0.01; // шаг аргумента // найдем максимальное и минимальное значения
// функции на отрезке [xl,x2]
yl:=f(xl); // минимум
y2:=f(xl); //максимум
x:=xl;
Image1.Canvas.TextOut(12,5,'y');
Image1.Canvas.TextOut(640,80,'x');
Image1.Canvas.TextOut(7,20,'^');
Image1.Canvas.TextOut(650,71,'>');
repeat
y := f(x);
if y < yl then yl:=y;
if y > y2 then y2:=y;
x:=x+dx;
until (x>=x2);
// вычислим масштаб
my:=h/abs(y2-yl); // масштаб по оси Y
mx:=w/abs(x2-xl)+50; // масштаб по оси X // оси
x0:=1;
y0:=b-Abs(Round(yl*my)); with form2.Image1.Canvas do
begin
// оси
MoveTo(l,b);LineTo(l,b-h);
MoveTo(x0,y0);LineTo(x0+w, y0) ;
TextOut (l+5,b-h,FloatToStrF(y2,ffGeneral,6,3) ) ;
TextOut(1+5,b,FloatToStrF(yl,ffGeneral, 6,3) ) ;
// построение графика
x:=xl;
if form1.F1.Checked=true then begin
timer2.Enabled:=true;
timer1.Enabled:=false; end;
if form1.N25.Checked=true then begin
repeat
y:=f(x) ;
Pixels[x0+Round(x*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
x:=x+dx;
until (x>=x2) ;
end;
end;
end;
procedure TForm2.Image1Click(Sender: TObject);
begin
Form2.Timer1.Enabled:=true;
end;
procedure TForm2.Timer2Timer(Sender: TObject);
begin
if x<=x2 then begin
y:=f(x);
form2.Image1.Canvas.Pixels[x0+Round(x*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
form2.Image1.Canvas.Pixels[x0+Round((x+0.005)*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
form2.Image1.Canvas.Pixels[x0+Round((x+0.005)*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
form2.Image1.Canvas.Pixels[x0+Round((x+0.005)*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
end;
x:=x+0.05;
end;
procedure TForm2.ComboBox1Change(Sender: TObject);
begin
If Form2.ComboBox1.ItemIndex=0 then begin
Form2.Image1.Picture.LoadFromFile('1.bmp');
timer2.Interval:=1000; Form2.Timer2.Enabled:=false;
Form2.Timer1.Enabled:=true; end;
If Form2.ComboBox1.ItemIndex=1 then begin
Form2.Image1.Picture.LoadFromFile('1.bmp');
timer2.Interval:=500; Form2.Timer2.Enabled:=false;
Form2.Timer1.Enabled:=true; end;
If Form2.ComboBox1.ItemIndex=2 then begin
Form2.Image1.Picture.LoadFromFile('1.bmp');
timer2.Interval:=1; Form2.Timer2.Enabled:=false;
Form2.Timer1.Enabled:=true; end;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls;
type
TForm3 = class(TForm)
Image1: TImage;
PopupMenu1: TPopupMenu;
Timer1: TTimer;
SaveDialog1: TSaveDialog;
N1: TMenuItem;
N2: TMenuItem;
Timer2: TTimer;
ComboBox1: TComboBox;
procedure N1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1, Unit2;
var
xl,x2:real; // границы изменения аргумента функции
yl,y2:real; // границы изменения значения функции
x:real; // аргумент функции
y:real; // значение функции в точке х
dx:real; // приращение аргумента
l,b:integer; // левый нижний угол области вывода графика
w,h:integer; // ширина и высота области вывода графика
mx,my:real; // масштаб по осям X и Y
x0,y0:integer; // точка -- начало координатbegin
// область вывода графика "
{$R *.dfm}
Function f(x:real):real;
var a,b:real ;
i,n:integer;
begin
a:=strtofloat(Form1.edit5.Text);
f:=-Sin(a*x*x)*(2*a*x);
end; // строит трафик функции
procedure TForm3.N1Click(Sender: TObject);
begin
if Form3.SaveDialog1.Execute then
begin
Form3.Image1.Picture.SaveToFile(form3.SaveDialog1.FileName);
end;
end;
procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
case MessageDlg('Сохранить изображение?',mtwarning,mbYesNoCancel,0) of
mrYes:if Form3.SaveDialog1.Execute then
begin
Form3.Image1.Picture.SaveToFile(form3.SaveDialog1.FileName+'.bmp');
form3.Close;
end;
mrNo:form3.Close;
end;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
begin
l:=10; // X -- координата левого верхнего
// угла
b:=Form3.ClientHeight-20; // Y -- координата левого верхнего
// угла
h:=Form3.ClientHeight-40; // высота
w:=Form3.Width-40; // ширина xl:=0; // нижняя граница диапазона аргумента
x2:=25; // верхняя граница диапазона аргумента
dx:=0.01; // шаг аргумента // найдем максимальное и минимальное значения
// функции на отрезке [xl,x2]
yl:=f(xl); // минимум
y2:=f(xl); //максимум
x:=xl;
Image1.Canvas.TextOut(12,5,'y');
Image1.Canvas.TextOut(400,80,'x');
Image1.Canvas.TextOut(7,20,'^');
Image1.Canvas.TextOut(400,70,'>');
repeat
y := f(x);
if y < yl then yl:=y;
if y > y2 then y2:=y;
x:=x+dx;
until (x>=x2);
// вычислим масштаб
my:=h/abs(y2-yl); // масштаб по оси Y
mx:=w/abs(x2-xl)+20; // масштаб по оси X // оси
x0:=1;
y0:=b-Abs(Round(yl*my)); with form3.Image1.Canvas do
begin
// оси
MoveTo(l,b);LineTo(l,b-h);
MoveTo(x0,y0);LineTo(x0+w, y0) ;
TextOut (l+5,b-h,FloatToStrF(y2,ffGeneral,6,3) ) ;
TextOut(1+5,b,FloatToStrF(yl,ffGeneral, 6,3) ) ;
// построение графика
x:=xl;
if form1.F2.Checked=true then begin
timer2.Enabled:=true;
timer1.Enabled:=false; end;
if form1.N26.Checked=true then begin
repeat
y:=f(x) ;
Pixels[x0+Round(x*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
x:=x+dx;
until (x>=x2) ;
end;
end;
end;
procedure TForm3.Timer2Timer(Sender: TObject);
begin
if x<=x2 then begin
y:=f(x);
form3.Image1.Canvas.Pixels[x0+Round(x*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
form3.Image1.Canvas.Pixels[x0+Round((x+0.005)*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
form3.Image1.Canvas.Pixels[x0+Round((x+0.005)*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
form3.Image1.Canvas.Pixels[x0+Round((x+0.005)*mx),y0-Round(y*my)]:=Form1.ColorDialog3.Color;
end;
x:=x+0.05;
end;
procedure TForm3.ComboBox1Change(Sender: TObject);
begin If Form3.ComboBox1.ItemIndex=0 then begin
Form3.Image1.Picture.LoadFromFile('122.bmp');
timer2.Interval:=100; Form3.Timer2.Enabled:=false;
Form3.Timer1.Enabled:=true; end;
If Form3.ComboBox1.ItemIndex=1 then begin
Form3.Image1.Picture.LoadFromFile('122.bmp');
timer2.Interval:=50; Form3.Timer2.Enabled:=false;
Form3.Timer1.Enabled:=true; end;
If Form3.ComboBox1.ItemIndex=2 then begin
Form3.Image1.Picture.LoadFromFile('122.bmp');
timer2.Interval:=1; Form3.Timer2.Enabled:=false;
Form3.Timer1.Enabled:=true; end;
end;
procedure TForm3.Image1Click(Sender: TObject);
begin
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TForm4 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
end.
Размещено на Allbest.ru
Подобные документы
Математическое описание задачи решения обыкновенного дифференциального уравнения численным явным методом Рунге-Кутта, разработка схемы алгоритма и написание программы в среде программирования Microsoft Visual Studio 2010. Тестирование работы программы.
курсовая работа [1,1 M], добавлен 22.01.2014Разработка прикладного программного обеспечения для решения расчетных задач для компьютера. Численное интегрирование - вычисление значения определённого интеграла. Проектирование алгоритма численного метода. Тестирование работоспособности программы.
курсовая работа [1,1 M], добавлен 03.08.2011Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Решение дифференциального уравнения N-го порядка методом интегрирования при помощи характеристического уравнения, методом интегрирования и операторным методом для значений аргументов при заданных начальных условиях и нулевых уравнения 4–го порядка.
практическая работа [806,9 K], добавлен 05.12.2009Описание решения задачи, ее постановка, общий подход к решению. Представление исходных данных, условий задачи и целей ее решения. Составление алгоритма решения поставленной задачи. Написание программного обеспечения и тестирование конечного продукта.
курсовая работа [1,1 M], добавлен 03.07.2011Разработка структурной диаграммы программного модуля. Представление схемы для основных расчетов выбранного приложения для создания прямоугольной матрицы. Особенности создания пользовательского интерфейса. Тестирование и отладка спроектированного модуля.
курсовая работа [648,4 K], добавлен 27.05.2015Методика разработки программного модуля для нахождения методом хорд корня уравнения x3-x-0,3=0 с точностью до 0,001 на языке программирования Visual Basic for Application. Схема программного модуля и описание процедуры обработки кнопки "Найти корни".
курсовая работа [394,0 K], добавлен 08.09.2010Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015