adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
Интегрирование в Паскале
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
MAKS07
Форумчанин
СообщениеДобавлено: Пт 27-06-08 : 16-26    Заголовок сообщения: Интегрирование в Паскале Ответить с цитатой

Very Happy Вообщем вот в чем проблема "написал" прогу интегрирующею функции(так от нечего делать) методом Гаусса а он выдает ошибку вроде друг смотрел говорит что-то я не так делаю подскажите что исправить Sorry

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
 Скачано:  380 раз(а)
Последний раз редактировалось: MAKS07 (Пт 4-07-08 : 17-26), всего редактировалось 2 раз(а)
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
MAKS07
Форумчанин
СообщениеДобавлено: Пт 4-07-08 : 17-21    Заголовок сообщения: Ответить с цитатой

help me help me Баян Ап стену друже! Что ни кто не знает как заставиь её работать???????????????
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
akirill
Продвинутый форумчанин
СообщениеДобавлено: Пт 4-07-08 : 17-36    Заголовок сообщения: Ответить с цитатой

А непробывал са подумать? только мозгами)

function F(x:real):real;
begin
F:=x;
end

Гы ГЫ гЫ, а зачем нужна эта функция?

нелзя-ли из констант сделать масив...

и т.д....
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Посетить сайт автора  
Aprelle
Гуру
СообщениеДобавлено: Пт 4-07-08 : 17-40    Заголовок сообщения: Ответить с цитатой

Каков вопрос, таков ответ.
А если по делу
1)Зачем нужна функция F ?
2)Какую ошибку выдает метод Гаусса ?
3) /2 замени на /2.0
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
MAKS07
Форумчанин
СообщениеДобавлено: Пт 4-07-08 : 18-07    Заголовок сообщения: Ответить с цитатой

akirill.info писал(а):
function F(x:real):real;

begin

F:=x;

end



Гы ГЫ гЫ, а зачем нужна эта функция?

Я подразумивал что она будет задавать нужную для интегрирования ф-цию(я методом симпсона так же делал все работает Ап стену друже!
Aprelle писал(а):
Какую ошибку выдает метод Гаусса ?

дубликат t где красным выделено
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
David
Гуру
СообщениеДобавлено: Сб 5-07-08 : 22-49    Заголовок сообщения: Ответить с цитатой

MAKS07
Процитируй полностью ошибку. Не своими словами
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
MAKS07
Форумчанин
СообщениеДобавлено: Вс 6-07-08 : 11-07    Заголовок сообщения: Ответить с цитатой

David писал(а):
Процитируй полностью ошибку. Не своими словами

Very Happy Error 4:duplicate identifier (t) ошибка где красным выделено
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
BuXTeR
Продвинутый форумчанин
СообщениеДобавлено: Вс 6-07-08 : 11-51    Заголовок сообщения: Ответить с цитатой

MAKS07
В приложенном архиве у тебя нет begin`а перед t:=(a+b)/2; После его добавления ошибка пропадает и программа компилируется (там еще одна проблема с clrscr - добавить надо uses crt, но, возможно, это от версии паскаля зависит. Я тестировал на Borland Pascal 7.1).
Прилагаю исправленный исходник и скомпилированный exe.



GAUSSINT.rar
 Описание:  
Скачать
 Имя файла:  GAUSSINT.rar
 Размер файла:  5.79 KB
 Скачано:  371 раз(а)
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
David
Гуру
СообщениеДобавлено: Вс 6-07-08 : 12-44    Заголовок сообщения: Ответить с цитатой

BuXTeR
Точно.гуд
Я как-то в архив не посмотрел сразу - поэтому и попросил процитировать ошибку, т.к. в посте - текст правильный и все должно было работать.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
MAKS07
Форумчанин
СообщениеДобавлено: Пн 7-07-08 : 08-56    Заголовок сообщения: Ответить с цитатой

BuXTeR писал(а):
В приложенном архиве у тебя нет begin`а перед t:=(a+b)/2;

Я вообще слепой нахрен в проге нет а тут написал на форуме Sad
BuXTeR писал(а):
там еще одна проблема с clrscr - добавить надо uses crt,

это просто я забыл Cry

Спасабо всем Respect
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
MAKS07
Форумчанин
СообщениеДобавлено: Ср 9-07-08 : 17-32    Заголовок сообщения: Ответить с цитатой

preved Вот кстате ещё один метод более простой но есть недостатки
Метод Сипмсона

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.

Respect
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы