Автор |
Сообщение |
MAKS07 Форумчанин |
|
Вообщем вот в чем проблема "написал" прогу интегрирующею функции(так от нечего делать) методом Гаусса а он выдает ошибку вроде друг смотрел говорит что-то я не так делаю подскажите что исправить
program gaussint;
const
g10c1=0.9739065285/6.2012983932;
g10c2=0.8650633667/6.2012983932;
g10c3=0.6794095683/6.2012983932;
g10c4=0.4333953941/6.2012983932;
g10c5=0.1488743390/6.2012983932;
g10x1=0.0666713443/6.2012983932;
g10x2=0.1494513492/6.2012983932;
g10x3=0.2190863625/6.2012983932;
g10x4=0.2692667193/6.2012983932;
g10x5=0.2955242247/6.2012983932;
function F(x:real):real;
begin
F:=x;
end;
function gauss_calc(a,b:real):real;
var n,m,s,s1,s2,s3,s4,s5 :real;
begin
m:=(b+a)/2; n:=(b-a)/2; <===================== вот видете m и t одинаковые опирации
s1:=g10c1*(f(m+n*g10x1)+f(m-n*g10x1));
s2:=g10c2*(f(m+n*g10x2)+f(m-n*g10x2));
s3:=g10c3*(f(m+n*g10x3)+f(m-n*g10x3));
s4:=g10c4*(f(m+n*g10x4)+f(m-n*g10x4));
s5:=g10c5*(f(m+n*g10x5)+f(m-n*g10x5));
s:=s1+s2+s3+s4+s5;
gauss_calc:=s*(b-a);
end;
function gauss(a,b,eps,gc:real):real;
var t,ga,gb :real;
begin
t:=(a+b)/2;<=================вот здесь пишет дубликат t
ga:=gauss_calc(a,t);
gb:=gauss_calc(t,b);
if abs(ga+gb-gc)>eps then
begin
ga:=gauss(a,t,eps/2,ga);
gb:=gauss(t,b,eps/2,gb);
end;
gauss:=ga+gb;
end;
var
Integral :real;
a,b,eps :real;
begin
clrscr;
write('Введите начало интервала интегрирования a='); readln(a);
write('Введите конец интервала интегрирования b='); readln(b);
write('Введите точность интегрирования eps='); readln(eps);
Integral:=gauss(a,b,eps,gauss_calc(a,b));
writeln('Интеграл = ',Integral);
readkey;
end.
paskal.rar |
Описание: |
|
Скачать |
Имя файла: |
paskal.rar |
Размер файла: |
1.12 KB |
Скачано: |
392 раз(а) |
Последний раз редактировалось: MAKS07 (Пт 4-07-08 : 17-26), всего редактировалось 2 раз(а) |
|
|
|
|
MAKS07 Форумчанин |
|
Что ни кто не знает как заставиь её работать??????????????? |
|
|
|
|
akirill Продвинутый форумчанин |
|
А непробывал са подумать? только мозгами)
function F(x:real):real;
begin
F:=x;
end
Гы ГЫ гЫ, а зачем нужна эта функция?
нелзя-ли из констант сделать масив...
и т.д.... |
|
|
|
|
Aprelle Гуру |
|
Каков вопрос, таков ответ.
А если по делу
1)Зачем нужна функция F ?
2)Какую ошибку выдает метод Гаусса ?
3) /2 замени на /2.0 |
|
|
|
|
MAKS07 Форумчанин |
|
akirill.info писал(а): |
function F(x:real):real;
begin
F:=x;
end
Гы ГЫ гЫ, а зачем нужна эта функция? |
Я подразумивал что она будет задавать нужную для интегрирования ф-цию(я методом симпсона так же делал все работает
Aprelle писал(а): |
Какую ошибку выдает метод Гаусса ? |
дубликат t где красным выделено |
|
|
|
|
David Гуру |
|
MAKS07
Процитируй полностью ошибку. Не своими словами |
|
|
|
|
MAKS07 Форумчанин |
|
David писал(а): |
Процитируй полностью ошибку. Не своими словами |
Error 4:duplicate identifier (t) ошибка где красным выделено |
|
|
|
|
BuXTeR Продвинутый форумчанин |
|
MAKS07
В приложенном архиве у тебя нет begin`а перед t:=(a+b)/2; После его добавления ошибка пропадает и программа компилируется (там еще одна проблема с clrscr - добавить надо uses crt, но, возможно, это от версии паскаля зависит. Я тестировал на Borland Pascal 7.1).
Прилагаю исправленный исходник и скомпилированный exe.
GAUSSINT.rar |
Описание: |
|
Скачать |
Имя файла: |
GAUSSINT.rar |
Размер файла: |
5.79 KB |
Скачано: |
385 раз(а) |
|
|
|
|
|
David Гуру |
|
BuXTeR
Точно.
Я как-то в архив не посмотрел сразу - поэтому и попросил процитировать ошибку, т.к. в посте - текст правильный и все должно было работать. |
|
|
|
|
MAKS07 Форумчанин |
|
BuXTeR писал(а): |
В приложенном архиве у тебя нет begin`а перед t:=(a+b)/2; |
Я вообще слепой нахрен в проге нет а тут написал на форуме
BuXTeR писал(а): |
там еще одна проблема с clrscr - добавить надо uses crt, |
это просто я забыл
Спасабо всем |
|
|
|
|
MAKS07 Форумчанин |
|
Вот кстате ещё один метод более простой но есть недостатки
Метод Сипмсона
program Simpson;
function F(x:Real):Real;
begin
F:=2*x;
end;
var a,b,h,x :real;
n,i :integer;
integ :real;
begin
write('Введите начало интегрирования a='); readln(a);
write('Введите конец интегрирования b='); readln(b);
write('Введите количество разбиений интервала (четное число) n='); readln(n);
if (n mod 2)>0 then
begin
n:=n+1;
writeln('Число n было введено нечетное, оно было заменено на n=',n);
end;
h:=(b-a)/n;
integ:=F(a)+F(b)+4*F(a+h);
for i:=1 to (n div 2)-1 do
begin
x:=a+2*h*i;
integ:=integ+2*F(x)+4*F(x+h);
end;
integ:=h*integ/3;
writeln('Интеграл = ',integ);
end.
|
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|