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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2010, 15:54   #1
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию Курсовой проект на тему решение систем линейных уравнений методом посл.итераций

Подскажите как сделать в моей программе так чтобы если дигональные элементы были равны 1 программа выдавала ответ из свободных коэффициентов и еще если все элементы были равны 0 программа выдавала сообщение "Бесконечное множество решений" Заранее спасибо!!!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 a:Matrix;
 b,x,otv:Vector;
 i,j,n:Integer;
 eps:Real;
 pr:Boolean;

begin
 n:= StrToIntDef(Text, StringGrid1.ColCount); {размерность}
 for j:=0 to n-1 do   //заполнение левой части
  for i:=0 to n-1 do
   a[i+1,j+1]:=StrToFloatDef(StringGrid1.Cells[j,i], 0);
  for i:=0 to n-1 do   //заполнение правой части
   b[i+1]:=StrToFloatDef(StringGrid2.Cells[0,i],0);
  for i:=1 to n do                    //проверка на наличие нулей по диагонали
  if a[i,i]=0 then
  begin
   showmessage('Ошибка ввода');
   exit;
  end;

 for i:=1 to n do
 begin
     for j:=1 to n do
     begin
         if i=j then continue;
         a[i,j]:=-a[i,j]/a[i,i];
         memo2.Lines.Add('a['+inttostr(i)+','+inttostr(j)+']'+floattostr(a[i,j]));
     end;
     b[i]:=b[i]/a[i,i];
     memo2.Lines.Add('b['+inttostr(i)+']'+floattostr(b[i]));
     a[i,i]:=0;
 end;
 for i:=1 to n do
 x[i]:=b[i];

 eps:=0.000001;//ввод точности

 repeat
      for i:=1 to n do
      begin
          for j:=1 to n do
           begin
           otv[i]:=otv[i]+a[i,j]*x[j];
           memo2.Lines.Add('otv['+inttostr(i)+']'+floattostr(otv[i]));
           end;
          otv[i]:=otv[i]+b[i];
      end;
      for i:=1 to n do
      if abs(otv[i]-x[i])<eps then pr:=true;
      for i:=1 to n do
      begin
          x[i]:=otv[i];
          otv[i]:=0;
      end;
  until pr=false;
        for i:=1 to n do
        memo1.Lines.Add(FloatToStr(x[i]))
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 with StringGrid1, Edit1 do
 begin
  ColCount:=StrToIntDef(Text, 3);
  RowCount:=StrToIntDef(Text, 3);
 end;
 with StringGrid2, Edit1 do
  RowCount:=StrToIntDef(Text, 3);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
Sleep(4000);
 Randomize;
  for I := 0 to StrToIntDef(Text, StringGrid1.ColCount) - 1 do
    for J := 0 to StrToIntDef(Text, StringGrid1.RowCount) - 1 do
      StringGrid1.Cells[I, J] := IntToStr(Random(100));
  for I := 0 to StrToIntDef(Text, StringGrid2.RowCount) - 1 do
    StringGrid2.Cells[0, I] := IntToStr(Random(100));
end;

end.

Последний раз редактировалось Stilet; 11.05.2010 в 16:05.
Ericnex вне форума Ответить с цитированием
Старый 11.05.2010, 15:58   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

http://alglib.sources.ru/equations/linear.php
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение системы линейных уравнений методом Гаусса. maliyusha Помощь студентам 16 18.02.2013 15:44
Решить систему линейных уравнений методом простых итераций на Delphi Кнопик Помощь студентам 2 22.10.2009 16:11
Решение систем линейных уравнений. SadmeN Помощь студентам 5 08.06.2009 23:36
Решение систем линейных неравенств методом Агмона-Моцкина. ballz Помощь студентам 1 26.04.2007 06:45