Интерполяционный полином Лагранжа
классических программных средств примерами низкоуровневой инкапсуляции
являются записи и массивы. Механизмом инкапсуляции среднего уровня являются
подпрограммы. В объектно-ориентированных системах инкапсулируются
обязанности класса, представляемые его свойствами, операциями и
состояниями. Для метрик учет инкапсуляции приводит к смещению фокуса
измерений с одного модуля на группу свойств и обрабатывающих модулей
(операций). Кроме того, инкапсуляция переводит измерения на более высокий
уровень абстракции. Напротив, классические метрики ориентированы на низкий
уровень – количество булевых условий (цикломатическая сложность) и
количество строк программы.
Информационная закрытость делает невидимыми операционные детали
программного компонента. Другим компонентам доступна только необходимая
информация. Качественные объектно-ориентированные системы поддерживают
высокий уровень информационной закрытости. Таким образом, метрики,
измеряющие степень достигнутой закрытости, тем самым отображают качество
объектно-ориентированного проекта.
Наследование – механизм, обеспечивающий тиражирование обязанностей
одного класса в другие классы. Наследование распространяется через все
уровни иерархии классов. Стандартные программные средства не поддерживают
эту характеристику. Поскольку наследование – основная характеристика
объектно-ориентированных систем, на ней фокусируются многие объектно-
ориентированные метрики (количество детей – потомков класса, количество
родителей, высота класса в иерархии наследования).
Абстракция – это механизм, который позволяет проектировщику выделять
главное в программном компоненте (как свойства, так и операции) без учета
второстепенных деталей. По мере перемещения на более высокие уровни
абстракции мы игнорируем все большее количество деталей, обеспечивая все
общее представление понятия или элемента. По мере перемещения на более
низкие уровни абстракции мы вводим все большее количество деталей,
обеспечивая более точное представление понятия или элемента. Класс – это
абстракция, которая может быть представлена на различных уровнях
детализации и различными способами. Поэтому объектно-ориентированные
метрики должны представлять абстракции в терминах измерений класса.
Классической мерой сложности внутренних связей модуля является
связность, а классической мерой сложности внешних связей – сцепление.
Связность модуля – мера зависимости его частей, это внутренняя
характеристика модуля. Чем выше связность модуля, тем лучше результат
проектирования. Для измерения связности используют понятие силы связности
(СС). Существует 7 типов связности:
1. Связность по совпадению (СС=0). В модуле отсутствуют явно выраженные
внутренние связи.
2. Логическая связность (СС=1). Части модуля объединены по принципу
функционального подобия. Например, модуль состоит из разных
подпрограмм обработки ошибок. При использовании такого модуля клиент
выбирает только одну из подпрограмм. Недостатками является сложное
сопряжение и большая вероятность внесения ошибок при изменении
сопряжения ради одной функции.
3. Временная связность (СС=3). Части модуля не связаны, но необходимы в
один и тот же период работы системы. Недостаток: сильная взаимная
связь с другими модулями, отсюда – сильная чувствительность к
внесению изменений.
4. Процедурная связность (СС=5). Части модуля связаны порядком
выполняемых ими действий, реализующих некоторый сценарий поведения.
5. Коммуникативная связность (СС=7). Части модуля связаны по данным
(работают с одной и той же структурой данных).
6. Информационная (последовательная) связность (СС=9). Выходные данные
одной части используются как входные данные в другой части модуля.
7. Функциональная связность (СС=10). Части модуля вместе реализуют одну
функцию.
Этот метод функционален по своей природе, поэтому наибольшей связностью
здесь объявлена функциональная связность. Вместе с тем одним из
принципиальных преимуществ объектно-ориентированного подхода является
естественная связность объектов. Максимально связанным является объект, в
котором представляется единая сущность и в который включены все операции
над этой сущностью. Следовательно, восьмой тип можно определить так:
8. Объектная связность. Каждая операция обеспечивает функциональность,
которая предусматривает, что все свойства объекта будут
модифицироваться, отображаться и использоваться как базис для
предоставления услуг.
Высокая связность – желательная характеристика, так как она означает,
что объект представляет единую часть в проблемной области, существует в
едином пространстве. При изменении системы все действия над частью
инкапсулируются в едином компоненте. Поэтому для производства изменения нет
нужды модифицировать много компонентов. Если функциональность в объектно-
ориентированной системе обеспечивается наследованием от суперклассов, то
связность объекта, который наследует свойства и операции, уменьшается. В
этом случае нельзя рассматривать объект как отдельный модуль – должны
учитываться все его суперклассы. Системные средства просмотра содействуют
такому учету. Однако понимание элемента, который наследует свойства от
нескольких суперклассов, резко усложняется.
В классическом методе Л. Констентайна и Э. Йордана определены шесть
типов сцепления, которые ориентированы на процедурное проектирование.
Принципиальное преимущество объектно-ориентированного проектирования в том,
что природа объектов приводит к созданию слабо сцепленных систем.
Фундаментальное свойство объектно-ориентированного проектирования
заключается в скрытости содержания объекта. Как правило, содержание объекта
невидимо внешним элементам. Степень автономности объекта достаточно высока.
Любой объект может быть замещен другим объектом с таким же интерфейсом. Тем
не менее наследование в объектно-ориентированных системах приводит к другой
форме сцепления. Объекты, которые наследуют свойства и операции, сцеплены с
их суперклассами. Изменения в суперклассах должны проводиться осторожно,
так как эти изменения распространяются во все классы, которые наследуют их
характеристики.
Таким образом, сами по себе объектно-ориентированные механизмы не
гарантируют минимального сцепления. Конечно, классы – мощное средство
абстракции данных. Их введение уменьшило поток данных между модулями и,
следовательно, снизило общее сцепление внутри системы. Однако количество
типов зависимостей между модулями выросло. Появились отношения
наследования, делегирования, реализации и т.д. Более разнообразным стал
состав модулей в системе (классы, объекты, свободные функции и процедуры,
пакеты). Отсюда вывод: необходимость измерения и регулирования сцепления в
объектно-ориентированных системах обострилась.
Сцепление – мера зависимости модулей по данным, внешняя характеристика
модуля, которую желательно уменьшать. Количественно сцепление измеряется
степенью сцепления (СЦ). Выделяют 6 типов сцепления:
1. Сцепление по данным (СЦ=1). Модуль А вызывает модуль В. Все входные
и выходные параметры вызываемого модуля – простые элементы данных.
2. Сцепление по образцу (СЦ=3). В качестве параметров используются
структуры данных.
3. Сцепление по управлению (СЦ=4). Модуль А явно управляет
функционированием модуля В (с помощью флагов или переключателей),
посылая ему управляющие данные.
4. Сцепление по внешним ссылкам (СЦ=5). Модули А и В ссылаются на один
и тот же глобальный элемент данных.
5. Сцепление по общей области (СЦ=7). Модули разделяют одну и ту же
глобальную структуру данных.
6. Сцепление по содержанию (СЦ=9). Один модуль прямо ссылается на
содержание другого модуля (не через точку входа). Например, коды их
программ перемежаются друг с другом.
Глава 2
1. Интегрированная среда разработки Delphi
Курсовой проект был разработан в интегрированной среде разработки
Delphi 7, далее последует описание данного программного изделия.
Прикладные программы, или приложения, Delphi создаются в
интегрированной среде разработки. Пользовательский интерфейс этой среды
служит для организации взаимодействия с программистом и включает в себя ряд
окон, содержащих различные элементы управления. С помощью средств
интегрированной среды разработчику удобно проектировать интерфейсную часть
приложения, а также писать программный код и связывать его с элементами
управления. В интегрированной среде разработки проходят все этапы создания
приложения, включая отладку. Интегрированная среда разработки Delphi 7
представляет собой многооконную систему.
Язык Delphi реализует концепцию объектно-ориентированного
программирования. Это означает, что функциональность приложения
определяется набором взаимосвязанных задач, каждая из которых становится
самостоятельным объектом. У объекта есть свойства (т.е. характеристики, или
атрибуты), методы, определяющие его поведение, и события, на которые он
реагирует. Одним из наиболее важных понятий объектно-ориентированного
программирования является класс. Класс представляет собой дальнейшее
развитие концепции типа и объединяет в себе задание не только структуры и
размера переменных, но и выполняемых над ним операций. Объекты в программе
всегда являются экземплярами того или иного класса.
Все вычисления курсовой программы построены на знании интерполяционного
полинома Лагранжа (интерполяционный многочлен в форме Лагранжа). Именно с
его помощью вычисляется значение функции при нескольких заданных
пользователем значениях аргумента и некоторым другим входным данным.
Интерполяционным многочленом называется многочлен [pic] степени не выше n,
который в узлах [pic]принимает значения [pic].
Условия применения полинома:
Функция [pic] непрерывна на интервале [pic] и задана некоторыми своими
значениями [pic] для соответствующих значений аргумента [pic]. Полином
используется, когда необходимо найти значение этой функции в точке [pic].
Теорема:
Пусть заданы узлы [pic], среди которых нет совпадающих и значения [pic]
некоторой функции f(x) в этих узлах. Существует один и только один
многочлен [pic] степени не выше n, принимающий в узлах [pic] значения
[pic]. Введем вспомогательные многочлены
[pic].
Это многочлен степени n, для которого выполняется равенство [pic].
Многочлен [pic] называется полиномом Лагранжа.
При применении программы, названной «Интерполирование», пользователь
в первом окне вводит количество аргументов, столько узлов [pic] будет в
дальнейшем использоваться программой. Во втором окне пользователь вводит
значения аргументов и функций для построения полинома Лагранжа. В третьем
окне задается значение аргумента, функцию которого необходимо найти. При
нажатии кнопки «Вычислить», приводится в действие алгоритм программы,
происходит вычисление и выдается результат и одновременно с этим процессом
программа находит погрешность вычисления. Пользователь сам может оценить,
насколько полученный в ходе вычислений результат расходится с правильным,
используя погрешность.
2. Характеристики модулей программного средства
1. Связность внутри модулей
Модули 1, 2 и 4 имеют внутреннюю связность временную (части модуля не
связаны, но необходимы в один и тот же период работы системы). Третий
модуль имеет тип связности – информативный последовательный, который
говорит о том, что выходные данные одной части модуля используются как
входные данные другой части модуля. Эта связи присутствует, потому что
function Ln (k: Integer): Real; function Pol ( ): Real; и function Delta (
): Real; являются входными данными для Procedure TForm3/Button1Click
(Sender: Tobject).
2. Сцепление модулей между собой
Модуль 1 сцеплен с модулем 2 по данным (тип сцепления первый, СЦ=1), то
есть модуль 1 вызывает модуль 2, входные и выходные параметры – простые
элементы данных.
Модуль 3 с модулем 2 сцеплен по содержанию, то есть модуль 3 прямо
ссылается на содержание модуля 2. Модуль 3 с первым модулем не сцеплены,
так как, хотя они оба сцеплены со вторым модулем, но каждый из них имеет
разный тип сцепления, не имеющих ничего общего.
Четвертый модуль, являющийся сведениями о программе связан с модулями
1, 2 и 3 по данным, все три модуля вызывают четвертый.
Заключение
Во время выполнения курсовой работы был разработан программное
средство, вычисляющее значение функции по заданному значению аргумента,
выполняющегося с помощью средств вычислительной математики. В основе
решения задачи, как было описано во второй части курсовой работы лежит
вычисление интерполяционным полиномом Лагранжа. Было создано четыре модуля,
три из которых являются активными, четвертый («О программе») может быть
вызван с любого из трех главных модулей. Три основных модуля предлагают
поэтапное выполнение задачи; в первом модуле вводятся начальные данные, во
втором заполняется таблица со значениями функций и аргументов (это
промежуточные точки, на основании которых и строится полином Лагранжа).
Третий модуль является основным, использующим данные из второго и третьего
модуля для вычислительного процесса. Интерфейс программы совместим с
Windows-интерфейсом благодаря тому, что программа, в которой
разрабатывалась курсовая работа, – Delphi7 – предоставляет такую
возможность и поддерживает именно Windows-интерфейс. Все пункты курсового
задания были выполнены, разработанное программное средство выполняет
поставленную перед ним задачу.
Приложение 1. Исходный код программного средства:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
Memo2: TMemo;
Label1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N4: TMenuItem;
N2: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A, k :integer;
implementation
uses Unit2, unit6, Unit3;
{$R *.dfm}
procedure TForm1.N2Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
k:=StrToInt(edit1.Text);
if (k30)
then ShowMessage('Не верно задано значение')
else
begin
k:=StrToInt(edit1.Text);
Form2.StringGrid1.ColCount:=(k+1);
Form2.visible:=true;
Form1.visible:=false;
end;
Form2.StringGrid1.Cells[0,0]:='X';
Form2.StringGrid1.Cells[0,1]:='Y';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then key:=#0;
end;
end.
_
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, Grids, Menus;
type
TForm2 = class(TForm)
Label3: TLabel;
Button1: TButton;
Label5: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N4: TMenuItem;
N2: TMenuItem;
StringGrid1: TStringGrid;
Label1: TLabel;
Button2: TButton;
procedure Button1OnClick(Sender: TObject);
procedure Button2OnClick(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
I, J: Integer;
implementation
uses Unit1, Unit6, Unit3;
{$R *.dfm}
procedure TForm2.N4Click(Sender: TObject);
begin
close;
Form1.Close;
end;
procedure TForm2.Button1OnClick(Sender: TObject);
begin
Form3.visible:=true;
Form2.visible:=false;
end;
procedure TForm2.Button2OnClick(Sender: TObject);
begin
Form1.visible:=true;
Form2.visible:=false;
end;
procedure TForm2.N2Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TForm2.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', '.']) then key:=#0;
end;
end.
unit unit3;
interface
uses
Windows, Math, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ComCtrls;
type
TForm3 = class(TForm)
Label2: TLabel;
Edit1: TEdit;
Memo1: TMemo;
Edit3: TEdit;
Label1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N4: TMenuItem;
N7: TMenuItem;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char );
procedure N4Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations tion }
public
{ Public declarations }
end;
var
Form3: TForm3;
i, j, A, k: Integer;
Y, X: array [1..30] of Extended;
t, P, Dl: Real;
implementation
uses Unit1, Unit2, Unit6;
{$R *.dfm}
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char); //
Integer
begin
if not(key in ['0'..'9']) then Key:=#0;
end;
procedure TForm3.N4Click(Sender: TObject);
begin
Close;
end;
procedure TForm3.N7Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;
function Ln(k: integer): Real;
var Proizved1, Proizved2: Real;
begin
t:=StrToFloat(Form3.Edit1.Text);
i:=1;
Proizved1:=1;
Proizved2:=1;
repeat
if k<>i then begin
Proizved1:=Proizved1*(t-x[i]);
Proizved2:=Proizved2*(x[k]-x[i]);
end;
i:=i+1;
until i>A;
Ln:=Proizved1/Proizved2;
end;
function Pol( ): Real;
var
Sum: Real;
i: Integer;
begin
i:=1;
Sum:=0;
repeat
Sum:=Ln(i)*Y[i]+Sum;
i:=i+1;
until i>A;
Pol:=Sum;
end;
function Delta( ): Real;
var
Sum: Real;
i: Integer;
begin
i:=1;
Sum:=0;
repeat
Sum:=ABS(Ln(i))*0.0002+Sum;
i:=i+1;
until i>A;
Delta:=Sum;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
i: Integer;
S: real;
begin
A:=StrToInt(Form1.Edit1.Text);
S:=0;
for i:=1 to A do begin
X[i]:=StrToFloat(Form2.StringGrid1.Cells[i,0]);
Y[i]:=StrToFloat(Form2.StringGrid1.Cells[i,1]);
end;
P:=Pol();
Dl:=Delta();
for i:=1 to A do S:=S+Ln(i);
ShowMessage(FloatToStr(S));
Form3.Edit3.Text:=FloatToStr(P);
Form3.Edit2.Text:=FloatToStr(Dl);
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
Form3.visible:=false;
Form2.visible:=true;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
Close;
Form2.Close;
Form1.Close;
end;
end.
unit Unit6; //AboutBox
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
type
TAboutBox = class(TForm)
Panel1: TPanel;
ProductName: TLabel;
Version: TLabel;
Copyright: TLabel;
Comments: TLabel;
Image1: TImage;
BitBtn1: TBitBtn;
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutBox: TAboutBox;
implementation
{$R *.dfm}
end.
Приложение 2. Блок-схема программного средства:
Приложение 3. Блок-схема алгоритма вычисления (третий модуль)
Приложение 4. Тесты – наборы проверочных данных – для проверки правильности
работы программы.
Первый проверочный набор.
В первом открывшемся окне, в пустое поле вводим цифру 6.
Во втором открывшемся окне, представленную таблицу заполняем согласно
представленным ниже данным.
|X |1 |2 |3 |4 |5 |6 |
|Y |7 |8 |9 |7 |8 |9 |
В третьем окне вводим: Х=13, и должны получить результат Y= –10 442.
Эти результаты получились из приведенных ниже расчетов:
[pic]
[pic]
[pic]
[pic]
[pic]
[pic]
[pic]
[pic][pic]
Результатом должно стать число – 10 442.
Второй проверочный набор.
Второй проверочный набор является более простым вариантом, не требующим
математического подтверждения. Он представляет собой аргументы и их
квадраты.
В первом окне вводим число 4.
Во втором вводим в строчку Х числа 1, 2, 4, 5, а в строчку Y числа 1,
4, 16, 25, являющиеся квадратами этих аргументов. Этот набор данных
представлен в таблице ниже:
|X |1 |2 |4 |5 |
|Y |1 |4 |16 |25 |
Тогда в третьем окошке вводим любое число, квадрат которого Вам
известен, например, число 3, и в окошке «Результаты» должны получить число
9, в окошке «Погрешность вычисления» получаем погрешность, которая
появляется при вычислении функции данным методом (интерполяционным
полиномом Лагранжа). Можно взять и любое другое число.
Список использованных источников
1. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. -
368 с.
2. Лисков Б., Гатэг Дж. Использование абстракций и спецификаций при
разработке программ: Пер. с англ. - М.: Мир, 1999. - 424 с.
2. Иванов А.Г., Карпова А.В., Семик В.П., Филинов Ю.Е. Объектно-
ориентированная среда программирования. Системы и средства информатики.
Вып.2. М.: Наука, 1991.
3. Программирование. Специальный выпуск по объектно-ориентированному
программированию. № 6, 1990.
4. Объектно-ориентированный подход технологии программирования/ Иванов
А.Г., Пятницкий А.А, Филинов Ю.Е. – СПб.: Питер, 2003. – 443 с.: ил.
5. Макаров А.А. Лукашин Ю.П. Объектно-ориентированный подход в
программировании. – М.: Финансы и статистика, 2000. – 356 с.
-----------------------
Left = 308
Top = 244
Width = 447
Height = 272
Caption = 'Интерполирование'
Color = clBtnFace
Menu = MainMenu1
Position = poScreenCenter
Visible = True
PixelsPerInch = 96
TextHeight = 13
Form 1
N2Click
N4Click
Button1Click
Edit1KeyPress
Left = 16
Top = 152
Width = 299
Height = 13
Cursor = crArrow
Caption = 'Нажмите кнопку для пеpехода на следующий шаг'
Label 1
Left = 16
Top = 8
Width = 425
Height = 81
Cursor = crArrow
BorderStyle = bsNone
Lines.Strings = ('Данная программа предназначена для расчета значения
функций, заданных таблично. По введенному значению аргумента выводится
значение функции. По точкам, которые Вы введете, будет построен
интерполяционный полином и с его помощью найдено значение функции’)
ParentColor = True
ParentFont = False
ReadOnly = True
TabOrder = 1
Memo 1
Tag = 2
Left = 16
Top = 120
Width = 65
Height = 21
TabOrder = 2
Edit 1
OnKeyPress = Edit1KeyPress
Left = 16
Top = 88
Width = 409
Height = 33
Cursor = crArrow
BorderStyle = bsNone
DragCursor = crDefault
Lines.Strings = ('Введите количество точек, из которых будет состоять
полином: (не меньше 4 и не больше 30')
ParentColor = True
ParentFont = False
ReadOnly = True
TabOrder = 0
Memo 2
N1
Caption = 'Файл'
N4
Caption = 'Выход'
MainMenu 1
BiDiMode = bdRightToLeft
ParentBiDiMode = False
Left = 400
Top = 184
OnClick = N4Click
N2
Caption = ‘О программе’
OnClick = N2Click
AboutBox
Button 1
Left = 16
Top = 177
Width = 105
Height = 33
Caption = 'ДАЛЕЕ'
TabOrder = 3
OnClick = Button1Click
Form 2
Left = 308
Top = 244
Width = 447
Height = 272
Caption = 'Интерполирование'
Color = clBtnFace
Menu = MainMenu1
Position = poScreenCenter
Visible = True
PixelsPerInch = 96
TextHeight = 13
Form 2
N2Click
N4Click
Button1Click
Button2Click
StringGrid1KeyPress
Label 3
Left = 16
Top = 8
Width = 169
Height = 13
Caption = 'В ячейки введите значения:'
ParentFont = False
Label 5
Left = 16
Top = 136
Width = 299
Height = 13
Caption = 'Нажмите кнопку для перехода на следующий шаг' ParentFont =
False
Label 1
Left = 16
Top = 152
Width = 228
Height = 13
Caption = 'или для возврата на предыдущий шаг'
ParentFont = False
Button 1
Left = 152
Top = 177
Width = 105
Height = 32
Caption = 'ДАЛЕЕ'
ParentFont = False
TabOrder = 0
OnClick = Button1OnClick
Form 3
N1
Caption = 'Файл'
N4
Caption = 'Выход'
MainMenu 1
BiDiMode = bdRightToLeft
ParentBiDiMode = False
Left = 400
Top = 184
OnClick = N4Click
N2
Caption = ‘О программе’
OnClick = N2Click
AboutBox
Button 2
Left = 16
Top = 177
Width = 105
Height = 32
Caption = 'НАЗАД'
ParentFont = False
TabOrder = 2
OnClick = Button2OnClick
Form 1
StringGrid
1???????????????????????????????????????????????????????????????????????????
??????????????
Tag = 5
Left = 16
Top = 40
Width = 393
Height = 81
Color = clCaptionText
DefaultColWidth = 55
RowCount = 2
FixedRows = 0
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine,
goRangeSelect, goEditing, goTabs]
ParentFont = False
ScrollBars = ssHorizontal
TabOrder = 1
OnKeyPress = StringGrid1KeyPress
Left = 308
Top = 244
Width = 447
Height = 272
Caption = 'Интерполирование'
Color = clBtnFace
Menu = MainMenu1
Position = poScreenCenter
Visible = True
PixelsPerInch = 96
TextHeight = 13
Form 3
N7Click
N4Click
Button1Click
Button2Click
Button3Click
Edit1KeyPress
Label 2
Left = 16
Top = 82
Width = 141
Height = 13
Caption = 'Полученный результат:'
ParentFont = False
Label 1
Left = 200
Top = 26
Width = 17
Height = 13
Caption = 'X='
ParentFont = False
Label 3
Left = 200
Top = 84
Width = 16
Height = 13
Caption = 'Y='
ParentFont = False
Label 4
Left = 16
Top = 128
Width = 159
Height = 13
Caption = 'Погрешность вычисления:'
ParentFont = False
Label 5
Left = 184
Top = 128
Width = 38
Height = 13
Caption = 'Delta='
ParentFont = False
Edit 1
Tag = 5
Left = 224
Top = 24
Width = 121
Height = 21
TabOrder = 0
OnKeyPress = Edit1KeyPress
Memo 1
Left = 16
Top = 8
Width = 169
Height = 41
BorderStyle = bsNone
Color = clBtnFace
Lines.Strings = ('Введите значение аргумента, функцию которого необходимо
найти:')
ParentFont = False
ReadOnly = True
TabOrder = 1
Edit 3
Left = 224
Top = 80
Width = 121
Height = 21
ParentColor = True
ReadOnly = True
TabOrder = 2
Edit 2
Left = 224
Top = 126
Width = 121
Height = 21
Color = clBtnFace
ParentFont = False
ReadOnly = True
TabOrder = 6
Button 1
Left = 360
Top = 22
Width = 73
Height = 25
Caption = 'Вычислить'
ParentFont = False
TabOrder = 3
OnClick = Button1Click
procedure TForm3.Button1Click(Sender: TObject);
Button 2
Left = 16
Top = 176
Width = 105
Height = 33
Caption = 'НАЗАД'
ParentFont = False
TabOrder = 4
OnClick = Button2Click
Form 2
Button 3
Left = 152
Top = 177
Width = 105
Height = 32
Caption = 'ВЫХОД'
ParentFont = False
TabOrder = 5
OnClick = Button3Click
Close
N1
Caption = 'Файл'
N4
Caption = 'Выход'
MainMenu 1
BiDiMode = bdRightToLeft
ParentBiDiMode = False
Left = 400
Top = 184
OnClick = N4Click
N2
Caption = ‘О программе’
OnClick = N2Click
AboutBox
Function Ln (k: Integer): Real;
Proizved1, Proizved2: Real;
i:=1;
Proizved1:=1;
Proizved2:=1;
If k<>1
да
Proizved1:=Proizved1*(t - x[I]);
Proizved2:=Proizved2*(x[k] – x[i]);
нет
End;
Function Pol ( ): Real;
If i>A
да
Ln:=Proizved1/Proizved2;
Sum: Real;
i: Integer;
i:=1;
Sum:=0;
If i
да
да
Sum:=Ln(i)*Y[i]+Sum;
i:=i+1;
If i>A
нет
да
Pol:=Sum;
End;
Function Delta ( ): Real;
Sum: Real;
i: Integer;
i:=1;
Sum:=0;
If i < A
Sum:=ABS (Ln (i) )*0.0002 + Sum;
i:=i+1;
If i > A
да
нет
Delta:=Sum;
End;
X[i]:=StrToFloat(Form2.StringGrid1.Cells[i,0];
Y[i]:=StrToFloat(Form2.StringGrid1.Cells[i,1];
Procedure Button1Click (Sender: TObject);
i: Integer;
S: Real;
A:=StrToInt(Form1.Edit1.Text);
S:=0;
P:=Pol ( );
Dl:=Delta ( );
For i:=1 to A
For I:=1 to A
S:=S+Ln (i);
ShowMessage ( FloatToStr (S) );
Form3.Edit3.Text:=FloatToStr (P);
Form3.Edit2.Text:=FloatToStr (Dl);
End;
Страницы: 1, 2
|