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

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

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

> Помогите решить проблему (ошибка 205 в программе) при описание метода решение СЛАУ, Помогите пожалуйста...
Error 205
сообщение 22.10.2009 17:20
Сообщение #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 - 23.11.2010 11:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Error 205
сообщение 22.10.2009 18:05
Сообщение #2





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

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


Исходные данные:
Матрица А:
1 2 3
1 2 3
1 2 3
Матрица В:
1
2
3
Начальное приближение:
1
2
3
________________
Ну это к примеру.
50000 циклов для более точного вычисления идет, так как погрешность exp маленькая. Если же я вместо real обозначу extended то у меня появляются ошибка в строчках
 procedure raschet2;	  {schitaem tay 4epe3 ckaJI9pHoe proizvedenie}
begin
rr:=0; rr1:=0; t[ii]:=0; <<<<<<<<<<< Здесь
for i:=1 to n do
begin


Можете объяснить что такое сопроцессор {$N+} и как его подключать?
P.S.: как раз при замене real на extended появляется ошибка связанная с {$N+}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 18.07.2025 14:13
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"