Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 20:15   #1
Настена290
Пользователь
 
Аватар для Настена290
 
Регистрация: 26.01.2012
Сообщений: 10
Восклицание Подключить компонент Delphi!

Мне надо решить систему уравнений методом простой итерации... вот мой код:
Цитата:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Menus, TeEngine, Series, ExtCtrls, TeeProcs,
Chart;
type mas= array[1..10,1..10] of real;
mas1 = array[1..10] of real;
TForm1 = class(TForm)
Matr: TStringGrid;
Svb: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Eps: TEdit;
Label1: TLabel;
Razm: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Memo1: TMemo;
Label5: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Chart1: TChart;
Series1: TFastLineSeries;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Chart1AfterDraw(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const nmax=20;
var i,j,n:integer; p,p1:integer;
d:real;
mxz:mas1;
tmp:mas;
A: array [1..nmax,1..nmax+1] of real; //расширенная матрица системы
X: array [1..nmax] of real; // решение системы
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear; // Ввод начальных данных
Matr.Cells[0,0]:='1,02';
Matr.Cells[1,0]:= '-0,25';
Matr.Cells[2,0]:='-0,3';
Matr.Cells[0,1]:='-0,41';
Matr.Cells[1,1]:='1,13';
Matr.Cells[2,1]:='-0,15';
Matr.Cells[0,2]:='-0,25';
Matr.Cells[1,2]:=' -0,14';
Matr.Cells[2,2]:='1,31';
Svb.Cells[0,0]:='0,515';
Svb.Cells[0,1]:='1,555';
Svb.Cells[0,2]:='1,21';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.Terminate; //выход из приложения
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=StrToInt(Razm.Text); //задаем количество неизвестных
for i:=0 to n do //цикл обнуления матрицы
for j:=0 to n do begin
Matr.Cells[i,j]:='';
Svb.Cells[0,j]:='';
end;
//задаем размеры матрицы
Matr.ColCount:=n;
Matr.RowCount:=n;
Svb.RowCount:=n;
end;
procedure TForm1.Button2Click(Sender: TObject);
var x0: array [1..nmax] of real;//начальное приближение
k: integer; //количество итераций
p,s,am,bm,t,e:real;
begin
e:=StrToFloat(Eps.Text);
n:=StrToInt(Razm.Text);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=StrToFloat(Matr.Cells[j-1,i-1]);
for i:=1 to n do
a[i,n+1]:=Strtofloat(Svb.Cells[0,i-1]);
//Проверка достаточного условия сходимости: абсолютная сумма недиагональных
//коэффициентов элементов строки должна быть меньше модуля диагональных
//коэффициентов этой строки
Настена290 вне форума Ответить с цитированием
Старый 28.01.2012, 20:17   #2
Настена290
Пользователь
 
Аватар для Настена290
 
Регистрация: 26.01.2012
Сообщений: 10
По умолчанию

Продолжение кода:
Цитата:
for i:=1 to n do
begin
p:=0;
for j:=1 to n-1 do //цикл получения суммы модулей недиагональных элементов
if j<>i then p:=p+abs(a[i, j]);
if abs(a[i,i])<p then //вывод "Итерационный процесс расходится" и закрытие при-ложения
begin
messageDLG('Итерационный процесс расходится',mtWarning,[mbOk],0);
Exit;
end;
end;
//приводим систему к нормальному виду
for i:=1 to n do
begin
for j:=1 to n do
if j<>i then
a[i,j]:=-a[i, j]/a[i, i];
a[i,n+1]:=a[i,n+1]/a[i,i];
a[i,i]:=0;
end;
//вычисление m-нормы матрицы системы уравнений и столбца свободных членов
for i:=1 to n do
begin
s:=0;
for j:=1 to n do
s:=s+abs(a[i, j]);
if i = 1 then
begin
am:=s;
bm:=abs(a[1, n+1]);
end
else
begin
if s>am then
am:=s;
if abs(a[i,n+1])>bm then
bm:=abs(a[i,n+1]);
end;
end;
k:=round((ln(e)+ln(abs(1-am))-ln(bm))/ln(am));
//устанавливаем начальные приближения равные bi
x0[i]:=a[i,n+1];
//цикл вычисления последующих приближений
t:=0;
repeat
for i:=1 to n do //цикл вычисления нового значения корня xi
begin
s:=0;
for j:=1 to n do
s:=s+a[i,j]*x0[j];
x[i]:=a[i,n+1]+s;
end;
t:=t+1;
for i:=1 to n do
x0[i]:=x[i];
until t>k;
// вывод решения
memo1.lines.Add('Результат:');
for i:=1 to n do
memo1.lines.Add('x'+inttostr(i)+'=' +floattostrf(x[i],fffixed,12,7));
memo1.lines.Add('k='+ inttostr(k));
end;


function opr(n:integer; a:mas):real; //функция нахождения определителя
var i, j, k: Integer; d: Double;
const
E = 0.000001;
begin
for i := 1 to Pred(n) do
begin
if Abs(a[i, i])<E then
begin
Opr := 0.0; Exit
end;
for j := Succ(i) to n do
begin
d := a[j, i] / a[i, i];
for k := i to n do
a[j, k] := a[j, k] - d * a[i, k];
end;
end;
d := 1;
for i := 1 to n do
d := d * a[i, i];
Opr := d;
end;

procedure zamena(q:mas; q1:mas1; n,y:integer); //замена y-ого столбца столбцом свободных членов
begin
for i:=1 to n do
q[i,y]:=q1[i];
for i:=1 to n do
for j:=1 to n do
tmp[i,j]:=q[i,j];
end;

procedure TForm1.N4Click(Sender: TObject);
begin
Application.Terminate; //выход из приложения
end;

procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin

end;

end.
ПЭтот код правильный но выдает типа ошибки
Цитата:
[Warning] Unit1.pas(128): For loop control variable must be simple local variable
можете исправить...и подсказать как подключить Chart чтобі моя система отображалась на графике!
Настена290 вне форума Ответить с цитированием
Старый 28.01.2012, 22:01   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это значит что счетчик цикла должен быть локальной переменной а не глобальной.
Например :
Код:
procedure zamena(q:mas; q1:mas1; n,y:integer); //замена y-ого столбца столбцом свободных членов
var i,j:integer; // Однозначно описать счетчик-переменку пренадлежащую области функции
begin
for i:=1 to n do
q[i,y]:=q1[i];
for i:=1 to n do
for j:=1 to n do
tmp[i,j]:=q[i,j];
end;
Ну и так везде
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2012, 22:28   #4
Настена290
Пользователь
 
Аватар для Настена290
 
Регистрация: 26.01.2012
Сообщений: 10
По умолчанию

спасибо большое)
Настена290 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Компонент-предок, компонент-родитель amico Помощь студентам 1 23.09.2015 21:20
[Поиск] Компонент локализации строковых ресурсов и сторонних компонент delphi Человек_Борща Компоненты Delphi 3 23.08.2011 10:44
Как подключить базу *.mdb в delphi? ralnik БД в Delphi 3 30.03.2010 13:44
Как мне подключить компонент myodbc к делфи Droid БД в Delphi 0 18.02.2009 19:47
delphi for php как подключить curl OkeaH PHP 5 03.02.2009 01:48