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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 00:51   #1
Student_2008
 
Регистрация: 01.05.2010
Сообщений: 7
По умолчанию Обратная матрица. Исправить программу

Здравствуйте!
Мне нужно найти обратную матрицу (7Х7). Я на этом форуме поискала,нашла функцию.Вроде, все правильно сделала. Но программа выдает: Project Project1.exe raised exeption class EConvertError with message "''is not a valid floating point value '. Process stopped. Use Step or Run to Continue.

Матрицу исходную я заполнила, почему ему не нравится, не понимаю(( Ребят, помогите, пожалуйста)
Student_2008 вне форума Ответить с цитированием
Старый 23.12.2011, 00:54   #2
Student_2008
 
Регистрация: 01.05.2010
Сообщений: 7
По умолчанию

А вот сам код программы.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids;
Const
N0=7;

Type
Matrix=Array[0..N0-1, 0..N0-1] Of Extended;
a= array[1..7,1..7] of real;
type
TForm1 = class(TForm)
strngrd1: TStringGrid;
strngrd2: TStringGrid;
btn1: TBitBtn;
procedure btn1Click(Sender: TObject);
private
function MatrixOpred(F: Matrix; Const N: Byte):real;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.MatrixOpred(F: Matrix; const N: Byte): real;
Var
B: Matrix;
d, t, y, g, s: Extended;
k, c, i, j, v, kn, l: Byte;
Begin
kn:=0;
If (N=1) Then D:=F[0, 0]
Else If (N=2) Then D:=F[0, 0]*F[1, 1]-F[0, 1]*F[1, 0]
Else
Begin
For k:=0 To N-2 Do
Begin
D:=F[k, k];
If (d=0) Then
Begin
l:=0;
Repeat
l:=l+1;
Until ((F[k+l, k]<>0) Or (l>=N));
If (l<N) Then
Begin
For v:=k To N-1 Do
Begin
B[k, v]:=F[k, v];
F[k, v]:=F[k+l, v];
F[k+l, v]:=B[k, v];
End;
d:=F[k, k];
kn:=kn+1;
End
Else
Begin
MatrixOpred:=0;
Exit;
End;
End;

For j:=k To N-1 Do B[k, j]:=F[k, j];

For c:=k+1 To N-1 Do
Begin
T:=F[c, k];
If (t<>0) Then
Begin
If (d<>0) Then
y:=t/d;

For j:=k To N-1 Do
Begin
F[k, j]:=B[k, j];
F[k, j]:=F[k, j]*y;
F[c, j]:=F[c, j]-F[k, j];
End;
End;
End;

If (g<>F[k, k]) Then
For j:=k To N-1 Do F[k, j]:=B[k, j];
End;

D:=1;
j:=0;
For i:=0 To N-1 Do
Begin
D:=D*F[i, j];
Inc(j);
End;

If (Odd(Kn)) Then D:=-D;
End;
MatrixOpred:=D;

end;

procedure TForm1.btn1Click(Sender: TObject);
var A,B,F:Matrix;
i,j,k,l,p,q,n:integer;
begin
for i:=1 to 7 do
for j:=1 to 7 do
begin
A[i,j]:= StrToFloat(strngrd1.cells[i,j])
end;

for k:=1 to 7 do
for l:=1 to 7 do
begin
F[i,j]:=A[i,j]
end;
n:=7;
for p:=1 to 7 do
for q:=1 to 7 do
begin
strngrd2.cells[p,q]:=FloatToStr(MatrixOpred(F,N))
end;
end;

end.
Student_2008 вне форума Ответить с цитированием
Старый 23.12.2011, 00:55   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

У вас где-то выскакивает не допустимое дробное значение!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 23.12.2011, 09:16   #4
Student_2008
 
Регистрация: 01.05.2010
Сообщений: 7
По умолчанию

А как посмотреть где оно выскакивает? А оно выскакивает когда уже непосредственно должна выводиться обратная матрица?
Student_2008 вне форума Ответить с цитированием
Старый 23.12.2011, 12:59   #5
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Код:
A[i,j]:= StrToFloat(strngrd1.cells[i,j])
Подразумеваю что тут могут быть проблемы:
1) Ячейка пуста, на это нужно проверять или принудительно записывать в пустые ячейки ноль
2) Неверный формат записи дробных чисел (попробуйте вместо точки писать запятую, или наоборот)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратная матрица ВасяСВВ Общие вопросы C/C++ 1 30.03.2011 20:52
обратная матрица Vitek.i Общие вопросы C/C++ 11 25.01.2011 16:57
обратная матрица LastBreath Помощь студентам 1 04.06.2010 20:30
Обратная матрица Шахрия Помощь студентам 1 26.10.2009 17:28
Обратная матрица Artemm Общие вопросы C/C++ 6 26.05.2009 17:55