IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> функция Бесселя, функция Бесселя
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Создать текстовый файл с таблицами фун-ции Бесселя порядка от 0 до 4(всего 5 фун-ции)для х=0,5; 1,0; 1,5...10 с точностью 6 знаков после десятичной точки. функция Бесселя N порядка (см.вложение)+файл с ответом(рез-тат работы программы). Для начала решил сделать просто с выводом на экран:
uses crt;
var mas:array[1..20,1..5] of real;
x,p,e,s2,s1,s,m:real; n,i,k:integer;

function step(x:real; n:integer):real;
begin
p:=1;
if n=0 then p:=1
else begin
for i:=1 to n do begin
p:=x*p;
end; end;
step:=p;
end;

function fact(x:real):real;
begin
if x=0 then fact:=1
else
fact:=fact(x-1)*x;
end;

function sum(x:real; n:real):real;
begin
k:=0;
e:=0.0000000001;
while abs(s2-s1)>=e do begin
s1:=step(-1,k)*(step(x/2,2*k)/(fact(k)*fact(k+n)));
s2:=step(-1,k+1)*(step(x/2,2*(k+1))/(fact(k+1)*fact(k+1+n)));
inc(k);
s:=s+s1;
sum:=s;
end;
end;

begin
clrscr;
for n:=0 to 4 do begin
x:=0;
while x<=10 do begin
x:=x+0.5;
m:=step(x/2,n)*sum(x,n);
write(m:7:6,' | ');
end;
writeln;
end;
readln;
end.
Работает неправильно. Не могу понять, в чем ошибка...

Сообщение отредактировано: marwell -


Эскизы прикрепленных изображений
Прикрепленное изображение

Прикрепленные файлы
Прикрепленный файл  _______________________.doc ( 44 килобайт ) Кол-во скачиваний: 329
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Ну, с Эпсилоном... Тебе же хуже smile.gif Сравнение ЧЕГО, ты задал себе вопрос? Допустим (хотя полагаться на это тоже нельзя) при первом вызове Sum будут и s1 и s2 равны 0. А при втором вызове? Они что после первого вызова изменятся? Где, покажи. Они такими же и останутся, как и были.

А если они равны 0, то
Цитата
while abs(s2-s1)>=e do
когда-нибудь выполнится? Нет. Значит в этот цикл программа даже не зайдет...

Добавлено через 1 мин.
На самом деле (если вычислять сумма ряда как положено, а не таким извратом, как у тебя), тут делов-то на несколько срок, и не нужны ни функции fact, ни step:

function J(n: integer; X: real): real;
const eps = 0.000001;
var
i, k, fact: integer;
p, s, next: real;
begin
p := 1; fact := 1;
for i := 1 to n do
begin
p := p * (X / 2);
fact := fact * i;
end;

s := 0; k := 0;
next := (X / 2) / fact;
repeat
s := s + next; inc(k);
next := - next * sqr(X / 2) / (k * (k + n));
until abs(next) < eps;
J := p * s;
end;

var i, n: integer;
begin
for i := 1 to 20 do
begin
for n := 0 to 4 do
begin
write(J(n, 0.5 * i):10 :6);
end;
writeln;
end;
end.


Жду от тебя объяснения моего кода. Почему именно так, и как это получилось?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.09.2025 4:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name