При решение программы выходит ошибка 205 (ф-ия с плавающей точкой вывела слишком большое значение для паскаля). Как от нее избавиться?
Вот листинг программы:
uses crt;
const eps=0.001;
var
a:array [1..50, 1..50] of integer;
ab,t,b,c,d:array [1..50] of real;
x,xx,r:array [0..50, 0..50] of real;
n,i,j,k: integer; rr,rr1:real;
p:boolean; ii:longint;
procedure init;
begin
clrscr;
writeln('Ax=B');
writeln('BBeguTe IIop9goK cucTeMbI');
readln(n);
writeln('BBeguTe A'); {vvodim A}
for i:=1 to n do
begin
for j:=1 to n do
begin
writeln('BBeguTe a[',i,',',j,'] eJIeMeHt MaccuBa');
read(a[i,j]);
end;
readln;
end;
clrscr;
writeln('Ax=B');
writeln('BBeguTe B');
for i:=1 to n do {vvodim b}
begin
writeln('BBeguTe b[',i,'] eJIeMeHt MaccuBa');
read(b[i]);
end;
clrscr;
writeln('Ax=B');
for i:=1 to n do
begin {vvodim x^0}
writeln('BBeguTe Ha4aJIbHoe IIpubJIu}I{eHue');
read(x[i,0]);
end;
readln;
end;
procedure raschet1; {schitaem r^0 - vektor nevyazki}
begin
for i:=1 to n do
begin
c[i]:=0;
j:=0;
repeat
inc(j);
c[i]:=c[i]+(a[i,j]*x[j,ii-1]); {***}
until j=n;
r[i,ii-1]:=b[i]-c[i];
end;
end;
procedure raschet2; {schitaem tay 4epe3 ckaJI9pHoe proizvedenie}
begin
rr:=0; rr1:=0; t[ii]:=0;
for i:=1 to n do
begin
rr:=rr+r[i,ii-1]*r[i,ii-1]; {***}
d[i]:=0;
for j:=1 to n do
begin
d[i]:=d[i]+(a[i,j]*r[j,ii-1]);
end;
rr1:=rr1+d[i]*r[i,ii-1]; {***}
end;
t[ii]:=rr/rr1;
end;
procedure raschet3; {schitaem x^i-Toe}
begin
for i:=1 to n do
begin
xx[i,ii]:=t[ii]*r[i,ii-1];
x[i,ii]:=xx[i,ii]+x[i,ii-1];
end;
end;
procedure vyv; {print}
begin
clrscr;
writeln('MaTpuLLa A=');
for i:=1 to n do
begin
for j:=1 to n do
begin
write(a[i,j]:2);
end;
writeln;
end;
readln;
{clrscr;}
writeln('MaTpuLLa B=');
for i:=1 to n do
begin
writeln(B[i]:3 :0);
end;
readln;
{clrscr;}
writeln('Ha4aJIbHoe IIpubJIu}I{eHue x^0=');
for i:=1 to n do
begin
writeln(x[i,0]:3 :0);
end;
readln;
{ clrscr;}
end;
procedure proverka; {proverka na pogpewHocTb}
begin
ab[ii]:=0;
p:=false;
for i:=1 to n do
ab[ii]:=ab[ii]+sqr(x[i,ii]-x[i,ii-1]);
if abs(sqrt(ab[ii]))<eps then
begin
p:=true;
clrscr;
writeln('OKOH4aTeJIbHbIu OTBET= ');
for i:=1 to n do
begin
writeln(x[i,ii]:7 :3);
end;
readln;
halt
end;
end;
begin
init;
vyv;
repeat
for ii:=1 to 50000 do begin
raschet1;
raschet2;
raschet3;
proverka;
end;
until p=true;
end.
Программа должна решать СЛАУ методом скорейшего спуска. Ошибка выходит в строках помеченных {***}. При решение матриц 2х2 иногда просчеты идут, но при большей размерности выскакивает ошибка 205 почти всегда в помеченных строках... Очень прошу объясните что не так и по возможности исправьте..... Заранее благодарю, с уважением, Вадим .
Сообщение отредактировано: volvo -