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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 18:25   #1
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
Вопрос программа в паскале

Отредактировать программу чтобы работала, я её написал но выдаёт ошибку, если можете, то помогите. Спасибо.
Задание:
1. Составить программу, подсчитывающую с точностью значение определенного интеграла по формуле. Для достижения заданной точности использовать метод двойного пересчета. Результат сравнить со значением интеграла, подсчитанным с помощью первообразной F(x) по формуле Ньютона-Лейбница: .
Метод должен быть запрограммирован с помощью процедуры. Отрезок интегрирования, точность вычисления вводятся с клавиатуры, подынтегральная функция описывается с помощью функции пользователя.
Распечатать: отрезок интегрирования, точность вычисления, приближенное значение определенного интеграла, значение интеграла, подсчитанное по формуле Ньютона-Лейбница.

Метод: центральных прямоугольников:

1) \int_{0}^{1}{}2^{3^{x}}dx, e=10^{-3}, F(x)=\frac{1}{3ln2}(2^{3x}-1)
Внизу вложен конец задания если непонятно по этой формуле.

Исправьте ошибки в программе, если я что-то написал не в том порядке то исправьте. Спасибо...

Код:
program NV; 
uses crt; 
type TIntFunc=function ( x:real):real; 
function F(fn: TIntFunc; a, b, e:real):real; 
var 
s0, s, i, w, xi:real; 
j, n:integer; 
const eps=0.001; 
begin 
n:=1000; 
if a>b then 
begin 
s:=a; 
a:=b; 
b:=s; 
end; 
repeat 
s0:=s; 
s:=0; 
w:=(b-a)/n; 
for j:=0 to n-1 do 
begin 
xi:=a+(2*j+1)*(b-a)/2/n; 
s:=s+w*fn(xi); 
end; 
inc(n,10); 
until (n>12) and (abs(s-s0)<=e); 
I:=s; 
end; 
var 
a, b, e:real; 
begin 
function f1(x:real):real; 
far; 
begin 
f1:=exp(3*x*ln(2)); 
end; 
function f2(x:real):real; 
far; 
begin 
f2:=((1/3*ln*2*(exp(3*x-1))); 
end; 
write('Input A B E (separated by space):'); 
readln(a, b, e); 
writeln('i=',i(f1, a, b, e):15:5); 
writeln(' Checking:'); 
writeln('i=',f2(b)-f2(a):15:5); 
writeln 
end.

Выдаёт ошибку там где я отметил жирным шрифтом первую букву.
Вложения
Тип файла: doc задание по интегралам.doc (20.5 Кб, 12 просмотров)
Anton94.by вне форума Ответить с цитированием
Старый 14.12.2011, 18:28   #2
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
Восклицание программа в паскале

Отредактировать программу чтобы работала, я её написал но выдаёт ошибку, если можете, то помогите. Спасибо.
Задание:
1. Составить программу, подсчитывающую с точностью значение определенного интеграла по формуле. Для достижения заданной точности использовать метод двойного пересчета. Результат сравнить со значением интеграла, подсчитанным с помощью первообразной F(x) по формуле Ньютона-Лейбница: .
Метод должен быть запрограммирован с помощью процедуры. Отрезок интегрирования, точность вычисления вводятся с клавиатуры, подынтегральная функция описывается с помощью функции пользователя.
Распечатать: отрезок интегрирования, точность вычисления, приближенное значение определенного интеграла, значение интеграла, подсчитанное по формуле Ньютона-Лейбница.

Метод: центральных прямоугольников:

1) \int_{0}^{1}{}2^{3^{x}}dx, e=10^{-3}, F(x)=\frac{1}{3ln2}(2^{3x}-1)
Внизу вложен конец задания если непонятно по этой формуле.

Исправьте ошибки в программе, если я что-то написал не в том порядке то исправьте. Спасибо...

Код:
program NV; 
uses crt; 
type TIntFunc=function ( x:real):real; 
function F(fn: TIntFunc; a, b, e:real):real; 
var 
s0, s, i, w, xi:real; 
j, n:integer; 
const eps=0.001; 
begin 
n:=1000; 
if a>b then 
begin 
s:=a; 
a:=b; 
b:=s; 
end; 
repeat 
s0:=s; 
s:=0; 
w:=(b-a)/n; 
for j:=0 to n-1 do 
begin 
xi:=a+(2*j+1)*(b-a)/2/n; 
s:=s+w*fn(xi); 
end; 
inc(n,10); 
until (n>12) and (abs(s-s0)<=e); 
I:=s; 
end; 
var 
a, b, e:real; 
begin 
function f1(x:real):real; 
far; 
begin 
f1:=exp(3*x*ln(2)); 
end; 
function f2(x:real):real; 
far; 
begin 
f2:=((1/3*ln*2*(exp(3*x-1))); 
end; 
write('Input A B E (separated by space):'); 
readln(a, b, e); 
writeln('i=',i(f1, a, b, e):15:5); 
writeln(' Checking:'); 
writeln('i=',f2(b)-f2(a):15:5); 
writeln 
end.

Выдаёт ошибку там где я отметил жирным шрифтом первую букву.
Вложения
Тип файла: doc задание по интегралам.doc (20.5 Кб, 9 просмотров)
Anton94.by вне форума Ответить с цитированием
Старый 14.12.2011, 18:29   #3
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
По умолчанию

ошибка где слово " function ...."
Anton94.by вне форума Ответить с цитированием
Старый 14.12.2011, 19:32   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
type TIntFunc=function ( x:real):real;
function F(fn: TIntFunc; a, b, e:real):real; //на входе массив Fn, который нигде не используется
var                                          //кстати, сама функция в программе тоже не используется
s0, s, i, w, xi:real;
j, n:integer;
const eps=0.001;
begin
n:=1000;
if a>b then
begin
s:=a;
a:=b;
b:=s;
end;
repeat
s0:=s;
s:=0;
w:=(b-a)/n;
for j:=0 to n-1 do
begin
xi:=a+(2*j+1)*(b-a)/2/n;
s:=s+w*fn(xi);
end;
inc(n,10);
until (n>12) and (abs(s-s0)<=e);
I:=s;
end;


function f1(x:real):real;
far; 								//зачем?
begin
f1:=exp(3*x*ln(2));
end;

function f2(x:real):real;
far; 								//зачем?
begin
f2:=((1/3*ln*2*(exp(3*x-1)))); //тут скобки нехватало
end;

var
a, b, e:real;
begin


write('Input A B E (separated by space):');
readln(a, b, e);
writeln('i=',i(f1, a, b, e):15:5); // i(f1, a, b, e) - вообще, что это? переменная i не объявлена, в скобках название функции и три переменных, смысл выражения для меня остался загадкой
writeln(' Checking:');
writeln('i=',f2(b)-f2(a):15:5);
writeln
end.
Если ответишь на вопросы в комментариях, может быть помогу. Так бы сам исправил, но что-то формула мудреная сильно, лень вникать.
Все тривиальное просто

Последний раз редактировалось whatever; 14.12.2011 в 19:36.
whatever вне форума Ответить с цитированием
Старый 14.12.2011, 19:51   #5
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
Сообщение

function f1(x:real):real;
far;
begin
f1:=exp(3*x*ln(2));
end;
function f2(x:real):real;
far;
begin
f2:=((1/3*ln*2*(exp(3*x-1))));
end;

эта функция, после задания идёт доподнительное задание: метод центральных прямоугольников
там 1) и формула, а формула это там цифры посмотрите вложение.
Anton94.by вне форума Ответить с цитированием
Старый 14.12.2011, 20:03   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Ну ладно, будем считать, что f1 и f2 написаны правильно, только стояли не там, где надо

Код:
writeln('i=',i(f1, a, b, e):15:5);
Вот где i(f1, a, b, e), что ты хотел сделать?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 14.12.2011, 20:11   #7
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
Сообщение

Цитата:
Сообщение от whatever Посмотреть сообщение
Ну ладно, будем считать, что f1 и f2 написаны правильно, только стояли не там, где надо

Код:
writeln('i=',i(f1, a, b, e):15:5);
Вот где i(f1, a, b, e), что ты хотел сделать?
Это вывод значение интеграла, подсчитанное по формуле Ньютона-Лейбница.
Anton94.by вне форума Ответить с цитированием
Старый 14.12.2011, 20:12   #8
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
По умолчанию

Вы напишите, что, где надо поставить.
Anton94.by вне форума Ответить с цитированием
Старый 14.12.2011, 21:25   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
type TIntFunc=function ( x:real):real;
function F(fn: TIntFunc; a, b, e:real):real;
var
s0, s, i, w, xi:real;
j, n:integer;
const eps=0.001;
begin
n:=1000;
if a>b then
begin
s:=a;
a:=b;
b:=s;
end;
repeat
s0:=s;
s:=0;
w:=(b-a)/n;
for j:=0 to n-1 do
begin
xi:=a+(2*j+1)*(b-a)/2/n;
s:=s+w*fn(xi);
end;
inc(n,10);
until (n>12) and (abs(s-s0)<=e);
F:=s;
end;


function f1(x:real):real;
far;
begin
f1:=exp(3*x*ln(2));
end;

function f2(x:real):real;
far;
begin
f2:=((1/3*ln(2)*(exp(3*x-1))));
end;

var
a, b, e:real;
begin


write('Input A B E (separated by space):');
readln(a, b, e);
writeln('i=',F(f1, a, b, e):15:5);
writeln(' Checking:');
writeln('i=',f2(b)-f2(a):15:5);
writeln;
readln;
end.
Ну вот так она, по крайней мере, что-то покажет.

F2 считает значение, видимо, первообразных от a и b

Что делает F1 не догнал.

Запись типа TIntFunc=function ( x:real):real; вообще раньше не встречал, если бы сам не попробовал, сказал бы, что не откомпелируется.

Ищи ошибки в функции F. Изначально задаешь n:=1000, а затем
Код:
inc(n,10);//увеличиваешь на 10
until (n>12) and (abs(s-s0)<=e);//n с самого начала больше 12, зачем это условие?
Далее:
Код:
function F(fn: TIntFunc; a, b, e:real):real;
Передаешь функцию Fn в функцию F, верх сюрреализма и абстракицонизма. При всем при этом еще и не пользуешься ей.

Вообще у тебя в коде столько неведомой фигни, что я вообще ничего не понимаю.

Давай так: на пальцах рассказываешь, что должна делать функция F, и помогу тебе ее написать.
Под "на пальцах" я понимаю пошагово, каждое следующее действие
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа на паскале VAVILON17 Помощь студентам 0 15.05.2011 17:10
Программа в паскале Batonchik Помощь студентам 9 18.01.2009 15:07
программа в Паскале vitekbest Помощь студентам 4 17.12.2007 08:33