![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 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. Матрицу исходную я заполнила, почему ему не нравится, не понимаю(( Ребят, помогите, пожалуйста) |
![]() |
![]() |
![]() |
#2 |
Регистрация: 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. |
![]() |
![]() |
![]() |
#3 |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]()
У вас где-то выскакивает не допустимое дробное значение!
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
![]() |
![]() |
![]() |
#4 |
Регистрация: 01.05.2010
Сообщений: 7
|
![]()
А как посмотреть где оно выскакивает? А оно выскакивает когда уже непосредственно должна выводиться обратная матрица?
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 13.12.2007
Сообщений: 788
|
![]() Код:
1) Ячейка пуста, на это нужно проверять или принудительно записывать в пустые ячейки ноль 2) Неверный формат записи дробных чисел (попробуйте вместо точки писать запятую, или наоборот)
благодарность - сюда (не забываем писать от кого)
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обратная матрица | ВасяСВВ | Общие вопросы 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 |