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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2012, 16:52   #1
Homutova_Julia
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 18
Восклицание При компиляции сообщает о деление на нуль

Помогите, пожалуйста, найти ошибку в коде
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var a: Matrix;
b,x: Vector;
c, max,m,s: real;
i,j,k,r,n:byte;
begin
n:=4;
Label1.Caption:='';
Label2.Caption:='';
for j := 1 to n do
for i := 1 to n do
a[i + 1, j + 1] := StrToFloatDef(StringGrid1.Cells[j, i],0);
for I :=1 to n do b[i + 1] := StrToFloatDEF(StringGrid2.Cells[0, i],0);
//Поиск максимального (главного) элемента
For k:=1 to n do
begin
max:=Abs(a[k,k]);
r:=k;
for i:=k+1 to n do
if Abs(a[i,k])>max then
begin
max:=Abs(a[i,k]);
r:=i;
end;
for j:=1 to n do
begin
c:=a[k,j];
a[k,j]:=a[r,j];
a[r,j]:=c;
end;
c:=b[k];
b[k]:=b[r];
b[r]:=c;
// приведение расширенной матрицы к диагональному виду
for i:=k+1 to n do
begin
m:=a[i,k]/a[k,k];
for j:=k to n do
a[i,j]:=a[i,j]-m*a[k,j];
b[i]:=b[i]-m*b[k];
end;
end;
// обратный ход метода Гауса
x[n]:=b[n]/a[n,n];
for i:=n downto 1 do
begin
s:=0;
for j:=i+1 to n do
s:=s+a[i,j]*x[i];
x[i]:=(b[i])/a[i,i];
end;

for i:=1 to n do
label1.Caption:=label1.Caption+#13+ 'x('+Inttostr(i)+')= '
+ FormatFloat('0.000',x[i])+#13;
end;
С уважением, Юлия
Homutova_Julia вне форума Ответить с цитированием
Старый 07.03.2012, 18:17   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Код:
for j := 1 to n do
for i := 1 to n do
a[i + 1, j + 1] := StrToFloatDef(StringGrid1.Cells[j, i],0);
тут вроде как если не получается из стрингрида вытяянуть значение то присваивается элементу нуль...
Цитата:
Код:
for i:=k+1 to n do
begin
m:=a[i,k]/a[k,k];
и
Цитата:
Код:
x[n]:=b[n]/a[n,n];
и
Цитата:
Код:
for j:=i+1 to n do
s:=s+a[i,j]*x[i];
x[i]:=(b[i])/a[i,i];
собственно само деление... в каком то из них и происходит ваше деление на нуль... либо изменяйте StrToFloatDef при ошибке значение... либо осуществляйте контроль что бы ошибок не было... либо поставьте иное значение при ошибке...

по данному коду такие от размышления...
если говорит что делит на нуль.. .значит так и есть... матрица каким то образом содержит нули...

P.S. если при компиляции ругается... то видимо не в этом может быть даже ошибка процедуре... посмотрите formcreate... может там что... так как эта процедура выполняется лишь при нажатии первого батана.. если конечно вы в креате не вызываете его..
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 07.03.2012 в 18:19.
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль - пишет при вводе 0 - Ошибка:вещественное деление на нуль и когда ввожу цифру -0.1 MoLoDoI Паскаль, Turbo Pascal, PascalABC.NET 4 03.02.2012 14:49
Деление на нуль при запуске Pababop Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2010 16:43
как поставить ограничение на число нуль а не на символ нуль??? Dr.Swat Помощь студентам 0 12.06.2010 20:35
Ограниченный тип 0..11 сброс в нуль при перепонении Alex Cones Общие вопросы Delphi 4 14.01.2010 11:56
деление при помощи mmx команд Tecka Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 19.12.2009 20:09