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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2011, 13:08   #1
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию Программа для решения СЛАУ методом Гаусса неверно считает (Delphi)

Добрый день! Написала программу для решения СЛАУ методом Гаусса. Все работает, программа не валится. Но считает неверно! Проверяла через интерент и мои ответы далеки от истины. Вчера весь день просидела в поисках ошибки, сегодня искала всё утро, несколько раз изменяла циклы: ничего не помогает(( была бы крайне вам благодарна, если бы вы посмотрели, что не так. Я уже не знаю, что можно еще сделать. Очень надеюсь на вашу помощь!)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;

type
  TA=array of array of real;
  TVector=array of real;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    LabeledEdit1: TLabeledEdit;
    Button1: TButton;
    StringGrid3: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    Label5: TLabel;
    procedure LabeledEdit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,t:TA; n:integer;
  b,x,z:TVector;


implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); //Заполнение массива
var i,j:integer;
 begin
     Randomize;
     FOR i:=0 TO n-1 DO
     for j:=0 to n-1 do
         begin
       a[i,j]:=random(10)-random(10);
       stringgrid1.cells[j,i]:=FloatToStr(a[i,j]);
       b[i]:=random(10)-random(10);
       stringgrid2.cells[0,i]:=FloatToStr(b[i]);
         end;
 end;
      
procedure Finddiag (var a:TA; b:TVector );  //приведение к треугольному виду
var i,j,k:integer; kaf:real;
 begin
 for k:=0 to n-2 do
  for i:=k+1 to n-1 do
  If a[k,k] = 0 then
 If k = n-1 then
  begin
    MessageDlg('решений нет', mtInformation, [mbOK],0);
    exit
  end
 else
   begin
      kaf:= a[i,k]/a[k,k];
         for j:=k to n-1 do
         begin
         a[i,j]:=a[i,j]-a[k,j]*kaf;
         b[i]:=b[i]-b[k]*kaf;
         end;
      end;
  // end;
  end;


procedure TForm1.Button3Click(Sender: TObject);
var i,j:integer; m:real;
begin
 //решение по Гауссу
begin
 Finddiag(a,b);
   begin
 x[n-1]:=b[n-1]/a[n-1,n-1];
  end;
   begin
  for i:= n-2 downto 0 do
  begin
   m:=0;
   for j:=i+1 to n-1 do
   m:=m + a[i,j]*x[j];
   x[i]:=(b[i] - m)/a[i,i];
  end;
  for i:=0 to n-1 do
    StringGrid3.Cells[0,i]:=FloatToStrF(x[i],ffFixed,1000,2);
 end;
 end;
  end;


procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
n:=StrToInt(labelededit1.Text);
SetLength(a,n,n);
SetLength(b,n);
SetLength(x,n);
setlength(z,n);
setlength(t,n,n);
WITH StringGrid1 DO
begin
RowCount:=(n);
ColCount:=(n);
end;
WITH StringGrid2 DO
begin
RowCount:=(n);
end;
WITH StringGrid3 DO
begin
RowCount:=(n);
end;

end;
end.
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 24.09.2011, 15:58   #2
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Прошу вас!! Очень нужна ваша помощь)))
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 24.09.2011, 17:01   #3
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

27 просмотров и никто не отозвался... =(
Я посмотрела Гаусса на сайте, пыталась применить к своему варианту, но программа начинает валиться( Не хотелось бы копировать уже готовую, хочется понять ошибку в своей...
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 24.09.2011, 23:05   #4
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Ну пожааааалуйста!!!!!! Оооочень нужна помощь!!!!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 25.09.2011, 00:24   #5
Кинельски
Форумчанин
 
Регистрация: 10.03.2010
Сообщений: 109
По умолчанию

глянь темы внизу

Последний раз редактировалось Кинельски; 25.09.2011 в 00:28.
Кинельски вне форума Ответить с цитированием
Старый 25.09.2011, 11:33   #6
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Кинельски, спасибо Вам, конечно... Но я просмотрела все темы по Гауссу на сайте и, увы, безрезультатно... Может кто-нибудь сможет найти ошибку в моей программе?
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 25.09.2011, 11:52   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Так не пойдёт, Lisёноk. Код без комментариев* даже и обдумывать-то непонятно как.

Даже мои программы (если такие большие) мне непонятны.
_________________________________
* я имею в виду, что для каждого-каждого шага
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.09.2011, 12:50   #8
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Особо не тестировал, но вот так вроде правильно считает
Код:
type
  TA=array of array of real;
  TVector=array of real;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    LabeledEdit1: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure LabeledEdit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,t:TA;
  n:integer;
  b,x,z:TVector;

implementation

{$R *.dfm}

procedure Finddiag (var a:TA; b:TVector );  //приведение к треугольному виду
var i,j,k:integer; kaf:real;
 begin
 for k:=0 to n-1 do
 Begin
   for j:=k+1 to n-1 do
   {If a[k,k] = 0 then
   If k = n-1 then
  begin
    MessageDlg('решений нет', mtInformation, [mbOK],0);
    exit
  end
 else }
   begin
      kaf:= a[j,k]/a[k,k];
         for i:=k to n-1 do
         begin
         a[j,i]:=a[j,i]-a[k,i]*kaf;
         end;
            b[j]:=b[j]-b[k]*kaf;
   end;
  // end;
  end;
End;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
 begin
     Randomize;
     FOR i:=0 TO n-1 DO
     for j:=0 to n-1 do
     Begin
       a[i,j]:=1+(random(10)-random(10));
       stringgrid1.cells[j,i]:=FloatToStr(a[i,j]);
       b[i]:=1+(random(10)-random(10));
       stringgrid2.cells[0,i]:=FloatToStr(b[i]);
      end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer; m,p:real;
 //решение по Гауссу
begin
 Finddiag(a,b);
  for i:= n-1 downto 0 do
  begin
    m:=0;
    for j:=i+1 to n-1 do
    Begin
      p:=a[i,j]*x[j];
      m:=m+p
    End;
      x[i]:=(b[i] - m)/a[i,i];
  end;
  for i:=0 to n-1 do
    StringGrid3.Cells[0,i]:=FloatToStrF(x[i],ffFixed,1000,2);
end;

procedure TForm1.LabeledEdit1Change(Sender: TObject);
Begin
  n:=StrToInt(labelededit1.Text);
  SetLength(a,n,n);
  SetLength(b,n);
  SetLength(x,n);
  setlength(z,n);
  setlength(t,n,n);
WITH StringGrid1 DO
begin
RowCount:=(n);
ColCount:=(n);
end;
WITH StringGrid2 DO
begin
RowCount:=(n);
end;
WITH StringGrid3 DO
begin
RowCount:=(n);
end;
end;

end.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа для решения СЛАУ методом Гаусса Natalie023 Помощь студентам 5 17.07.2011 13:31
решение слау методом гаусса subarimpra Помощь студентам 0 31.10.2010 15:26
Решения СЛАУ методом Гаусса и Зейделя [ICQ] Помощь студентам 0 04.05.2010 20:51
Метод Гаусса с выбором главного элемента для решения СЛАУ lira_slava Помощь студентам 3 21.05.2009 20:56