close

Вход

Забыли?

вход по аккаунту

?

Лабораторная работа №4 Куркутов Сергей

код для вставкиСкачать
Министерство образования Российской Федерации
Государственное учреждение
Кузбасский государственный технический университет
Кафедра вычислительной техники и информационных технологий
Специальность: Электропривод и автоматизация
Дисциплина: Информатика
Лабораторная работа №1
Решение СЛАУ
Выполнил:
студент группы ЭАб-131
Института энергетики
Куркутов Сергей
Принял: Профессор
Ещин Евгений Константинович
Кемерово 2013
ОПИСАНИЕ ПРОГРАММЫ ОБЩИЕ СВЕДЕНИЯ; 1. Обозначение и наименование программы - Project1; 2. Программное обеспечение, необходимое для функционирования программы - ОС Windows 7, Embarcadero RAD Studio XE3;
3. Язык программирования, на котором выполнена программа - Delphi
ФУНКЦИОНАЛЬНОЕ НАЗНАЧЕНИЕ; Решение систем линейных алгебраических уравнений с помощью Delphi
СХЕМА АЛГОРИТМА
Да
ТЕКСТ ПРОГРАММЫ
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
mas = array[1..20] of real;
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Label2: TLabel;
Label3: TLabel;
StringGrid3: TStringGrid;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Q : array of array of real;
x : mas;
S,
pr,Mn,G,xp : real;
i,j,p,l,ik,
k,N,M : integer ;
implementation
{$R *.dfm}
Procedure Perestanovka(n,m:integer);
var
Str,Col,Num : integer;
Max,Prom : real;
begin
Max := abs(Q[k,k]);
for Str := k to n do begin
if Max < abs(Q[Str,k]) then begin
Max := abs(Q[Str,k]);
Num := Str;
end;
end;
for Col := k to m do begin
Prom := Q[k,Col];
Q[k,Col] := Q[Num,Col];
Q[Num,Col]:= Prom;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j : integer;
begin // Решение системы методом Гаусса
// Формирование матрицы коэффициентов А(i,j)
for i := 1 to N do
for j := 1 to N+1 do Q[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
// Приведение матрицы к треугольному виду
for k := 1 to N-1 do begin // Определение ведущего уравнения
for i := k + 1 to N do begin // Определение обрабатываемого уравнения
if Q[k,k] = 0 then begin
Perestanovka(N,N+1);
end;
Mn := Q[i,k]/Q[k,k];
for j := k to N+1 do begin
Q[i,j] := Q[i,j] - Mn * Q[k,j];
end;
end;
end;
// Обратный ход - нахождение x(i)
x[N] := Q[N,N+1]/Q[N,N];
for i := N-1 downto 1 do begin
S := 0;
for j := i + 1 to N do S := S + Q[i,j]*x[j];
x[i] := (Q[i,N+1] - S)/Q[i,i];
end;
// Вывод результатов
StringGrid2.ColCount:=N+1;
for i:=1 to N do StringGrid2.Cells[i,0]:='X('+IntToStr(i)+')';
StringGrid2.Cells[0,1]:='X(i)';
for i:=1 to N do StringGrid2.Cells[i,1]:=FloatToStrF(X[i],ffFixed, 10, 3);
// Проверка правильности решения
// Восстановление матрицы коэффициентов А(i,j)
for i := 1 to N do
for j := 1 to N+1 do Q[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
StringGrid3.RowCount:=N+1;
StringGrid3.Cells[0,0]:='Сумма Q(i,j)*X(j)=';
StringGrid3.Cells[1,0]:='Q(i,N+1)';
for i:=1 to N do begin
S:=0;
for j:=1 to N do begin
S:=S+Q[i,j]*X[j];
end;
StringGrid3.Cells[0,i]:=FloatToStrF(S,ffFixed, 10, 3);
StringGrid3.Cells[1,i]:=FloatToStrF(Q[i,N+1],ffFixed, 10, 3);
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
// Изменение размеров StringGrid1 при изменении порядка системы уравнений
var i : integer;
begin
N:=StrToInt(Edit1.Text);
StringGrid1.ColCount:=N+2;
StringGrid1.RowCount:=N+1;
SetLength(Q,N+1,N+2);
// Расстановка индексов в нулевых строке и столбце StringGrid1
for i := 1 to N+2 do StringGrid1.Cells[i,0]:=IntToStr(i);
for i := 1 to N+1 do StringGrid1.Cells[0,i]:=IntToStr(i);
StringGrid2.ColCount:=N+1;
for i:=1 to N do StringGrid2.Cells[i,0]:='X('+IntToStr(i)+')';
StringGrid2.Cells[0,1]:='X(i)';
// Заполнение полей StringGrid1 случайными числами
for i := 1 to N do
for j := 1 to N+1 do StringGrid1.Cells[j,i]:=IntToStr(Random(i)+Random(10*j));
end;
procedure TForm1.FormActivate(Sender: TObject);
var i,j : integer;
begin
N:=StrToInt(Edit1.Text);
StringGrid1.ColCount:=N+2;
StringGrid1.RowCount:=N+1;
SetLength(Q,N+1,N+2);
// Расстановка индексов в нулевых строке и столбце StringGrid1
for i := 1 to N+1 do StringGrid1.Cells[i,0]:=IntToStr(i);
for i := 1 to N do StringGrid1.Cells[0,i]:=IntToStr(i);
// Заполнение полей StringGrid1 случайными числами
for i := 1 to N do
for j := 1 to N+1 do StringGrid1.Cells[j,i]:=IntToStr(Random(i)+Random(10*j));
StringGrid2.ColCount:=N+1;
for i:=1 to N do StringGrid2.Cells[i,0]:='X('+IntToStr(i)+')';
StringGrid2.Cells[0,1]:='X(i)';
end;
end.
ВЫЗОВ И ЗАГРУЗКА; - cпособ вызова программы - Z:\L4\Project1
ВХОДНЫЕ ДАННЫЕ; N=5
ВЫХОДНЫЕ ДАННЫЕ. 
Документ
Категория
Рефераты
Просмотров
19
Размер файла
89 Кб
Теги
сергей, работа, лабораторная, куркутов
1/--страниц
Пожаловаться на содержимое документа