Текст программы - Разработка программы для решения систем линейных уравнений методом Гауса и Жордана-Гаусса в программном комплексе Delphi
Файл-модуль unit1.pas
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, XPMan, StdCtrls, Grids, unit2;
Type
TForm1 = class(TForm)
Coef: TStringGrid;
Gauss: TStringGrid;
Jgauss: TStringGrid;
Button1: TButton;
Button2: TButton;
XPManifest1: TXPManifest;
SaveDialog1: TSaveDialog;
MainMenu1: TMainMenu;
File1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Exit1: TMenuItem;
Matrix: TStringGrid;
Procedure New1Click(Sender: TObject);
Procedure Button1Click(Sender: TObject);
Procedure Button2Click(Sender: TObject);
Procedure Save1Click(Sender: TObject);
Procedure Exit1Click(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Var
Form1: TForm1;
S:integer;
Implementation
{$R *.dfm}
Procedure TForm1.Exit1Click(Sender: TObject);
Begin
Close;
End;
Procedure TForm1.New1Click(Sender: TObject);
Var i, dl:integer;
Prover:string;
Begin
Form1.Enabled:=false;
Repeat
Prover:=inputbox('Введите размер системы','Значение между 2 и 20','2');
Dl:=length(prover);
If dl=0 then showmessage('Введите размер системы') else
Begin
If (dl=1) and (prover<'9') and (prover>'0') then s:=trunc(strtofloat(prover))
Else
Begin
For i:=1 to dl do
Begin
If prover[i]>'9' then
Begin
Showmessage('Введите число');
Break;
End
Else if i=dl then s:=trunc(strtofloat(inputbox('Введите размер системы','Значение между 2 и 20','2')));
End;
End;
End;
Until (s>=2) and (s<=maxr);
Form1.Enabled:=true;
Matrix. RowCount:=s+1;
Matrix. ColCount:=s+1;
Gauss. colCount:=s+1;
Coef. rowCount:=s+1;
Jgauss. colCount:=s+1;
Coef. Cells[1,0]:='B';
Gauss. Cells[0,1]:='Gauss';
Jgauss. Cells[0,1]:='J-Gauss';
For i:=1 to s do
Begin
Matrix. Cells[0,i]:=floattostr(i);
Matrix. Cells[i,0]:='A'+floattostr(i);
Coef. Cells[0,i]:=floattostr(i);
Gauss. Cells[i,0]:='X'+floattostr(i);
Jgauss. Cells[i,0]:='X'+floattostr(i);
End;
End;
Procedure TForm1.Button1Click(Sender: TObject);
Var a:ary2s;
X, y:arys;
Error:boolean;
I, j, l, K:integer;
Prover:string;
Begin
{Считывание массивов с исходными данными и проверка '.' или ','}
{***********************************************}
For i:=1 to s do
For j:=1 to s do
Begin
Prover:=matrix. Cells[j, i];
K:=length(prover);
If k=0 then
Begin
Showmessage('Вы не ввели один или несколько элементов системы.');
Exit;
End;
For l:=1 to length(prover) do
If prover[l]='.' then prover[l]:=','
Else if prover[l]>'9' then
Begin
Showmessage('В качестве одного или нескольких элементов системы введена буква. Замените их на числа!');
Exit;
End;
Matrix. Cells[j, i]:=prover;
A[i, j]:=strtofloat(matrix. cells[j, i]);
End;
For i:=1 to s do
Begin
Prover:=coef. cells[1,i];
For l:=1 to length(prover) do
If prover[l]='.' then prover[l]:=','
Else if prover[l]>'9' then
Begin
Showmessage('В качестве одного или нескольких элементов системы введена буква. Замените их на числа!');
Exit;
End;
Coef. cells[1,i]:=prover;
Y[i]:=strtofloat(coef. cells[1,i]);
End;
{***********************************************}
{Решение и вывод результатов}
{***********************************************}
Gauss1(a, y, x, s, error);
If not error then
For i:=1 to s do
Gauss. cells[i,1]:=floattostr(x[i])
Else
Begin
Showmessage('Система решения не имеет');
New1.Click;
End;
{***********************************************}
End;
Procedure TForm1.Button2Click(Sender: TObject);
Var a:ary2s;
X, y:arys;
Error:boolean;
I, j, l, k:integer;
Prover:string;
Begin
{Считывание массивов с исходными данными}
{***********************************************}
{Считывание массивов с исходными данными и проверка '.' или ','}
{***********************************************}
For i:=1 to s do
For j:=1 to s do
Begin
Prover:=matrix. Cells[j, i];
K:=length(prover);
If k=0 then
Begin
Showmessage('Вы не ввели один или несколько элементов системы.');
Exit;
End;
For l:=1 to length(prover) do
If prover[l]='.' then prover[l]:=','
Else if prover[l]>'9' then
Begin
Showmessage('В качестве одного или нескольких элементов системы введена буква. Замените их на числа!');
Exit;
End;
Matrix. Cells[j, i]:=prover;
A[i, j]:=strtofloat(matrix. cells[j, i]);
End;
For i:=1 to s do
Begin
Prover:=coef. cells[1,i];
For l:=1 to length(prover) do
If prover[l]='.' then prover[l]:=','
Else if prover[l]>'9' then
Begin
Showmessage('В качестве одного или нескольких элементов системы введена буква. Замените их на числа!');
Exit;
End;
Coef. cells[1,i]:=prover;
Y[i]:=strtofloat(coef. cells[1,i]);
End;
{***********************************************}
{***********************************************}
{Решение и вывод результатов}
{***********************************************}
Gaussj(a, y, x, s, error);
If not error then
For i:=1 to s do
Jgauss. cells[i,1]:=floattostr(x[i])
Else
Begin
Showmessage('Система решения не имеет');
New1.Click;
End;
{***********************************************}
End;
Procedure TForm1.Save1Click(Sender: TObject);
Var f:textfile;
I, j:integer;
Begin
Savedialog1.Filter:='Text files (*.txt)|*.txt|';
If savedialog1.Execute then
Begin
Assignfile(f, savedialog1.filename+'.txt');
Rewrite(f);
For i:=1 to s do
Begin
Writeln(f);
For j:=1 to s do
Write(f, matrix. cells[i, j]:4,' ');
Write(f,'|',coef. cells[1,i]);
End;
Writeln(f);
Writeln(f);
Writeln(f,'Gauss');
For i:=1 to s do
Writeln(f,'X'+floattostr(i)+'='+gauss. cells[i,1],' ');
Writeln(f);
Writeln(f,'J-Gauss');
For i:=1 to s do
Writeln(f,'X'+floattostr(i)+'='+jgauss. cells[i,1],' ');
Closefile(f);
End;
End;
End.
Unit unit2;
Interface
Constmaxr=20;
Type arys=array[1..maxr] of real;
Ary2s=array[1..maxr,1..maxr] of real;
Procedure gauss1(a:ary2s; y:arys; var coef:arys; ncol:integer; var error:boolean);
Procedure gaussj(var b:ary2s; y: arys; var coef:arys; ncol:integer; var error: boolean);
Implementation
{Решение системы линейных уравнений методом Гаусса}
{**********************************************************}
Procedure gauss1(a:ary2s; y:arys; var coef:arys; ncol:integer; var error:boolean);
Var b:ary2s;
W:arys;
I, j, i1,k, l, n:integer;
Hold, sum, t, ab, big: real;
Begin
Error:=false;
N:=ncol;
For i:=1 to n do
Begin
For j:=1 to n do
B[i, j]:=a[i, j];
W[i]:=y[i]
End;
For i:=1 to n-1 do
Begin
Big:=abs(b[i, i]);
L:=i;
I1:=i+1;
For j:=i1 to n do
Begin
Ab:=abs(b[j, i]);
If ab>big then
Begin
Big:=ab;
L:=j
End
End;
If big=0.0 then error:= true
Else
Begin
If l<>i then
Begin
For j:=1 to n do
Begin
Hold:=b[l, j];
B[l, j]:=b[i, j];
B[i, j]:=hold
End;
Hold:=w[l];
W[l]:=w[i];
W[i]:=hold
End;
For j:=i1 to n do
Begin
T:=b[j, i]/b[i, i];
For k:=i1 to n do
B[j, k]:=b[j, k]-t*b[i, k];
W[j]:=w[j]-t*w[i]
End
End
End;
If b[n, n]=0.0 then error:=true
Else
Begin
Coef[n]:=w[n]/b[n, n];
I:=n-1;
Repeat
Sum:=0.0;
For j:=i+1 to n do
Sum:=sum+b[i, j]*coef[j];
Coef[i]:=(w[i]-sum)/b[i, i];
I:=i-1
Until i=0
End
End;
{**********************************************************}
{Решение системы линейных уравнений методом Жордана-Гаусса}
{**********************************************************}
Procedure gaussj(var b:ary2s; y: arys; var coef:arys; ncol:integer; var error: boolean);
Var w:array[1..maxr,1..maxr] of real;
Index:array[1..maxr,1..3] of integer;
I, j, k, l, nv, irow, icol, n, l1:integer;
Determ, pivot, hold, sum, t, ab, big:real;
{++++++++++++++++++++++++++++++++++++++++++++}
Procedure swap(var a, b: real);
Var hold:real;
Begin
Hold:=a;
A:=b;
B:=hold
End;
{++++++++++++++++++++++++++++++++++++++++++++}
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
Procedure gausj2;
Var i, j, k, l, l1:integer;
{===============================================}
Procedure gausj3;
Var l:integer;
Begin
If irow<>icol then
Begin
Determ:=-determ;
For l:=1 to n do
Swap(b[irow, l],b[icol, l]);
If nv>0 then
For l:=1 to nv do
Swap(w[irow, l],w[icol, l])
End
End;
{===============================================}
Begin
Error:=false;
Nv:=1;
N:=ncol;
For i:=1 to n do
Begin
W[i,1]:=y[i];
Index[i,3]:=0
End;
Determ:=1.0;
For i:=1 to n do
Begin
Big:=0.0;
For j:=1 to n do
Begin
If index[j,3]<>1 then
Begin
For k:=1 to n do
Begin
If index[k,3]>1 then
Begin
Error:=true;
Exit;
End;
If index[k,3]<1 then
If abs(b[j, k])>big then
Begin
Irow:=j;
Icol:=k;
Big:=abs(b[j, k])
End
End
End
End;
Index[icol,3]:=index[icol,3]+1;
Index[i,1]:=irow;
Index[i,2]:=icol;
Gausj3;
Pivot:=b[icol, icol];
Determ:=determ*pivot;
B[icol, icol]:=1.0;
For l:=1 to n do
B[icol, l]:=b[icol, l]/pivot;
If nv>0 then
For l:=1 to nv do
W[icol, l]:=w[icol, l]/pivot;
For l1:=1 to n do
Begin
If l1<>icol then
Begin
T:=b[l1,icol];
B[l1,icol]:=0.0;
For l:=1 to n do
B[l1,l]:=b[l1,l]-b[icol, l]*t;
If nv>0 then
For l:=1 to nv do
W[l1,l]:=w[l1,l]-w[icol, l]*t;
End
End
End;
End;
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
Begin
Gausj2;
If error then exit;
For i:=1 to n do
Begin
L:=n-i+1;
If index[l,1]<>index[l,2] then
Begin
Irow:=index[l,1];
Icol:=index[l,2];
For k:=1 to n do
Swap(b[k, irow],b[k, icol])
End
End;
For k:=1 to n do
If index[k,3]<>1 then
Begin
Error:=true;
Exit;
End;
For i:=1 to n do
Coef[i]:=w[i,1];
End;
{**********************************************************}
End.
Program Project1;
Uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas';
{$R *.res}
Begin
Application. Initialize;
Application. Title := 'Gauss&;J-Gauss';
Application. CreateForm(TForm1, Form1);
Application. Run;
End.
Похожие статьи
-
Линейная зависимость - Составление программы для решения системы уравнений
Рассмотрим подробнее аппроксимирующие зависимости Y(x)=f(x, B 0 ,B 1,..., B N ) с двумя параметрами: Y(x)=f(x, B 0 ,B 1 ) Используя соотношения (1) и...
-
Программа на языке Бейсик - Составление программы для решения системы уравнений
10 REM 20 DIM A(20,20),B(20),X(20) 30 READ N 40 FOR I=1 TO N: FOR J=1 TO N 60 READ A(I, J) : NEXT J 80 READ B(I) : NEXT I 90 REM Vibor elementa 100 FOR...
-
Программный алгоритм визуальный гаусс В программу включены следующие процедуры: "gauss1", "gaussj", "New1Click", "Button1Click", "Button2Click",...
-
Дана система линейных уравнений (СЛУ) с n неизвестными: В матричной форме записи система (1) имеет вид: (2) Где : n - порядок системы; - матрица...
-
Метод Гаусса. Метод Гаусса решения систем линейных уравнений состоит в последовательном исключении неизвестных и описывается следующей процедурой. С...
-
Решим следующую систему методом Гаусса. - Составление программы для решения системы уравнений
A 11 = 2 0. (1) Для решения систем уравнения с помощью Гаусса будем выделить коэффициенты системы следующим образом: A 11 =2, A 12 = 7, a 13 =13 b 1 = 0...
-
Можно выделить три основных метода разработки программного обеспечения: 1. Конструкторы программ (Аlgoritm2, Devel Studio, MnCreator, Game Maker и др.)....
-
Проверка программы на примере задачи. Для работы с программой запускаем файл TabSimMethod. exe рис.1. Рис.1 Файл TabSimMethod. exe Запустится программа...
-
, Алгоритм обратного хода: Шаг 1. Вычислим Шаг 2. Вычислим: , Рис. 1. Основной алгоритм решения СЛУ методом исключения Гаусса. Для контроля правильности...
-
Рисунок 9.1 - Логическая схема процедуры Runge Рисунок 9.2 - Логическая схема для вычисления кинематических и силовых характеристик четырехмассовой...
-
Очередность разработки Системы А) разработка программного обеспечения для ввода, редактирования и актуализации контента, синхронизации с хранилищем...
-
ЛИТЕРАТУРА - Составление программы для решения системы уравнений
1. Кобулов В. К. Автоматизация в социально-экономических системах. Т.: Фан, 1989. 2. Гулямов С. С., Романов А. Н., Алимов Р. Х. и др. Дистанционное...
-
Параболическая зависимость - Составление программы для решения системы уравнений
Если в многочлене F (x)= B 0 X M + B 1 X M-1 +.....+ B M-1 X + B M m=2 Тогда, это многочлен называется параболической зависимости. Установим вид...
-
Основания для разработки Система разрабатывается в соответствии с планом учебного процесса Института менеджмента и Информационных технологий (ИМИТ...
-
Наименование программы Полное наименование программы - Модуль ипотечного кредитования банковской информационной системы "БИС". Краткое наименование...
-
СООБЩЕНИЯ ОПЕРАТОРУ, Сообщение о программе, Листинг программы - Руководство оператора
Сообщение о программе Программа "AdressBook. ехе" выдает сообщение о программе, при выборе в главном меню пункта "О программе" во вкладке "Помощь"...
-
Известно, что любые элементы имеют разброс параметров. Поэтому, использование динамического диапазона АЦП может быть неполным или наоборот, может...
-
Полученное по вышеприведенным формулам значение угла сравнивается с заданными величинами запуска и остановки. Программа обеспечивает запуск сканирования...
-
Введение - Составление программы для решения системы уравнений
А) Постановка задач Б) Решения поставленной задачи 4. Порядок выполнения работы А) Изучение литературы Б) Составление алгоритма. В) Составление программа...
-
Программу обработки данных можно запускать как до, так и после включения устройства сопряжения. Перед первым использованием, а также после изменения...
-
В этой главе представлено описание инструментов и методов, использованных при написании кода программы. Инструменты разработки серверной части Для...
-
Первая программа - движение слева направо Просмотрите код Unit1.pas для нашего примера: Unit Unit1; Interface Uses Windows, Messages, SysUtils, Variants,...
-
Листинг программы - Приемы программирования в Delphi
Form1: Unit Unit1; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Vcl. Imaging. jpeg, Vcl....
-
Роликовый (рулонный) сканер предназначен для создания электронных копий почтовой корреспонденции и оптического распознавания символов. Принцип работы...
-
Оценка требований Для решения задачи необходимо следующее оборудование: Одноплатный компьютер; Роликовый сканер; Соединение с Internet. Требования к...
-
Для разработки программного продукта нами была выбрана СУБД Microsoft Access 2010, которая позволяет выполнять простейшие операции с данными: Ѕ добавить...
-
Solidworcks Enterprise PDM (SWE-PDM) управляет данными и процессами на различных этапах жизненного цикла изделия, обеспечивая коллективную (параллельную)...
-
Решения по пользовательскому интерфейсу в части серверного приложения (вебсайт) Для реализации требований к серверному приложению (Сайту), объединяющему...
-
Назначение программы Программное средство на тему "Калькулятор коммунальных услуг" предназначено для повышения эффективности расчета коммунальных...
-
Основой системы будут два независимых модуля. Первый будет разрабатываться для формирования контента системы, этот модуль будем называть Редактор. Второй...
-
Программная документация Модуля включает: Руководство системного программиста; Руководство оператора. Программная документация должна быть оформлена...
-
Обоснование выбранного метода При дизайне системы согласно требованиям или при оптимизации существующей необходимо ввести модель, позволяющую не только...
-
В данной выпускной квалификационной работе разработан прототип умного почтового ящика, удаленного сетевого устройства для контроля почтовой...
-
Автоматизированный почтовый драйвер аппаратный Результатом данной выпускной квалификационной работы стало создание прототипа умного почтового ящика,...
-
Любая производственная деятельность, в том числе и работа с электронными устройствами, сопряжена с появлением опасных для жизни и здоровья факторов,...
-
Ubuntu Mate является операционной системой [11], основанной на Debian GNU/Linux. Установка операционной системы заключается в записи на карту памяти...
-
Разработка с "нуля", Выбор метода разработки - Различные виды программ для Multi-Touch столов
Разработка приложения на каком-либо языке с нуля достаточно трудоемкий процесс, так как в случае создания интерфейсов понадобиться множество времени для...
-
Рентгеновский симулятор - это аппарат для определения величины и положения (ориентации и удаления от излучателя) области облучения, а также маркирования...
-
После преобразования аналогового сигнала в цифровую форму с помощью АЦП возникает необходимость в программной обработке полученного цифрового сигнала....
-
Следующим этапом, когда документация найдена, источники изучены, а другие решения проанализированы, является реализация автоматизированной системы...
Текст программы - Разработка программы для решения систем линейных уравнений методом Гауса и Жордана-Гаусса в программном комплексе Delphi