|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Программная часть аналогична программе, реализованной в среде Турбо Паскаль
Текст программы: unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, StdCtrls, ValEdit, ComCtrls;
type TForm1 = class(TForm) buttonStartIter: TButton; editN: TEdit; Label1: TLabel; editEpsilon: TEdit; Label2: TLabel; results: TMemo; gridA: TStringGrid; gridB: TStringGrid; startButtonZeidel: TButton; procedure buttonStartIterClick(Sender: TObject); procedure editNChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure startButtonZeidelClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
{Глобальные переменные} var Form1: TForm1; a:array[1..100, 1..100] of real; b:array[1..100] of real;
implementation
{$R *.dfm}
{Заполнение массивов данными из таблиц} procedure getArrays; var k,j,n:integer; begin n:=strtoint(Form1.editN.Text);
for k:=1 to n do for j:=1 to n do begin a[k,j]:=strtofloat(Form1.gridA.cells[k,j]); b[j]:=strtofloat(Form1.gridB.cells[1,j]); end; end;
{Нумерация строк таблиц} procedure drawNum; var row: integer; begin for row:=1 to strtoint(Form1.editN.Text)+1 do begin Form1.gridA.Rows[row].Text:=inttostr(row); Form1.gridB.Rows[row].Text:=inttostr(row); end; end;
{---------- Метод простой итерации ----------} procedure TForm1.buttonStartIterClick(Sender: TObject); var x,y:array[1..100] of real; alpha, s, eps: real; I,j,k,n:integer; begin eps:=strtofloat(editEpsilon.Text); n:=strtoint(editN.Text);
{Заполнение массивов входных данных} getArrays;
alpha:=0; alpha:=sqrt(alpha); i:=-1;
for k:=1 to n do for j:=1 to n do alpha:= alpha + sqr(a[k,j]);
if alpha<1 then begin for k:=1 to n do x[k]:= b[k];
repeat s:=0; i:=i+1; for k:=1 to n do begin y[k]:= b[k]; for j:=1 to n do y[k]:=y[k] + a[k,j]*x[j]; s:= s+sqr(x[k]-y[k]); end; for k:=1 to n do x[k]:= y[k]; until sqrt(s)<eps*(1-alpha)/alpha;
{Добавление результата к текстовому компоненту} results.Lines.Add('Итерационный процесс окончен. Число итераций = '+inttostr(i)); results.Lines.Add('Решение системы методом простой итерации:');
for k:=1 to n do results.Lines.Add('x['+inttostr(k)+'] = '+floattostr(x[k])); end else results.Lines.Add('Условие сходимости по евклидовой метрике не выполняется.');
{Добавление разделителя решений} results.Lines.Add('-----------------'); end;
{---------- Метод Зейделя ----------} procedure TForm1.startButtonZeidelClick(Sender: TObject); var x,y:array[1..100] of real; alpha, s, eps, g: real; I,j,k,n:integer; begin eps:=strtofloat(editEpsilon.Text); n:=strtoint(editN.Text);
{Заполнение массивов входных данных} getArrays;
alpha:=0;
for k:=1 to n do for j:=1 to n do alpha:= alpha + sqr(a[k,j]); alpha:= sqrt(alpha); i:=-1;
if alpha<1 then begin for k:=1 to n do x[k]:= b[k]; repeat s:=0; i:=i+1; for k:=1 to n do begin g:= b[k]; for j:=1 to n do g:= g + a[k,j]*x[j]; s:= s+sqr(x[k]- g); x[k]:= g; end; until sqrt(s)<eps*(1-alpha)/alpha;
{Добавление результата к текстовому компоненту} results.Lines.Add('Итерационный процесс окончен. Число итераций = '+inttostr(i)); results.Lines.Add('Решение системы методом Зейделя:');
for k:=1 to n do results.Lines.Add('x['+inttostr(k)+'] = '+floattostr(x[k])); end else results.Lines.Add('Условие сходимости по евклидовой метрике не выполняется.');
{Добавление разделителя решений} results.Lines.Add('-----------------');
end;
{Изменение размерности матрицы} procedure TForm1.editNChange(Sender: TObject); var row,n:integer; begin {При вводе n изменяется количество строк в таблицах} n:=strtoint(editN.Text)+1; gridA.RowCount:=n; gridB.RowCount:=n;
{Заполнение номеров строк} drawNum(); end;
{Процедура, выполняющаяся при создании главного окна} procedure TForm1.FormCreate(Sender: TObject); begin {Заголовки таблиц} gridA.Rows[0].Text:='a'; gridB.Rows[0].Text:='b';
{Создание названий колонок таблиц} gridA.Cols[1].Text:='a[1,#]'; gridA.Cols[2].Text:='a[2,#]'; gridA.Cols[3].Text:='a[3,#]';
gridB.Cols[1].Text:='b[#]';
drawNum(); end;
end.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.) |