Рисунок 3.6 – Решение уравнения схемой Горнера
3.3 Инструкция программиста
Установка программы.
Программа не требует инсталляции и запускается с любого носителя, так как выполнена в виде одного исполняемого файла – Project1.exe.
Для того чтобы открыть и просмотреть код программы необходимо установить у себя среду объектно-ориентированного программирования Delphi2007. окно Delphiв соответствии с рисунком 3.6
Рисунок 3.6 – Окно среды программирования Delphi
Далее в окне проекта нужно выбрать пункт «File» (Файл) , затем пункт «Open Project» в открывшемся окне в соответствии с рисунком 4.6 найти файл проекта приложения Project1.dprи нажать кнопку «Открыть». Далее можно менять текст и внешний вид программы в соответствии со своими вкусовыми качествами.
После внесения изменений в код программы нужно ее откомпилировать, нажав комбинацию клавиш Ctrl+F9.
4. Реализация и тестирование
Рассмотрим контрольный пример выполнения программы. Запустим программу и зададим а=7, b=3 и с=4ю появится окно, повествующее о том, что корней в данном примере нет. Окно выполнения в соответствии с рисунком 4.1
Рисунок 4.1 – Окно отрицательного дискриминанта
Чтобы задать положительный дискриминант можно задать следующие параметры: а=2, b=10, c=8. Результат выполнения в соответствиис рисунком 4.2
Рисунок 4.2 – Положительный дискриминант
Зададим те же параметры для теоремы Виетта. Окно результата данного примера в соответствии с рисунком 4.3
Рисунок 4.3 – Уравнение, решенное теоремой Виета
При простом подборе корней, видно, что они действительно одинаковы как и с теми, которые получились в методе с дискриминантом.
Нажимаем «Выход» и завершаем работу с программой.
Заключение
Результатом проведения всей работы является создание программы, решающей квадратное уравнение несколькими методами, а именно:
- метод с применением дискриминанта;
- решение уравнения с помощью теоремы Виетта;
- нахождение корней с помощью создания схемы Горнера;
Использование мощных средств Delphi 7.0 по созданию приложений работающих в операционной системе Windows позволило создать программный продукт максимально ориентированный на конечного пользователя.
Вся необходимая работа по решению уравнений скрыта внутри и пользователю нет необходимости знать о ней. Он получает только конечный результат.
Более того, программный интерфейс максимально облегчает работу по обращению с уравнением, предоставляя несколько методов решения.
Все стандартные операции типа поиска дискриминанта и нахождения корней берёт на себя машина, что без сомнения экономит усилия и время конечного пользователя.
Весь спектр задач решается в рамках одной программы, с максимальной скоростью, удобством и точностью.
Было создано удобное простое в понимании приложение, позволяющее эффективно найти корни квадратного нелинейного уравнения
Список использованных источников
Ананий В. Левитин Глава 6. Метод преобразования: Схема Горнера и возведение в степень
Волков Е. А. § 2. Вычисление значений многочлена. Схема Горнера // Численные методы. — Учебное пособие для вузов. — 2-е изд., испр. — М.: Наука, 1987. — 248 с.
Винберг Э. Б. Алгебра многочленов. — М.: Просвещение, 1980. — 176 с.
Акулич И.Л. Математическое программирование в примерах и задачах: Учебное пособие для студентов эконом. спец. вузов. — М.: Высшая школа, 1986.
Карманов В.Г. Математическое программирование = Математическое программирование. — Изд-во физ.-мат. литературы, 2004
Максимов Ю.А. Алгоритмы линейного и дискретного программирования. — М.: МИФИ, 1980.
Листингпрограммы
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, XPMan;
type
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Button3: TButton;
Button4: TButton;
XPManifest1: TXPManifest;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,x1,x2:real;
begin
memo1.Lines.Clear;
a:=strtoint(edit1.text);
b:=strtoint(edit2.text);
c:=strtoint(edit3.text);
d:=sqr(b)-(4*a*c);
if d>0 then begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
memo1.Lines.Add('Входные данные:');
memo1.Lines.Add('a= '+floattostr(a));
memo1.Lines.Add('b= '+floattostr(b));
memo1.Lines.Add('c= '+floattostr(c));
memo1.Lines.Add('');
memo1.Lines.Add('D(Дискриминант)= '+floattostr(d));
memo1.Lines.Add('');
memo1.Lines.Add('Корниуравнения');
memo1.Lines.Add('X1= '+floattostr(x1));
memo1.Lines.Add('X2= '+floattostr(x2));
end;
if d<0 then begin
memo1.Lines.Add('Дискриминантменьше0, корнейнет');
end;
if d=0 then begin
x1:=-b/(2*a);
memo1.Lines.Add('Входные данные:');
memo1.Lines.Add('a= '+floattostr(a));
memo1.Lines.Add('b= '+floattostr(b));
memo1.Lines.Add('c= '+floattostr(c));
memo1.Lines.Add('');
memo1.Lines.Add('D(Дискриминант)= 0');
memo1.Lines.Add('');
memo1.Lines.Add('Кореньуравнения');
memo1.Lines.Add('X= '+floattostr(x1));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var s,p,a,b,c,d,x1,x2:real;
begin
memo1.Lines.Clear;
a:=strtoint(edit1.text);
b:=strtoint(edit2.text);
c:=strtoint(edit3.text);
s:=-b/a;
p:=c/a;
memo1.Lines.Add('Входныеданные:');
memo1.Lines.Add('a= '+floattostr(a));
memo1.Lines.Add('b= '+floattostr(b));
memo1.Lines.Add('c= '+floattostr(c));
memo1.Lines.Add('');
memo1.Lines.Add('Суммаипроизведениекорней');
memo1.Lines.Add('X1+X2= '+floattostr(s));
memo1.Lines.Add('X2*X2= '+floattostr(p));
memo1.Lines.Add('');
memo1.Lines.Add('Корниследуетискатьподбором');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm1.Button4Click(Sender: TObject);
var sum,del,j:array [1..8] of integer;
i:integer;
a,b,c,k:integer;
begin
memo1.Lines.Clear;
a:=2;
b:=8;
c:=6;
// Выводим делители С
del[1]:=1;
del[2]:=-1;
del[3]:=2;
del[4]:=-2;
del[5]:=3;
del[6]:=-3;
del[7]:=6;
del[8]:=-6;
//Составляемтаблицу
memo1.Lines.Add('ТаблицаГорнера:');
for i:=1 to 8 do begin
sum[i]:=del[i]*((del[i]*a)+b)+c;
// Выводимзначения
memo1.lines.add(inttostr(del[i])+' '+inttostr(a)+' '+inttostr((del[i]*a)+b)+' '+inttostr(sum[i]));
end;
k:=0;
for i:=1 to 8 do begin
if sum[i]=0 then begin
k:=k+1;
j[k]:=del[i];
end;
end;
memo1.Lines.Add('Делители, у которых сумма равна 0:');
for i:=1 to k do
memo1.Lines.Add('x'+inttostr(i)+'='+inttostr(j[i]));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:='2';
edit2.Text:='8';
edit3.Text:='6';
end;
end.