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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2014, 19:30   #1
lialia
Форумчанин
 
Регистрация: 08.12.2012
Сообщений: 116
По умолчанию Теорема Гаусса,вывод промежуточных значений

Здравствуйте,подскажите пожалуйста,у меня получилось вывести начальную матрицу и корни,но я не знаю как вывести промежуточные матрицы,когда мы приводим к треугольному виду.
Код:
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
   // procedure StringGrid2Click(Sender: TObject);
  //  procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   const n=4;
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
     var i,j,k:byte;
    a,a1:array[1..n,1..n] of real;
    b,b1,x,y:array[1..n] of real;
    h,g:real;
 
     begin
//исходная матрица коэффициентов
a[1,1]:=4.3;a[1,2]:=-12.1;a[1,3]:=23.2;a[1,4]:=-14.1;
a[2,1]:=2.4;a[2,2]:=-4.4;a[2,3]:=3.5;a[2,4]:=5.5;
a[3,1]:=5.4;a[3,2]:=8.3;a[3,3]:=-7.4;a[3,4]:=-12.7;
a[4,1]:=6.3;a[4,2]:=-7.6;a[4,3]:=1.34;a[4,4]:=3.7;
a1:=a;
b[1]:=15.5;b[2]:=2.5;b[3]:=8.6;b[4]:=12.1;
b1:=b;
for i:=1 to n do
for j:=1 to n do
StringGrid1.Cells[j-1,i-1]:=FloattostrF(a[i,j],ffFixed,0,2);
for i:=0 to n-1 do
 
begin
StringGrid2.Cells[0,i]:='X'+inttostr(i+1)+'=';
StringGrid1.Cells[n,i]:=FloattostrF(b[i+1],ffFixed,0,2);
end;
for k:=1 to n do
begin
for j:=k+1 to n do
begin
h:=a[j,k]/a[k,k];
for i:=k to n do 
a[j,i]:=a[j,i]-h*a[k,i];
 
b[j]:=b[j]-h*b[k];
end;
for i:=1 to n do
for j:=1 to n do
StringGrid3.Cells[i,j]:=floattostr(a[i,j])
end;
// Вычисление корней
for k:=n downto 1 do
begin
h:=0;
for j:=k+1 to n do
begin
g:=a[k,j]*x[j];
h:=h+g;
end;
x[k]:=(b[k]-h)/a[k,k];
end;
for i:=1 to n do
StringGrid2.Cells[1,i-1]:=FloattostrF(x[i],ffFixed,0,2);
//
{begin
for i:=1 to n do
begin
for j:=2 to n do
StringGrid3.Cells[i,j];
sleep(ki)
end; }
//проверка
for i:=1 to n do
begin
y[i]:=0;
for j:=1 to n do
y[i]:=y[i]+a1[i,j]* x[j];
end;
end;
end.
lialia вне форума Ответить с цитированием
Старый 02.03.2014, 19:41   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
я не знаю как вывести промежуточные матрицы
А, куда их нужно вывести? В окно программы (StringGrid), в файл?..
Streletz вне форума Ответить с цитированием
Старый 02.03.2014, 19:44   #3
lialia
Форумчанин
 
Регистрация: 08.12.2012
Сообщений: 116
По умолчанию

В окно программы,я так посчитала ,что там должны быть еще 3 матрицы.
lialia вне форума Ответить с цитированием
Старый 02.03.2014, 20:21   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Выводите результат каждой итерации в StringGrid.
Цитата:
я так посчитала ,что там должны быть еще 3 матрицы.
Если промежуточных итераций всего 3, то можно все StringGrid'ы поместить рядом друг с другом. Но если их может быть больше, то используйте связку StringGrid+PageControl.
Streletz вне форума Ответить с цитированием
Старый 02.03.2014, 21:00   #5
lialia
Форумчанин
 
Регистрация: 08.12.2012
Сообщений: 116
По умолчанию

Я вроде бы здесь пыталась так сделать,но у меня выводит не то,что нужно,без нулей.Как это правильно сделать?
Код:
for i:=1 to n do
for j:=1 to n do
StringGrid3.Cells[i,j]:=floattostr(a[i,j])
end;
lialia вне форума Ответить с цитированием
Старый 03.03.2014, 21:05   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Я вроде бы здесь пыталась так сделать,но у меня выводит не то,что нужно,без нулей.
Что значит без нулей? Не понял...
Streletz вне форума Ответить с цитированием
Старый 03.03.2014, 21:35   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
for i:=1 to n do
for j:=1 to n do
StringGrid3.Cells[i,j]:=FloattostrF(a[i, j], ffFixed, 0, 2);
end;
Post generated by Телепатор 2.0
phomm вне форума Ответить с цитированием
Старый 03.03.2014, 21:41   #8
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Смех

Цитата:
Post generated by Телепатор 2.0
Видимо, у меня не совместимая версия.
Streletz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление Промежуточных Итогов Inter_E Microsoft Office Excel 12 24.02.2012 13:48
Пошаговый вывод метода Гаусса. Leshii Паскаль, Turbo Pascal, PascalABC.NET 0 23.12.2011 01:11
Теорема Виета Voldemort93 Помощь студентам 4 27.08.2009 16:28
Сложить без промежуточных значений valerij Microsoft Office Excel 5 07.04.2009 12:08
Нужна помощь.Вывод промежуточных расчётов по формуле rzrwolf Microsoft Office Excel 4 19.10.2008 17:14