Консультация № 198948
21.06.2020, 11:06
0.00 руб.
0 16 1
Здравствуйте! У меня возникли сложности с таким вопросом:
мне нужно реализовать Решение систем линейных уравнений методом Гаусса в Delphi
желательно чем быстрее тем лучше!!!

Обсуждение

давно
Старший Модератор
31795
6196
21.06.2020, 12:45
общий
Адресаты:
Вы тут смотрели?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403446
21
21.06.2020, 13:15
общий
Должно получиться типо такого
давно
Старший Модератор
31795
6196
22.06.2020, 11:45
общий
Адресаты:
Вы покажите свои наработки.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403446
21
22.06.2020, 12:07
общий
У меня их нету
давно
Старший Модератор
31795
6196
22.06.2020, 13:10
общий
Адресаты:
Ну хоть методичку какую либо?
У Вас ввод данных из файла, как они там хранятся? Способоб много, а "хрустальный шаг" не работает, "магнитные бури".
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403446
21
23.06.2020, 07:00
общий
23.06.2020, 07:01
Ввод данных из файла не надо
давно
Посетитель
403446
21
25.06.2020, 10:19
общий
Никто не знает как это делается?(
давно
Старший Модератор
31795
6196
25.06.2020, 14:24
общий
это ответ
Здравствуйте, JonMoxley!

Рисуете форму:


Копируете код:
[code lang=pascal h=300]unit Unit1;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
const
n=4;
type
TMas=array[0..n,0..n]of real;
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
Button1: TButton;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private{ Private declarations }
a:TMas;
public{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Gauss(var a:TMas;b:integer);
const
e=1E-30;
var
c:real;
i,j:integer;
begin
if b<n then
begin
if a[b,b]<e then
begin
i:=b+1;
while(i<n)and(abs(a[i,b])<e) do inc(i);
if i=n then ShowMessage('two and more')else
for j:=b to n do
begin
c:=a[b,j];
a[b,j]:=a[i,j];
a[i,j]:=c;
end;
end;
for i:=n downto b do a[b,i]:=a[b,i]/a[b,b];
for i:=b+1 to n-1 do
for j:=n downto b do
a[i,j]:=a[i,j]-a[i,b]*a[b,j];
if b<n then Gauss(a,b+1);
end
else
begin
repeat
dec(b);
i:=n-1;
c:=a[b,i+1];
while b<i do
begin
c:=c-a[b,i]*a[n,i];
dec(i);
end;
a[n,b]:=c;
until b=0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
{}
for i:=0 to Form1.StringGrid1.ColCount do
for j:=0 to Form1.StringGrid1.RowCount-1 do
a[j,i]:=0;
Form1.Memo1.Clear;
Form1.Memo1.Lines.Add('Enter data and press "Gauss"');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
b:boolean;
c:double;
i,j:integer;
begin
b:=true;
for i:=0 to Form1.StringGrid1.ColCount-1 do
for j:=0 to Form1.StringGrid1.RowCount-1 do
if TryStrToFloat(Form1.StringGrid1.Cells[i,j],c)then
a[j,i]:=c{StrToFloat(Form1.StringGrid1.Cells[i,j])}else
b:=false;
if b then
for i:=0 to Form1.StringGrid2.RowCount-1 do
if TryStrToFloat(Form1.StringGrid2.Cells[0,i],c)then
a[i,n]:=c{StrToFloat(Form1.StringGrid2.Cells[0,i])}else
b:=false;
if b then
begin
Gauss(a,0);
Form1.Memo1.Clear;
for i:=0 to n-1 do
Form1.Memo1.Lines.Add(FloatToStr(a[n,i]));
end
else
ShowMessage('please check parametrs')
end;
end.[/code]
Запускаете.

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
25.06.2020, 14:38
общий
Адресаты:
Цитата: JonMoxley
Никто не знает как это делается?(

Знают, только у Вас:
Цитата: JonMoxley
Должно получиться типо такого

Данные уточнить:
Цитата: JonMoxley
У меня их нету


Одним словом - крутись как хочеш, фантазию включай и код напиши.
Я Вам писал
Цитата: Зенченко Константин Николаевич
"хрустальный шаг" не работает


Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403446
21
25.06.2020, 17:22
общий
А как вводить параметры?
давно
Старший Модератор
31795
6196
26.06.2020, 10:29
общий
Адресаты:
Кликаете на поле StringGrida и вводите.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403446
21
26.06.2020, 11:38
общий
Они не вводятся по клику
давно
Старший Модератор
31795
6196
26.06.2020, 12:04
общий
Адресаты:
Инспектор объектов, проверьте поле goEditing
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403446
21
26.06.2020, 12:23
общий
В итоге ввожу числа а ответ не выводится говорит поверьте введённые данные
давно
Старший Модератор
31795
6196
26.06.2020, 12:49
общий
26.06.2020, 12:50
Адресаты:
Значит, что-то не правильно ввели. Функция TryStrToFloat - проверяет, можно ли перевести строку в число, если нет, то использование StrToFloat вынесет программу.

Можно участок, где b:=false; дополнить ещё и выводом сообщения
[code lang=pascal]ShowMessage('error matrix A['+inttostr(i)+' , '+inttostr(j)+']')[/code]
Тогда программа просматривая массив, будет указывать Вам, где ошибка.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
26.06.2020, 12:56
общий
Адресаты:
Как-то так:
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа