IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите решить проблему (ошибка 205 в программе) при описание метода решение СЛАУ, Помогите пожалуйста...
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Вадим

Репутация: -  0  +


Доброго времени суток!
При решение программы выходит ошибка 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 почти всегда в помеченных строках... Очень прошу объясните что не так и по возможности исправьте..... Заранее благодарю, с уважением, Вадим smile.gif .

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.09.2025 1:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name