Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 04.04.2016, 01:47   #1 (permalink)
Алекс2
Member
 
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Интегрирование функций методом трапеций. Паскаль

Подынтегральная функция 1 + sqrt(х)* (2+sin^2 x), а=0, b=1

а) Вычислить заданный интеграл при n=10.
б) Вычислить значение заданного интеграла при n=20, 30, 40, …, 100. Результаты показать в виде таблицы на экране и в файле;


Если я применю эту программу будет ли она работать и будет ли правильним ответ? и чтобы была таблица на экране и в файле.
Я пока не могу проверить.
Подскажите пожалуйста.
Если нет , то исправте, пожалуйста.

const a=0;{нижний предел}
b=1;{верхний предел}
n=10;

function f(x:real):real;
begin
f:=1+ sqrt(х)*(2+sin^2x);
end;

function integral(a,b:real):real;
var h,k,s,y:real; i:integer;
begin
h:=(b-a)/n;
s:=(f(a)+f(b))/2;
k:=a;
for i:=1 to n-1 do
begin
k:=k+h;
s:=s+f(k);
end;
s:=s*h;
integral:=s;
Writeln('Длина шага равна: ',h:0:4);{ тут я не знаю правильно или нет}
end;

begin
Writeln('Нижний предел: ',a: ); { тут возле а должна быть цыфра я не знаю какая }
Writeln('Верхний предел: ',b; { и тут тоже}
writeln('Интеграл методом трапеции = ', integral(a,b):0:5);
end.
Алекс2 вне форума   Ответить с цитированием

Старый 04.04.2016, 01:47
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот список тем, которые очень похожи на вашу

Паскаль. Решить СНАУ методом Ньютона-Рафсона
Интегрирование методом средних прямоугольников в Delphi
Паскаль. Численное интегрирование
Паскаль, подпрограммы функций
Паскаль АВС, сортировка в одномерном массиве без функций и операций

Старый 04.04.2016, 10:09   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Алекс2 Посмотреть сообщение
Если я применю эту программу будет ли она работать
Нет, в таком виде не будет.
Цитата:
Сообщение от Алекс2 Посмотреть сообщение
const a=0;{нижний предел}
b=1;{верхний предел}
Пределы интегрирования лучше задать в вещественном формате, а значит написать так:
const a=0.0;{нижний предел}
b=1.0;{верхний предел}
Величину n вообще не следует задавать в виде константы: ведь Вам нужно будет считать интеграл при разных значениях разбиения.
Цитата:
Сообщение от Алекс2 Посмотреть сообщение
f:=1+ sqrt(х)*(2+sin^2x);
В Паскале нет символа ^, точнее, есть, но он используется совсем для другого (обозначает указатель при работе с динамическими переменными), а вовсе не как знак возведения в степень. Поэтому функцию следует задать так:
f:=1+ Sqrt(х)*(2+Sqr(sin(x)));
Цитата:
Сообщение от Алекс2 Посмотреть сообщение
function integral(a,b:real):real;
Поскольку нижний и верхний предел у Вас заданы как константы, нет смысла задавать их, как параметры функции. А вот число шагов разбиения - другое дело. Я бы задал так:
function integral(n:integer):real;
Цитата:
Сообщение от Алекс2 Посмотреть сообщение
{ тут я не знаю правильно или нет}
Правильно. Вообще - разбирайтесь с форматами вывода целых и вещественных чисел. Ничего там сложного нет.
Цитата:
Сообщение от Алекс2 Посмотреть сообщение
{ тут возле а должна быть цыфра я не знаю какая }
Да... так же, как и в других выводах. Например, :0:4.

С учетом вышесказанного:
Код:
const
 a=0.0;{lower limit}
 b=1.0;{upper limit}

function f(x:real):real;
begin
 f:=1+Sqrt(x)*(2.0+Sqr(sin(x)));
end;

function integral(m:integer):real;
var
 h,k,s:real;
 i:integer;
begin
 h:=(b-a)/m;
 s:=(f(a)+f(b))/2;
 k:=a;
 for i:=1 to m-1 do
 begin
  k:=k+h;
  s:=s+f(k);
 end;
 s:=s*h;
 integral:=s;
end;

Var
 n,j:Integer;

Begin
 Writeln('     n         Integral');
 for j:=1 to 10 do
  begin
   n:=j*10;
   writeln(n:7, integral(n):16:6);
  end;
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 05.04.2016, 00:09   #3 (permalink)
Алекс2
Member
 
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Добрый вечер, или скорее доброй ночи, Vladimir_S. Огромное Вам спасибо за помощь!!!
Алекс2 вне форума   Ответить с цитированием
Старый 05.04.2016, 00:25   #4 (permalink)
Алекс2
Member
 
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Посмотрите пожалуйста на метод Зэйделя. Я узнал что надо.
Алекс2 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:14.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.