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

> Правила раздела!

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

 
 Ответить  Открыть новую тему 
> Ошибка 201
сообщение
Сообщение #1


Новичок
*

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

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


Не могу понять почему не работает




Program integ;
const a=0; b=1; E=0.0001;
var R,S,Si:real;
x,h:real;
n,i:integer;
function F(x:real):real;


begin
F:=sin(x+x*x*x);
end;
Function Sim(n:integer):real;
begin
h:=abs(b-a)/n;
S:=0;x:=a;
for i:=1 to n do
begin
Si:=(f(x)+4*f(x+h/2)+f(x+h))*h/6;
S:=S+Si;
x:=x+h;
end;
Sim:=S;
end;
Begin
n:=1;
R:=abs(Sim(n)-Sim(n*2))/15;
while(R>E) do n:=2*n;
writeln('S=',Sim(n):7:10);
readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Злостный любитель
*****

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

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


На какой строчке программа вылетает?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


[telepathy on]
Цитата
    while(R>E)   do n:=2*n;
Здесь проблема? Правильно делает, что вылетает: у тебя в цикле не изменяются значения R и E, условие всегда истинно. А вот n очень быстро переполняется, как только оно перестанет помещаться в отведенные 2 байта (ну, или какой там у тебя размер Integer) - тут же произойдет переполнение...
[/telepathy off]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


Везде поменяла на extended, кроме i, и всё заработало! Спасибо за помощь)

Сообщение отредактировано: Buka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

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

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


После одной лишь замены типа цикл перестал уходить в бесконечность?!
Чудеса...


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Buka @ 9.11.2011 16:35) *
Не могу понять почему не работает
Внимательно вглядись вот в эту строчку:
while(R>E) do n:=2*n;
- и я уверен, через некоторое время поймешь )).

Вот тебе исправленный (и правильно отформатированный) твой же код:
Program integ;
const
a= 0;
b= 1;
E= 0.0001;
var
R,S,Si: real;
x,h: real;
n,i: integer;

function F(x: real): real;
begin
F:= sin(x+x*x*x);
end;

Function Sim(n: integer): real;
begin
h:= abs(b-a)/n;
S:= 0;
x:= a;
for i:=1 to n do begin
Si:= (f(x)+4*f(x+h/2)+f(x+h))*h/6;
S:= S+Si;
x:= x+h;
end;
Sim:= S;
end;

Begin
n:= 1;
repeat
n:= n*2;
R:= abs(Sim(n div 2)-Sim(n))/15;
until R<=E;
writeln('S=',Sim(n):7:10);
readln
end.


Добавлено через 3 мин.
Ой, я, кажется, не обновил браузер.. Мужики, извините, стирать уже не буду.. ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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