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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2016, 19:38   #1
Калючка
Пользователь
 
Регистрация: 05.11.2016
Сообщений: 11
Сообщение Аппроксимировать табличную функцию многочленом второй степени методом наименьших квадратов(паскаль)

Ребята, подскажите как от типа real перейти к extended или обойти ошибку error 205:floating point overflow(в отмеченной строке).Программа до x[i]:=15 считает,а потом выдает эту ошибку, а мне надо хотя бы до 20.
Код:
program MNK7;
uses Crt;
const
nmax=100;
type
matr=array [0..nmax,0..nmax] of real;
vektor=array [0..nmax] of real;
var
n,m,k,i:integer;
x,y,c:vektor;
a:matr;
x0,x20,h,x1:real;
procedure vvod(n:integer; var x,f:vektor);
begin
writeln('vvedite x:');
for i:= 0 to n do
begin
write('x[',i+1,']= ');
readln(x[i]);
end;
writeln;
writeln('vvedite y:');
for i:= 0 to n do
begin
write('y[',i+1,']= ');
readln(y[i]);
end;
end;
function ex(v:real;n:integer):real;
var
i:integer;
e:real;
begin
e:=1;
for i:= 1 to n do
e:=e*v;
ex:=e;
end;
procedure Gram(n,m:integer; var x,y:vektor; var a:matr);
var
i,j:integer;
p,q,r,s:real;
begin
for j:= 0 to m do
begin
s:=0;
r:=0;
q:=0;
for i:= 0 to n do
begin
p:=ex(x[i],j);
s:=s+p;
r:=r+p*y[i];
q:=q+p*ex(x[i],m);
end;
a[0,j]:=s;
a[j,m]:=q;
a[j,m+1]:=r;
end;
for i:= 1 to m do
for j:= 0 to m-1 do
a[i,j]:=a[i-1,j+1];
end;
procedure gauss(n:integer; var a:matr; var x:vektor);
var
i,j,k,l,k1,n1:integer;
r,s:real;
begin
n1:=n+1;
for k:= 0 to n do
begin
k1:=k+1;
s:=a[k,k];
for j:=k1 to n1 do
a[k,j]:=a[k,j]/s;
for i:= k1 to n do
begin
r:=a[i,k];
for j:=k1 to n1 do
a[i,j]:=a[i,j]-a[k,j]*r;
end;
end;
for i:= n downto 0 do
begin
s:=a[i,n1];
for j:= i+1 to n do
s:=s-a[i,j]*x[j];
x[i]:=s;
end;
end;
function f1 (m:integer; var c:vektor;x1:real):real;
var
i:integer;
p:real;
begin
p:=c[m];
for i:= m-1 downto 0 do
p:=c[i]+x1*p;
f1:=p;
end;
begin
write('vvedite 4islo yzlov n= ');
readln(n);
n:=n-1;
writeln;
write('vvedite stepen polinoma m= ');
readln(m);
writeln;
vvod(n,x,y);
gram(n,m,x,y,a);
gauss(m,a,c);
writeln('koeffizienti polinoma MNK ',m,' stepeni: ');
for i:= 0 to m do
write (c[i]:1:25,' ');
writeln;
write('granici po x: ');
readln(x0,x20);
write('hag po x: ');
readln(h);
k:=round((x20-x0)/h+1);
x1:=x0;
for i:= 1 to k do
begin
writeln(x1:2:4,' ',f1(m,c,x1):2:4,' ');
x1:=x1+h;
end;
end.
Калючка вне форума Ответить с цитированием
Старый 05.12.2016, 20:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Думаешь поможет? Там у тебя в степень чего-то возводится. Если то чего-то и показатель достаточно большие, то... О шахматной доске и зернах слышал? Может и extended не хватит. Заменить везде real на extended слабо?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.12.2016, 20:06   #3
Калючка
Пользователь
 
Регистрация: 05.11.2016
Сообщений: 11
По умолчанию

компилятор не пропускает...(((
Калючка вне форума Ответить с цитированием
Старый 05.12.2016, 20:12   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Че за паскаль, extended даже в турбо есть. Там логику нужно переделывать. А на твой код даже смотреть противно - мало того, что не форматирован, так и сплошняком переменные i, j, k и прочее
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.12.2016, 20:29   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А в какую степень надо возводить, и какие числа ?
Если real это - до 10^308, то в 20-ю степень можно возводить числа до 2*10^15 . У вас такие большие числа ?
И почему extended нельзя ? Там до 10^4932
Какой у вас Паскаль?
type_Oleg вне форума Ответить с цитированием
Старый 05.12.2016, 20:30   #6
Калючка
Пользователь
 
Регистрация: 05.11.2016
Сообщений: 11
По умолчанию

на что мозгов хватило...(((это вторая программа за всю мою короткую жизнь...(
Калючка вне форума Ответить с цитированием
Старый 05.12.2016, 20:32   #7
Калючка
Пользователь
 
Регистрация: 05.11.2016
Сообщений: 11
По умолчанию

не компилирует...может у меня битый паскаль...?
Калючка вне форума Ответить с цитированием
Старый 05.12.2016, 23:39   #8
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Эх, ностальгия

Оно не скомпилируется с extended, потому что из-за исторических (я бы даже сказал доисторических) особенностей твой компилятор не может объявлять в одной программе переменных больше чем на 64 килобайта. А у тебя в самом начале массив 100 на 100. Пока тип был real (6 байт) - места хватало; стал extended (10 байт на значение) - хватать перестало.

Единственный простой способ решить проблему - сделать nmax меньше раза в два.
Son Of Pain вне форума Ответить с цитированием
Старый 06.12.2016, 10:33   #9
Калючка
Пользователь
 
Регистрация: 05.11.2016
Сообщений: 11
По умолчанию

не помогает....уже пробовала...((я уже не знаю просто как программу до ума довести, вот и выложила...надо наверное другие способы решения искать....
Калючка вне форума Ответить с цитированием
Старый 06.12.2016, 11:19   #10
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Может стоит тогда указателями воспользоваться, тут тебе можно хоть всю оперативку использовать
netpolice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
аппроксимация методом наименьших квадратов ARAGON Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2013 18:57
Аппроксимация методом наименьших квадратов kamil83 Помощь студентам 0 22.02.2011 17:33
Аппроксимация методом наименьших квадратов KSuxa1989 Помощь студентам 2 08.09.2010 15:20
Аппроксимация функции методом наименьших квадратов(МНК) vitaly38 Помощь студентам 1 29.03.2010 21:50
Паскаль. Аппроксимация функции методом наименьших квадратов. 3abeel Фриланс 17 13.07.2009 09:21