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

Автор работы: Пользователь скрыл имя, 05 Декабря 2011 в 16:37, курсовая работа

Краткое описание

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

Содержание

Введение
1.Общая часть
1.1 Постановка задачи
1.2 Описание математической модели
1.3 Обоснование и описание метода реализации
2.Специальная часть
2.1 Описание алгоритма
2.2 Описание программы
2.3 Руководство системного программиста
2.4 Руководство программиста
2.5 Руководство оператора
2.6 Интерпретация и анализ результатов
Заключение
Список используемой литературы
Приложение
1.Листинг программы
2.Результат решения программы 3.Контрольный пример

Прикрепленные файлы: 1 файл

Документ Microsoft Office Word (2).docx

— 150.63 Кб (Скачать документ)

       Достоинством  данной является простой и наглядный  интерфейс, интуитивное управление, и пятная цветовая гамма

 

       

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

  1. Рудаков, А. В. Технология разработки программных продуктов: Учебные пособия для студентов средне профессиональных образований/ А. В. Рудаков: - М.: Академия, 2005. -208 с.
  2. Гагарина, Л. Г. Основы технологии разработки программных продуктов: Учебные пособия/ Б. Д. Виснадул, А. В. Игошин: – М.: Форум: Инфра-М, 2006. -192 с.
  3. Стандартизация разработки программных средств: Учебные пособия/ Благодатских, В. А. [и др.]; под ред. О. С. Разумова. - М.: Финансы и статистика, 2005. -288с.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение 1

Листинг программы

unit Unit1;

interface 

uses

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

  Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart; 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Edit4: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Button1: TButton;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Panel1: TPanel;

    Panel2: TPanel;

    Edit5: TEdit;

    Edit6: TEdit;

    Edit7: TEdit;

    Panel3: TPanel;

    Edit8: TEdit;

    Edit9: TEdit;

    Edit10: TEdit;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    Chart1: TChart;

    Series1: TLineSeries;

    Series2: TLineSeries;

    Series3: TLineSeries;

    Edit11: TEdit;

    Label10: TLabel;

    Button8: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Panel1Click(Sender: TObject);

    procedure Panel2Click(Sender: TObject);

    procedure Panel3Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Edit5Click(Sender: TObject);

    procedure Edit6Click(Sender: TObject);

    procedure Edit7Click(Sender: TObject);

    procedure Edit8Click(Sender: TObject);

    procedure Edit9Click(Sender: TObject);

    procedure Edit10Click(Sender: TObject);

    procedure Edit5DblClick(Sender: TObject);

    procedure Edit6DblClick(Sender: TObject);

    procedure Edit7DblClick(Sender: TObject);

    procedure Edit8DblClick(Sender: TObject);

    procedure Edit9DblClick(Sender: TObject);

    procedure Edit10DblClick(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Edit1Change(Sender: TObject);

    procedure Edit2Change(Sender: TObject);

    procedure Edit3Change(Sender: TObject);

    procedure Edit4Change(Sender: TObject);

    procedure Button8Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form1: TForm1;

  a,b,c,d: real;  //значения функции

  p,q: real;      //Для Кардано

  Q1: Extended;   //Для Кардано

  x1,x2,y1,y2:real;  //Проверка корней

  ss:string;        //Округление

  a1,b1,a11,b11: real; //Границы отрезка

  kr1,kr2,kx,kx2,ky,kfx,kfx2 :real; //Для графика

  p1,p2,p3:real; //Проверка  выбран ли отрезок

  bolt,fp11,fp12,fp21,fp22:real;//Для  проверки и сокращения отрезка

  e: real; //Погрешность

  s:integer; //Cчетчик  количества шагов

  c1,fa,fc: real;//Переменные  Метода половинного деления

  fb:real;//переменые метода Хорд

  x: array [0..99] of real;

  fpx2,fpx,fx :real;

  x0,fpx0,x11,x12,e1:real;

  krr1, krr2:real; 

implementation 

uses Math; 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);

label Exit;

label N;

Label Y;

label YY;

label NN;

Label NNN;

Label YYY; 

begin 

a:=StrToFloat(Edit1.Text); 

 If a=0 then begin

             Application.MessageBox(PChar('Значение а не  должно быть равно 0. Измените  значение а'),'Отдел по проверке  главной функции',mb_OK);

             goto Exit;

             end;

b:=StrToInt(Edit2.Text);

c:=StrToFloat(Edit3.Text);

d:=StrToFloat(Edit4.Text);

  Button6.Enabled:=true;

  panel1.Color:=clWindow;

  panel2.Color:=clWindow;

  panel3.Color:=clWindow;

  Edit5.Color:=clWindow;

  Edit6.Color:=clWindow;

  Edit7.Color:=clWindow;

  Edit8.Color:=clWindow;

  Edit9.Color:=clWindow;

  Edit10.Color:=clWindow;

  Series1.Clear;

  Series2.Clear;

  Series3.Clear;

  kr1:=0;

  kr2:=0;

  kx:=0;

  kx2:=0;

  ky:=0;

  kfx:=0;

  kfx2:=0;

p:=-1*((b*b)/(3*a*a))+(c/a);

q:=((2*(b*b*b))/(27*(a*a*a)))-((b*c)/(3*a*a))+(d/a); 

Q1:=Power(p/3,3)+Power(q/2,2);

Q1:=RoundTo(Q1,-3);

label9.Caption:=FloatToStr(Q1);

if Q1<0 then Label7.Caption:='Уравнение  имеет три вещественных корня';

if Q1>0 then Label7.Caption:='Уравнение  имеет один вещественный корнень';

if (Q1=0) and (p<>0) then Label7.Caption:='Уравнение имеет два корня';

if (Q1=0) and (p=0) and (q=0) then Label7.Caption:='Уравнение имеет один корень';

x1:=-500;

y1:=a*Power(x1,3)+b*Power(x1,2)+ c*x1+d;

x2:=x1;

N:

if y1>0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2<=0 then begin

                            x1:=x2-1;

                            x1:=RoundTo(x1,-6);

                            Edit5.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit6.Text:=FloatToStr(x2);

                            goto Y;

                            end;

              goto N;

              end;

if y1<=0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2>=0 then begin

                            x1:=x2-1;

                            x1:=RoundTo(x1,-6);

                            Edit5.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit6.Text:=FloatToStr(x2);

                            goto Y;

                            end;

              goto N;

              end;

Y:

kr1:=x1;

kr2:=x2;

Panel1.Visible:=true;

if (Q1<0) or ((Q1=0) and (p<>0))then begin

x1:=x2;

y1:=a*Power(x1,3)+b*Power(x1,2)+ c*x1+d;

x2:=x1;

NN:

if y1>0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2<=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit7.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit8.Text:=FloatToStr(x2);

                            goto YY;

                            end;

              goto NN;

              end;

if y1<=0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2>=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit7.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit8.Text:=FloatToStr(x2);

                            goto YY;

                            end;

              goto NN;

              end; 

YY:

kr2:=x2;

Panel2.Visible:=true;

End;

if Q1<0 then begin

x1:=x2;

y1:=a*Power(x1,3)+b*Power(x1,2)+ c*x1+d;

x2:=x1;

NNN:

if y1>0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2<=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit9.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit10.Text:=FloatToStr(x2);

                            goto YYY;

                            end;

              goto NNN;

              end;

if y1<=0 then begin

              x2:=x2+0.1;

              y2:=a*Power(x2,3)+b*Power(x2,2)+ c*x2+d;

              if y2>=0 then begin

                            x1:=RoundTo(x1,-6);

                            Edit9.Text:=FloatToStr(x1);

                            x2:=RoundTo(x2,-6);

                            Edit10.Text:=FloatToStr(x2);

                            goto YYY;

                            end;

              goto NNN;

              end;

YYY:

kr2:=x2;

Информация о работе Автоматизация решения алгебраических уравнений. Метод половинного деления